vcomply-workflow-engine 7.4.6 → 7.4.7

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.
@@ -3,7 +3,7 @@ import { cloneDeep } from 'lodash-es';
3
3
  import moment from 'moment/moment';
4
4
  import * as XLSX from 'xlsx';
5
5
  import { RESPONSIBILITY } from '../constants/xlsx.constant';
6
- import { ASSIGNEE_TYPE_DROPDOWN_LIST, FREQUENCY_DROPDOWN_LIST, FULL_MONTH_NAMES, PROGRAM_TYPE_DROPDOWN_LIST, RC_TYPE_DROPDOWN_LIST, REVIEWER_TYPE_DROPDOWN_LIST, RISK_CLASS_LIST, VALIDATION_MESSAGES, YES_NO_DROPDOWN_LIST, } from '../constants/responsibility';
6
+ import { ASSIGNEE_TYPE_DROPDOWN_LIST, FREQUENCY_DROPDOWN_LIST, FULL_MONTH_NAMES, NON_BLOCKING_DROPDOWN_FIELDS, PROGRAM_TYPE_DROPDOWN_LIST, RC_TYPE_DROPDOWN_LIST, REVIEWER_TYPE_DROPDOWN_LIST, RISK_CLASS_LIST, VALIDATION_MESSAGES, VALIDATION_SEVERITY, YES_NO_DROPDOWN_LIST, dueDateDayOutOfRangeMessage, } from '../constants/responsibility';
7
7
  import { REGEX } from '../constants/regix.constants';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "../workflow-services/add-risk.service";
@@ -1062,7 +1062,6 @@ export class AddMultipleResponsibilityWithTabComponent {
1062
1062
  !Object.values(obj['userValidateWithProgram']).includes(false) &&
1063
1063
  obj['isValidUser'] &&
1064
1064
  this.isValidRiskClass(obj?.reportClass) &&
1065
- obj['isValidDueTime'] &&
1066
1065
  obj['isValidEndsAfterOccurrences'] &&
1067
1066
  obj['isValidEndsByDate'];
1068
1067
  return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
@@ -1117,7 +1116,6 @@ export class AddMultipleResponsibilityWithTabComponent {
1117
1116
  obj?.frequency?.length &&
1118
1117
  obj['isValidUser'] &&
1119
1118
  this.isValidRiskClass(obj?.reportClass) &&
1120
- obj['isValidDueTime'] &&
1121
1119
  obj['isValidEndsAfterOccurrences'] &&
1122
1120
  obj['isValidEndsByDate'];
1123
1121
  return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
@@ -1301,17 +1299,17 @@ export class AddMultipleResponsibilityWithTabComponent {
1301
1299
  /**
1302
1300
  * Adds dropdown-list checks on top of existing row validation.
1303
1301
  * Empty optional cells are valid. Frequency / due date / due time are skipped for ongoing.
1302
+ * Warning and info issues are shown in preview but do not make the row invalid.
1304
1303
  */
1305
1304
  withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
1306
1305
  if (!obj) {
1307
1306
  return obj;
1308
1307
  }
1308
+ obj['fieldValidation'] = {};
1309
1309
  this.applyDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
1310
1310
  this.applyDaysCountValidation(obj, tabType);
1311
- obj['isValid'] =
1312
- !!obj['isValid'] &&
1313
- !!obj['isValidDropdown'] &&
1314
- !!obj['isValidDaysCount'];
1311
+ this.applySheetFieldMessages(obj, tabType, isProgram, hasExtendedFrequencyColumns);
1312
+ obj['isValid'] = !this.hasBlockingFieldIssues(obj);
1315
1313
  return obj;
1316
1314
  }
1317
1315
  applyDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
@@ -1342,11 +1340,27 @@ export class AddMultipleResponsibilityWithTabComponent {
1342
1340
  collaborator: true,
1343
1341
  };
1344
1342
  if (isProgram) {
1345
- dropdownValidation.programType = this.isInStaticDropdown(obj?.programType, PROGRAM_TYPE_DROPDOWN_LIST);
1343
+ const hasProgram = this.hasValue(obj?.program);
1344
+ const hasProgramType = this.hasValue(obj?.programType);
1345
+ if (hasProgramType && !hasProgram) {
1346
+ dropdownValidation.programType = true;
1347
+ }
1348
+ else {
1349
+ dropdownValidation.programType = this.isInStaticDropdown(obj?.programType, PROGRAM_TYPE_DROPDOWN_LIST);
1350
+ }
1346
1351
  dropdownValidation.program = this.isInDropdownList(obj?.program, this.getTemplateListNames(this.templateInfo?.categoryList, 'programName'));
1347
- dropdownValidation.programCategory = programCategoryNames.length
1348
- ? this.isInDropdownList(obj?.programCategory, programCategoryNames)
1349
- : true;
1352
+ if (this.hasValue(obj?.programCategory) && !hasProgram) {
1353
+ dropdownValidation.programCategory = false;
1354
+ }
1355
+ else if (this.hasValue(obj?.programCategory) && hasProgram) {
1356
+ const categoryNames = this.getProgramCategoryNamesForProgram(obj?.program);
1357
+ dropdownValidation.programCategory = this.isInDropdownList(obj?.programCategory, categoryNames.length ? categoryNames : programCategoryNames);
1358
+ }
1359
+ else {
1360
+ dropdownValidation.programCategory = programCategoryNames.length
1361
+ ? this.isInDropdownList(obj?.programCategory, programCategoryNames)
1362
+ : true;
1363
+ }
1350
1364
  }
1351
1365
  dropdownValidation.assignor = this.isInUserDropdown(obj?.assignor);
1352
1366
  dropdownValidation.assignee = this.isInDropdownList(obj?.assignee, assigneeNames);
@@ -1357,16 +1371,27 @@ export class AddMultipleResponsibilityWithTabComponent {
1357
1371
  dropdownValidation.day = this.isValidDropdownDay(obj?.day);
1358
1372
  dropdownValidation.month = this.isValidDropdownMonth(obj?.month);
1359
1373
  if (hasExtendedFrequencyColumns) {
1360
- dropdownValidation.dueTime = this.isValidDueTime(obj?.dueTime, true);
1374
+ dropdownValidation.dueTime = true;
1361
1375
  }
1362
1376
  }
1363
1377
  dropdownValidation.responsibilityCenter = this.isInDropdownList(obj?.responsibilityCenter, this.getTemplateListNames(this.templateInfo?.rcList, 'name'));
1364
- dropdownValidation.responsibilityCenterType = this.isInStaticDropdown(obj?.responsibilityCenterType, RC_TYPE_DROPDOWN_LIST);
1378
+ if (this.hasValue(obj?.responsibilityCenterType) &&
1379
+ !this.hasValue(obj?.responsibilityCenter)) {
1380
+ dropdownValidation.responsibilityCenterType = false;
1381
+ }
1382
+ else {
1383
+ dropdownValidation.responsibilityCenterType = this.isInStaticDropdown(obj?.responsibilityCenterType, RC_TYPE_DROPDOWN_LIST);
1384
+ }
1365
1385
  dropdownValidation.reportClass = this.isValidRiskClass(obj?.reportClass);
1366
1386
  dropdownValidation.isFormat = this.isInStaticDropdown(obj?.isFormat, YES_NO_DROPDOWN_LIST);
1367
1387
  dropdownValidation.documentEvidenceRequired = this.isInStaticDropdown(obj?.documentEvidenceRequired, YES_NO_DROPDOWN_LIST);
1368
1388
  dropdownValidation.reviewer = this.isInDropdownList(obj?.reviewer, reviewerNames);
1369
- dropdownValidation.reviewerType = this.isInStaticDropdown(obj?.reviewerType, REVIEWER_TYPE_DROPDOWN_LIST);
1389
+ if (this.hasValue(obj?.reviewerType) && !this.hasValue(obj?.reviewer)) {
1390
+ dropdownValidation.reviewerType = false;
1391
+ }
1392
+ else {
1393
+ dropdownValidation.reviewerType = this.isInStaticDropdown(obj?.reviewerType, REVIEWER_TYPE_DROPDOWN_LIST);
1394
+ }
1370
1395
  dropdownValidation.overseer = this.isInDropdownList(obj?.overseer, reviewerNames);
1371
1396
  dropdownValidation.notifyOnFailure = this.isInDropdownList(obj?.notifyOnFailure, reviewerNames);
1372
1397
  dropdownValidation.collaborator = this.isInDropdownList(obj?.collaborator, [
@@ -1374,7 +1399,7 @@ export class AddMultipleResponsibilityWithTabComponent {
1374
1399
  ...reviewerNames,
1375
1400
  ]);
1376
1401
  obj['dropdownValidation'] = dropdownValidation;
1377
- obj['isValidDropdown'] = !Object.values(dropdownValidation).includes(false);
1402
+ obj['isValidDropdown'] = !Object.entries(dropdownValidation).some(([field, isValid]) => isValid === false && !NON_BLOCKING_DROPDOWN_FIELDS.includes(field));
1378
1403
  }
1379
1404
  getTemplateListNames(list = [], key) {
1380
1405
  return (list || [])
@@ -1393,6 +1418,267 @@ export class AddMultipleResponsibilityWithTabComponent {
1393
1418
  });
1394
1419
  return names;
1395
1420
  }
1421
+ getProgramCategoryNamesForProgram(programName) {
1422
+ const names = [];
1423
+ const program = (this.templateInfo?.categoryList || []).find((item) => this.normalizeDropdownValue(item?.programName) ===
1424
+ this.normalizeDropdownValue(programName));
1425
+ (program?.childCategory || []).forEach((category) => {
1426
+ if (this.hasValue(category?.name)) {
1427
+ names.push(String(category.name).trim());
1428
+ }
1429
+ });
1430
+ return names;
1431
+ }
1432
+ setFieldIssue(obj, field, severity, message) {
1433
+ if (!obj || !field || !message) {
1434
+ return;
1435
+ }
1436
+ obj.fieldValidation = obj.fieldValidation || {};
1437
+ const rank = {
1438
+ [VALIDATION_SEVERITY.ERROR]: 3,
1439
+ [VALIDATION_SEVERITY.WARNING]: 2,
1440
+ [VALIDATION_SEVERITY.INFO]: 1,
1441
+ };
1442
+ const current = obj.fieldValidation[field];
1443
+ if (!current || (rank[severity] || 0) >= (rank[current.severity] || 0)) {
1444
+ obj.fieldValidation[field] = { severity, message };
1445
+ }
1446
+ }
1447
+ hasBlockingFieldIssues(obj) {
1448
+ return Object.values(obj?.fieldValidation || {}).some((issue) => issue?.severity === VALIDATION_SEVERITY.ERROR);
1449
+ }
1450
+ samePerson(left, right) {
1451
+ if (!this.hasValue(left) || !this.hasValue(right)) {
1452
+ return false;
1453
+ }
1454
+ if (this.normalizeDropdownValue(left) === this.normalizeDropdownValue(right)) {
1455
+ return true;
1456
+ }
1457
+ const leftEmail = this.extractDropdownEmail(left);
1458
+ const rightEmail = this.extractDropdownEmail(right);
1459
+ if (leftEmail && rightEmail && leftEmail === rightEmail) {
1460
+ return true;
1461
+ }
1462
+ const leftName = this.extractDropdownName(left);
1463
+ const rightName = this.extractDropdownName(right);
1464
+ return !!leftName && !!rightName && leftName === rightName;
1465
+ }
1466
+ isValidFormatUrl(value) {
1467
+ try {
1468
+ const url = new URL(String(value).trim());
1469
+ return url.protocol === 'http:' || url.protocol === 'https:';
1470
+ }
1471
+ catch {
1472
+ return false;
1473
+ }
1474
+ }
1475
+ applySheetFieldMessages(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
1476
+ const dropdown = obj?.dropdownValidation || {};
1477
+ const name = this.checkValidResponsibilityName(obj?.responsibilityName);
1478
+ if (!name) {
1479
+ const raw = obj?.responsibilityName;
1480
+ const whitespaceOnly = raw != null && String(raw).length > 0 && !String(raw).trim();
1481
+ this.setFieldIssue(obj, 'responsibilityName', VALIDATION_SEVERITY.ERROR, whitespaceOnly
1482
+ ? VALIDATION_MESSAGES.RESPONSIBILITY_NAME_WHITESPACE
1483
+ : VALIDATION_MESSAGES.RESPONSIBILITY_NAME_REQUIRED);
1484
+ }
1485
+ if (isProgram) {
1486
+ const hasProgram = this.hasValue(obj?.program);
1487
+ const hasProgramType = this.hasValue(obj?.programType);
1488
+ const hasProgramCategory = this.hasValue(obj?.programCategory);
1489
+ if (hasProgramType && !hasProgram) {
1490
+ this.setFieldIssue(obj, 'programType', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.PROGRAM_TYPE_WITHOUT_PROGRAM);
1491
+ }
1492
+ else if (dropdown.programType === false) {
1493
+ this.setFieldIssue(obj, 'programType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1494
+ }
1495
+ if (dropdown.program === false) {
1496
+ this.setFieldIssue(obj, 'program', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1497
+ }
1498
+ if (hasProgramCategory && !hasProgram) {
1499
+ this.setFieldIssue(obj, 'programCategory', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PROGRAM_CATEGORY_WITHOUT_PROGRAM);
1500
+ }
1501
+ else if (dropdown.programCategory === false) {
1502
+ this.setFieldIssue(obj, 'programCategory', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PROGRAM_CATEGORY_MISMATCH);
1503
+ }
1504
+ }
1505
+ if (this.hasValue(obj?.assignor) && dropdown.assignor === false) {
1506
+ this.setFieldIssue(obj, 'assignor', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.ENTRUSTED_BY_INVALID);
1507
+ }
1508
+ if (!this.hasValue(obj?.assignee)) {
1509
+ this.setFieldIssue(obj, 'assignee', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.ASSIGNEE_REQUIRED);
1510
+ }
1511
+ else if (dropdown.assignee === false || !obj?.isValidUser) {
1512
+ this.setFieldIssue(obj, 'assignee', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.ASSIGNEE_INVALID);
1513
+ }
1514
+ else if (obj?.userValidateWithProgram?.isValidAssignee === false) {
1515
+ this.setFieldIssue(obj, 'assignee', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
1516
+ }
1517
+ if (dropdown.assigneeType === false) {
1518
+ this.setFieldIssue(obj, 'assigneeType', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.ASSIGNEE_TYPE_INVALID);
1519
+ }
1520
+ else if (this.isGroupSelected(obj?.assignee) &&
1521
+ !this.hasValue(obj?.assigneeType)) {
1522
+ this.setFieldIssue(obj, 'assigneeType', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.GROUP_ALL_ANY_BLANK);
1523
+ }
1524
+ if (dropdown.keyResponsibility === false) {
1525
+ this.setFieldIssue(obj, 'keyResponsibility', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.KEY_RESPONSIBILITY_INVALID);
1526
+ }
1527
+ if (tabType === 'frequency') {
1528
+ if (!this.hasValue(obj?.frequency)) {
1529
+ this.setFieldIssue(obj, 'frequency', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.FREQUENCY_REQUIRED);
1530
+ }
1531
+ else if (dropdown.frequency === false) {
1532
+ this.setFieldIssue(obj, 'frequency', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1533
+ }
1534
+ if (this.hasValue(obj?.day)) {
1535
+ const dayText = String(obj.day).trim();
1536
+ if (!/^\d+$/.test(dayText)) {
1537
+ this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE_DAY_NOT_NUMBER);
1538
+ }
1539
+ else if (dropdown.day === false || Number(dayText) < 1 || Number(dayText) > 31) {
1540
+ this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, dueDateDayOutOfRangeMessage(obj?.frequency || 'Weekly'));
1541
+ }
1542
+ else if (this.normalizeDropdownValue(obj?.frequency) === 'weekly' &&
1543
+ Number(dayText) > 7) {
1544
+ this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, dueDateDayOutOfRangeMessage('Weekly'));
1545
+ }
1546
+ }
1547
+ if (dropdown.month === false) {
1548
+ this.setFieldIssue(obj, 'month', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE_MONTH_INVALID);
1549
+ }
1550
+ if (obj?.isPastDate) {
1551
+ this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PAST_DUE_DATE);
1552
+ this.setFieldIssue(obj, 'month', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PAST_DUE_DATE);
1553
+ }
1554
+ else if (obj?.validDate === false && dropdown.day !== false && dropdown.month !== false) {
1555
+ this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE);
1556
+ this.setFieldIssue(obj, 'month', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE);
1557
+ }
1558
+ if (hasExtendedFrequencyColumns) {
1559
+ if (!this.hasValue(obj?.dueTime)) {
1560
+ this.setFieldIssue(obj, 'dueTime', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.DUE_TIME_BLANK);
1561
+ }
1562
+ else if (!this.isValidDueTime(obj?.dueTime, true)) {
1563
+ this.setFieldIssue(obj, 'dueTime', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.DROPDOWN);
1564
+ }
1565
+ }
1566
+ if (obj?.responsibilityWindowError) {
1567
+ this.setFieldIssue(obj, 'responsibilityWindow', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1568
+ }
1569
+ if (obj?.failedAfterError) {
1570
+ this.setFieldIssue(obj, 'failedAfter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1571
+ }
1572
+ if (obj?.endsAfterOccurrencesError) {
1573
+ this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1574
+ }
1575
+ if (obj?.endsByDateDayError) {
1576
+ this.setFieldIssue(obj, 'endsByDateDay', VALIDATION_SEVERITY.ERROR, obj.endsByDateDayError);
1577
+ }
1578
+ if (obj?.endsByDateMonthError) {
1579
+ this.setFieldIssue(obj, 'endsByDateMonth', VALIDATION_SEVERITY.ERROR, obj.endsByDateMonthError);
1580
+ }
1581
+ const isOneTime = this.normalizeDropdownValue(obj?.frequency) === 'one time';
1582
+ const hasLifecycleEnd = this.hasValue(obj?.endsAfterOccurrences) ||
1583
+ this.hasValue(obj?.endsByDateDay) ||
1584
+ this.hasValue(obj?.endsByDateMonth);
1585
+ if (isOneTime && hasLifecycleEnd) {
1586
+ const message = VALIDATION_MESSAGES.ONE_TIME_LIFECYCLE;
1587
+ this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.ERROR, message);
1588
+ this.setFieldIssue(obj, 'endsByDateDay', VALIDATION_SEVERITY.ERROR, message);
1589
+ this.setFieldIssue(obj, 'endsByDateMonth', VALIDATION_SEVERITY.ERROR, message);
1590
+ }
1591
+ else if (hasExtendedFrequencyColumns &&
1592
+ Number(obj?.endsAfterOccurrences) === 1 &&
1593
+ !isOneTime) {
1594
+ this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.ENDS_AFTER_ONE_OCCURRENCE);
1595
+ }
1596
+ }
1597
+ if (dropdown.responsibilityCenter === false) {
1598
+ this.setFieldIssue(obj, 'responsibilityCenter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1599
+ }
1600
+ if (this.hasValue(obj?.responsibilityCenterType) &&
1601
+ !this.hasValue(obj?.responsibilityCenter)) {
1602
+ this.setFieldIssue(obj, 'responsibilityCenterType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.RC_TYPE_WITHOUT_NAME);
1603
+ }
1604
+ else if (dropdown.responsibilityCenterType === false) {
1605
+ this.setFieldIssue(obj, 'responsibilityCenterType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1606
+ }
1607
+ if (dropdown.reportClass === false) {
1608
+ this.setFieldIssue(obj, 'reportClass', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1609
+ }
1610
+ if (dropdown.isFormat === false) {
1611
+ this.setFieldIssue(obj, 'isFormat', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1612
+ }
1613
+ if (this.hasValue(obj?.formatForResponsibility)) {
1614
+ if (this.normalizeDropdownValue(obj?.isFormat) === 'no') {
1615
+ this.setFieldIssue(obj, 'formatForResponsibility', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.FORMAT_LINK_WITHOUT_YES);
1616
+ }
1617
+ else if (!this.isValidFormatUrl(obj?.formatForResponsibility)) {
1618
+ this.setFieldIssue(obj, 'formatForResponsibility', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.FORMAT_INVALID_URL);
1619
+ }
1620
+ }
1621
+ if (dropdown.documentEvidenceRequired === false) {
1622
+ this.setFieldIssue(obj, 'documentEvidenceRequired', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1623
+ }
1624
+ if (dropdown.reviewer === false) {
1625
+ this.setFieldIssue(obj, 'reviewer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1626
+ }
1627
+ else if (this.hasValue(obj?.reviewer) &&
1628
+ obj?.userValidateWithProgram?.isValidReviewer === false) {
1629
+ this.setFieldIssue(obj, 'reviewer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
1630
+ }
1631
+ if (this.hasValue(obj?.reviewerType) && !this.hasValue(obj?.reviewer)) {
1632
+ this.setFieldIssue(obj, 'reviewerType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1633
+ }
1634
+ else if (dropdown.reviewerType === false) {
1635
+ this.setFieldIssue(obj, 'reviewerType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1636
+ }
1637
+ if (obj?.reviewToBeCompletedWithinError) {
1638
+ this.setFieldIssue(obj, 'reviewToBeCompletedWithin', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1639
+ }
1640
+ if (obj?.reviewWillBeFailedAfterError) {
1641
+ this.setFieldIssue(obj, 'reviewWillBeFailedAfter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1642
+ }
1643
+ if ((this.hasValue(obj?.reviewToBeCompletedWithin) ||
1644
+ this.hasValue(obj?.reviewWillBeFailedAfter)) &&
1645
+ !this.hasValue(obj?.reviewer)) {
1646
+ this.setFieldIssue(obj, 'reviewToBeCompletedWithin', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.REVIEW_WINDOW_WITHOUT_REVIEWER);
1647
+ this.setFieldIssue(obj, 'reviewWillBeFailedAfter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.REVIEW_WINDOW_WITHOUT_REVIEWER);
1648
+ }
1649
+ if (dropdown.overseer === false) {
1650
+ this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1651
+ }
1652
+ else if (this.hasValue(obj?.overseer) &&
1653
+ obj?.userValidateWithProgram?.isValidOverseer === false) {
1654
+ this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
1655
+ }
1656
+ else if (this.samePerson(obj?.overseer, obj?.assignee)) {
1657
+ this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNEE);
1658
+ }
1659
+ else if (this.samePerson(obj?.overseer, obj?.assignor)) {
1660
+ this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNOR);
1661
+ }
1662
+ if (dropdown.notifyOnFailure === false) {
1663
+ this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1664
+ }
1665
+ else if (this.hasValue(obj?.notifyOnFailure) &&
1666
+ obj?.userValidateWithProgram?.isValidNotifyOnFailure === false) {
1667
+ this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
1668
+ }
1669
+ else if (this.samePerson(obj?.notifyOnFailure, obj?.assignee)) {
1670
+ this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNEE);
1671
+ }
1672
+ else if (this.samePerson(obj?.notifyOnFailure, obj?.assignor)) {
1673
+ this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNOR);
1674
+ }
1675
+ if (dropdown.collaborator === false) {
1676
+ this.setFieldIssue(obj, 'collaborator', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
1677
+ }
1678
+ else if (this.isGroupSelected(obj?.collaborator)) {
1679
+ this.setFieldIssue(obj, 'collaborator', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.COLLABORATOR_GROUP);
1680
+ }
1681
+ }
1396
1682
  /**
1397
1683
  * Entrusted By in the xlsx dropdown is the people list in `Name (email)` form
1398
1684
  * (same source as Entrusted To / Reviewer), not the assignor name-only column.
@@ -1859,7 +2145,7 @@ export class AddMultipleResponsibilityWithTabComponent {
1859
2145
  */
1860
2146
  isGroupSelected(item) {
1861
2147
  let isGroup = false;
1862
- this.templateInfo.assigneesList.forEach((enElement) => {
2148
+ (this.templateInfo?.assigneesList || []).forEach((enElement) => {
1863
2149
  if (enElement.nameAndEmail == item &&
1864
2150
  (item?.includes('Users)') || item?.includes('User)')) &&
1865
2151
  typeof enElement?.my_member_id == 'object') {
@@ -1894,4 +2180,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1894
2180
  }], featureflag: [{
1895
2181
  type: Input
1896
2182
  }] } });
1897
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBQzFCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFZckQsTUFBTSxPQUFPLHlDQUF5QztJQXNCcEQsSUFBMkIsZ0JBQWdCLENBQUMsSUFBUztRQUNuRCxJQUFJLENBQUMsWUFB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Q0FBQyxDQUFDO3FCQUN0QztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLElBQVM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBTyxFQUFFO1lBQzlELElBQ0UsU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJO2dCQUM5QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckQsT0FBTyxTQUFTLEVBQUUsWUFBWSxJQUFJLFFBQVEsRUFDMUM7Z0JBQ0EsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0EvcEVVLHlDQUF5QzttR0FBekMseUNBQXlDLDRjQzNDdEQsK3FGQStDZ007OzRGREpuTCx5Q0FBeUM7a0JBUnJELFNBQVM7K0JBQ0UsMENBQTBDO2dRQVExQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsOEJBQThCO3NCQUF2QyxNQUFNO2dCQWdCb0IsZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGNBQWM7Z0JBR1osVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBbUZHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUmlza1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hZGQtcmlzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJFU1BPTlNJQklMSVRZIH0gZnJvbSAnLi4vY29uc3RhbnRzL3hsc3guY29uc3RhbnQnO1xyXG5pbXBvcnQge1xyXG4gIEFTU0lHTkVFX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBGUkVRVUVOQ1lfRFJPUERPV05fTElTVCxcclxuICBGVUxMX01PTlRIX05BTUVTLFxyXG4gIFBST0dSQU1fVFlQRV9EUk9QRE9XTl9MSVNULFxyXG4gIFJDX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBSRVZJRVdFUl9UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgUklTS19DTEFTU19MSVNULFxyXG4gIFZBTElEQVRJT05fTUVTU0FHRVMsXHJcbiAgWUVTX05PX0RST1BET1dOX0xJU1QsXHJcbn0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc3BvbnNpYmlsaXR5JztcclxuaW1wb3J0IHsgUkVHRVggfSBmcm9tICcuLi9jb25zdGFudHMvcmVnaXguY29uc3RhbnRzJztcclxuXHJcbnR5cGUgQU9BID0gYW55W11bXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2Zvcm1zLmxlc3MnLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5V2l0aFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvcHVsYXRlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBpc05vdGlmaWNhdGlvblBlbmRpbmcgPSAwO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcXVlcnlQYXJhbTogc3RyaW5nID0gJyc7XHJcbiAgcmVjZW50UmVzcG9uc2liaWxpdHlVcmw6IGFueSA9IHtcclxuICAgIGJ5UmVzcG9uc2liaWxpdGllczogeyB0eXBlOiBbJ3JlY2VudF9yZXNwb25zaWJpbGl0aWVzJ10sIHN1YlR5cGU6IFsnQ0MnXSB9LFxyXG4gICAgYnlTdGF0dXM6IHsgdHlwZTogW10sIHN1YlR5cGU6IFtdIH0sXHJcbiAgICBmaWx0ZXJPYmplY3Q6IHtcclxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxyXG4gICAgICBlbnRydXN0ZWRCeTogW10sXHJcbiAgICAgIGVudHJ1c3RlZFRvOiBbXSxcclxuICAgICAgcmlza0lkczogW10sXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IFtdLFxyXG4gICAgfSxcclxuICAgIHRpbWVQZXJpb2REZXRhaWxzOiB7IHR5cGU6ICcnLCBzZWxlY3RlZFBlcmlvZDogJycsIHNlbGVjdGVkWWVhcjogJycgfSxcclxuICAgIHN0YXR1czogJycsXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCd1cGxvYWRlZEZpbGUnKSBzZXQgdXBsb2FkZWRGaWxlRGF0YShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMudXBsb2FkZWRGaWxlKGRhdGEpO1xyXG4gIH1cclxuICBASW5wdXQoKSBvcmdEZXRhaWxzITogYW55O1xyXG4gIEBJbnB1dCgpIGZlYXR1cmUhOiBhbnk7XHJcblxyXG4gIHVybCA9XHJcbiAgICAncT17XCJieVJlc3BvbnNpYmlsaXRpZXNcIjp7XCJ0eXBlXCI6W1wicmVzcG9uc2liaWxpdGllc19pbl9xdWV1ZVwiXSxcInN1YlR5cGVcIjpbXCJDQ1wiXX0sXCJieVN0YXR1c1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltdfSxcImZpbHRlck9iamVjdFwiOntcInJlc3BvbnNpYmlsaXR5Q2VudGVyXCI6W10sXCJlbnRydXN0ZWRCeVwiOltdLFwiZW50cnVzdGVkVG9cIjpbXSxcInJpc2tJZHNcIjpbXSxcInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnlcIjpbXX0sXCJ0aW1lUGVyaW9kRGV0YWlsc1wiOntcInR5cGVcIjpcIlwiLFwic2VsZWN0ZWRQZXJpb2RcIjpcIlwiLFwic2VsZWN0ZWRZZWFyXCI6XCJcIn0sXCJzdGF0dXNcIjpcIlwifSc7XHJcbiAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBoZWFkZXI6IFtdLFxyXG4gICAgcmVwb3J0czogW10sXHJcbiAgfTtcclxuICB0YWJUeXBlOiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgdGFiSW5kZXg6IGFueSA9IHtcclxuICAgIGZyZXF1ZW5jeTogMCxcclxuICAgIG9uZ29pbmc6IDEsXHJcbiAgICBvbkNvbXBsZXRpb246IDIsXHJcbiAgfTtcclxuXHJcbiAgYnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbmdvaW5nOiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICB0ZW1wbGF0ZUluZm86IGFueSA9IHtcclxuICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICByY0xpc3Q6IFtdLFxyXG4gICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgIHJldmlld2VyTGlzdDogW10sXHJcbiAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICBwZW9wbGVEcm9wZG93bk5hbWVzOiBbXSxcclxuICAgIG1lbWJlcklkOiAnJyxcclxuICB9O1xyXG4gIGlzTG9hZGVyID0gZmFsc2U7XHJcbiAgc2hvd0NhdGVnb3J5TGlzdCA9IGZhbHNlO1xyXG4gIHRlbXBsYXRlRG93bmxvYWRlZCA9IGZhbHNlO1xyXG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIGlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICBpc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgZmlsZU5hbWU6IGFueTtcclxuICBkYXRhOiBhbnk7XHJcbiAgc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgdXBsb2FkZWRGaWxlczogYW55ID0gW107XHJcbiAgZmlsZVJlc3BvbnNlOiBhbnkgPSBbXTtcclxuICBmaWxlVmFsdWU6IGFueTtcclxuICBtZW1iZXJJZCA9IDA7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIGVycm9yTWVzc2FnZSA9ICcgaW52YWxpZCBmaWxlIGVycm9yJztcclxuICBkb3dubG9hZFN0YXR1czogc3RyaW5nID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcclxuICBkZWZhdWx0T3duZXIgPSAnJztcclxuICBzbWlsZXlNZXNzYWdlID0gYFlvdSdyZSBBbGwgU2V0ISBXZSdyZSBwcm9jZXNzaW5nIHlvdXIgcmVxdWVzdCBhbmQgeW91IHdpbGwgYmUgbm90aWZpZWQgdmlhIGVtYWlsIHVwb24gY29tcGxldGlvbi5gO1xyXG4gIGFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGJ1dHRvblRleHQ6ICdFbnRydXN0IE1vcmUgUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcclxuICAgICAgaWQ6ICdhZGRNb3JlJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGJ1dHRvblRleHQ6IHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nXHJcbiAgICAgICAgPyAnVmlldyBSZXNwb25zaWJpbGl0aWVzIEluIFF1ZXVlJ1xyXG4gICAgICAgIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgIGNsYXNzOiAnYmx1ZS1idG4nLFxyXG4gICAgICBpZDogJ3ZpZXcnLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgcmlza0NsYXNzRW5hYmxlZDogYW55O1xyXG4gIHVzZXJJbmZvITogYW55O1xyXG4gIHJlc3BvbnNpYmlsaXR5RGF0YSE6IGFueTtcclxuICBASW5wdXQoKSBmZWF0dXJlZmxhZzogYW55O1xyXG4gIGZmQnVsa1VwbG9hZE9wdGltaXphdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFJFU1BPTlNJQklMSVRZID0gUkVTUE9OU0lCSUxJVFk7XHJcblxyXG4gIGlzRGF5SW52YWxpZCA9IGZhbHNlO1xyXG4gIGlzRGF0ZUZvcm1hdEludmFsaWQgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmlza1NlcnZpY2U6IEFkZFJpc2tTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lCdWxrU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgaWZyYW1lU2VydmljZTogSWZyYW1lU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcl9vYmpfaWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlci51aWQ7XHJcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnVzZXI7XHJcbiAgICB0aGlzLmRlZmF1bHRPd25lciA9IHRoaXMudXNlckluZm9cclxuICAgICAgPyB0aGlzLnVzZXJJbmZvLm5hbWUgKyAnICgnICsgdGhpcy51c2VySW5mby5lbWFpbCArICcpJ1xyXG4gICAgICA6ICcnO1xyXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25EZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJpc2tDbGFzc0VuYWJsZWQgPSByZXMuZW5hYmxlX3Jpc2tjbGFzcztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mZkJ1bGtVcGxvYWRPcHRpbWl6YXRpb24gPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcclxuICAgICAgJ2ZmX2J1bGtfdXBsb2FkX29wdGltaXphdGlvbidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyQnJvd3NlRmlsZSgpIHtcclxuICAgIGNvbnN0IGdldEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUlucHV0Jyk7XHJcbiAgICBpZiAoZ2V0RmlsZSkge1xyXG4gICAgICBnZXRGaWxlLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFVzZXJEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmdfZmxhZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWRGaWxlKGV2ZW50OiBhbnksIHRhYlR5cGU/OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgICBjYXRlZ29yeUxpc3Q6IFtdLFxyXG4gICAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgICAgYXNzaWduZWVzTGlzdDogW10sXHJcbiAgICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICAgICAgcGVvcGxlRHJvcGRvd25OYW1lczogW10sXHJcbiAgICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xyXG4gICAgICBpZiAocmVmZXJlbmNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdLm5hbWU7XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKGV2ZW50LnRhcmdldC5maWxlcyk7XHJcbiAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZlbnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjdXJseVxyXG4gICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKTtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFhMU1guV29ya0Jvb2sgPSBYTFNYLnJlYWQoYnN0ciwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbUkVTUE9OU0lCSUxJVFkuc2hlZXRJbmRleC5mcmVxdWVuY3lSZXNwb25zaWJpbGl0eV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXQyOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXgub25Hb2luZ1Jlc3BvbnNpYmlsaXR5XTtcclxuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXguZGF0YV07XHJcbiAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXRSZXBvcnQyOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1tzaGVldDJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcclxuICAgICAgICBjb25zdCB0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih0ZW1wRGF0YSwgeyBoZWFkZXI6IDEgfSkgYXMgQU9BO1xyXG4gICAgICAgIGNvbnN0IHRlbXBMaXN0ID0gdERhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDBcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdCk7XHJcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHNoZWV0Py50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDIsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXHJcbiAgICogQHBhcmFtIHdzIC0gWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcclxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICB9O1xyXG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICByYXc6IGZhbHNlLFxyXG4gICAgfSkgYXMgQU9BO1xyXG4gICAgbGV0IGRhdGEgPSBzaGVldFZhbHVlLmZpbHRlcigocmVzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGlzVW5kZWZpbmVkID0gJyc7XHJcbiAgICAgIHJlcy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZCArIGVsO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHNoZWV0VmFsdWVbMl0gJiYgc2hlZXRWYWx1ZVsyXVsxXSA9PT0gJ1Byb2dyYW0nKSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDkgJiYgcmVzWzhdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gNiAmJiByZXNbNV0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcChkYXRhWzJdKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nID0gY2xvbmVEZWVwKGRhdGFbM10pO1xyXG4gICAgY29uc3QgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gdGhpcy5kZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nXHJcbiAgICApO1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9XHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgIGRhdGEgPSBkYXRhLnNsaWNlKDUpO1xyXG4gICAgaWYgKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgID8gdHJ1ZVxyXG4gICAgICAgIDogZmFsc2U7XHJcbiAgICAgIGlmIChyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID1cclxuICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25nb2luZycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25Db21wbGV0aW9uJyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY2hlY2tFbXB0eUZpbGUoZGF0YSk7XHJcbiAgICAvKiBDaGVja2luZyBpZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWYgaXQgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgbm90XHJcbiAgICBlbXB0eSBpdCB3aWxsIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHRoZSBjb3JyZWN0IGZpbGUsIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGxcclxuICAgIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGwgY2FsbCB0aGUgZmlsZVVwbG9hZCgpIGZ1bmN0aW9uLiAqL1xyXG4gICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKidcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlVXBsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhIGZyZXF1ZW5jeSBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIGZyZXF1ZW5jeSBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBmcmVxdWVuY3kuIElmIG5vdCwgY2hlY2tcclxuICAgKiBpZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uZ29pbmcgb2JqZWN0IHdpdGggYSByZXBvcnRzIGFycmF5LCBzZXQgdGhlXHJcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBvbmdvaW5nIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uZ29pbmcuIElmIG5vdCwgY2hlY2sgaWZcclxuICAgKiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uQ29tcGxldGlvbiBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uQ29tcGxldGlvbiBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBvbkNvbXBsZXRpb24uIElmIG5vdCxcclxuICAgKiByZXR1cm4gdHJ1ZS5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGNoZWNrRW1wdHlGaWxlKGRhdGE/OiBhbnkpIHtcclxuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnZnJlcXVlbmN5JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbmdvaW5nJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uO1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnb25Db21wbGV0aW9uJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzRW1wdHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRW1wdHk7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlV2l0aEN1cnJlbnREYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBtb250aE5hbWVzID0gW1xyXG4gICAgICB7IHZhbHVlOiAxLCBtb250aDogJ0phbicgfSxcclxuICAgICAgeyB2YWx1ZTogMiwgbW9udGg6ICdGZWInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDMsIG1vbnRoOiAnTWFyJyB9LFxyXG4gICAgICB7IHZhbHVlOiA0LCBtb250aDogJ0FwcicgfSxcclxuICAgICAgeyB2YWx1ZTogNSwgbW9udGg6ICdNYXknIH0sXHJcbiAgICAgIHsgdmFsdWU6IDYsIG1vbnRoOiAnSnVuJyB9LFxyXG4gICAgICB7IHZhbHVlOiA3LCBtb250aDogJ0p1bCcgfSxcclxuICAgICAgeyB2YWx1ZTogOCwgbW9udGg6ICdBdWcnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDksIG1vbnRoOiAnU2VwJyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMCwgbW9udGg6ICdPY3QnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDExLCBtb250aDogJ05vdicgfSxcclxuICAgICAgeyB2YWx1ZTogMTIsIG1vbnRoOiAnRGVjJyB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoIShkYXkgfHwgbW9udGgpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbW9udGhGb3JtYXRSZWdleCA9IFJFR0VYLk1PTlRIO1xyXG4gICAgICBpZiAoIW1vbnRoRm9ybWF0UmVnZXgudGVzdChtb250aCkpIHtcclxuICAgICAgICB0aGlzLmlzRGF0ZUZvcm1hdEludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZighKGRheSA+IDAgJiYgZGF5IDwgMzIpKSB7XHJcbiAgICAgICAgdGhpcy5pc0RheUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9udGhBbmRZZWFyID0gbW9udGguc3BsaXQoXCInXCIpO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KFxyXG4gICAgICAgIGRheSArICctJyArIG1vbnRoQW5kWWVhclswXSArICctJyArIDIwICsgbW9udGhBbmRZZWFyWzFdICsgJyAwMDowMDowMCcsXHJcbiAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcclxuICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcclxuICAgICAgaWYgKHN0YXJ0RGF0ZSA9PSAnSW52YWxpZCBkYXRlJykge1xyXG4gICAgICAgIHRoaXMuaXNEYXlJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge30sIDUpO1xyXG4gICAgICBjb25zdCBkYXRlX3ZhbHVlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY3VycmVudERhdGU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICE9XHJcbiAgICAgICAgICBkYXRlX3ZhbHVlPy50b0pTT04oKT8uc3BsaXQoJ1QnKVswXSAmJlxyXG4gICAgICAgIGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaXNQYXN0RGF0ZShkYXk6IGFueSwgbW9udGg6IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY29uc3QgcmVwb3J0RGF0ZSA9IG5ldyBEYXRlKGRheSArIG1vbnRoLnNwbGl0KFwiJ1wiKSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxyXG4gICAgICAgIHR5cGVvZiBtb250aCAhPT0gJ251bWJlcidcclxuICAgICAgICAgID8gbW9udGhOYW1lcy5maWx0ZXIoKHgpID0+IHgubW9udGggPT09IG1vbnRoPy5zdWJzdHJpbmcoMCwgMykpWzBdXHJcbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcclxuICAgICAgICAgIDogbW9udGhcclxuICAgICAgKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXREYXRlKE51bWJlcihkYXkpKTtcclxuICAgICAgaWYgKGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgRW50cnVzdCBSZXNwb25zaWJpbGl0aWVzLSR7ZG93bmxvYWREYXRlWzJdfS0ke2Rvd25sb2FkRGF0ZVsxXX0tJHtkb3dubG9hZERhdGVbM119Lnhsc3hgO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRSZXNwb25zaWJpbGl0eVRlbXBsYXRlKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKFxyXG4gICAgICAgICAgICAgIGRhdGEuYm9keSxcclxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24veGxzeCcsXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXlsb2FkOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZDogYW55ID0gW107XHJcbiAgICBsZXQgdmFsaWRSZXNwb25zaWJpbGl0aWVzID0gMDtcclxuICAgIHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkID1cclxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/LmNvbmNhdChcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHMsXHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHNcclxuICAgICAgKTtcclxuICAgICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/LmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcG9ydD8uaXNWYWxpZCkge1xyXG4gICAgICAgICAgdmFsaWRSZXNwb25zaWJpbGl0aWVzICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBvcmlnaW5hbEZpbGVuYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8ub3JpZ2luYWxfZmlsZW5hbWUsXHJcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZVJlc3BvbnNlWzBdPy5maWxlbmFtZSxcclxuICAgICAgICBmaWxlUGF0aDogdGhpcy5maWxlUmVzcG9uc2VbMF0/LmZpbGVwYXRoLFxyXG4gICAgICAgIHRvdGFsUmVzcG9uc2liaWxpdHlDb3VudDogcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCxcclxuICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXR5Q291bnQ6IHZhbGlkUmVzcG9uc2liaWxpdGllcyxcclxuICAgICAgfTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmFkZEJ1bGtSZXNwb25zaWJpbGl0eShwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0V29ya2Zsb3coKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRXb3JrZmxvdygpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHR5cGU6ICdzdWJtaXQnIH07XHJcbiAgICBjb25zdCB0YXJnZXRPcmlnaW4gPSB0aGlzLmdldE9yaWdpbigpO1xyXG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPcmlnaW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGxldCByY09iaiA9IHsgbmFtZTogJycsIHJjSWQ6IDAsIHBhcmVudElkczogW10gfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmNfZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lLnNwbGl0KCcgW1dJVEhJTl0gJylbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgIHJjSWQ6IHJjX2VsZW1lbnQucmNfaWQsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWRzOiByY19lbGVtZW50LnBhcmVudElkcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmNPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHJldmlld2VyRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmV2aWV3ZXJFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJldmlld2VyRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IHJldmlld2VyRWxlbWVudC5teV9tZW1iZXJfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmV2aWV3ZXJPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25vcic6XHJcbiAgICAgICAgbGV0IGFzc2lnbm9yT2JqID0geyBuYW1lOiAnJywgbWVtYmVySWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QuZm9yRWFjaCgoYXNzaWdub3JFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChhc3NpZ25vckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgYXNzaWdub3JPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogYXNzaWdub3JFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGFzc2lnbm9yRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICBtZW1iZXJJZDogYXNzaWdub3JFbGVtZW50Lm1lbWJlcl9pZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYyc6XHJcbiAgICAgICAgbGV0IGNjT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY0VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNjRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY0VsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY0VsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRmFpbHVyZSc6XHJcbiAgICAgICAgbGV0IGNjZk9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NmRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY2ZPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjZkVsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjZkVsZW1lbnQuZW1haWwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XHJcbiAgICAgICAgbGV0IGVtcElkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGVtcElkID0gZW5FbGVtZW50Lm1lbWJlcl9pZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZW1wSWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdwYXJlbnRSZXNwb25zaWJpbGl0eSc6XHJcbiAgICAgICAgbGV0IGlkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5wYXJlbnRSZXNwb25zaWJpbGl0eS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNpYmlsaXR5Py5uYW1lID09PSBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgaWQgPSByZXNwb25zaWJpbGl0eS5pZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmlza19jbGFzcyc6XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gJ0xvdycpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTG93LU1lZGl1bScpIHtcclxuICAgICAgICAgIHJldHVybiAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTWVkaXVtLUhpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gMztcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT0gJ0hpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gNDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5idWxrVXBsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbmdvaW5nOiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgICAgb25Db21wbGV0aW9uOiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgcGVvcGxlRHJvcGRvd25OYW1lczogW10sXHJcbiAgICAgIG1lbWJlcklkOiAnJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5LmVtaXQoKTtcclxuICB9XHJcbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnYWRkTW9yZSc6XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3UmVzcG9uc2liaWxpdGllcygpOiB2b2lkIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnL2NvbXBsaWFuY2VvcHMvcmVzcG9uc2liaWxpdGllcy8nO1xyXG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHVybFN1YnN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHVybFN1YnN0cmluZztcclxuICAgIH1cclxuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodXJsLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vIFVwbG9hZCBGaWxlIHRvIHRoZSBzZXJ2ZXJcclxuICBmaWxlVXBsb2FkKCkge1xyXG4gICAgdGhpcy5maWxlUmVzcG9uc2UgPSBbXTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBmaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzWzBdWzBdO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdzb3VyY2VmaWxlJywgZmlsZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2Rlc3RpbmF0aW9uJywgJ2J1bGt1cGxvYWQvZW50cnVzdC8nICsgdGhpcy51c2VySW5mby5lbWFpbCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5maWxlVXBsb2FkKGZvcm1EYXRhKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmZpbGVuYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVSZXNwb25zZS5wdXNoKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXHJcbiAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcclxuICAgICAgICAgICdhbGVydCdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdDogYW55KSB7XHJcbiAgICBpZiAodGVtcExpc3RbMF0gIT09IHVuZGVmaW5lZCAmJiB0ZW1wTGlzdFswXVtSRVNQT05TSUJJTElUWS51c2VySW5kZXguY3VycmVudFVzZXJdKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bUkVTUE9OU0lCSUxJVFkudXNlckluZGV4LmN1cnJlbnRVc2VyXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0ZW1wTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IHJlZ3VsYXRpb25zID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgucmVndWxhdGlvbnMsIDEpO1xyXG4gICAgICBjb25zdCBzdGFuZGFyZHMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5zdGFuZGFyZHMsIDIpO1xyXG4gICAgICBjb25zdCBpbnRlcm5hbENvbnRyb2xzID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXguaW50ZXJuYWxDb250cm9scywgMyk7XHJcbiAgICAgIGNvbnN0IG90aGVycyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4Lm90aGVycywgMCk7XHJcblxyXG4gICAgICBpZihyZWd1bGF0aW9ucykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKHJlZ3VsYXRpb25zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoc3RhbmRhcmRzKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goc3RhbmRhcmRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoaW50ZXJuYWxDb250cm9scykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKGludGVybmFsQ29udHJvbHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihvdGhlcnMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChvdGhlcnMpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbOV0gaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eS4gSWYgaXQgaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgaXQgaXNcclxuICAgICAgcHVzaGluZyB0aGUgZWxlbWVudFs5XSAoUkMpIHRvIHRoZSBhcnJheSAocmNMaXN0KS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmNJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcmMgPSB7XHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJjSW5kZXgubmFtZV0sXHJcbiAgICAgICAgICByY19pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yY0luZGV4LmlkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5wdXNoKHJjKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXNzaWduZWVcclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdKSkge1xyXG4gICAgICAgIHRoaXMuYWRkUGVvcGxlRHJvcGRvd25OYW1lKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWduZWVJbmRleC5uYW1lXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWduZWVJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcGVvcGxlID0gdGhpcy5wYXJzZVBlb3BsZUxpc3RDZWxsKFxyXG4gICAgICAgICAgZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhc3NpZ25lZSA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogcGVvcGxlLm5hbWVBbmRFbWFpbCxcclxuICAgICAgICAgIG5hbWU6IHBlb3BsZS5uYW1lLFxyXG4gICAgICAgICAgZW1haWw6IHBlb3BsZS5lbWFpbCxcclxuICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4LmlkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QucHVzaChhc3NpZ25lZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJldmlld2VyXHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IHBlb3BsZSA9IHRoaXMucGFyc2VQZW9wbGVMaXN0Q2VsbChcclxuICAgICAgICAgIGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5uYW1lXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXIgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IHBlb3BsZS5uYW1lQW5kRW1haWwsXHJcbiAgICAgICAgICBuYW1lOiBwZW9wbGUubmFtZSxcclxuICAgICAgICAgIGVtYWlsOiBwZW9wbGUuZW1haWwsXHJcbiAgICAgICAgICBlbXBsb3llZV9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4LmlkXSxcclxuICAgICAgICAgIG15X21lbWJlcl9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4LmlkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJldmlld2VyTGlzdC5wdXNoKHJldmlld2VyKTtcclxuICAgICAgfVxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFsyXSBpcyBub3QgZW1wdHkgYW5kIG5vdCBlcXVhbCB0byBzcGFjZS4gSWYgaXQgaXMgbm90IGVtcHR5IGFuZCBub3RcclxuICAgICAgZXF1YWwgdG8gc3BhY2UsIGl0IHdpbGwgY3JlYXRlIGFuIG9iamVjdCBhbmQgcHVzaCBpdCB0byB0aGUgYXNzaWdub3JzTGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm5hbWVdKSkge1xyXG4gICAgICAgIHRoaXMuYWRkUGVvcGxlRHJvcGRvd25OYW1lKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSkpIHtcclxuICAgICAgICAgIHRoaXMuYWRkUGVvcGxlRHJvcGRvd25OYW1lKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5lbWFpbF0pO1xyXG4gICAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoXHJcbiAgICAgICAgICAgIGAke1N0cmluZyhlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0pLnRyaW0oKX0gKCR7U3RyaW5nKFxyXG4gICAgICAgICAgICAgIGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5lbWFpbF1cclxuICAgICAgICAgICAgKS50cmltKCl9KWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbm9yID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0sXHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgLy8gZW1haWw6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5tZW1iZXJfaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5wdXNoKGFzc2lnbm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29sbGVjdEVtYWlsRGlzcGxheU5hbWVzRnJvbVNoZWV0KHRlbXBMaXN0KTtcclxuXHJcbiAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcyBhbmQgYXR0YWNoaW5nIHRoZW0gdG8gdGhlaXIgcGFyZW50IHByb2dyYW0gKi9cclxuICAgIGlmICh0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QuZm9yRWFjaCgocHJvZ3JhbTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZENhdGVnb3J5OiB7IG5hbWU6IGFueTsgaWQ6IGFueSB9W10gPSBbXTtcclxuICAgICAgICB0aGlzLmdldFByb2dyYW1DYXRlZ29yeUlkQ29sdW1ucyh0ZW1wTGlzdFswXSwgcHJvZ3JhbT8ucHJvZ3JhbUlkKS5mb3JFYWNoKFxyXG4gICAgICAgICAgKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IHRydWU7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wTGlzdFtqXSAmJiB0ZW1wTGlzdFtqXVtpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ2F0ZWdvcnkucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHRlbXBMaXN0W2pdW2luZGV4IC0gMV0sXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0ZW1wTGlzdFtqXVtpbmRleF0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpbGQgY2F0ZWdvcmllcyBsaXZlIGluIGxhdGVyIERhdGEtc2hlZXQgY29sdW1ucyB3aG9zZSBoZWFkZXIgaXMgdGhlIHByb2dyYW0gaWQuXHJcbiAgICogU2tpcCB0aGUgcHJvZ3JhbSBsaXN0aW5nIGlkIGNvbHVtbnMgKDIyLTI5IGFyZWEpIOKAlCB0aG9zZSBzYW1lIGlkcyBhbHNvIGFwcGVhciB0aGVyZVxyXG4gICAqIGZvciB0aGUgZmlyc3QgcHJvZ3JhbSBvZiBlYWNoIHR5cGUsIHdoaWNoIHdvdWxkIGF0dGFjaCB0aGUgd3JvbmcgbmFtZXMuXHJcbiAgICovXHJcbiAgZ2V0UHJvZ3JhbUNhdGVnb3J5SWRDb2x1bW5zKGhlYWRlclJvdzogYW55W10gPSBbXSwgcHJvZ3JhbUlkOiBhbnkpOiBudW1iZXJbXSB7XHJcbiAgICBpZiAocHJvZ3JhbUlkID09IG51bGwgfHwgcHJvZ3JhbUlkID09PSAnJykge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9ncmFtTGlzdGluZ0lkQ29sdW1ucyA9IG5ldyBTZXQoW1xyXG4gICAgICBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgucmVndWxhdGlvbnMuaWQsXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5zdGFuZGFyZHMuaWQsXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5pbnRlcm5hbENvbnRyb2xzLmlkLFxyXG4gICAgICBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgub3RoZXJzLmlkLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBpbmRleGVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgKGhlYWRlclJvdyB8fCBbXSkuZm9yRWFjaCgoY2VsbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmICghcHJvZ3JhbUxpc3RpbmdJZENvbHVtbnMuaGFzKGluZGV4KSAmJiBjZWxsID09IHByb2dyYW1JZCkge1xyXG4gICAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGluZGV4ZXM7XHJcbiAgfVxyXG5cclxuICBwYXJzZVBlb3BsZUxpc3RDZWxsKHZhbHVlOiBhbnkpOiB7XHJcbiAgICBuYW1lQW5kRW1haWw6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgfSB7XHJcbiAgICBjb25zdCBuYW1lQW5kRW1haWwgPSB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGNvbnN0IGVtYWlsTWF0Y2ggPSBuYW1lQW5kRW1haWwubWF0Y2goL1xcKChbXildKkBbXildKilcXClcXHMqJC8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZUFuZEVtYWlsLFxyXG4gICAgICBuYW1lOiBuYW1lQW5kRW1haWwucmVwbGFjZSgvXFxzKlxcKFteKV0qQFteKV0qXFwpXFxzKiQvLCAnJykudHJpbSgpIHx8IG5hbWVBbmRFbWFpbCxcclxuICAgICAgZW1haWw6IGVtYWlsTWF0Y2ggPyBlbWFpbE1hdGNoWzFdLnRyaW0oKSA6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFkZFBlb3BsZURyb3Bkb3duTmFtZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZUluZm8ucGVvcGxlRHJvcGRvd25OYW1lcykge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzID0gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XHJcbiAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSB0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzLnNvbWUoXHJcbiAgICAgIChleGlzdGluZzogc3RyaW5nKSA9PiB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUoZXhpc3RpbmcpID09PSB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUobmFtZSlcclxuICAgICk7XHJcbiAgICBpZiAoIWFscmVhZHlBZGRlZCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzLnB1c2gobmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2xsZWN0RW1haWxEaXNwbGF5TmFtZXNGcm9tU2hlZXQodGVtcExpc3Q6IGFueVtdID0gW10pOiB2b2lkIHtcclxuICAgICh0ZW1wTGlzdCB8fCBbXSkuZm9yRWFjaCgocm93OiBhbnlbXSkgPT4ge1xyXG4gICAgICAocm93IHx8IFtdKS5mb3JFYWNoKChjZWxsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY2VsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBTdHJpbmcoY2VsbCk7XHJcbiAgICAgICAgaWYgKC9cXChbXildKkBbXildKlxcKS8udGVzdCh0ZXh0KSkge1xyXG4gICAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUodGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudDogYW55LCBpbmRleDogYW55LCB0eXBlOiBudW1iZXIpIHtcclxuICAgIGlmKGVsZW1lbnRbaW5kZXguaWRdICYmIHR5cGVvZiBlbGVtZW50W2luZGV4LmlkXSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFtpbmRleC5uYW1lXSxcclxuICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbaW5kZXguaWRdLFxyXG4gICAgICAgIHByb2dyYW1UeXBlOiB0eXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gZXZlbnQsIHdoaWNoIGlzIGEgc3RyaW5nLCBhbmQgdGhlbiBpdCBzZXRzIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGJ1bGtVcGxvYWQgdmFyaWFibGUsIHdoaWNoIGlzIGFuIG9iamVjdCwgYW5kIHRoZW4gaXQgYWNjZXNzZXMgdGhlIHByb3BlcnR5IG9mXHJcbiAgICogdGhhdCBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBldmVudCBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBTbyBpZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdmcmVxdWVuY3knLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdvbmdvaW5nJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoZSBvbmdvaW5nIHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uQ29tcGxldGlvbicsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGUgb25Db21wbGV0aW9uIHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIHN0cmluZyAtIHRoZSBldmVudCB0aGF0IGlzIGVtaXR0ZWQgZnJvbSB0aGUgY2hpbGQgY29tcG9uZW50IChmcmVxdWVuY3kgfCBvbmdvaW5nIHwgb25Db21wbGV0aW9uKVxyXG4gICAqL1xyXG4gIHNlbGVjdGVkVGFiKGV2ZW50OiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nKSB7XHJcbiAgICB0aGlzLnRhYlR5cGUgPSBldmVudDtcclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnZnJlcXVlbmN5JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvbmdvaW5nJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlY3RzIHRoZSBmb3VyIGZyZXF1ZW5jeSBjb2x1bW5zIGFkZGVkIHRvIHRoZSBsYXRlc3QgeGxzeCB0ZW1wbGF0ZTpcclxuICAgKiBEdWUgVGltZSwgRW5kcyBBZnRlciBPY2N1cnJlbmNlcywgRW5kcyBCeSBEYXRlIChEYXkpLCBFbmRzIEJ5IERhdGUgKE1vbnRoKS5cclxuICAgKiBPbGRlciB0ZW1wbGF0ZXMgd2l0aG91dCB0aGVzZSBjb2x1bW5zIGtlZXAgdGhlIG9yaWdpbmFsIGNvbHVtbiBtYXBwaW5nLlxyXG4gICAqL1xyXG4gIGRldGVjdEV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhoZWFkZXI6IGFueVtdID0gW10sIHN1YkhlYWRpbmc6IGFueVtdID0gW10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNlbGxzID0gWy4uLihoZWFkZXIgfHwgW10pLCAuLi4oc3ViSGVhZGluZyB8fCBbXSldO1xyXG4gICAgcmV0dXJuIGNlbGxzLnNvbWUoKGNlbGw6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGNlbGwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjZWxsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2R1ZSB0aW1lJykgfHxcclxuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdyZXNwb25zaWJpbGl0eSBlbmRzIGFmdGVyJykgfHxcclxuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdyZXNwb25zaWJpbGl0eSBlbmRzIGJ5IGRhdGUnKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1hcHMgZnJlcXVlbmN5IGNvbHVtbnMgd2hlbiB0aGUgdXBsb2FkZWQgZmlsZSBpbmNsdWRlcyB0aGUgZm91ciBuZXcgZmllbGRzLFxyXG4gICAqIHNvIGxhdGVyIGNvbHVtbnMgKFJDLCByZXZpZXdlciwgZXRjLikgc3RheSBhbGlnbmVkLiBPbmdvaW5nL29uQ29tcGxldGlvbiBhcmUgdW5jaGFuZ2VkLlxyXG4gICAqL1xyXG4gIGFwcGx5RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKG9iajogYW55LCByZXBvcnQ6IGFueSwgaXNQcm9ncmFtOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgIG9iai5kdWVUaW1lID0gcmVwb3J0WzExXTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5V2luZG93ID0gcmVwb3J0WzEyXTtcclxuICAgICAgb2JqLmZhaWxlZEFmdGVyID0gcmVwb3J0WzEzXTtcclxuICAgICAgb2JqLmVuZHNBZnRlck9jY3VycmVuY2VzID0gcmVwb3J0WzE0XTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVEYXkgPSByZXBvcnRbMTVdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZU1vbnRoID0gcmVwb3J0WzE2XTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5Q2VudGVyID0gcmVwb3J0WzE3XTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9IHJlcG9ydFsxOF07XHJcbiAgICAgIG9iai5yZXBvcnRDbGFzcyA9IHJlcG9ydFsxOV07XHJcbiAgICAgIG9iai5vYmplY3RpdmUgPSByZXBvcnRbMjBdO1xyXG4gICAgICBvYmoubm90ZXMgPSByZXBvcnRbMjFdO1xyXG4gICAgICBvYmouaXNGb3JtYXQgPSByZXBvcnRbMjJdO1xyXG4gICAgICBvYmouZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkgPSByZXBvcnRbMjNdO1xyXG4gICAgICBvYmouZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID0gcmVwb3J0WzI0XTtcclxuICAgICAgb2JqLnJldmlld2VyID0gcmVwb3J0WzI1XTtcclxuICAgICAgb2JqLnJldmlld2VyVHlwZSA9IHJlcG9ydFsyNl07XHJcbiAgICAgIG9iai5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluID0gcmVwb3J0WzI3XTtcclxuICAgICAgb2JqLnJldmlld1dpbGxCZUZhaWxlZEFmdGVyID0gcmVwb3J0WzI4XTtcclxuICAgICAgb2JqLm92ZXJzZWVyID0gcmVwb3J0WzI5XTtcclxuICAgICAgb2JqLm5vdGlmeU9uRmFpbHVyZSA9IHJlcG9ydFszMF07XHJcbiAgICAgIG9iai5jb2xsYWJvcmF0b3IgPSByZXBvcnRbMzFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JqLmR1ZVRpbWUgPSByZXBvcnRbOF07XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eVdpbmRvdyA9IHJlcG9ydFs5XTtcclxuICAgICAgb2JqLmZhaWxlZEFmdGVyID0gcmVwb3J0WzEwXTtcclxuICAgICAgb2JqLmVuZHNBZnRlck9jY3VycmVuY2VzID0gcmVwb3J0WzExXTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVEYXkgPSByZXBvcnRbMTJdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZU1vbnRoID0gcmVwb3J0WzEzXTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5Q2VudGVyID0gcmVwb3J0WzE0XTtcclxuICAgICAgb2JqLnJlcG9ydENsYXNzID0gcmVwb3J0WzE1XTtcclxuICAgICAgb2JqLm9iamVjdGl2ZSA9IHJlcG9ydFsxNl07XHJcbiAgICAgIG9iai5ub3RlcyA9IHJlcG9ydFsxN107XHJcbiAgICAgIG9iai5pc0Zvcm1hdCA9IHJlcG9ydFsxOF07XHJcbiAgICAgIG9iai5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSA9IHJlcG9ydFsxOV07XHJcbiAgICAgIG9iai5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSByZXBvcnRbMjBdO1xyXG4gICAgICBvYmoucmV2aWV3ZXIgPSByZXBvcnRbMjFdO1xyXG4gICAgICBvYmoucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiA9IHJlcG9ydFsyMl07XHJcbiAgICAgIG9iai5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciA9IHJlcG9ydFsyM107XHJcbiAgICAgIG9iai5vdmVyc2VlciA9IHJlcG9ydFsyNF07XHJcbiAgICAgIG9iai5ub3RpZnlPbkZhaWx1cmUgPSByZXBvcnRbMjVdO1xyXG4gICAgICBvYmouY29sbGFib3JhdG9yID0gcmVwb3J0WzI2XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGluIGEgcmVwb3J0LCBhIHRhYiB0eXBlLCBhbmQgYSBib29sZWFuIHZhbHVlLiBJdCB0aGVuIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBidW5jaCBvZlxyXG4gICAqIHByb3BlcnRpZXMuXHJcbiAgICogPC9jb2RlPlxyXG4gICAqIEBwYXJhbSB7YW55fSByZXBvcnQgLSBhbnkgPSZndDsgdGhlIGFycmF5IG9mIGRhdGFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFiVHlwZSAtIHN0cmluZyAtIHRoaXMgaXMgdGhlIHR5cGUgb2YgdGFiIHRoYXQgaXMgc2VsZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1Byb2dyYW0gLSBib29sZWFuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgLSB3aGV0aGVyIHRoZSB4bHN4IGluY2x1ZGVzIHRoZSBmb3VyIG5ldyBmcmVxdWVuY3kgY29sdW1uc1xyXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgKi9cclxuICBzZXRSZXBvcnREZXRhaWxzKHJlcG9ydDogYW55LCB0YWJUeXBlOiBzdHJpbmcsIGlzUHJvZ3JhbTogYm9vbGVhbiwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UpIHtcclxuXHJcbiAgICBsZXQgb2JqOiBhbnk7XHJcbiAgICBzd2l0Y2ggKHRhYlR5cGUpIHtcclxuICAgICAgY2FzZSAnZnJlcXVlbmN5Jzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsyMF0sXHJcblxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIxXSAsXHJcbiAgICAgICAgICAgIHJldmlld2VyVHlwZTogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIzXSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyNF0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjVdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyNl0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzI3XSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqLCByZXBvcnQsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzRGF0ZUZvcm1hdEludmFsaWQnXSA9IHRoaXMuaXNEYXRlRm9ybWF0SW52YWxpZDtcclxuICAgICAgICAgIG9ialsnaXNEYXlJbnZhbGlkJ10gPSB0aGlzLmlzRGF5SW52YWxpZDtcclxuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZER1ZVRpbWUnXSA9IHRoaXMuaXNWYWxpZER1ZVRpbWUoXHJcbiAgICAgICAgICAgIG9iaj8uZHVlVGltZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydlbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yJ10gPSB0aGlzLmdldEVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IoXHJcbiAgICAgICAgICAgIG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXMsXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gPSAhb2JqWydlbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yJ107XHJcbiAgICAgICAgICB0aGlzLmFwcGx5RW5kc0J5RGF0ZVZhbGlkYXRpb24ob2JqLCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSAmJlxyXG4gICAgICAgICAgICAhb2JqWydpc1Bhc3REYXRlJ10gJiZcclxuICAgICAgICAgICAgb2JqPy5mcmVxdWVuY3k/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZER1ZVRpbWUnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQWZ0ZXJPY2N1cnJlbmNlcyddICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGUnXVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBkYXk6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgY29sbGFib3JhdG9yOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmIChoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhvYmosIHJlcG9ydCwgZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzUGFzdERhdGUnXSA9IHRoaXMuaXNQYXN0RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREdWVUaW1lJ10gPSB0aGlzLmlzVmFsaWREdWVUaW1lKFxyXG4gICAgICAgICAgICBvYmo/LmR1ZVRpbWUsXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG9ialsnZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvciddID0gdGhpcy5nZXRFbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yKFxyXG4gICAgICAgICAgICBvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQWZ0ZXJPY2N1cnJlbmNlcyddID0gIW9ialsnZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvciddO1xyXG4gICAgICAgICAgdGhpcy5hcHBseUVuZHNCeURhdGVWYWxpZGF0aW9uKG9iaiwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcclxuICAgICAgICAgICAgIW9ialsnaXNQYXN0RGF0ZSddICYmXHJcbiAgICAgICAgICAgIG9iaj8uZnJlcXVlbmN5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREdWVUaW1lJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOiB7XHJcbiAgICAgICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgcHJvZ3JhbVR5cGU6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICByZXZpZXdlclR5cGU6IHJlcG9ydFsxN10sIFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiAnT25nb2luZycsXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcblxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBzZXRSZW1pbmRlcjogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlcjogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgY29sbGFib3JhdG9yOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICYmIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjRdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyNV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LnBhcmVudFJlc3BvbnNpYmlsaXR5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFJpc2tDbGFzcyhyaXNrQ2xhc3M6IGFueSkge1xyXG4gICAgaWYoIXJpc2tDbGFzcykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gUklTS19DTEFTU19MSVNULmluY2x1ZGVzKHJpc2tDbGFzcz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGRyb3Bkb3duLWxpc3QgY2hlY2tzIG9uIHRvcCBvZiBleGlzdGluZyByb3cgdmFsaWRhdGlvbi5cclxuICAgKiBFbXB0eSBvcHRpb25hbCBjZWxscyBhcmUgdmFsaWQuIEZyZXF1ZW5jeSAvIGR1ZSBkYXRlIC8gZHVlIHRpbWUgYXJlIHNraXBwZWQgZm9yIG9uZ29pbmcuXHJcbiAgICovXHJcbiAgd2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgIG9iajogYW55LFxyXG4gICAgdGFiVHlwZTogc3RyaW5nLFxyXG4gICAgaXNQcm9ncmFtOiBib29sZWFuLFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiBhbnkge1xyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgIG9iaixcclxuICAgICAgdGFiVHlwZSxcclxuICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmFwcGx5RGF5c0NvdW50VmFsaWRhdGlvbihvYmosIHRhYlR5cGUpO1xyXG4gICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAhIW9ialsnaXNWYWxpZCddICYmXHJcbiAgICAgICEhb2JqWydpc1ZhbGlkRHJvcGRvd24nXSAmJlxyXG4gICAgICAhIW9ialsnaXNWYWxpZERheXNDb3VudCddO1xyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGFwcGx5RHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgb2JqOiBhbnksXHJcbiAgICB0YWJUeXBlOiBzdHJpbmcsXHJcbiAgICBpc1Byb2dyYW06IGJvb2xlYW4sXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgcmV2aWV3ZXJOYW1lcyA9IHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXMoXHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QsXHJcbiAgICAgICduYW1lQW5kRW1haWwnXHJcbiAgICApO1xyXG4gICAgY29uc3QgYXNzaWduZWVOYW1lcyA9IHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXMoXHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0LFxyXG4gICAgICAnbmFtZUFuZEVtYWlsJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHByb2dyYW1DYXRlZ29yeU5hbWVzID0gdGhpcy5nZXRQcm9ncmFtQ2F0ZWdvcnlOYW1lcygpO1xyXG4gICAgY29uc3QgZHJvcGRvd25WYWxpZGF0aW9uOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcclxuICAgICAgcHJvZ3JhbVR5cGU6IHRydWUsXHJcbiAgICAgIHByb2dyYW06IHRydWUsXHJcbiAgICAgIHByb2dyYW1DYXRlZ29yeTogdHJ1ZSxcclxuICAgICAgYXNzaWdub3I6IHRydWUsXHJcbiAgICAgIGFzc2lnbmVlOiB0cnVlLFxyXG4gICAgICBhc3NpZ25lZVR5cGU6IHRydWUsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICBmcmVxdWVuY3k6IHRydWUsXHJcbiAgICAgIGRheTogdHJ1ZSxcclxuICAgICAgbW9udGg6IHRydWUsXHJcbiAgICAgIGR1ZVRpbWU6IHRydWUsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiB0cnVlLFxyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHRydWUsXHJcbiAgICAgIHJlcG9ydENsYXNzOiB0cnVlLFxyXG4gICAgICBpc0Zvcm1hdDogdHJ1ZSxcclxuICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICByZXZpZXdlcjogdHJ1ZSxcclxuICAgICAgcmV2aWV3ZXJUeXBlOiB0cnVlLFxyXG4gICAgICBvdmVyc2VlcjogdHJ1ZSxcclxuICAgICAgbm90aWZ5T25GYWlsdXJlOiB0cnVlLFxyXG4gICAgICBjb2xsYWJvcmF0b3I6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1UeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgb2JqPy5wcm9ncmFtVHlwZSxcclxuICAgICAgICBQUk9HUkFNX1RZUEVfRFJPUERPV05fTElTVFxyXG4gICAgICApO1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbSA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgICBvYmo/LnByb2dyYW0sXHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyh0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0LCAncHJvZ3JhbU5hbWUnKVxyXG4gICAgICApO1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbUNhdGVnb3J5ID0gcHJvZ3JhbUNhdGVnb3J5TmFtZXMubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLmlzSW5Ecm9wZG93bkxpc3Qob2JqPy5wcm9ncmFtQ2F0ZWdvcnksIHByb2dyYW1DYXRlZ29yeU5hbWVzKVxyXG4gICAgICAgIDogdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uYXNzaWdub3IgPSB0aGlzLmlzSW5Vc2VyRHJvcGRvd24ob2JqPy5hc3NpZ25vcik7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uYXNzaWduZWUgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8uYXNzaWduZWUsXHJcbiAgICAgIGFzc2lnbmVlTmFtZXNcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uYXNzaWduZWVUeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8uYXNzaWduZWVUeXBlLFxyXG4gICAgICBBU1NJR05FRV9UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ua2V5UmVzcG9uc2liaWxpdHkgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5rZXlSZXNwb25zaWJpbGl0eSxcclxuICAgICAgWUVTX05PX0RST1BET1dOX0xJU1RcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRhYlR5cGUgPT09ICdmcmVxdWVuY3knKSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5mcmVxdWVuY3kgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgICBvYmo/LmZyZXF1ZW5jeSxcclxuICAgICAgICBGUkVRVUVOQ1lfRFJPUERPV05fTElTVFxyXG4gICAgICApO1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24uZGF5ID0gdGhpcy5pc1ZhbGlkRHJvcGRvd25EYXkob2JqPy5kYXkpO1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ubW9udGggPSB0aGlzLmlzVmFsaWREcm9wZG93bk1vbnRoKG9iaj8ubW9udGgpO1xyXG4gICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLmR1ZVRpbWUgPSB0aGlzLmlzVmFsaWREdWVUaW1lKG9iaj8uZHVlVGltZSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ucmVzcG9uc2liaWxpdHlDZW50ZXIgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8ucmVzcG9uc2liaWxpdHlDZW50ZXIsXHJcbiAgICAgIHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXModGhpcy50ZW1wbGF0ZUluZm8/LnJjTGlzdCwgJ25hbWUnKVxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUsXHJcbiAgICAgIFJDX1RZUEVfRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXBvcnRDbGFzcyA9IHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5pc0Zvcm1hdCA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmlzRm9ybWF0LFxyXG4gICAgICBZRVNfTk9fRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQsXHJcbiAgICAgIFlFU19OT19EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLnJldmlld2VyID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LnJldmlld2VyLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLnJldmlld2VyVHlwZSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LnJldmlld2VyVHlwZSxcclxuICAgICAgUkVWSUVXRVJfVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLm92ZXJzZWVyID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/Lm92ZXJzZWVyLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLm5vdGlmeU9uRmFpbHVyZSA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5ub3RpZnlPbkZhaWx1cmUsXHJcbiAgICAgIHJldmlld2VyTmFtZXNcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uY29sbGFib3JhdG9yID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KG9iaj8uY29sbGFib3JhdG9yLCBbXHJcbiAgICAgIC4uLmFzc2lnbmVlTmFtZXMsXHJcbiAgICAgIC4uLnJldmlld2VyTmFtZXMsXHJcbiAgICBdKTtcclxuXHJcbiAgICBvYmpbJ2Ryb3Bkb3duVmFsaWRhdGlvbiddID0gZHJvcGRvd25WYWxpZGF0aW9uO1xyXG4gICAgb2JqWydpc1ZhbGlkRHJvcGRvd24nXSA9ICFPYmplY3QudmFsdWVzKGRyb3Bkb3duVmFsaWRhdGlvbikuaW5jbHVkZXMoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVMaXN0TmFtZXMobGlzdDogYW55W10gPSBbXSwga2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gKGxpc3QgfHwgW10pXHJcbiAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uW2tleV0pXHJcbiAgICAgIC5maWx0ZXIoKG5hbWU6IGFueSkgPT4gdGhpcy5oYXNWYWx1ZShuYW1lKSlcclxuICAgICAgLm1hcCgobmFtZTogYW55KSA9PiBTdHJpbmcobmFtZSkudHJpbSgpKTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1DYXRlZ29yeU5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgKHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3QgfHwgW10pLmZvckVhY2goKHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAocHJvZ3JhbT8uY2hpbGRDYXRlZ29yeSB8fCBbXSkuZm9yRWFjaCgoY2F0ZWdvcnk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKGNhdGVnb3J5Py5uYW1lKSkge1xyXG4gICAgICAgICAgbmFtZXMucHVzaChTdHJpbmcoY2F0ZWdvcnkubmFtZSkudHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmFtZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnRydXN0ZWQgQnkgaW4gdGhlIHhsc3ggZHJvcGRvd24gaXMgdGhlIHBlb3BsZSBsaXN0IGluIGBOYW1lIChlbWFpbClgIGZvcm1cclxuICAgKiAoc2FtZSBzb3VyY2UgYXMgRW50cnVzdGVkIFRvIC8gUmV2aWV3ZXIpLCBub3QgdGhlIGFzc2lnbm9yIG5hbWUtb25seSBjb2x1bW4uXHJcbiAgICovXHJcbiAgaXNJblVzZXJEcm9wZG93bih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZSh2YWx1ZSk7XHJcbiAgICBjb25zdCB2YWx1ZUVtYWlsID0gdGhpcy5leHRyYWN0RHJvcGRvd25FbWFpbCh2YWx1ZSk7XHJcbiAgICBjb25zdCB2YWx1ZU5hbWUgPSB0aGlzLmV4dHJhY3REcm9wZG93bk5hbWUodmFsdWUpO1xyXG4gICAgY29uc3QgZHJvcGRvd25OYW1lcyA9IHRoaXMudGVtcGxhdGVJbmZvPy5wZW9wbGVEcm9wZG93bk5hbWVzIHx8IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICBkcm9wZG93bk5hbWVzLnNvbWUoXHJcbiAgICAgICAgKG5hbWU6IHN0cmluZykgPT4gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG5hbWUpID09PSBub3JtYWxpemVkXHJcbiAgICAgIClcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdmFsdWVFbWFpbCAmJlxyXG4gICAgICBkcm9wZG93bk5hbWVzLnNvbWUoKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5hbWVFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG5hbWVFbWFpbCA9PT0gdmFsdWVFbWFpbCB8fFxyXG4gICAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG5hbWUpID09PSB2YWx1ZUVtYWlsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHVzZXJzID0gW1xyXG4gICAgICAuLi4odGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3QgfHwgW10pLFxyXG4gICAgICAuLi4odGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3QgfHwgW10pLFxyXG4gICAgICAuLi4odGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdCB8fCBbXSksXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIHVzZXJzLnNvbWUoKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb25zdHJ1Y3RlZCA9XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSh1c2VyPy5uYW1lKSAmJiB0aGlzLmhhc1ZhbHVlKHVzZXI/LmVtYWlsKVxyXG4gICAgICAgICAgPyBgJHtTdHJpbmcodXNlci5uYW1lKS50cmltKCl9ICgke1N0cmluZyh1c2VyLmVtYWlsKS50cmltKCl9KWBcclxuICAgICAgICAgIDogJyc7XHJcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgdXNlcj8ubmFtZUFuZEVtYWlsLFxyXG4gICAgICAgIHVzZXI/Lm5hbWUsXHJcbiAgICAgICAgdXNlcj8uZW1haWwsXHJcbiAgICAgICAgY29uc3RydWN0ZWQsXHJcbiAgICAgIF07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjYW5kaWRhdGVzLnNvbWUoXHJcbiAgICAgICAgICAoY2FuZGlkYXRlKSA9PlxyXG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlKGNhbmRpZGF0ZSkgJiZcclxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKGNhbmRpZGF0ZSkgPT09IG5vcm1hbGl6ZWRcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2YWx1ZUVtYWlsICYmXHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSh1c2VyPy5lbWFpbCkgJiZcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodXNlci5lbWFpbCkgPT09IHZhbHVlRW1haWxcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZhbHVlTmFtZSAmJlxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUodXNlcj8ubmFtZSkgJiZcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodXNlci5uYW1lKSA9PT0gdmFsdWVOYW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgISF2YWx1ZUVtYWlsICYmXHJcbiAgICAgICAgY2FuZGlkYXRlcy5zb21lKFxyXG4gICAgICAgICAgKGNhbmRpZGF0ZSkgPT5cclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZShjYW5kaWRhdGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwoY2FuZGlkYXRlKSA9PT0gdmFsdWVFbWFpbFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXplRHJvcGRvd25WYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHUwMGEwL2csICcgJylcclxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAudHJpbSgpXHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdERyb3Bkb3duRW1haWwodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXRjaCA9IFN0cmluZyh2YWx1ZSA/PyAnJykubWF0Y2goL1xcKChbXildKkBbXildKilcXClcXHMqJC8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG1hdGNoWzFdKSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdERyb3Bkb3duTmFtZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUoXHJcbiAgICAgIFN0cmluZyh2YWx1ZSA/PyAnJykucmVwbGFjZSgvXFxzKlxcKFteKV0qQFteKV0qXFwpXFxzKiQvLCAnJylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0luU3RhdGljRHJvcGRvd24odmFsdWU6IGFueSwgb3B0aW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzSW5Ecm9wZG93bkxpc3QodmFsdWUsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaXNJbkRyb3Bkb3duTGlzdCh2YWx1ZTogYW55LCBvcHRpb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodmFsdWUpO1xyXG4gICAgcmV0dXJuIChvcHRpb25zIHx8IFtdKS5zb21lKFxyXG4gICAgICAob3B0aW9uKSA9PiB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUob3B0aW9uKSA9PT0gbm9ybWFsaXplZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREcm9wZG93bkRheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKFN0cmluZyh2YWx1ZSkudHJpbSgpKTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGRheU51bWJlcikgJiYgZGF5TnVtYmVyID49IDEgJiYgZGF5TnVtYmVyIDw9IDMxO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZERyb3Bkb3duTW9udGgodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSRUdFWC5FTkRTX0JZX0RBVEVfTU9OVEgudGVzdChTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRHVlVGltZShkdWVUaW1lOiBhbnksIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ub3JtYWxpemVEdWVUaW1lKGR1ZVRpbWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSRUdFWC5EVUVfVElNRS50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZpZWxkLiBXaGVuIGZpbGxlZCwgdGhlIHZhbHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgd2hvbGUgbnVtYmVyLlxyXG4gICAqIFJlamVjdHMgbmVnYXRpdmVzLCBkZWNpbWFscywgYW5kIG5vbi1udW1lcmljIHRleHQuIEJsYW5rIGlzIHZhbGlkLiAwIGlzIGFsbG93ZWRcclxuICAgKiAoRmFpbCAvIFJldmlldyBGYWlsIHVzZSAwIHRvIG1lYW4gY29tcGxldGUvcmV2aWV3IG9uIHRoZSBkdWUgZGF0ZSkuXHJcbiAgICovXHJcbiAgZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3IodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGlmICgvXi0vLnRlc3Qobm9ybWFsaXplZCkgfHwgTnVtYmVyKG5vcm1hbGl6ZWQpIDwgMCkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5QT1NJVElWRV9OVU1CRVI7XHJcbiAgICB9XHJcbiAgICBpZiAoIS9eXFxkKyQvLnRlc3Qobm9ybWFsaXplZCkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuV0hPTEVfTlVNQkVSX05PTl9ORUdBVElWRTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFwcGx5RGF5c0NvdW50VmFsaWRhdGlvbihvYmo6IGFueSwgdGFiVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGFydEVycm9yID1cclxuICAgICAgdGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcclxuICAgICAgICA/IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3Iob2JqPy5yZXNwb25zaWJpbGl0eVdpbmRvdylcclxuICAgICAgICA6ICcnO1xyXG4gICAgY29uc3QgZmFpbEVycm9yID1cclxuICAgICAgdGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcclxuICAgICAgICA/IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3Iob2JqPy5mYWlsZWRBZnRlcilcclxuICAgICAgICA6ICcnO1xyXG4gICAgY29uc3QgcmV2aWV3U3RhcnRFcnJvciA9IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3IoXHJcbiAgICAgIG9iaj8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpblxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldmlld0ZhaWxFcnJvciA9IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3IoXHJcbiAgICAgIG9iaj8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJcclxuICAgICk7XHJcbiAgICBvYmpbJ3Jlc3BvbnNpYmlsaXR5V2luZG93RXJyb3InXSA9IHN0YXJ0RXJyb3I7XHJcbiAgICBvYmpbJ2ZhaWxlZEFmdGVyRXJyb3InXSA9IGZhaWxFcnJvcjtcclxuICAgIG9ialsncmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbkVycm9yJ10gPSByZXZpZXdTdGFydEVycm9yO1xyXG4gICAgb2JqWydyZXZpZXdXaWxsQmVGYWlsZWRBZnRlckVycm9yJ10gPSByZXZpZXdGYWlsRXJyb3I7XHJcbiAgICBvYmpbJ2lzVmFsaWREYXlzQ291bnQnXSA9XHJcbiAgICAgICFzdGFydEVycm9yICYmICFmYWlsRXJyb3IgJiYgIXJldmlld1N0YXJ0RXJyb3IgJiYgIXJldmlld0ZhaWxFcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZpZWxkLiBXaGVuIGZpbGxlZCwgdGhlIHZhbHVlIG11c3QgYmUgbnVtZXJpYyBhbmQgZ3JlYXRlciB0aGFuIDAuXHJcbiAgICovXHJcbiAgZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgIHZhbHVlOiBhbnksXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBTdHJpbmcodmFsdWUpLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xyXG4gICAgaWYgKCEvXi0/XFxkKyhcXC5cXGQrKT8kLy50ZXN0KG5vcm1hbGl6ZWQpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQUZURVJfT0NDVVJSRU5DRVNfTlVNRVJJQztcclxuICAgIH1cclxuICAgIGlmIChOdW1iZXIobm9ybWFsaXplZCkgPD0gMCkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09DQ1VSUkVOQ0VTX0dSRUFURVJfVEhBTl9aRVJPO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmo6IGFueSwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmdldEVuZHNCeURhdGVWYWxpZGF0aW9uKFxyXG4gICAgICBvYmo/LmVuZHNCeURhdGVEYXksXHJcbiAgICAgIG9iaj8uZW5kc0J5RGF0ZU1vbnRoLFxyXG4gICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMsXHJcbiAgICAgIG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXNcclxuICAgICk7XHJcbiAgICBvYmpbJ2VuZHNCeURhdGVEYXlFcnJvciddID0gdmFsaWRhdGlvbi5kYXlFcnJvcjtcclxuICAgIG9ialsnZW5kc0J5RGF0ZU1vbnRoRXJyb3InXSA9IHZhbGlkYXRpb24ubW9udGhFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGVEYXknXSA9ICF2YWxpZGF0aW9uLmRheUVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZU1vbnRoJ10gPSAhdmFsaWRhdGlvbi5tb250aEVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddID0gdmFsaWRhdGlvbi5pc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgaGFzVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgU3RyaW5nKHZhbHVlKS50cmltKCkgIT09ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgdW5sZXNzIGVpdGhlciBkYXkgb3IgbW9udGggaXMgZmlsbGVkLiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIEVuZHMgQWZ0ZXIgT2NjdXJyZW5jZXMuXHJcbiAgICogRGF5IG11c3QgYmUgbnVtZXJpYywgZ3JlYXRlciB0aGFuIDAsIGFuZCBhdCBtb3N0IDMxLiBNb250aCBtdXN0IGJlIGZ1bGwgbW9udGggbmFtZSArICcgKyB0d28tZGlnaXRcclxuICAgKiB5ZWFyIChKYW51YXJ5JzI4KS4gQ29tYmluZWQgZGF0ZSBtdXN0IGV4aXN0LCBpbmNsdWRpbmcgbGVhcC15ZWFyIEZlYnJ1YXJ5IDI5LlxyXG4gICAqL1xyXG4gIGdldEVuZHNCeURhdGVWYWxpZGF0aW9uKFxyXG4gICAgZGF5OiBhbnksXHJcbiAgICBtb250aDogYW55LFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UsXHJcbiAgICBlbmRzQWZ0ZXJPY2N1cnJlbmNlcz86IGFueVxyXG4gICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZGF5RXJyb3I6IHN0cmluZzsgbW9udGhFcnJvcjogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB7IGlzVmFsaWQ6IHRydWUsIGRheUVycm9yOiAnJywgbW9udGhFcnJvcjogJycgfTtcclxuICAgIGlmICghaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGRheVZhbHVlID0gZGF5ID09IG51bGwgPyAnJyA6IFN0cmluZyhkYXkpLnRyaW0oKTtcclxuICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aCA9PSBudWxsID8gJycgOiBTdHJpbmcobW9udGgpLnRyaW0oKTtcclxuICAgIGlmICghZGF5VmFsdWUgJiYgIW1vbnRoVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKGVuZHNBZnRlck9jY3VycmVuY2VzKSAmJiAoZGF5VmFsdWUgfHwgbW9udGhWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcjogZGF5VmFsdWUgPyBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9DT05GTElDVCA6ICcnLFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IG1vbnRoVmFsdWUgPyBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9DT05GTElDVCA6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGF5VmFsdWUgfHwgIW1vbnRoVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5DT01QTEVURSxcclxuICAgICAgICBtb250aEVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTkNPTVBMRVRFLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRheUVycm9yID0gdGhpcy5nZXRFbmRzQnlEYXRlRGF5RXJyb3IoZGF5VmFsdWUpO1xyXG4gICAgY29uc3QgbW9udGhFcnJvciA9IHRoaXMuZ2V0RW5kc0J5RGF0ZU1vbnRoRXJyb3IobW9udGhWYWx1ZSk7XHJcbiAgICBpZiAoZGF5RXJyb3IgfHwgbW9udGhFcnJvcikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yLFxyXG4gICAgICAgIG1vbnRoRXJyb3IsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRFbmRzQnlDYWxlbmRhckRhdGUoZGF5VmFsdWUsIG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUUsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5WQUxJRF9WQUxVRSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0VuZHNCeURhdGVJblBhc3QoZGF5VmFsdWUsIG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX1BBU1QsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfUEFTVCxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRzQnlEYXRlRGF5RXJyb3IoZGF5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCEvXi0/XFxkKyhcXC5cXGQrKT8kLy50ZXN0KGRheSkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGlmIChkYXlOdW1iZXIgPD0gMCB8fCBkYXlOdW1iZXIgPiAzMSkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5WQUxJRF9WQUxVRTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldEVuZHNCeURhdGVNb250aEVycm9yKG1vbnRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFSRUdFWC5FTkRTX0JZX0RBVEVfTU9OVEgudGVzdChtb250aCkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRW5kc0J5Q2FsZW5kYXJEYXRlKGRheTogc3RyaW5nLCBtb250aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtb250aE1hdGNoID0gbW9udGgubWF0Y2goUkVHRVguRU5EU19CWV9EQVRFX01PTlRIKTtcclxuICAgIGlmICghbW9udGhNYXRjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEluZGV4ID0gRlVMTF9NT05USF9OQU1FUy5pbmRleE9mKG1vbnRoTWF0Y2hbMV0pO1xyXG4gICAgY29uc3QgeWVhciA9IDIwMDAgKyBOdW1iZXIobW9udGhNYXRjaFsyXSk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXlOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXlOdW1iZXIpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXHJcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhJbmRleCAmJlxyXG4gICAgICBkYXRlLmdldERhdGUoKSA9PT0gZGF5TnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNFbmRzQnlEYXRlSW5QYXN0KGRheTogc3RyaW5nLCBtb250aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtb250aE1hdGNoID0gbW9udGgubWF0Y2goUkVHRVguRU5EU19CWV9EQVRFX01PTlRIKTtcclxuICAgIGlmICghbW9udGhNYXRjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEluZGV4ID0gRlVMTF9NT05USF9OQU1FUy5pbmRleE9mKG1vbnRoTWF0Y2hbMV0pO1xyXG4gICAgY29uc3QgeWVhciA9IDIwMDAgKyBOdW1iZXIobW9udGhNYXRjaFsyXSk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGNvbnN0IGVuZHNCeURhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXlOdW1iZXIpO1xyXG4gICAgZW5kc0J5RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgcmV0dXJuIGVuZHNCeURhdGUgPCB0b2RheTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZUR1ZVRpbWUoZHVlVGltZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChkdWVUaW1lID09IG51bGwgfHwgZHVlVGltZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbHVlID0gU3RyaW5nKGR1ZVRpbWUpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XHJcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL14oXFxkezEsMn0pOihcXGR7Mn0pOlxcZHsyfVxccyooQU18UE0pJC9pLCAnJDE6JDIgJDMnKTtcclxuICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2goL14oXFxkezEsMn0pOihcXGR7Mn0pXFxzKihBTXxQTSkkL2kpO1xyXG4gICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBsZXQgaG91ciA9IE51bWJlcihtYXRjaFsxXSk7XHJcbiAgICBpZiAoaG91ciA9PT0gMCkge1xyXG4gICAgICBob3VyID0gMTI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7aG91cn06JHttYXRjaFsyXX0gJHttYXRjaFszXS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIHJlbW92ZXMgYWxsIHdoaXRlc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmdcclxuICAgKiBAcGFyYW0ge2FueX0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSByZXNwb25zaWJpbGl0eVxyXG4gICAqIEByZXR1cm5zIHRoZSB0cmltbWVkTmFtZSB2YXJpYWJsZS5cclxuICAgKi9cclxuICBjaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG5hbWU6IGFueSkge1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHZhciB0cmltbWVkTmFtZSA9IG5hbWUudG9TdHJpbmcoKS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgICB0cmltbWVkTmFtZSA9IHRyaW1tZWROYW1lLnJlcGxhY2UoLyAgKy9nLCAnICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyaW1tZWROYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHJlc3BvbnNpYmlsaXR5IG5hbWUgaXMgdmFsaWQsIGFuZCB0aGUgYXNzaWduZWUgYW5kIGFzc2lnbm9yIGFyZSBub3QgZW1wdHksIHRoZW4gcmV0dXJuXHJcbiAgICogdHJ1ZS4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2VcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgcGFzc2VkIGluXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGlzVmFsaWREYXRhKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHkgPSB0aGlzLmNoZWNrVmFsaWRSZXNwb25zaWJpbGl0eU5hbWUoXHJcbiAgICAgIGRhdGE/LnJlc3BvbnNpYmlsaXR5TmFtZVxyXG4gICAgKT8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgY29uc3QgYXNzaWduZWUgPSBkYXRhPy5hc3NpZ25lZT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgZnJlcXVlbmN5ID0gZGF0YT8uZnJlcXVlbmN5Py5sZW5ndGggPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAoYXNzaWduZWUgJiYgcmVzcG9uc2liaWxpdHkgJiYgZnJlcXVlbmN5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGFzc2lnbm9yIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWdub3IgaXMgbm90IHNldFxyXG4gICAqIGFuZCB0aGUgZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgdGhlXHJcbiAgICogc2FtZSBhcyB0aGUgcmV2aWV3ZXIsIG92ZXJzZWVyLCBvciBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0IGFuZCB0aGVcclxuICAgKiBkZWZhdWx0T3duZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSByZXZpZXdlciBpcyB0aGUgc2FtZSBhc1xyXG4gICAqIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCwgdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSxcclxuICAgKiByZXR1cm4gdHJ1ZVxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55IC0gdGhpcyBpcyB0aGUgZGF0YSB0aGF0IGlzIHBhc3NlZCBpbiBmcm9tIHRoZSBmb3JtLlxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkVXNlcnMoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChkYXRhPy5hc3NpZ25vciAmJlxyXG4gICAgICAgIChkYXRhPy5hc3NpZ25vciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKCFkYXRhPy5hc3NpZ25vciAmJlxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKGRhdGE/LmFzc2lnbmVlICYmXHJcbiAgICAgICAgKGRhdGE/LmFzc2lnbmVlID09IGRhdGE/LnJldmlld2VyIHx8XHJcbiAgICAgICAgICBkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKCFkYXRhPy5hc3NpZ25lZSAmJlxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKGRhdGE/LnJldmlld2VyICYmXHJcbiAgICAgICAgKGRhdGE/LnJldmlld2VyID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICBkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAhZGF0YT8uYXNzaWduZWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGluIGEgZGF0YSBvYmplY3QgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggNCBib29sZWFuIHByb3BlcnRpZXMuXHJcbiAgICogVGhlIGJvb2xlYW4gcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBpc1ZhbGlkQXNzaWduZWU6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkQXNzaWdub3I6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkUmV2aWV3ZXI6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkT3ZlcnNlZXI6IHRydWVcclxuICAgKiB9XHJcbiAgICovXHJcbiAgdmFsaWRhdGVEYXRhV2l0aFByb2dyYW0oZGF0YTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBkYXRhPy5wcm9ncmFtXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBc3NpZ25lZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChhc3NpZ25lZTogYW55KSA9PiBhc3NpZ25lZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5hc3NpZ25lZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWdub3IgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWdub3JzTGlzdD8uZmlsdGVyKFxyXG4gICAgICAoYXNzaWdub3I6IGFueSkgPT4gYXNzaWdub3I/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWdub3JcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJldmlld2VyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXI/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ucmV2aWV3ZXJcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE92ZXJzZWVyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXI/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ub3ZlcnNlZXJcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKG5vdGlmeU9uRmFpbHVyZTogYW55KSA9PlxyXG4gICAgICAgIG5vdGlmeU9uRmFpbHVyZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmVcclxuICAgICk7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbmVlID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkQXNzaWdub3IgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRSZXZpZXdlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE92ZXJzZWVyID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gdHJ1ZTtcclxuICAgIGlmIChwcm9ncmFtICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5hc3NpZ25lZT8ubGVuZ3RoICYmIHNlbGVjdGVkQXNzaWduZWU/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRBc3NpZ25lZSA9IHByb2dyYW1bMF0/LmFzc2lnbmVlPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkQXNzaWduZWVbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ucmV2aWV3ZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZFJldmlld2VyPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkUmV2aWV3ZXIgPSBwcm9ncmFtWzBdPy5yZXZpZXdlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZFJldmlld2VyWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWRPdmVyc2Vlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZE92ZXJzZWVyID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPdmVyc2VlclswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmVbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNWYWxpZEFzc2lnbmVlOiBpc1ZhbGlkQXNzaWduZWUsXHJcbiAgICAgIGlzVmFsaWRBc3NpZ25vcjogaXNWYWxpZEFzc2lnbm9yLFxyXG4gICAgICBpc1ZhbGlkUmV2aWV3ZXI6IGlzVmFsaWRSZXZpZXdlcixcclxuICAgICAgaXNWYWxpZE92ZXJzZWVyOiBpc1ZhbGlkT3ZlcnNlZXIsXHJcbiAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmU6IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgdHdvIHN0cmluZ3MgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBwcm9wZXJ0aWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb2dyYW1OYW1lIC0gc3RyaW5nIC0mZ3Q7IE5hbWUgb2YgdGhlIHByb2dyYW1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoaWxlUHJvZ3JhbV0gLSBzdHJpbmcgPSZndDsgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc3ViLXByb2dyYW1cclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBwcm9ncmFtSWQ6IDEsXHJcbiAgICogICBjaGlsZFByb2dyYW1JZDogMixcclxuICAgKiAgIGNhdGVnb3J5SWQ6ICcxLDInXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIGdldFByb2dyYW1JZChwcm9ncmFtTmFtZTogc3RyaW5nLCBjaGlsZVByb2dyYW0/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcihcclxuICAgICAgKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IHByb2dyYW1OYW1lXHJcbiAgICApO1xyXG4gICAgbGV0IHN1YlByb2dyYW07XHJcbiAgICBsZXQgc3ViUHJvZ3JhbUlkO1xyXG4gICAgbGV0IGNhdGVnb3J5SWQ7XHJcbiAgICBpZiAoY2hpbGVQcm9ncmFtPy5sZW5ndGggJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIHN1YlByb2dyYW0gPSBwcm9ncmFtWzBdPy5jaGlsZENhdGVnb3J5Py5maWx0ZXIoXHJcbiAgICAgICAgKHN1YlByb2dyYW06IGFueSkgPT4gc3ViUHJvZ3JhbT8ubmFtZSA9PT0gY2hpbGVQcm9ncmFtXHJcbiAgICAgICk7XHJcbiAgICAgIHN1YlByb2dyYW1JZCA9IHN1YlByb2dyYW0/Lmxlbmd0aCA/IHN1YlByb2dyYW1bMF0/LmlkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdWJQcm9ncmFtSWQgJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPVxyXG4gICAgICAgIHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKSArICcsJyArIHN1YlByb2dyYW1JZD8udG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSBpZiAocHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPSBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwcm9ncmFtSWQ6IHByb2dyYW0/Lmxlbmd0aCA/IHByb2dyYW1bMF0/LnByb2dyYW1JZCA6IHVuZGVmaW5lZCxcclxuICAgICAgY2hpbGRQcm9ncmFtSWQ6IHN1YlByb2dyYW1JZCxcclxuICAgICAgY2F0ZWdvcnlJZDogY2F0ZWdvcnlJZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcGRvd24uXHJcbiAgICogaXQgd2lsbCByZXR1cm4gZW1wbG95ZWUgaWQgaW4gdGhpcyBmb3JtICcxMjM0LDIzNDUnLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlSWRGcm9tR3JvdXAoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgZW1wSWQ6IGFueSA9IFtdO1xyXG4gICAgbGV0IGVtcGxveWVlX2lkOiBhbnkgPSBbXTtcclxuICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZW5FbGVtZW50Py5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgIGVtcElkID0gZW5FbGVtZW50Py5teV9tZW1iZXJfaWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGVtcElkPy5sZW5ndGgpIHtcclxuICAgICAgZW1wSWQ/LmZvckVhY2goKGlkOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHVzZXI/Lm15X21lbWJlcl9pZCA9PSBpZCkge1xyXG4gICAgICAgICAgICBlbXBsb3llZV9pZD8ucHVzaCh1c2VyPy5lbXBsb3llZV9pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcGxveWVlX2lkPy50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGl0ZW0gaXMgYSBncm91cCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSBhbnkgLSB0aGUgaXRlbSB0aGF0IGlzIGJlaW5nIGNoZWNrZWRcclxuICAgKi9cclxuICBpc0dyb3VwU2VsZWN0ZWQoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSk6IGFueSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0gJiZcclxuICAgICAgICAoaXRlbT8uaW5jbHVkZXMoJ1VzZXJzKScpIHx8IGl0ZW0/LmluY2x1ZGVzKCdVc2VyKScpKSAmJlxyXG4gICAgICAgIHR5cGVvZiBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZCA9PSAnb2JqZWN0J1xyXG4gICAgICApIHtcclxuICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXNHcm91cDtcclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2tcIiBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiID5cclxuICAgIDwhLSAtIG1haW4gY29udGFpbmVyIHN0YXJ0cyBoZXJlIC0gLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NwcmVhZHNoZWV0LW11bHRpcGxlLWNhdGVnb3J5LnN2Z1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDQ+WW91IGNhbiBlbnRydXN0IG11bHRpcGxlIHJlc3BvbnNpYmlsaXRpZXMgaW4ganVzdCB0d28gZWFzeSBzdGVwczo8L2g0PlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3XigJlyZSBnb29kIHRvIGdvITwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZG93bmxvYWRcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnTk9UX0RPV05MT0FESU5HJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIiB0eXBlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWI7PC9pPiBEb3dubG9hZCBUZW1wbGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgPGFwcC1saW5lLWxvYWRlciBbbG9hZGVySGVpZ2h0XT1cIicyJ1wiPjwvYXBwLWxpbmUtbG9hZGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFjOzwvaT5Eb3dubG9hZCBDb21wbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLWFnYWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+UmV0cnkgRG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRmlsZSB8fCBpc1dyb25nRm9ybWF0fHwgaXNGaWxlRW1wdHlcIlxyXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGFwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxyXG4gICAgW3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZF09XCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICBbZmlsZU5hbWVdPVwiZmlsZU5hbWVcIlxyXG4gICAgW2xvYWRlcl09XCJsb2FkZXJcIlxyXG4gICAgW2RlZmF1bHRPd25lcl09XCJkZWZhdWx0T3duZXJcIlxyXG4gICAgW3RhYlR5cGVdPVwidGFiVHlwZVwiXHJcbiAgICBbYnVsa1VwbG9hZF09XCJidWxrVXBsb2FkXCJcclxuICAgIChzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQpPVwic3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKClcIlxyXG4gICAgKHNlbGVjdGVkVGFiKT1cInNlbGVjdGVkVGFiKCRldmVudClcIlxyXG4gICAgKGNhbmNlbCk9XCJyZXNldCgpXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eVR5cGVdPVwiJ211bHRpVGFiJ1wiPlxyXG48L2FwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXc+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcblxyXG48aW5wdXQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImZpbGVWYWx1ZVwiIGlkPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBhY2NlcHQ9XCIueGxzeFwiIChjaGFuZ2UpPVwidXBsb2FkZWRGaWxlKCRldmVudClcIiBtdWx0aXBsZSAvPlxyXG48YXBwLXNtaWxleS1kaWFsb2ctaW5saW5lICpuZ0lmPVwic2hvd1NtaWxleVwiIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VcIiBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCIgKGFjdGlvbik9XCJhY3Rpb24oJGV2ZW50KVwiIChjbG9zZVNtaWxleSk9XCJjbG9zZVNtaWxleSgkZXZlbnQpXCI+PC9hcHAtc21pbGV5LWRpYWxvZy1pbmxpbmU+Il19
2183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQiwyQkFBMkIsR0FDNUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFZckQsTUFBTSxPQUFPLHlDQUF5QztJQXNCcEQsSUFB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QUFRLEVBQzFDO2dCQUNBLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDaEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBcHhGVSx5Q0FBeUM7bUdBQXpDLHlDQUF5Qyw0Y0M5Q3RELCtxRkErQ2dNOzs0RkREbkwseUNBQXlDO2tCQVJyRCxTQUFTOytCQUNFLDBDQUEwQztnUUFRMUMsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFnQm9CLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxjQUFjO2dCQUdaLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQW1GRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZFJpc2tTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYWRkLXJpc2suc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5QnVsa1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9mcmVxdWVuY3kuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZnJhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaWZyYW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSRVNQT05TSUJJTElUWSB9IGZyb20gJy4uL2NvbnN0YW50cy94bHN4LmNvbnN0YW50JztcclxuaW1wb3J0IHtcclxuICBBU1NJR05FRV9UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgRlJFUVVFTkNZX0RST1BET1dOX0xJU1QsXHJcbiAgRlVMTF9NT05USF9OQU1FUyxcclxuICBOT05fQkxPQ0tJTkdfRFJPUERPV05fRklFTERTLFxyXG4gIFBST0dSQU1fVFlQRV9EUk9QRE9XTl9MSVNULFxyXG4gIFJDX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBSRVZJRVdFUl9UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgUklTS19DTEFTU19MSVNULFxyXG4gIFZBTElEQVRJT05fTUVTU0FHRVMsXHJcbiAgVkFMSURBVElPTl9TRVZFUklUWSxcclxuICBZRVNfTk9fRFJPUERPV05fTElTVCxcclxuICBkdWVEYXRlRGF5T3V0T2ZSYW5nZU1lc3NhZ2UsXHJcbn0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc3BvbnNpYmlsaXR5JztcclxuaW1wb3J0IHsgUkVHRVggfSBmcm9tICcuLi9jb25zdGFudHMvcmVnaXguY29uc3RhbnRzJztcclxuXHJcbnR5cGUgQU9BID0gYW55W11bXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2Zvcm1zLmxlc3MnLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5V2l0aFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvcHVsYXRlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBpc05vdGlmaWNhdGlvblBlbmRpbmcgPSAwO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcXVlcnlQYXJhbTogc3RyaW5nID0gJyc7XHJcbiAgcmVjZW50UmVzcG9uc2liaWxpdHlVcmw6IGFueSA9IHtcclxuICAgIGJ5UmVzcG9uc2liaWxpdGllczogeyB0eXBlOiBbJ3JlY2VudF9yZXNwb25zaWJpbGl0aWVzJ10sIHN1YlR5cGU6IFsnQ0MnXSB9LFxyXG4gICAgYnlTdGF0dXM6IHsgdHlwZTogW10sIHN1YlR5cGU6IFtdIH0sXHJcbiAgICBmaWx0ZXJPYmplY3Q6IHtcclxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IFtdLFxyXG4gICAgICBlbnRydXN0ZWRCeTogW10sXHJcbiAgICAgIGVudHJ1c3RlZFRvOiBbXSxcclxuICAgICAgcmlza0lkczogW10sXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IFtdLFxyXG4gICAgfSxcclxuICAgIHRpbWVQZXJpb2REZXRhaWxzOiB7IHR5cGU6ICcnLCBzZWxlY3RlZFBlcmlvZDogJycsIHNlbGVjdGVkWWVhcjogJycgfSxcclxuICAgIHN0YXR1czogJycsXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCd1cGxvYWRlZEZpbGUnKSBzZXQgdXBsb2FkZWRGaWxlRGF0YShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMudXBsb2FkZWRGaWxlKGRhdGEpO1xyXG4gIH1cclxuICBASW5wdXQoKSBvcmdEZXRhaWxzITogYW55O1xyXG4gIEBJbnB1dCgpIGZlYXR1cmUhOiBhbnk7XHJcblxyXG4gIHVybCA9XHJcbiAgICAncT17XCJieVJlc3BvbnNpYmlsaXRpZXNcIjp7XCJ0eXBlXCI6W1wicmVzcG9uc2liaWxpdGllc19pbl9xdWV1ZVwiXSxcInN1YlR5cGVcIjpbXCJDQ1wiXX0sXCJieVN0YXR1c1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltdfSxcImZpbHRlck9iamVjdFwiOntcInJlc3BvbnNpYmlsaXR5Q2VudGVyXCI6W10sXCJlbnRydXN0ZWRCeVwiOltdLFwiZW50cnVzdGVkVG9cIjpbXSxcInJpc2tJZHNcIjpbXSxcInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnlcIjpbXX0sXCJ0aW1lUGVyaW9kRGV0YWlsc1wiOntcInR5cGVcIjpcIlwiLFwic2VsZWN0ZWRQZXJpb2RcIjpcIlwiLFwic2VsZWN0ZWRZZWFyXCI6XCJcIn0sXCJzdGF0dXNcIjpcIlwifSc7XHJcbiAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBoZWFkZXI6IFtdLFxyXG4gICAgcmVwb3J0czogW10sXHJcbiAgfTtcclxuICB0YWJUeXBlOiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgdGFiSW5kZXg6IGFueSA9IHtcclxuICAgIGZyZXF1ZW5jeTogMCxcclxuICAgIG9uZ29pbmc6IDEsXHJcbiAgICBvbkNvbXBsZXRpb246IDIsXHJcbiAgfTtcclxuXHJcbiAgYnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbmdvaW5nOiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICB0ZW1wbGF0ZUluZm86IGFueSA9IHtcclxuICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICByY0xpc3Q6IFtdLFxyXG4gICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgIHJldmlld2VyTGlzdDogW10sXHJcbiAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICBwZW9wbGVEcm9wZG93bk5hbWVzOiBbXSxcclxuICAgIG1lbWJlcklkOiAnJyxcclxuICB9O1xyXG4gIGlzTG9hZGVyID0gZmFsc2U7XHJcbiAgc2hvd0NhdGVnb3J5TGlzdCA9IGZhbHNlO1xyXG4gIHRlbXBsYXRlRG93bmxvYWRlZCA9IGZhbHNlO1xyXG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIGlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICBpc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgZmlsZU5hbWU6IGFueTtcclxuICBkYXRhOiBhbnk7XHJcbiAgc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgdXBsb2FkZWRGaWxlczogYW55ID0gW107XHJcbiAgZmlsZVJlc3BvbnNlOiBhbnkgPSBbXTtcclxuICBmaWxlVmFsdWU6IGFueTtcclxuICBtZW1iZXJJZCA9IDA7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIGVycm9yTWVzc2FnZSA9ICcgaW52YWxpZCBmaWxlIGVycm9yJztcclxuICBkb3dubG9hZFN0YXR1czogc3RyaW5nID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcclxuICBkZWZhdWx0T3duZXIgPSAnJztcclxuICBzbWlsZXlNZXNzYWdlID0gYFlvdSdyZSBBbGwgU2V0ISBXZSdyZSBwcm9jZXNzaW5nIHlvdXIgcmVxdWVzdCBhbmQgeW91IHdpbGwgYmUgbm90aWZpZWQgdmlhIGVtYWlsIHVwb24gY29tcGxldGlvbi5gO1xyXG4gIGFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGJ1dHRvblRleHQ6ICdFbnRydXN0IE1vcmUgUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcclxuICAgICAgaWQ6ICdhZGRNb3JlJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGJ1dHRvblRleHQ6IHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nXHJcbiAgICAgICAgPyAnVmlldyBSZXNwb25zaWJpbGl0aWVzIEluIFF1ZXVlJ1xyXG4gICAgICAgIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgIGNsYXNzOiAnYmx1ZS1idG4nLFxyXG4gICAgICBpZDogJ3ZpZXcnLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgcmlza0NsYXNzRW5hYmxlZDogYW55O1xyXG4gIHVzZXJJbmZvITogYW55O1xyXG4gIHJlc3BvbnNpYmlsaXR5RGF0YSE6IGFueTtcclxuICBASW5wdXQoKSBmZWF0dXJlZmxhZzogYW55O1xyXG4gIGZmQnVsa1VwbG9hZE9wdGltaXphdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFJFU1BPTlNJQklMSVRZID0gUkVTUE9OU0lCSUxJVFk7XHJcblxyXG4gIGlzRGF5SW52YWxpZCA9IGZhbHNlO1xyXG4gIGlzRGF0ZUZvcm1hdEludmFsaWQgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmlza1NlcnZpY2U6IEFkZFJpc2tTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lCdWxrU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgaWZyYW1lU2VydmljZTogSWZyYW1lU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcl9vYmpfaWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlci51aWQ7XHJcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnVzZXI7XHJcbiAgICB0aGlzLmRlZmF1bHRPd25lciA9IHRoaXMudXNlckluZm9cclxuICAgICAgPyB0aGlzLnVzZXJJbmZvLm5hbWUgKyAnICgnICsgdGhpcy51c2VySW5mby5lbWFpbCArICcpJ1xyXG4gICAgICA6ICcnO1xyXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25EZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJpc2tDbGFzc0VuYWJsZWQgPSByZXMuZW5hYmxlX3Jpc2tjbGFzcztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mZkJ1bGtVcGxvYWRPcHRpbWl6YXRpb24gPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcclxuICAgICAgJ2ZmX2J1bGtfdXBsb2FkX29wdGltaXphdGlvbidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyQnJvd3NlRmlsZSgpIHtcclxuICAgIGNvbnN0IGdldEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUlucHV0Jyk7XHJcbiAgICBpZiAoZ2V0RmlsZSkge1xyXG4gICAgICBnZXRGaWxlLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFVzZXJEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmdfZmxhZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWRGaWxlKGV2ZW50OiBhbnksIHRhYlR5cGU/OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgICBjYXRlZ29yeUxpc3Q6IFtdLFxyXG4gICAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgICAgYXNzaWduZWVzTGlzdDogW10sXHJcbiAgICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICAgICAgcGVvcGxlRHJvcGRvd25OYW1lczogW10sXHJcbiAgICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xyXG4gICAgICBpZiAocmVmZXJlbmNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdLm5hbWU7XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKGV2ZW50LnRhcmdldC5maWxlcyk7XHJcbiAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZlbnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjdXJseVxyXG4gICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKTtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFhMU1guV29ya0Jvb2sgPSBYTFNYLnJlYWQoYnN0ciwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbUkVTUE9OU0lCSUxJVFkuc2hlZXRJbmRleC5mcmVxdWVuY3lSZXNwb25zaWJpbGl0eV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXQyOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXgub25Hb2luZ1Jlc3BvbnNpYmlsaXR5XTtcclxuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXguZGF0YV07XHJcbiAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXRSZXBvcnQyOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1tzaGVldDJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcclxuICAgICAgICBjb25zdCB0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih0ZW1wRGF0YSwgeyBoZWFkZXI6IDEgfSkgYXMgQU9BO1xyXG4gICAgICAgIGNvbnN0IHRlbXBMaXN0ID0gdERhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDBcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdCk7XHJcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHNoZWV0Py50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDIsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXHJcbiAgICogQHBhcmFtIHdzIC0gWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcclxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICB9O1xyXG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICByYXc6IGZhbHNlLFxyXG4gICAgfSkgYXMgQU9BO1xyXG4gICAgbGV0IGRhdGEgPSBzaGVldFZhbHVlLmZpbHRlcigocmVzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGlzVW5kZWZpbmVkID0gJyc7XHJcbiAgICAgIHJlcy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZCArIGVsO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHNoZWV0VmFsdWVbMl0gJiYgc2hlZXRWYWx1ZVsyXVsxXSA9PT0gJ1Byb2dyYW0nKSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDkgJiYgcmVzWzhdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gNiAmJiByZXNbNV0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcChkYXRhWzJdKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nID0gY2xvbmVEZWVwKGRhdGFbM10pO1xyXG4gICAgY29uc3QgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gdGhpcy5kZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nXHJcbiAgICApO1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9XHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgIGRhdGEgPSBkYXRhLnNsaWNlKDUpO1xyXG4gICAgaWYgKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgID8gdHJ1ZVxyXG4gICAgICAgIDogZmFsc2U7XHJcbiAgICAgIGlmIChyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID1cclxuICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25nb2luZycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25Db21wbGV0aW9uJyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY2hlY2tFbXB0eUZpbGUoZGF0YSk7XHJcbiAgICAvKiBDaGVja2luZyBpZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWYgaXQgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgbm90XHJcbiAgICBlbXB0eSBpdCB3aWxsIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHRoZSBjb3JyZWN0IGZpbGUsIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGxcclxuICAgIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGwgY2FsbCB0aGUgZmlsZVVwbG9hZCgpIGZ1bmN0aW9uLiAqL1xyXG4gICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKidcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlVXBsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhIGZyZXF1ZW5jeSBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIGZyZXF1ZW5jeSBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBmcmVxdWVuY3kuIElmIG5vdCwgY2hlY2tcclxuICAgKiBpZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uZ29pbmcgb2JqZWN0IHdpdGggYSByZXBvcnRzIGFycmF5LCBzZXQgdGhlXHJcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBvbmdvaW5nIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uZ29pbmcuIElmIG5vdCwgY2hlY2sgaWZcclxuICAgKiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uQ29tcGxldGlvbiBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uQ29tcGxldGlvbiBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBvbkNvbXBsZXRpb24uIElmIG5vdCxcclxuICAgKiByZXR1cm4gdHJ1ZS5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGNoZWNrRW1wdHlGaWxlKGRhdGE/OiBhbnkpIHtcclxuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnZnJlcXVlbmN5JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbmdvaW5nJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uO1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnb25Db21wbGV0aW9uJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzRW1wdHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRW1wdHk7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlV2l0aEN1cnJlbnREYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBtb250aE5hbWVzID0gW1xyXG4gICAgICB7IHZhbHVlOiAxLCBtb250aDogJ0phbicgfSxcclxuICAgICAgeyB2YWx1ZTogMiwgbW9udGg6ICdGZWInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDMsIG1vbnRoOiAnTWFyJyB9LFxyXG4gICAgICB7IHZhbHVlOiA0LCBtb250aDogJ0FwcicgfSxcclxuICAgICAgeyB2YWx1ZTogNSwgbW9udGg6ICdNYXknIH0sXHJcbiAgICAgIHsgdmFsdWU6IDYsIG1vbnRoOiAnSnVuJyB9LFxyXG4gICAgICB7IHZhbHVlOiA3LCBtb250aDogJ0p1bCcgfSxcclxuICAgICAgeyB2YWx1ZTogOCwgbW9udGg6ICdBdWcnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDksIG1vbnRoOiAnU2VwJyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMCwgbW9udGg6ICdPY3QnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDExLCBtb250aDogJ05vdicgfSxcclxuICAgICAgeyB2YWx1ZTogMTIsIG1vbnRoOiAnRGVjJyB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoIShkYXkgfHwgbW9udGgpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbW9udGhGb3JtYXRSZWdleCA9IFJFR0VYLk1PTlRIO1xyXG4gICAgICBpZiAoIW1vbnRoRm9ybWF0UmVnZXgudGVzdChtb250aCkpIHtcclxuICAgICAgICB0aGlzLmlzRGF0ZUZvcm1hdEludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZighKGRheSA+IDAgJiYgZGF5IDwgMzIpKSB7XHJcbiAgICAgICAgdGhpcy5pc0RheUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9udGhBbmRZZWFyID0gbW9udGguc3BsaXQoXCInXCIpO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KFxyXG4gICAgICAgIGRheSArICctJyArIG1vbnRoQW5kWWVhclswXSArICctJyArIDIwICsgbW9udGhBbmRZZWFyWzFdICsgJyAwMDowMDowMCcsXHJcbiAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcclxuICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcclxuICAgICAgaWYgKHN0YXJ0RGF0ZSA9PSAnSW52YWxpZCBkYXRlJykge1xyXG4gICAgICAgIHRoaXMuaXNEYXlJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge30sIDUpO1xyXG4gICAgICBjb25zdCBkYXRlX3ZhbHVlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY3VycmVudERhdGU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICE9XHJcbiAgICAgICAgICBkYXRlX3ZhbHVlPy50b0pTT04oKT8uc3BsaXQoJ1QnKVswXSAmJlxyXG4gICAgICAgIGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaXNQYXN0RGF0ZShkYXk6IGFueSwgbW9udGg6IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY29uc3QgcmVwb3J0RGF0ZSA9IG5ldyBEYXRlKGRheSArIG1vbnRoLnNwbGl0KFwiJ1wiKSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxyXG4gICAgICAgIHR5cGVvZiBtb250aCAhPT0gJ251bWJlcidcclxuICAgICAgICAgID8gbW9udGhOYW1lcy5maWx0ZXIoKHgpID0+IHgubW9udGggPT09IG1vbnRoPy5zdWJzdHJpbmcoMCwgMykpWzBdXHJcbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcclxuICAgICAgICAgIDogbW9udGhcclxuICAgICAgKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXREYXRlKE51bWJlcihkYXkpKTtcclxuICAgICAgaWYgKGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgRW50cnVzdCBSZXNwb25zaWJpbGl0aWVzLSR7ZG93bmxvYWREYXRlWzJdfS0ke2Rvd25sb2FkRGF0ZVsxXX0tJHtkb3dubG9hZERhdGVbM119Lnhsc3hgO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRSZXNwb25zaWJpbGl0eVRlbXBsYXRlKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKFxyXG4gICAgICAgICAgICAgIGRhdGEuYm9keSxcclxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24veGxzeCcsXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXlsb2FkOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZDogYW55ID0gW107XHJcbiAgICBsZXQgdmFsaWRSZXNwb25zaWJpbGl0aWVzID0gMDtcclxuICAgIHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkID1cclxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/LmNvbmNhdChcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHMsXHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHNcclxuICAgICAgKTtcclxuICAgICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/LmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcG9ydD8uaXNWYWxpZCkge1xyXG4gICAgICAgICAgdmFsaWRSZXNwb25zaWJpbGl0aWVzICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBvcmlnaW5hbEZpbGVuYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8ub3JpZ2luYWxfZmlsZW5hbWUsXHJcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZVJlc3BvbnNlWzBdPy5maWxlbmFtZSxcclxuICAgICAgICBmaWxlUGF0aDogdGhpcy5maWxlUmVzcG9uc2VbMF0/LmZpbGVwYXRoLFxyXG4gICAgICAgIHRvdGFsUmVzcG9uc2liaWxpdHlDb3VudDogcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCxcclxuICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXR5Q291bnQ6IHZhbGlkUmVzcG9uc2liaWxpdGllcyxcclxuICAgICAgfTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmFkZEJ1bGtSZXNwb25zaWJpbGl0eShwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0V29ya2Zsb3coKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRXb3JrZmxvdygpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHR5cGU6ICdzdWJtaXQnIH07XHJcbiAgICBjb25zdCB0YXJnZXRPcmlnaW4gPSB0aGlzLmdldE9yaWdpbigpO1xyXG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPcmlnaW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGxldCByY09iaiA9IHsgbmFtZTogJycsIHJjSWQ6IDAsIHBhcmVudElkczogW10gfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmNfZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lLnNwbGl0KCcgW1dJVEhJTl0gJylbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgIHJjSWQ6IHJjX2VsZW1lbnQucmNfaWQsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWRzOiByY19lbGVtZW50LnBhcmVudElkcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmNPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHJldmlld2VyRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmV2aWV3ZXJFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJldmlld2VyRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IHJldmlld2VyRWxlbWVudC5teV9tZW1iZXJfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmV2aWV3ZXJPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25vcic6XHJcbiAgICAgICAgbGV0IGFzc2lnbm9yT2JqID0geyBuYW1lOiAnJywgbWVtYmVySWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QuZm9yRWFjaCgoYXNzaWdub3JFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChhc3NpZ25vckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgYXNzaWdub3JPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogYXNzaWdub3JFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGFzc2lnbm9yRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICBtZW1iZXJJZDogYXNzaWdub3JFbGVtZW50Lm1lbWJlcl9pZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYyc6XHJcbiAgICAgICAgbGV0IGNjT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY0VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNjRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY0VsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY0VsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRmFpbHVyZSc6XHJcbiAgICAgICAgbGV0IGNjZk9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NmRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY2ZPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjZkVsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjZkVsZW1lbnQuZW1haWwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XHJcbiAgICAgICAgbGV0IGVtcElkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGVtcElkID0gZW5FbGVtZW50Lm1lbWJlcl9pZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZW1wSWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdwYXJlbnRSZXNwb25zaWJpbGl0eSc6XHJcbiAgICAgICAgbGV0IGlkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5wYXJlbnRSZXNwb25zaWJpbGl0eS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNpYmlsaXR5Py5uYW1lID09PSBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgaWQgPSByZXNwb25zaWJpbGl0eS5pZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmlza19jbGFzcyc6XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gJ0xvdycpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTG93LU1lZGl1bScpIHtcclxuICAgICAgICAgIHJldHVybiAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTWVkaXVtLUhpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gMztcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT0gJ0hpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gNDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5idWxrVXBsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbmdvaW5nOiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgICAgb25Db21wbGV0aW9uOiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgcGVvcGxlRHJvcGRvd25OYW1lczogW10sXHJcbiAgICAgIG1lbWJlcklkOiAnJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5LmVtaXQoKTtcclxuICB9XHJcbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnYWRkTW9yZSc6XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3UmVzcG9uc2liaWxpdGllcygpOiB2b2lkIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnL2NvbXBsaWFuY2VvcHMvcmVzcG9uc2liaWxpdGllcy8nO1xyXG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHVybFN1YnN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHVybFN1YnN0cmluZztcclxuICAgIH1cclxuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodXJsLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vIFVwbG9hZCBGaWxlIHRvIHRoZSBzZXJ2ZXJcclxuICBmaWxlVXBsb2FkKCkge1xyXG4gICAgdGhpcy5maWxlUmVzcG9uc2UgPSBbXTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBmaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzWzBdWzBdO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdzb3VyY2VmaWxlJywgZmlsZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2Rlc3RpbmF0aW9uJywgJ2J1bGt1cGxvYWQvZW50cnVzdC8nICsgdGhpcy51c2VySW5mby5lbWFpbCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5maWxlVXBsb2FkKGZvcm1EYXRhKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmZpbGVuYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVSZXNwb25zZS5wdXNoKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXHJcbiAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcclxuICAgICAgICAgICdhbGVydCdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdDogYW55KSB7XHJcbiAgICBpZiAodGVtcExpc3RbMF0gIT09IHVuZGVmaW5lZCAmJiB0ZW1wTGlzdFswXVtSRVNQT05TSUJJTElUWS51c2VySW5kZXguY3VycmVudFVzZXJdKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bUkVTUE9OU0lCSUxJVFkudXNlckluZGV4LmN1cnJlbnRVc2VyXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0ZW1wTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IHJlZ3VsYXRpb25zID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgucmVndWxhdGlvbnMsIDEpO1xyXG4gICAgICBjb25zdCBzdGFuZGFyZHMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5zdGFuZGFyZHMsIDIpO1xyXG4gICAgICBjb25zdCBpbnRlcm5hbENvbnRyb2xzID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXguaW50ZXJuYWxDb250cm9scywgMyk7XHJcbiAgICAgIGNvbnN0IG90aGVycyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4Lm90aGVycywgMCk7XHJcblxyXG4gICAgICBpZihyZWd1bGF0aW9ucykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKHJlZ3VsYXRpb25zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoc3RhbmRhcmRzKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goc3RhbmRhcmRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoaW50ZXJuYWxDb250cm9scykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKGludGVybmFsQ29udHJvbHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihvdGhlcnMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChvdGhlcnMpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbOV0gaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eS4gSWYgaXQgaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgaXQgaXNcclxuICAgICAgcHVzaGluZyB0aGUgZWxlbWVudFs5XSAoUkMpIHRvIHRoZSBhcnJheSAocmNMaXN0KS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmNJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcmMgPSB7XHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJjSW5kZXgubmFtZV0sXHJcbiAgICAgICAgICByY19pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yY0luZGV4LmlkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5wdXNoKHJjKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXNzaWduZWVcclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdKSkge1xyXG4gICAgICAgIHRoaXMuYWRkUGVvcGxlRHJvcGRvd25OYW1lKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWduZWVJbmRleC5uYW1lXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWduZWVJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcGVvcGxlID0gdGhpcy5wYXJzZVBlb3BsZUxpc3RDZWxsKFxyXG4gICAgICAgICAgZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhc3NpZ25lZSA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogcGVvcGxlLm5hbWVBbmRFbWFpbCxcclxuICAgICAgICAgIG5hbWU6IHBlb3BsZS5uYW1lLFxyXG4gICAgICAgICAgZW1haWw6IHBlb3BsZS5lbWFpbCxcclxuICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4LmlkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QucHVzaChhc3NpZ25lZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJldmlld2VyXHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IHBlb3BsZSA9IHRoaXMucGFyc2VQZW9wbGVMaXN0Q2VsbChcclxuICAgICAgICAgIGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5uYW1lXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXIgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IHBlb3BsZS5uYW1lQW5kRW1haWwsXHJcbiAgICAgICAgICBuYW1lOiBwZW9wbGUubmFtZSxcclxuICAgICAgICAgIGVtYWlsOiBwZW9wbGUuZW1haWwsXHJcbiAgICAgICAgICBlbXBsb3llZV9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4LmlkXSxcclxuICAgICAgICAgIG15X21lbWJlcl9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4LmlkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJldmlld2VyTGlzdC5wdXNoKHJldmlld2VyKTtcclxuICAgICAgfVxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFsyXSBpcyBub3QgZW1wdHkgYW5kIG5vdCBlcXVhbCB0byBzcGFjZS4gSWYgaXQgaXMgbm90IGVtcHR5IGFuZCBub3RcclxuICAgICAgZXF1YWwgdG8gc3BhY2UsIGl0IHdpbGwgY3JlYXRlIGFuIG9iamVjdCBhbmQgcHVzaCBpdCB0byB0aGUgYXNzaWdub3JzTGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm5hbWVdKSkge1xyXG4gICAgICAgIHRoaXMuYWRkUGVvcGxlRHJvcGRvd25OYW1lKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSkpIHtcclxuICAgICAgICAgIHRoaXMuYWRkUGVvcGxlRHJvcGRvd25OYW1lKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5lbWFpbF0pO1xyXG4gICAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoXHJcbiAgICAgICAgICAgIGAke1N0cmluZyhlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0pLnRyaW0oKX0gKCR7U3RyaW5nKFxyXG4gICAgICAgICAgICAgIGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5lbWFpbF1cclxuICAgICAgICAgICAgKS50cmltKCl9KWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbm9yID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0sXHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgLy8gZW1haWw6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5tZW1iZXJfaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5wdXNoKGFzc2lnbm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29sbGVjdEVtYWlsRGlzcGxheU5hbWVzRnJvbVNoZWV0KHRlbXBMaXN0KTtcclxuXHJcbiAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcyBhbmQgYXR0YWNoaW5nIHRoZW0gdG8gdGhlaXIgcGFyZW50IHByb2dyYW0gKi9cclxuICAgIGlmICh0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QuZm9yRWFjaCgocHJvZ3JhbTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZENhdGVnb3J5OiB7IG5hbWU6IGFueTsgaWQ6IGFueSB9W10gPSBbXTtcclxuICAgICAgICB0aGlzLmdldFByb2dyYW1DYXRlZ29yeUlkQ29sdW1ucyh0ZW1wTGlzdFswXSwgcHJvZ3JhbT8ucHJvZ3JhbUlkKS5mb3JFYWNoKFxyXG4gICAgICAgICAgKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IHRydWU7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wTGlzdFtqXSAmJiB0ZW1wTGlzdFtqXVtpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ2F0ZWdvcnkucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHRlbXBMaXN0W2pdW2luZGV4IC0gMV0sXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0ZW1wTGlzdFtqXVtpbmRleF0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpbGQgY2F0ZWdvcmllcyBsaXZlIGluIGxhdGVyIERhdGEtc2hlZXQgY29sdW1ucyB3aG9zZSBoZWFkZXIgaXMgdGhlIHByb2dyYW0gaWQuXHJcbiAgICogU2tpcCB0aGUgcHJvZ3JhbSBsaXN0aW5nIGlkIGNvbHVtbnMgKDIyLTI5IGFyZWEpIOKAlCB0aG9zZSBzYW1lIGlkcyBhbHNvIGFwcGVhciB0aGVyZVxyXG4gICAqIGZvciB0aGUgZmlyc3QgcHJvZ3JhbSBvZiBlYWNoIHR5cGUsIHdoaWNoIHdvdWxkIGF0dGFjaCB0aGUgd3JvbmcgbmFtZXMuXHJcbiAgICovXHJcbiAgZ2V0UHJvZ3JhbUNhdGVnb3J5SWRDb2x1bW5zKGhlYWRlclJvdzogYW55W10gPSBbXSwgcHJvZ3JhbUlkOiBhbnkpOiBudW1iZXJbXSB7XHJcbiAgICBpZiAocHJvZ3JhbUlkID09IG51bGwgfHwgcHJvZ3JhbUlkID09PSAnJykge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9ncmFtTGlzdGluZ0lkQ29sdW1ucyA9IG5ldyBTZXQoW1xyXG4gICAgICBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgucmVndWxhdGlvbnMuaWQsXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5zdGFuZGFyZHMuaWQsXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5pbnRlcm5hbENvbnRyb2xzLmlkLFxyXG4gICAgICBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgub3RoZXJzLmlkLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBpbmRleGVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgKGhlYWRlclJvdyB8fCBbXSkuZm9yRWFjaCgoY2VsbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmICghcHJvZ3JhbUxpc3RpbmdJZENvbHVtbnMuaGFzKGluZGV4KSAmJiBjZWxsID09IHByb2dyYW1JZCkge1xyXG4gICAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGluZGV4ZXM7XHJcbiAgfVxyXG5cclxuICBwYXJzZVBlb3BsZUxpc3RDZWxsKHZhbHVlOiBhbnkpOiB7XHJcbiAgICBuYW1lQW5kRW1haWw6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgfSB7XHJcbiAgICBjb25zdCBuYW1lQW5kRW1haWwgPSB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGNvbnN0IGVtYWlsTWF0Y2ggPSBuYW1lQW5kRW1haWwubWF0Y2goL1xcKChbXildKkBbXildKilcXClcXHMqJC8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZUFuZEVtYWlsLFxyXG4gICAgICBuYW1lOiBuYW1lQW5kRW1haWwucmVwbGFjZSgvXFxzKlxcKFteKV0qQFteKV0qXFwpXFxzKiQvLCAnJykudHJpbSgpIHx8IG5hbWVBbmRFbWFpbCxcclxuICAgICAgZW1haWw6IGVtYWlsTWF0Y2ggPyBlbWFpbE1hdGNoWzFdLnRyaW0oKSA6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFkZFBlb3BsZURyb3Bkb3duTmFtZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZUluZm8ucGVvcGxlRHJvcGRvd25OYW1lcykge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzID0gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XHJcbiAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSB0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzLnNvbWUoXHJcbiAgICAgIChleGlzdGluZzogc3RyaW5nKSA9PiB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUoZXhpc3RpbmcpID09PSB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUobmFtZSlcclxuICAgICk7XHJcbiAgICBpZiAoIWFscmVhZHlBZGRlZCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzLnB1c2gobmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2xsZWN0RW1haWxEaXNwbGF5TmFtZXNGcm9tU2hlZXQodGVtcExpc3Q6IGFueVtdID0gW10pOiB2b2lkIHtcclxuICAgICh0ZW1wTGlzdCB8fCBbXSkuZm9yRWFjaCgocm93OiBhbnlbXSkgPT4ge1xyXG4gICAgICAocm93IHx8IFtdKS5mb3JFYWNoKChjZWxsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY2VsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBTdHJpbmcoY2VsbCk7XHJcbiAgICAgICAgaWYgKC9cXChbXildKkBbXildKlxcKS8udGVzdCh0ZXh0KSkge1xyXG4gICAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUodGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudDogYW55LCBpbmRleDogYW55LCB0eXBlOiBudW1iZXIpIHtcclxuICAgIGlmKGVsZW1lbnRbaW5kZXguaWRdICYmIHR5cGVvZiBlbGVtZW50W2luZGV4LmlkXSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFtpbmRleC5uYW1lXSxcclxuICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbaW5kZXguaWRdLFxyXG4gICAgICAgIHByb2dyYW1UeXBlOiB0eXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gZXZlbnQsIHdoaWNoIGlzIGEgc3RyaW5nLCBhbmQgdGhlbiBpdCBzZXRzIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGJ1bGtVcGxvYWQgdmFyaWFibGUsIHdoaWNoIGlzIGFuIG9iamVjdCwgYW5kIHRoZW4gaXQgYWNjZXNzZXMgdGhlIHByb3BlcnR5IG9mXHJcbiAgICogdGhhdCBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBldmVudCBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBTbyBpZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdmcmVxdWVuY3knLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdvbmdvaW5nJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoZSBvbmdvaW5nIHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uQ29tcGxldGlvbicsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGUgb25Db21wbGV0aW9uIHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIHN0cmluZyAtIHRoZSBldmVudCB0aGF0IGlzIGVtaXR0ZWQgZnJvbSB0aGUgY2hpbGQgY29tcG9uZW50IChmcmVxdWVuY3kgfCBvbmdvaW5nIHwgb25Db21wbGV0aW9uKVxyXG4gICAqL1xyXG4gIHNlbGVjdGVkVGFiKGV2ZW50OiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nKSB7XHJcbiAgICB0aGlzLnRhYlR5cGUgPSBldmVudDtcclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnZnJlcXVlbmN5JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvbmdvaW5nJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlY3RzIHRoZSBmb3VyIGZyZXF1ZW5jeSBjb2x1bW5zIGFkZGVkIHRvIHRoZSBsYXRlc3QgeGxzeCB0ZW1wbGF0ZTpcclxuICAgKiBEdWUgVGltZSwgRW5kcyBBZnRlciBPY2N1cnJlbmNlcywgRW5kcyBCeSBEYXRlIChEYXkpLCBFbmRzIEJ5IERhdGUgKE1vbnRoKS5cclxuICAgKiBPbGRlciB0ZW1wbGF0ZXMgd2l0aG91dCB0aGVzZSBjb2x1bW5zIGtlZXAgdGhlIG9yaWdpbmFsIGNvbHVtbiBtYXBwaW5nLlxyXG4gICAqL1xyXG4gIGRldGVjdEV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhoZWFkZXI6IGFueVtdID0gW10sIHN1YkhlYWRpbmc6IGFueVtdID0gW10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNlbGxzID0gWy4uLihoZWFkZXIgfHwgW10pLCAuLi4oc3ViSGVhZGluZyB8fCBbXSldO1xyXG4gICAgcmV0dXJuIGNlbGxzLnNvbWUoKGNlbGw6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGNlbGwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjZWxsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2R1ZSB0aW1lJykgfHxcclxuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdyZXNwb25zaWJpbGl0eSBlbmRzIGFmdGVyJykgfHxcclxuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdyZXNwb25zaWJpbGl0eSBlbmRzIGJ5IGRhdGUnKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1hcHMgZnJlcXVlbmN5IGNvbHVtbnMgd2hlbiB0aGUgdXBsb2FkZWQgZmlsZSBpbmNsdWRlcyB0aGUgZm91ciBuZXcgZmllbGRzLFxyXG4gICAqIHNvIGxhdGVyIGNvbHVtbnMgKFJDLCByZXZpZXdlciwgZXRjLikgc3RheSBhbGlnbmVkLiBPbmdvaW5nL29uQ29tcGxldGlvbiBhcmUgdW5jaGFuZ2VkLlxyXG4gICAqL1xyXG4gIGFwcGx5RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKG9iajogYW55LCByZXBvcnQ6IGFueSwgaXNQcm9ncmFtOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgIG9iai5kdWVUaW1lID0gcmVwb3J0WzExXTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5V2luZG93ID0gcmVwb3J0WzEyXTtcclxuICAgICAgb2JqLmZhaWxlZEFmdGVyID0gcmVwb3J0WzEzXTtcclxuICAgICAgb2JqLmVuZHNBZnRlck9jY3VycmVuY2VzID0gcmVwb3J0WzE0XTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVEYXkgPSByZXBvcnRbMTVdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZU1vbnRoID0gcmVwb3J0WzE2XTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5Q2VudGVyID0gcmVwb3J0WzE3XTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9IHJlcG9ydFsxOF07XHJcbiAgICAgIG9iai5yZXBvcnRDbGFzcyA9IHJlcG9ydFsxOV07XHJcbiAgICAgIG9iai5vYmplY3RpdmUgPSByZXBvcnRbMjBdO1xyXG4gICAgICBvYmoubm90ZXMgPSByZXBvcnRbMjFdO1xyXG4gICAgICBvYmouaXNGb3JtYXQgPSByZXBvcnRbMjJdO1xyXG4gICAgICBvYmouZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkgPSByZXBvcnRbMjNdO1xyXG4gICAgICBvYmouZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID0gcmVwb3J0WzI0XTtcclxuICAgICAgb2JqLnJldmlld2VyID0gcmVwb3J0WzI1XTtcclxuICAgICAgb2JqLnJldmlld2VyVHlwZSA9IHJlcG9ydFsyNl07XHJcbiAgICAgIG9iai5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluID0gcmVwb3J0WzI3XTtcclxuICAgICAgb2JqLnJldmlld1dpbGxCZUZhaWxlZEFmdGVyID0gcmVwb3J0WzI4XTtcclxuICAgICAgb2JqLm92ZXJzZWVyID0gcmVwb3J0WzI5XTtcclxuICAgICAgb2JqLm5vdGlmeU9uRmFpbHVyZSA9IHJlcG9ydFszMF07XHJcbiAgICAgIG9iai5jb2xsYWJvcmF0b3IgPSByZXBvcnRbMzFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JqLmR1ZVRpbWUgPSByZXBvcnRbOF07XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eVdpbmRvdyA9IHJlcG9ydFs5XTtcclxuICAgICAgb2JqLmZhaWxlZEFmdGVyID0gcmVwb3J0WzEwXTtcclxuICAgICAgb2JqLmVuZHNBZnRlck9jY3VycmVuY2VzID0gcmVwb3J0WzExXTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVEYXkgPSByZXBvcnRbMTJdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZU1vbnRoID0gcmVwb3J0WzEzXTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5Q2VudGVyID0gcmVwb3J0WzE0XTtcclxuICAgICAgb2JqLnJlcG9ydENsYXNzID0gcmVwb3J0WzE1XTtcclxuICAgICAgb2JqLm9iamVjdGl2ZSA9IHJlcG9ydFsxNl07XHJcbiAgICAgIG9iai5ub3RlcyA9IHJlcG9ydFsxN107XHJcbiAgICAgIG9iai5pc0Zvcm1hdCA9IHJlcG9ydFsxOF07XHJcbiAgICAgIG9iai5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSA9IHJlcG9ydFsxOV07XHJcbiAgICAgIG9iai5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSByZXBvcnRbMjBdO1xyXG4gICAgICBvYmoucmV2aWV3ZXIgPSByZXBvcnRbMjFdO1xyXG4gICAgICBvYmoucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiA9IHJlcG9ydFsyMl07XHJcbiAgICAgIG9iai5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciA9IHJlcG9ydFsyM107XHJcbiAgICAgIG9iai5vdmVyc2VlciA9IHJlcG9ydFsyNF07XHJcbiAgICAgIG9iai5ub3RpZnlPbkZhaWx1cmUgPSByZXBvcnRbMjVdO1xyXG4gICAgICBvYmouY29sbGFib3JhdG9yID0gcmVwb3J0WzI2XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGluIGEgcmVwb3J0LCBhIHRhYiB0eXBlLCBhbmQgYSBib29sZWFuIHZhbHVlLiBJdCB0aGVuIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBidW5jaCBvZlxyXG4gICAqIHByb3BlcnRpZXMuXHJcbiAgICogPC9jb2RlPlxyXG4gICAqIEBwYXJhbSB7YW55fSByZXBvcnQgLSBhbnkgPSZndDsgdGhlIGFycmF5IG9mIGRhdGFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFiVHlwZSAtIHN0cmluZyAtIHRoaXMgaXMgdGhlIHR5cGUgb2YgdGFiIHRoYXQgaXMgc2VsZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1Byb2dyYW0gLSBib29sZWFuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgLSB3aGV0aGVyIHRoZSB4bHN4IGluY2x1ZGVzIHRoZSBmb3VyIG5ldyBmcmVxdWVuY3kgY29sdW1uc1xyXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgKi9cclxuICBzZXRSZXBvcnREZXRhaWxzKHJlcG9ydDogYW55LCB0YWJUeXBlOiBzdHJpbmcsIGlzUHJvZ3JhbTogYm9vbGVhbiwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UpIHtcclxuXHJcbiAgICBsZXQgb2JqOiBhbnk7XHJcbiAgICBzd2l0Y2ggKHRhYlR5cGUpIHtcclxuICAgICAgY2FzZSAnZnJlcXVlbmN5Jzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsyMF0sXHJcblxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIxXSAsXHJcbiAgICAgICAgICAgIHJldmlld2VyVHlwZTogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIzXSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyNF0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjVdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyNl0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzI3XSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqLCByZXBvcnQsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzRGF0ZUZvcm1hdEludmFsaWQnXSA9IHRoaXMuaXNEYXRlRm9ybWF0SW52YWxpZDtcclxuICAgICAgICAgIG9ialsnaXNEYXlJbnZhbGlkJ10gPSB0aGlzLmlzRGF5SW52YWxpZDtcclxuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZER1ZVRpbWUnXSA9IHRoaXMuaXNWYWxpZER1ZVRpbWUoXHJcbiAgICAgICAgICAgIG9iaj8uZHVlVGltZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydlbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yJ10gPSB0aGlzLmdldEVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IoXHJcbiAgICAgICAgICAgIG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXMsXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gPSAhb2JqWydlbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yJ107XHJcbiAgICAgICAgICB0aGlzLmFwcGx5RW5kc0J5RGF0ZVZhbGlkYXRpb24ob2JqLCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSAmJlxyXG4gICAgICAgICAgICAhb2JqWydpc1Bhc3REYXRlJ10gJiZcclxuICAgICAgICAgICAgb2JqPy5mcmVxdWVuY3k/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGRheTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBtb250aDogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjFdLFxyXG4gICAgICAgICAgICBjb2xsYWJvcmF0b3I6IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKG9iaiwgcmVwb3J0LCBmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZER1ZVRpbWUnXSA9IHRoaXMuaXNWYWxpZER1ZVRpbWUoXHJcbiAgICAgICAgICAgIG9iaj8uZHVlVGltZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydlbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yJ10gPSB0aGlzLmdldEVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IoXHJcbiAgICAgICAgICAgIG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXMsXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gPSAhb2JqWydlbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yJ107XHJcbiAgICAgICAgICB0aGlzLmFwcGx5RW5kc0J5RGF0ZVZhbGlkYXRpb24ob2JqLCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSAmJlxyXG4gICAgICAgICAgICAhb2JqWydpc1Bhc3REYXRlJ10gJiZcclxuICAgICAgICAgICAgb2JqPy5mcmVxdWVuY3k/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdvbmdvaW5nJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXJUeXBlOiByZXBvcnRbMTddLCBcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogJ09uZ29pbmcnLFxyXG4gICAgICAgICAgICBjb2xsYWJvcmF0b3I6IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xyXG5cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIwXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6IHtcclxuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjNdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzI0XSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjVdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBkdWVEYXRlOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVmFsaWRSaXNrQ2xhc3Mocmlza0NsYXNzOiBhbnkpIHtcclxuICAgIGlmKCFyaXNrQ2xhc3MpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIFJJU0tfQ0xBU1NfTElTVC5pbmNsdWRlcyhyaXNrQ2xhc3M/LnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBkcm9wZG93bi1saXN0IGNoZWNrcyBvbiB0b3Agb2YgZXhpc3Rpbmcgcm93IHZhbGlkYXRpb24uXHJcbiAgICogRW1wdHkgb3B0aW9uYWwgY2VsbHMgYXJlIHZhbGlkLiBGcmVxdWVuY3kgLyBkdWUgZGF0ZSAvIGR1ZSB0aW1lIGFyZSBza2lwcGVkIGZvciBvbmdvaW5nLlxyXG4gICAqIFdhcm5pbmcgYW5kIGluZm8gaXNzdWVzIGFyZSBzaG93biBpbiBwcmV2aWV3IGJ1dCBkbyBub3QgbWFrZSB0aGUgcm93IGludmFsaWQuXHJcbiAgICovXHJcbiAgd2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgIG9iajogYW55LFxyXG4gICAgdGFiVHlwZTogc3RyaW5nLFxyXG4gICAgaXNQcm9ncmFtOiBib29sZWFuLFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiBhbnkge1xyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIG9ialsnZmllbGRWYWxpZGF0aW9uJ10gPSB7fTtcclxuICAgIHRoaXMuYXBwbHlEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgIG9iaixcclxuICAgICAgdGFiVHlwZSxcclxuICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmFwcGx5RGF5c0NvdW50VmFsaWRhdGlvbihvYmosIHRhYlR5cGUpO1xyXG4gICAgdGhpcy5hcHBseVNoZWV0RmllbGRNZXNzYWdlcyhcclxuICAgICAgb2JqLFxyXG4gICAgICB0YWJUeXBlLFxyXG4gICAgICBpc1Byb2dyYW0sXHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgKTtcclxuICAgIG9ialsnaXNWYWxpZCddID0gIXRoaXMuaGFzQmxvY2tpbmdGaWVsZElzc3VlcyhvYmopO1xyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGFwcGx5RHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgb2JqOiBhbnksXHJcbiAgICB0YWJUeXBlOiBzdHJpbmcsXHJcbiAgICBpc1Byb2dyYW06IGJvb2xlYW4sXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgcmV2aWV3ZXJOYW1lcyA9IHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXMoXHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QsXHJcbiAgICAgICduYW1lQW5kRW1haWwnXHJcbiAgICApO1xyXG4gICAgY29uc3QgYXNzaWduZWVOYW1lcyA9IHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXMoXHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0LFxyXG4gICAgICAnbmFtZUFuZEVtYWlsJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHByb2dyYW1DYXRlZ29yeU5hbWVzID0gdGhpcy5nZXRQcm9ncmFtQ2F0ZWdvcnlOYW1lcygpO1xyXG4gICAgY29uc3QgZHJvcGRvd25WYWxpZGF0aW9uOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcclxuICAgICAgcHJvZ3JhbVR5cGU6IHRydWUsXHJcbiAgICAgIHByb2dyYW06IHRydWUsXHJcbiAgICAgIHByb2dyYW1DYXRlZ29yeTogdHJ1ZSxcclxuICAgICAgYXNzaWdub3I6IHRydWUsXHJcbiAgICAgIGFzc2lnbmVlOiB0cnVlLFxyXG4gICAgICBhc3NpZ25lZVR5cGU6IHRydWUsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICBmcmVxdWVuY3k6IHRydWUsXHJcbiAgICAgIGRheTogdHJ1ZSxcclxuICAgICAgbW9udGg6IHRydWUsXHJcbiAgICAgIGR1ZVRpbWU6IHRydWUsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiB0cnVlLFxyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHRydWUsXHJcbiAgICAgIHJlcG9ydENsYXNzOiB0cnVlLFxyXG4gICAgICBpc0Zvcm1hdDogdHJ1ZSxcclxuICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICByZXZpZXdlcjogdHJ1ZSxcclxuICAgICAgcmV2aWV3ZXJUeXBlOiB0cnVlLFxyXG4gICAgICBvdmVyc2VlcjogdHJ1ZSxcclxuICAgICAgbm90aWZ5T25GYWlsdXJlOiB0cnVlLFxyXG4gICAgICBjb2xsYWJvcmF0b3I6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbSA9IHRoaXMuaGFzVmFsdWUob2JqPy5wcm9ncmFtKTtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbVR5cGUgPSB0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICBpZiAoaGFzUHJvZ3JhbVR5cGUgJiYgIWhhc1Byb2dyYW0pIHtcclxuICAgICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbVR5cGUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtVHlwZSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICAgICAgb2JqPy5wcm9ncmFtVHlwZSxcclxuICAgICAgICAgIFBST0dSQU1fVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbSA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgICBvYmo/LnByb2dyYW0sXHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyh0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0LCAncHJvZ3JhbU5hbWUnKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZShvYmo/LnByb2dyYW1DYXRlZ29yeSkgJiYgIWhhc1Byb2dyYW0pIHtcclxuICAgICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbUNhdGVnb3J5ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNWYWx1ZShvYmo/LnByb2dyYW1DYXRlZ29yeSkgJiYgaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5TmFtZXMgPSB0aGlzLmdldFByb2dyYW1DYXRlZ29yeU5hbWVzRm9yUHJvZ3JhbShcclxuICAgICAgICAgIG9iaj8ucHJvZ3JhbVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1DYXRlZ29yeSA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgICAgIG9iaj8ucHJvZ3JhbUNhdGVnb3J5LFxyXG4gICAgICAgICAgY2F0ZWdvcnlOYW1lcy5sZW5ndGggPyBjYXRlZ29yeU5hbWVzIDogcHJvZ3JhbUNhdGVnb3J5TmFtZXNcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtQ2F0ZWdvcnkgPSBwcm9ncmFtQ2F0ZWdvcnlOYW1lcy5sZW5ndGhcclxuICAgICAgICAgID8gdGhpcy5pc0luRHJvcGRvd25MaXN0KG9iaj8ucHJvZ3JhbUNhdGVnb3J5LCBwcm9ncmFtQ2F0ZWdvcnlOYW1lcylcclxuICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5hc3NpZ25vciA9IHRoaXMuaXNJblVzZXJEcm9wZG93bihvYmo/LmFzc2lnbm9yKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5hc3NpZ25lZSA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5hc3NpZ25lZSxcclxuICAgICAgYXNzaWduZWVOYW1lc1xyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5hc3NpZ25lZVR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5hc3NpZ25lZVR5cGUsXHJcbiAgICAgIEFTU0lHTkVFX1RZUEVfRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5rZXlSZXNwb25zaWJpbGl0eSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmtleVJlc3BvbnNpYmlsaXR5LFxyXG4gICAgICBZRVNfTk9fRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeScpIHtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLmZyZXF1ZW5jeSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICAgIG9iaj8uZnJlcXVlbmN5LFxyXG4gICAgICAgIEZSRVFVRU5DWV9EUk9QRE9XTl9MSVNUXHJcbiAgICAgICk7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kYXkgPSB0aGlzLmlzVmFsaWREcm9wZG93bkRheShvYmo/LmRheSk7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5tb250aCA9IHRoaXMuaXNWYWxpZERyb3Bkb3duTW9udGgob2JqPy5tb250aCk7XHJcbiAgICAgIGlmIChoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgICBkcm9wZG93blZhbGlkYXRpb24uZHVlVGltZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ucmVzcG9uc2liaWxpdHlDZW50ZXIgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8ucmVzcG9uc2liaWxpdHlDZW50ZXIsXHJcbiAgICAgIHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXModGhpcy50ZW1wbGF0ZUluZm8/LnJjTGlzdCwgJ25hbWUnKVxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSkgJiZcclxuICAgICAgIXRoaXMuaGFzVmFsdWUob2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlcilcclxuICAgICkge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgb2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUsXHJcbiAgICAgICAgUkNfVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ucmVwb3J0Q2xhc3MgPSB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcyk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uaXNGb3JtYXQgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5pc0Zvcm1hdCxcclxuICAgICAgWUVTX05PX0RST1BET1dOX0xJU1RcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8uZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkLFxyXG4gICAgICBZRVNfTk9fRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5yZXZpZXdlcixcclxuICAgICAgcmV2aWV3ZXJOYW1lc1xyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXJUeXBlKSAmJiAhdGhpcy5oYXNWYWx1ZShvYmo/LnJldmlld2VyKSkge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucmV2aWV3ZXJUeXBlID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24ucmV2aWV3ZXJUeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgb2JqPy5yZXZpZXdlclR5cGUsXHJcbiAgICAgICAgUkVWSUVXRVJfVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ub3ZlcnNlZXIgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8ub3ZlcnNlZXIsXHJcbiAgICAgIHJldmlld2VyTmFtZXNcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ubm90aWZ5T25GYWlsdXJlID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/Lm5vdGlmeU9uRmFpbHVyZSxcclxuICAgICAgcmV2aWV3ZXJOYW1lc1xyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5jb2xsYWJvcmF0b3IgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3Qob2JqPy5jb2xsYWJvcmF0b3IsIFtcclxuICAgICAgLi4uYXNzaWduZWVOYW1lcyxcclxuICAgICAgLi4ucmV2aWV3ZXJOYW1lcyxcclxuICAgIF0pO1xyXG5cclxuICAgIG9ialsnZHJvcGRvd25WYWxpZGF0aW9uJ10gPSBkcm9wZG93blZhbGlkYXRpb247XHJcbiAgICBvYmpbJ2lzVmFsaWREcm9wZG93biddID0gIU9iamVjdC5lbnRyaWVzKGRyb3Bkb3duVmFsaWRhdGlvbikuc29tZShcclxuICAgICAgKFtmaWVsZCwgaXNWYWxpZF0pID0+XHJcbiAgICAgICAgaXNWYWxpZCA9PT0gZmFsc2UgJiYgIU5PTl9CTE9DS0lOR19EUk9QRE9XTl9GSUVMRFMuaW5jbHVkZXMoZmllbGQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVMaXN0TmFtZXMobGlzdDogYW55W10gPSBbXSwga2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gKGxpc3QgfHwgW10pXHJcbiAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uW2tleV0pXHJcbiAgICAgIC5maWx0ZXIoKG5hbWU6IGFueSkgPT4gdGhpcy5oYXNWYWx1ZShuYW1lKSlcclxuICAgICAgLm1hcCgobmFtZTogYW55KSA9PiBTdHJpbmcobmFtZSkudHJpbSgpKTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1DYXRlZ29yeU5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgKHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3QgfHwgW10pLmZvckVhY2goKHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAocHJvZ3JhbT8uY2hpbGRDYXRlZ29yeSB8fCBbXSkuZm9yRWFjaCgoY2F0ZWdvcnk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKGNhdGVnb3J5Py5uYW1lKSkge1xyXG4gICAgICAgICAgbmFtZXMucHVzaChTdHJpbmcoY2F0ZWdvcnkubmFtZSkudHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmFtZXM7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtQ2F0ZWdvcnlOYW1lc0ZvclByb2dyYW0ocHJvZ3JhbU5hbWU6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9ICh0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0IHx8IFtdKS5maW5kKFxyXG4gICAgICAoaXRlbTogYW55KSA9PlxyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShpdGVtPy5wcm9ncmFtTmFtZSkgPT09XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHByb2dyYW1OYW1lKVxyXG4gICAgKTtcclxuICAgIChwcm9ncmFtPy5jaGlsZENhdGVnb3J5IHx8IFtdKS5mb3JFYWNoKChjYXRlZ29yeTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKGNhdGVnb3J5Py5uYW1lKSkge1xyXG4gICAgICAgIG5hbWVzLnB1c2goU3RyaW5nKGNhdGVnb3J5Lm5hbWUpLnRyaW0oKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5hbWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0RmllbGRJc3N1ZShcclxuICAgIG9iajogYW55LFxyXG4gICAgZmllbGQ6IHN0cmluZyxcclxuICAgIHNldmVyaXR5OiBzdHJpbmcsXHJcbiAgICBtZXNzYWdlOiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIGlmICghb2JqIHx8ICFmaWVsZCB8fCAhbWVzc2FnZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBvYmouZmllbGRWYWxpZGF0aW9uID0gb2JqLmZpZWxkVmFsaWRhdGlvbiB8fCB7fTtcclxuICAgIGNvbnN0IHJhbms6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICAgIFtWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SXTogMyxcclxuICAgICAgW1ZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklOR106IDIsXHJcbiAgICAgIFtWQUxJREFUSU9OX1NFVkVSSVRZLklORk9dOiAxLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBvYmouZmllbGRWYWxpZGF0aW9uW2ZpZWxkXTtcclxuICAgIGlmICghY3VycmVudCB8fCAocmFua1tzZXZlcml0eV0gfHwgMCkgPj0gKHJhbmtbY3VycmVudC5zZXZlcml0eV0gfHwgMCkpIHtcclxuICAgICAgb2JqLmZpZWxkVmFsaWRhdGlvbltmaWVsZF0gPSB7IHNldmVyaXR5LCBtZXNzYWdlIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNCbG9ja2luZ0ZpZWxkSXNzdWVzKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhvYmo/LmZpZWxkVmFsaWRhdGlvbiB8fCB7fSkuc29tZShcclxuICAgICAgKGlzc3VlOiBhbnkpID0+IGlzc3VlPy5zZXZlcml0eSA9PT0gVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNhbWVQZXJzb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUobGVmdCkgfHwgIXRoaXMuaGFzVmFsdWUocmlnaHQpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUobGVmdCkgPT09IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShyaWdodCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsZWZ0RW1haWwgPSB0aGlzLmV4dHJhY3REcm9wZG93bkVtYWlsKGxlZnQpO1xyXG4gICAgY29uc3QgcmlnaHRFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwocmlnaHQpO1xyXG4gICAgaWYgKGxlZnRFbWFpbCAmJiByaWdodEVtYWlsICYmIGxlZnRFbWFpbCA9PT0gcmlnaHRFbWFpbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlZnROYW1lID0gdGhpcy5leHRyYWN0RHJvcGRvd25OYW1lKGxlZnQpO1xyXG4gICAgY29uc3QgcmlnaHROYW1lID0gdGhpcy5leHRyYWN0RHJvcGRvd25OYW1lKHJpZ2h0KTtcclxuICAgIHJldHVybiAhIWxlZnROYW1lICYmICEhcmlnaHROYW1lICYmIGxlZnROYW1lID09PSByaWdodE5hbWU7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRm9ybWF0VXJsKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoU3RyaW5nKHZhbHVlKS50cmltKCkpO1xyXG4gICAgICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlTaGVldEZpZWxkTWVzc2FnZXMoXHJcbiAgICBvYmo6IGFueSxcclxuICAgIHRhYlR5cGU6IHN0cmluZyxcclxuICAgIGlzUHJvZ3JhbTogYm9vbGVhbixcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBkcm9wZG93biA9IG9iaj8uZHJvcGRvd25WYWxpZGF0aW9uIHx8IHt9O1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShvYmo/LnJlc3BvbnNpYmlsaXR5TmFtZSk7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgY29uc3QgcmF3ID0gb2JqPy5yZXNwb25zaWJpbGl0eU5hbWU7XHJcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VPbmx5ID1cclxuICAgICAgICByYXcgIT0gbnVsbCAmJiBTdHJpbmcocmF3KS5sZW5ndGggPiAwICYmICFTdHJpbmcocmF3KS50cmltKCk7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5TmFtZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICB3aGl0ZXNwYWNlT25seVxyXG4gICAgICAgICAgPyBWQUxJREFUSU9OX01FU1NBR0VTLlJFU1BPTlNJQklMSVRZX05BTUVfV0hJVEVTUEFDRVxyXG4gICAgICAgICAgOiBWQUxJREFUSU9OX01FU1NBR0VTLlJFU1BPTlNJQklMSVRZX05BTUVfUkVRVUlSRURcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgIGNvbnN0IGhhc1Byb2dyYW0gPSB0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbSk7XHJcbiAgICAgIGNvbnN0IGhhc1Byb2dyYW1UeXBlID0gdGhpcy5oYXNWYWx1ZShvYmo/LnByb2dyYW1UeXBlKTtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbUNhdGVnb3J5ID0gdGhpcy5oYXNWYWx1ZShvYmo/LnByb2dyYW1DYXRlZ29yeSk7XHJcbiAgICAgIGlmIChoYXNQcm9ncmFtVHlwZSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdwcm9ncmFtVHlwZScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLldBUk5JTkcsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlBST0dSQU1fVFlQRV9XSVRIT1VUX1BST0dSQU1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLnByb2dyYW1UeXBlID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdwcm9ncmFtVHlwZScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRyb3Bkb3duLnByb2dyYW0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Byb2dyYW0nLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNQcm9ncmFtQ2F0ZWdvcnkgJiYgIWhhc1Byb2dyYW0pIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAncHJvZ3JhbUNhdGVnb3J5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlBST0dSQU1fQ0FURUdPUllfV0lUSE9VVF9QUk9HUkFNXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChkcm9wZG93bi5wcm9ncmFtQ2F0ZWdvcnkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Byb2dyYW1DYXRlZ29yeScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5QUk9HUkFNX0NBVEVHT1JZX01JU01BVENIXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8uYXNzaWdub3IpICYmIGRyb3Bkb3duLmFzc2lnbm9yID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25vcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5XQVJOSU5HLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRU5UUlVTVEVEX0JZX0lOVkFMSURcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUob2JqPy5hc3NpZ25lZSkpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnYXNzaWduZWUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5BU1NJR05FRV9SRVFVSVJFRFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChkcm9wZG93bi5hc3NpZ25lZSA9PT0gZmFsc2UgfHwgIW9iaj8uaXNWYWxpZFVzZXIpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnYXNzaWduZWUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5BU1NJR05FRV9JTlZBTElEXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKG9iaj8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRBc3NpZ25lZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnYXNzaWduZWUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5VU0VSX05PVF9JTl9QUk9HUkFNXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmFzc2lnbmVlVHlwZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnYXNzaWduZWVUeXBlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLldBUk5JTkcsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5BU1NJR05FRV9UWVBFX0lOVkFMSURcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaXNHcm91cFNlbGVjdGVkKG9iaj8uYXNzaWduZWUpICYmXHJcbiAgICAgICF0aGlzLmhhc1ZhbHVlKG9iaj8uYXNzaWduZWVUeXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2Fzc2lnbmVlVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5JTkZPLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuR1JPVVBfQUxMX0FOWV9CTEFOS1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkcm9wZG93bi5rZXlSZXNwb25zaWJpbGl0eSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAna2V5UmVzcG9uc2liaWxpdHknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLktFWV9SRVNQT05TSUJJTElUWV9JTlZBTElEXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRhYlR5cGUgPT09ICdmcmVxdWVuY3knKSB7XHJcbiAgICAgIGlmICghdGhpcy5oYXNWYWx1ZShvYmo/LmZyZXF1ZW5jeSkpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZnJlcXVlbmN5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkZSRVFVRU5DWV9SRVFVSVJFRFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHJvcGRvd24uZnJlcXVlbmN5ID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdmcmVxdWVuY3knLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZShvYmo/LmRheSkpIHtcclxuICAgICAgICBjb25zdCBkYXlUZXh0ID0gU3RyaW5nKG9iai5kYXkpLnRyaW0oKTtcclxuICAgICAgICBpZiAoIS9eXFxkKyQvLnRlc3QoZGF5VGV4dCkpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICAnZGF5JyxcclxuICAgICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EVUVfREFURV9EQVlfTk9UX05VTUJFUlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLmRheSA9PT0gZmFsc2UgfHwgTnVtYmVyKGRheVRleHQpIDwgMSB8fCBOdW1iZXIoZGF5VGV4dCkgPiAzMSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgICdkYXknLFxyXG4gICAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgICBkdWVEYXRlRGF5T3V0T2ZSYW5nZU1lc3NhZ2Uob2JqPy5mcmVxdWVuY3kgfHwgJ1dlZWtseScpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUob2JqPy5mcmVxdWVuY3kpID09PSAnd2Vla2x5JyAmJlxyXG4gICAgICAgICAgTnVtYmVyKGRheVRleHQpID4gN1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgICdkYXknLFxyXG4gICAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgICBkdWVEYXRlRGF5T3V0T2ZSYW5nZU1lc3NhZ2UoJ1dlZWtseScpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZHJvcGRvd24ubW9udGggPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ21vbnRoJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRVRV9EQVRFX01PTlRIX0lOVkFMSURcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmo/LmlzUGFzdERhdGUpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZGF5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlBBU1RfRFVFX0RBVEVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdtb250aCcsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5QQVNUX0RVRV9EQVRFXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LnZhbGlkRGF0ZSA9PT0gZmFsc2UgJiYgZHJvcGRvd24uZGF5ICE9PSBmYWxzZSAmJiBkcm9wZG93bi5tb250aCAhPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZGF5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRVRV9EQVRFXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnbW9udGgnLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFVFX0RBVEVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKG9iaj8uZHVlVGltZSkpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICAnZHVlVGltZScsXHJcbiAgICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuSU5GTyxcclxuICAgICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EVUVfVElNRV9CTEFOS1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzVmFsaWREdWVUaW1lKG9iaj8uZHVlVGltZSwgdHJ1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICAnZHVlVGltZScsXHJcbiAgICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvYmo/LnJlc3BvbnNpYmlsaXR5V2luZG93RXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAncmVzcG9uc2liaWxpdHlXaW5kb3cnLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmo/LmZhaWxlZEFmdGVyRXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZmFpbGVkQWZ0ZXInLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0FmdGVyT2NjdXJyZW5jZXMnLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmo/LmVuZHNCeURhdGVEYXlFcnJvcikge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdlbmRzQnlEYXRlRGF5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBvYmouZW5kc0J5RGF0ZURheUVycm9yXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5lbmRzQnlEYXRlTW9udGhFcnJvcikge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdlbmRzQnlEYXRlTW9udGgnLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIG9iai5lbmRzQnlEYXRlTW9udGhFcnJvclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaXNPbmVUaW1lID1cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUob2JqPy5mcmVxdWVuY3kpID09PSAnb25lIHRpbWUnO1xyXG4gICAgICBjb25zdCBoYXNMaWZlY3ljbGVFbmQgPVxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUob2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcykgfHxcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8uZW5kc0J5RGF0ZURheSkgfHxcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8uZW5kc0J5RGF0ZU1vbnRoKTtcclxuICAgICAgaWYgKGlzT25lVGltZSAmJiBoYXNMaWZlY3ljbGVFbmQpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gVkFMSURBVElPTl9NRVNTQUdFUy5PTkVfVElNRV9MSUZFQ1lDTEU7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNBZnRlck9jY3VycmVuY2VzJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZURheScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgbWVzc2FnZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNCeURhdGVNb250aCcsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgbWVzc2FnZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zICYmXHJcbiAgICAgICAgTnVtYmVyKG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXMpID09PSAxICYmXHJcbiAgICAgICAgIWlzT25lVGltZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0FmdGVyT2NjdXJyZW5jZXMnLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5XQVJOSU5HLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09ORV9PQ0NVUlJFTkNFXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkcm9wZG93bi5yZXNwb25zaWJpbGl0eUNlbnRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmVzcG9uc2liaWxpdHlDZW50ZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlKSAmJlxyXG4gICAgICAhdGhpcy5oYXNWYWx1ZShvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlJDX1RZUEVfV0lUSE9VVF9OQU1FXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24ucmVwb3J0Q2xhc3MgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3JlcG9ydENsYXNzJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24uaXNGb3JtYXQgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2lzRm9ybWF0JyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkpKSB7XHJcbiAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUob2JqPy5pc0Zvcm1hdCkgPT09ICdubycpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHknLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRk9STUFUX0xJTktfV0lUSE9VVF9ZRVNcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzVmFsaWRGb3JtYXRVcmwob2JqPy5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSkpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHknLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRk9STUFUX0lOVkFMSURfVVJMXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGRyb3Bkb3duLmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24ucmV2aWV3ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld2VyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdlcikgJiZcclxuICAgICAgb2JqPy51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZFJldmlld2VyID09PSBmYWxzZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld2VyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuVVNFUl9OT1RfSU5fUFJPR1JBTVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdlclR5cGUpICYmICF0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld2VyVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLnJldmlld2VyVHlwZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmV2aWV3ZXJUeXBlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChvYmo/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5FcnJvcikge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChvYmo/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyRXJyb3IpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5oYXNWYWx1ZShvYmo/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4pIHx8XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyKSkgJiZcclxuICAgICAgIXRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUkVWSUVXX1dJTkRPV19XSVRIT1VUX1JFVklFV0VSXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld1dpbGxCZUZhaWxlZEFmdGVyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUkVWSUVXX1dJTkRPV19XSVRIT1VUX1JFVklFV0VSXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLm92ZXJzZWVyID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdvdmVyc2VlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ub3ZlcnNlZXIpICYmXHJcbiAgICAgIG9iaj8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRPdmVyc2VlciA9PT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdvdmVyc2VlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlVTRVJfTk9UX0lOX1BST0dSQU1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zYW1lUGVyc29uKG9iaj8ub3ZlcnNlZXIsIG9iaj8uYXNzaWduZWUpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ292ZXJzZWVyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5PVkVSU0lHSFRfRFVQTElDQVRFX0FTU0lHTkVFXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm92ZXJzZWVyLCBvYmo/LmFzc2lnbm9yKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdvdmVyc2VlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5JTkZPLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuT1ZFUlNJR0hUX0RVUExJQ0FURV9BU1NJR05PUlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkcm9wZG93bi5ub3RpZnlPbkZhaWx1cmUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ25vdGlmeU9uRmFpbHVyZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ubm90aWZ5T25GYWlsdXJlKSAmJlxyXG4gICAgICBvYmo/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkTm90aWZ5T25GYWlsdXJlID09PSBmYWxzZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ25vdGlmeU9uRmFpbHVyZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlVTRVJfTk9UX0lOX1BST0dSQU1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zYW1lUGVyc29uKG9iaj8ubm90aWZ5T25GYWlsdXJlLCBvYmo/LmFzc2lnbmVlKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdub3RpZnlPbkZhaWx1cmUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuSU5GTyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLk9WRVJTSUdIVF9EVVBMSUNBVEVfQVNTSUdORUVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zYW1lUGVyc29uKG9iaj8ubm90aWZ5T25GYWlsdXJlLCBvYmo/LmFzc2lnbm9yKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdub3RpZnlPbkZhaWx1cmUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuSU5GTyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLk9WRVJTSUdIVF9EVVBMSUNBVEVfQVNTSUdOT1JcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24uY29sbGFib3JhdG9yID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdjb2xsYWJvcmF0b3InLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzR3JvdXBTZWxlY3RlZChvYmo/LmNvbGxhYm9yYXRvcikpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnY29sbGFib3JhdG9yJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuQ09MTEFCT1JBVE9SX0dST1VQXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnRydXN0ZWQgQnkgaW4gdGhlIHhsc3ggZHJvcGRvd24gaXMgdGhlIHBlb3BsZSBsaXN0IGluIGBOYW1lIChlbWFpbClgIGZvcm1cclxuICAgKiAoc2FtZSBzb3VyY2UgYXMgRW50cnVzdGVkIFRvIC8gUmV2aWV3ZXIpLCBub3QgdGhlIGFzc2lnbm9yIG5hbWUtb25seSBjb2x1bW4uXHJcbiAgICovXHJcbiAgaXNJblVzZXJEcm9wZG93bih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZSh2YWx1ZSk7XHJcbiAgICBjb25zdCB2YWx1ZUVtYWlsID0gdGhpcy5leHRyYWN0RHJvcGRvd25FbWFpbCh2YWx1ZSk7XHJcbiAgICBjb25zdCB2YWx1ZU5hbWUgPSB0aGlzLmV4dHJhY3REcm9wZG93bk5hbWUodmFsdWUpO1xyXG4gICAgY29uc3QgZHJvcGRvd25OYW1lcyA9IHRoaXMudGVtcGxhdGVJbmZvPy5wZW9wbGVEcm9wZG93bk5hbWVzIHx8IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICBkcm9wZG93bk5hbWVzLnNvbWUoXHJcbiAgICAgICAgKG5hbWU6IHN0cmluZykgPT4gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG5hbWUpID09PSBub3JtYWxpemVkXHJcbiAgICAgIClcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdmFsdWVFbWFpbCAmJlxyXG4gICAgICBkcm9wZG93bk5hbWVzLnNvbWUoKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5hbWVFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG5hbWVFbWFpbCA9PT0gdmFsdWVFbWFpbCB8fFxyXG4gICAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG5hbWUpID09PSB2YWx1ZUVtYWlsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHVzZXJzID0gW1xyXG4gICAgICAuLi4odGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3QgfHwgW10pLFxyXG4gICAgICAuLi4odGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3QgfHwgW10pLFxyXG4gICAgICAuLi4odGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdCB8fCBbXSksXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIHVzZXJzLnNvbWUoKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb25zdHJ1Y3RlZCA9XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSh1c2VyPy5uYW1lKSAmJiB0aGlzLmhhc1ZhbHVlKHVzZXI/LmVtYWlsKVxyXG4gICAgICAgICAgPyBgJHtTdHJpbmcodXNlci5uYW1lKS50cmltKCl9ICgke1N0cmluZyh1c2VyLmVtYWlsKS50cmltKCl9KWBcclxuICAgICAgICAgIDogJyc7XHJcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgdXNlcj8ubmFtZUFuZEVtYWlsLFxyXG4gICAgICAgIHVzZXI/Lm5hbWUsXHJcbiAgICAgICAgdXNlcj8uZW1haWwsXHJcbiAgICAgICAgY29uc3RydWN0ZWQsXHJcbiAgICAgIF07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjYW5kaWRhdGVzLnNvbWUoXHJcbiAgICAgICAgICAoY2FuZGlkYXRlKSA9PlxyXG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlKGNhbmRpZGF0ZSkgJiZcclxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKGNhbmRpZGF0ZSkgPT09IG5vcm1hbGl6ZWRcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2YWx1ZUVtYWlsICYmXHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSh1c2VyPy5lbWFpbCkgJiZcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodXNlci5lbWFpbCkgPT09IHZhbHVlRW1haWxcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZhbHVlTmFtZSAmJlxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUodXNlcj8ubmFtZSkgJiZcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodXNlci5uYW1lKSA9PT0gdmFsdWVOYW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgISF2YWx1ZUVtYWlsICYmXHJcbiAgICAgICAgY2FuZGlkYXRlcy5zb21lKFxyXG4gICAgICAgICAgKGNhbmRpZGF0ZSkgPT5cclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZShjYW5kaWRhdGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwoY2FuZGlkYXRlKSA9PT0gdmFsdWVFbWFpbFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXplRHJvcGRvd25WYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHUwMGEwL2csICcgJylcclxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAudHJpbSgpXHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdERyb3Bkb3duRW1haWwodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXRjaCA9IFN0cmluZyh2YWx1ZSA/PyAnJykubWF0Y2goL1xcKChbXildKkBbXildKilcXClcXHMqJC8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG1hdGNoWzFdKSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdERyb3Bkb3duTmFtZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUoXHJcbiAgICAgIFN0cmluZyh2YWx1ZSA/PyAnJykucmVwbGFjZSgvXFxzKlxcKFteKV0qQFteKV0qXFwpXFxzKiQvLCAnJylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0luU3RhdGljRHJvcGRvd24odmFsdWU6IGFueSwgb3B0aW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzSW5Ecm9wZG93bkxpc3QodmFsdWUsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaXNJbkRyb3Bkb3duTGlzdCh2YWx1ZTogYW55LCBvcHRpb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodmFsdWUpO1xyXG4gICAgcmV0dXJuIChvcHRpb25zIHx8IFtdKS5zb21lKFxyXG4gICAgICAob3B0aW9uKSA9PiB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUob3B0aW9uKSA9PT0gbm9ybWFsaXplZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREcm9wZG93bkRheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKFN0cmluZyh2YWx1ZSkudHJpbSgpKTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGRheU51bWJlcikgJiYgZGF5TnVtYmVyID49IDEgJiYgZGF5TnVtYmVyIDw9IDMxO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZERyb3Bkb3duTW9udGgodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSRUdFWC5FTkRTX0JZX0RBVEVfTU9OVEgudGVzdChTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRHVlVGltZShkdWVUaW1lOiBhbnksIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ub3JtYWxpemVEdWVUaW1lKGR1ZVRpbWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSRUdFWC5EVUVfVElNRS50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZpZWxkLiBXaGVuIGZpbGxlZCwgdGhlIHZhbHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgd2hvbGUgbnVtYmVyLlxyXG4gICAqIFJlamVjdHMgbmVnYXRpdmVzLCBkZWNpbWFscywgYW5kIG5vbi1udW1lcmljIHRleHQuIEJsYW5rIGlzIHZhbGlkLiAwIGlzIGFsbG93ZWRcclxuICAgKiAoRmFpbCAvIFJldmlldyBGYWlsIHVzZSAwIHRvIG1lYW4gY29tcGxldGUvcmV2aWV3IG9uIHRoZSBkdWUgZGF0ZSkuXHJcbiAgICovXHJcbiAgZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3IodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGlmICgvXi0vLnRlc3Qobm9ybWFsaXplZCkgfHwgTnVtYmVyKG5vcm1hbGl6ZWQpIDwgMCkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5QT1NJVElWRV9OVU1CRVI7XHJcbiAgICB9XHJcbiAgICBpZiAoIS9eXFxkKyQvLnRlc3Qobm9ybWFsaXplZCkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuV0hPTEVfTlVNQkVSX05PTl9ORUdBVElWRTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFwcGx5RGF5c0NvdW50VmFsaWRhdGlvbihvYmo6IGFueSwgdGFiVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGFydEVycm9yID1cclxuICAgICAgdGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcclxuICAgICAgICA/IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3Iob2JqPy5yZXNwb25zaWJpbGl0eVdpbmRvdylcclxuICAgICAgICA6ICcnO1xyXG4gICAgY29uc3QgZmFpbEVycm9yID1cclxuICAgICAgdGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcclxuICAgICAgICA/IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3Iob2JqPy5mYWlsZWRBZnRlcilcclxuICAgICAgICA6ICcnO1xyXG4gICAgY29uc3QgcmV2aWV3U3RhcnRFcnJvciA9IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3IoXHJcbiAgICAgIG9iaj8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpblxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJldmlld0ZhaWxFcnJvciA9IHRoaXMuZ2V0V2hvbGVOdW1iZXJEYXlzRXJyb3IoXHJcbiAgICAgIG9iaj8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJcclxuICAgICk7XHJcbiAgICBvYmpbJ3Jlc3BvbnNpYmlsaXR5V2luZG93RXJyb3InXSA9IHN0YXJ0RXJyb3I7XHJcbiAgICBvYmpbJ2ZhaWxlZEFmdGVyRXJyb3InXSA9IGZhaWxFcnJvcjtcclxuICAgIG9ialsncmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbkVycm9yJ10gPSByZXZpZXdTdGFydEVycm9yO1xyXG4gICAgb2JqWydyZXZpZXdXaWxsQmVGYWlsZWRBZnRlckVycm9yJ10gPSByZXZpZXdGYWlsRXJyb3I7XHJcbiAgICBvYmpbJ2lzVmFsaWREYXlzQ291bnQnXSA9XHJcbiAgICAgICFzdGFydEVycm9yICYmICFmYWlsRXJyb3IgJiYgIXJldmlld1N0YXJ0RXJyb3IgJiYgIXJldmlld0ZhaWxFcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZpZWxkLiBXaGVuIGZpbGxlZCwgdGhlIHZhbHVlIG11c3QgYmUgbnVtZXJpYyBhbmQgZ3JlYXRlciB0aGFuIDAuXHJcbiAgICovXHJcbiAgZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgIHZhbHVlOiBhbnksXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBTdHJpbmcodmFsdWUpLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xyXG4gICAgaWYgKCEvXi0/XFxkKyhcXC5cXGQrKT8kLy50ZXN0KG5vcm1hbGl6ZWQpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQUZURVJfT0NDVVJSRU5DRVNfTlVNRVJJQztcclxuICAgIH1cclxuICAgIGlmIChOdW1iZXIobm9ybWFsaXplZCkgPD0gMCkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09DQ1VSUkVOQ0VTX0dSRUFURVJfVEhBTl9aRVJPO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmo6IGFueSwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmdldEVuZHNCeURhdGVWYWxpZGF0aW9uKFxyXG4gICAgICBvYmo/LmVuZHNCeURhdGVEYXksXHJcbiAgICAgIG9iaj8uZW5kc0J5RGF0ZU1vbnRoLFxyXG4gICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMsXHJcbiAgICAgIG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXNcclxuICAgICk7XHJcbiAgICBvYmpbJ2VuZHNCeURhdGVEYXlFcnJvciddID0gdmFsaWRhdGlvbi5kYXlFcnJvcjtcclxuICAgIG9ialsnZW5kc0J5RGF0ZU1vbnRoRXJyb3InXSA9IHZhbGlkYXRpb24ubW9udGhFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGVEYXknXSA9ICF2YWxpZGF0aW9uLmRheUVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZU1vbnRoJ10gPSAhdmFsaWRhdGlvbi5tb250aEVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddID0gdmFsaWRhdGlvbi5pc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgaGFzVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgU3RyaW5nKHZhbHVlKS50cmltKCkgIT09ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgdW5sZXNzIGVpdGhlciBkYXkgb3IgbW9udGggaXMgZmlsbGVkLiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIEVuZHMgQWZ0ZXIgT2NjdXJyZW5jZXMuXHJcbiAgICogRGF5IG11c3QgYmUgbnVtZXJpYywgZ3JlYXRlciB0aGFuIDAsIGFuZCBhdCBtb3N0IDMxLiBNb250aCBtdXN0IGJlIGZ1bGwgbW9udGggbmFtZSArICcgKyB0d28tZGlnaXRcclxuICAgKiB5ZWFyIChKYW51YXJ5JzI4KS4gQ29tYmluZWQgZGF0ZSBtdXN0IGV4aXN0LCBpbmNsdWRpbmcgbGVhcC15ZWFyIEZlYnJ1YXJ5IDI5LlxyXG4gICAqL1xyXG4gIGdldEVuZHNCeURhdGVWYWxpZGF0aW9uKFxyXG4gICAgZGF5OiBhbnksXHJcbiAgICBtb250aDogYW55LFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UsXHJcbiAgICBlbmRzQWZ0ZXJPY2N1cnJlbmNlcz86IGFueVxyXG4gICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZGF5RXJyb3I6IHN0cmluZzsgbW9udGhFcnJvcjogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB7IGlzVmFsaWQ6IHRydWUsIGRheUVycm9yOiAnJywgbW9udGhFcnJvcjogJycgfTtcclxuICAgIGlmICghaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGRheVZhbHVlID0gZGF5ID09IG51bGwgPyAnJyA6IFN0cmluZyhkYXkpLnRyaW0oKTtcclxuICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aCA9PSBudWxsID8gJycgOiBTdHJpbmcobW9udGgpLnRyaW0oKTtcclxuICAgIGlmICghZGF5VmFsdWUgJiYgIW1vbnRoVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKGVuZHNBZnRlck9jY3VycmVuY2VzKSAmJiAoZGF5VmFsdWUgfHwgbW9udGhWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcjogZGF5VmFsdWUgPyBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9DT05GTElDVCA6ICcnLFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IG1vbnRoVmFsdWUgPyBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9DT05GTElDVCA6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGF5VmFsdWUgfHwgIW1vbnRoVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5DT01QTEVURSxcclxuICAgICAgICBtb250aEVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTkNPTVBMRVRFLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRheUVycm9yID0gdGhpcy5nZXRFbmRzQnlEYXRlRGF5RXJyb3IoZGF5VmFsdWUpO1xyXG4gICAgY29uc3QgbW9udGhFcnJvciA9IHRoaXMuZ2V0RW5kc0J5RGF0ZU1vbnRoRXJyb3IobW9udGhWYWx1ZSk7XHJcbiAgICBpZiAoZGF5RXJyb3IgfHwgbW9udGhFcnJvcikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yLFxyXG4gICAgICAgIG1vbnRoRXJyb3IsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRFbmRzQnlDYWxlbmRhckRhdGUoZGF5VmFsdWUsIG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUUsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5WQUxJRF9WQUxVRSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0VuZHNCeURhdGVJblBhc3QoZGF5VmFsdWUsIG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX1BBU1QsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfUEFTVCxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRzQnlEYXRlRGF5RXJyb3IoZGF5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCEvXi0/XFxkKyhcXC5cXGQrKT8kLy50ZXN0KGRheSkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGlmIChkYXlOdW1iZXIgPD0gMCB8fCBkYXlOdW1iZXIgPiAzMSkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5WQUxJRF9WQUxVRTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldEVuZHNCeURhdGVNb250aEVycm9yKG1vbnRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFSRUdFWC5FTkRTX0JZX0RBVEVfTU9OVEgudGVzdChtb250aCkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRW5kc0J5Q2FsZW5kYXJEYXRlKGRheTogc3RyaW5nLCBtb250aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtb250aE1hdGNoID0gbW9udGgubWF0Y2goUkVHRVguRU5EU19CWV9EQVRFX01PTlRIKTtcclxuICAgIGlmICghbW9udGhNYXRjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEluZGV4ID0gRlVMTF9NT05USF9OQU1FUy5pbmRleE9mKG1vbnRoTWF0Y2hbMV0pO1xyXG4gICAgY29uc3QgeWVhciA9IDIwMDAgKyBOdW1iZXIobW9udGhNYXRjaFsyXSk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXlOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXlOdW1iZXIpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXHJcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhJbmRleCAmJlxyXG4gICAgICBkYXRlLmdldERhdGUoKSA9PT0gZGF5TnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNFbmRzQnlEYXRlSW5QYXN0KGRheTogc3RyaW5nLCBtb250aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtb250aE1hdGNoID0gbW9udGgubWF0Y2goUkVHRVguRU5EU19CWV9EQVRFX01PTlRIKTtcclxuICAgIGlmICghbW9udGhNYXRjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEluZGV4ID0gRlVMTF9NT05USF9OQU1FUy5pbmRleE9mKG1vbnRoTWF0Y2hbMV0pO1xyXG4gICAgY29uc3QgeWVhciA9IDIwMDAgKyBOdW1iZXIobW9udGhNYXRjaFsyXSk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGNvbnN0IGVuZHNCeURhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXlOdW1iZXIpO1xyXG4gICAgZW5kc0J5RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgcmV0dXJuIGVuZHNCeURhdGUgPCB0b2RheTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZUR1ZVRpbWUoZHVlVGltZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChkdWVUaW1lID09IG51bGwgfHwgZHVlVGltZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbHVlID0gU3RyaW5nKGR1ZVRpbWUpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XHJcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL14oXFxkezEsMn0pOihcXGR7Mn0pOlxcZHsyfVxccyooQU18UE0pJC9pLCAnJDE6JDIgJDMnKTtcclxuICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2goL14oXFxkezEsMn0pOihcXGR7Mn0pXFxzKihBTXxQTSkkL2kpO1xyXG4gICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBsZXQgaG91ciA9IE51bWJlcihtYXRjaFsxXSk7XHJcbiAgICBpZiAoaG91ciA9PT0gMCkge1xyXG4gICAgICBob3VyID0gMTI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7aG91cn06JHttYXRjaFsyXX0gJHttYXRjaFszXS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIHJlbW92ZXMgYWxsIHdoaXRlc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmdcclxuICAgKiBAcGFyYW0ge2FueX0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSByZXNwb25zaWJpbGl0eVxyXG4gICAqIEByZXR1cm5zIHRoZSB0cmltbWVkTmFtZSB2YXJpYWJsZS5cclxuICAgKi9cclxuICBjaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG5hbWU6IGFueSkge1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHZhciB0cmltbWVkTmFtZSA9IG5hbWUudG9TdHJpbmcoKS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgICB0cmltbWVkTmFtZSA9IHRyaW1tZWROYW1lLnJlcGxhY2UoLyAgKy9nLCAnICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyaW1tZWROYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHJlc3BvbnNpYmlsaXR5IG5hbWUgaXMgdmFsaWQsIGFuZCB0aGUgYXNzaWduZWUgYW5kIGFzc2lnbm9yIGFyZSBub3QgZW1wdHksIHRoZW4gcmV0dXJuXHJcbiAgICogdHJ1ZS4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2VcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgcGFzc2VkIGluXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGlzVmFsaWREYXRhKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHkgPSB0aGlzLmNoZWNrVmFsaWRSZXNwb25zaWJpbGl0eU5hbWUoXHJcbiAgICAgIGRhdGE/LnJlc3BvbnNpYmlsaXR5TmFtZVxyXG4gICAgKT8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgY29uc3QgYXNzaWduZWUgPSBkYXRhPy5hc3NpZ25lZT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgZnJlcXVlbmN5ID0gZGF0YT8uZnJlcXVlbmN5Py5sZW5ndGggPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAoYXNzaWduZWUgJiYgcmVzcG9uc2liaWxpdHkgJiYgZnJlcXVlbmN5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGFzc2lnbm9yIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWdub3IgaXMgbm90IHNldFxyXG4gICAqIGFuZCB0aGUgZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgdGhlXHJcbiAgICogc2FtZSBhcyB0aGUgcmV2aWV3ZXIsIG92ZXJzZWVyLCBvciBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0IGFuZCB0aGVcclxuICAgKiBkZWZhdWx0T3duZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSByZXZpZXdlciBpcyB0aGUgc2FtZSBhc1xyXG4gICAqIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCwgdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSxcclxuICAgKiByZXR1cm4gdHJ1ZVxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55IC0gdGhpcyBpcyB0aGUgZGF0YSB0aGF0IGlzIHBhc3NlZCBpbiBmcm9tIHRoZSBmb3JtLlxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkVXNlcnMoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChkYXRhPy5hc3NpZ25vciAmJlxyXG4gICAgICAgIChkYXRhPy5hc3NpZ25vciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKCFkYXRhPy5hc3NpZ25vciAmJlxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKGRhdGE/LmFzc2lnbmVlICYmXHJcbiAgICAgICAgKGRhdGE/LmFzc2lnbmVlID09IGRhdGE/LnJldmlld2VyIHx8XHJcbiAgICAgICAgICBkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKCFkYXRhPy5hc3NpZ25lZSAmJlxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKGRhdGE/LnJldmlld2VyICYmXHJcbiAgICAgICAgKGRhdGE/LnJldmlld2VyID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICBkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAhZGF0YT8uYXNzaWduZWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGluIGEgZGF0YSBvYmplY3QgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggNCBib29sZWFuIHByb3BlcnRpZXMuXHJcbiAgICogVGhlIGJvb2xlYW4gcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBpc1ZhbGlkQXNzaWduZWU6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkQXNzaWdub3I6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkUmV2aWV3ZXI6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkT3ZlcnNlZXI6IHRydWVcclxuICAgKiB9XHJcbiAgICovXHJcbiAgdmFsaWRhdGVEYXRhV2l0aFByb2dyYW0oZGF0YTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBkYXRhPy5wcm9ncmFtXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBc3NpZ25lZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChhc3NpZ25lZTogYW55KSA9PiBhc3NpZ25lZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5hc3NpZ25lZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWdub3IgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWdub3JzTGlzdD8uZmlsdGVyKFxyXG4gICAgICAoYXNzaWdub3I6IGFueSkgPT4gYXNzaWdub3I/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWdub3JcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJldmlld2VyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXI/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ucmV2aWV3ZXJcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE92ZXJzZWVyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXI/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ub3ZlcnNlZXJcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKG5vdGlmeU9uRmFpbHVyZTogYW55KSA9PlxyXG4gICAgICAgIG5vdGlmeU9uRmFpbHVyZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmVcclxuICAgICk7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbmVlID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkQXNzaWdub3IgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRSZXZpZXdlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE92ZXJzZWVyID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gdHJ1ZTtcclxuICAgIGlmIChwcm9ncmFtICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5hc3NpZ25lZT8ubGVuZ3RoICYmIHNlbGVjdGVkQXNzaWduZWU/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRBc3NpZ25lZSA9IHByb2dyYW1bMF0/LmFzc2lnbmVlPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkQXNzaWduZWVbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ucmV2aWV3ZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZFJldmlld2VyPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkUmV2aWV3ZXIgPSBwcm9ncmFtWzBdPy5yZXZpZXdlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZFJldmlld2VyWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWRPdmVyc2Vlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZE92ZXJzZWVyID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPdmVyc2VlclswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmVbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNWYWxpZEFzc2lnbmVlOiBpc1ZhbGlkQXNzaWduZWUsXHJcbiAgICAgIGlzVmFsaWRBc3NpZ25vcjogaXNWYWxpZEFzc2lnbm9yLFxyXG4gICAgICBpc1ZhbGlkUmV2aWV3ZXI6IGlzVmFsaWRSZXZpZXdlcixcclxuICAgICAgaXNWYWxpZE92ZXJzZWVyOiBpc1ZhbGlkT3ZlcnNlZXIsXHJcbiAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmU6IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgdHdvIHN0cmluZ3MgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBwcm9wZXJ0aWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb2dyYW1OYW1lIC0gc3RyaW5nIC0mZ3Q7IE5hbWUgb2YgdGhlIHByb2dyYW1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoaWxlUHJvZ3JhbV0gLSBzdHJpbmcgPSZndDsgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc3ViLXByb2dyYW1cclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBwcm9ncmFtSWQ6IDEsXHJcbiAgICogICBjaGlsZFByb2dyYW1JZDogMixcclxuICAgKiAgIGNhdGVnb3J5SWQ6ICcxLDInXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIGdldFByb2dyYW1JZChwcm9ncmFtTmFtZTogc3RyaW5nLCBjaGlsZVByb2dyYW0/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcihcclxuICAgICAgKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IHByb2dyYW1OYW1lXHJcbiAgICApO1xyXG4gICAgbGV0IHN1YlByb2dyYW07XHJcbiAgICBsZXQgc3ViUHJvZ3JhbUlkO1xyXG4gICAgbGV0IGNhdGVnb3J5SWQ7XHJcbiAgICBpZiAoY2hpbGVQcm9ncmFtPy5sZW5ndGggJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIHN1YlByb2dyYW0gPSBwcm9ncmFtWzBdPy5jaGlsZENhdGVnb3J5Py5maWx0ZXIoXHJcbiAgICAgICAgKHN1YlByb2dyYW06IGFueSkgPT4gc3ViUHJvZ3JhbT8ubmFtZSA9PT0gY2hpbGVQcm9ncmFtXHJcbiAgICAgICk7XHJcbiAgICAgIHN1YlByb2dyYW1JZCA9IHN1YlByb2dyYW0/Lmxlbmd0aCA/IHN1YlByb2dyYW1bMF0/LmlkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdWJQcm9ncmFtSWQgJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPVxyXG4gICAgICAgIHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKSArICcsJyArIHN1YlByb2dyYW1JZD8udG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSBpZiAocHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPSBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwcm9ncmFtSWQ6IHByb2dyYW0/Lmxlbmd0aCA/IHByb2dyYW1bMF0/LnByb2dyYW1JZCA6IHVuZGVmaW5lZCxcclxuICAgICAgY2hpbGRQcm9ncmFtSWQ6IHN1YlByb2dyYW1JZCxcclxuICAgICAgY2F0ZWdvcnlJZDogY2F0ZWdvcnlJZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcGRvd24uXHJcbiAgICogaXQgd2lsbCByZXR1cm4gZW1wbG95ZWUgaWQgaW4gdGhpcyBmb3JtICcxMjM0LDIzNDUnLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlSWRGcm9tR3JvdXAoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgZW1wSWQ6IGFueSA9IFtdO1xyXG4gICAgbGV0IGVtcGxveWVlX2lkOiBhbnkgPSBbXTtcclxuICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZW5FbGVtZW50Py5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgIGVtcElkID0gZW5FbGVtZW50Py5teV9tZW1iZXJfaWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGVtcElkPy5sZW5ndGgpIHtcclxuICAgICAgZW1wSWQ/LmZvckVhY2goKGlkOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHVzZXI/Lm15X21lbWJlcl9pZCA9PSBpZCkge1xyXG4gICAgICAgICAgICBlbXBsb3llZV9pZD8ucHVzaCh1c2VyPy5lbXBsb3llZV9pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcGxveWVlX2lkPy50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGl0ZW0gaXMgYSBncm91cCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSBhbnkgLSB0aGUgaXRlbSB0aGF0IGlzIGJlaW5nIGNoZWNrZWRcclxuICAgKi9cclxuICBpc0dyb3VwU2VsZWN0ZWQoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgKHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0IHx8IFtdKS5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSk6IGFueSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0gJiZcclxuICAgICAgICAoaXRlbT8uaW5jbHVkZXMoJ1VzZXJzKScpIHx8IGl0ZW0/LmluY2x1ZGVzKCdVc2VyKScpKSAmJlxyXG4gICAgICAgIHR5cGVvZiBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZCA9PSAnb2JqZWN0J1xyXG4gICAgICApIHtcclxuICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXNHcm91cDtcclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2tcIiBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiID5cclxuICAgIDwhLSAtIG1haW4gY29udGFpbmVyIHN0YXJ0cyBoZXJlIC0gLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NwcmVhZHNoZWV0LW11bHRpcGxlLWNhdGVnb3J5LnN2Z1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDQ+WW91IGNhbiBlbnRydXN0IG11bHRpcGxlIHJlc3BvbnNpYmlsaXRpZXMgaW4ganVzdCB0d28gZWFzeSBzdGVwczo8L2g0PlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3XigJlyZSBnb29kIHRvIGdvITwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZG93bmxvYWRcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnTk9UX0RPV05MT0FESU5HJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIiB0eXBlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWI7PC9pPiBEb3dubG9hZCBUZW1wbGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgPGFwcC1saW5lLWxvYWRlciBbbG9hZGVySGVpZ2h0XT1cIicyJ1wiPjwvYXBwLWxpbmUtbG9hZGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFjOzwvaT5Eb3dubG9hZCBDb21wbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLWFnYWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+UmV0cnkgRG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRmlsZSB8fCBpc1dyb25nRm9ybWF0fHwgaXNGaWxlRW1wdHlcIlxyXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGFwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxyXG4gICAgW3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZF09XCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICBbZmlsZU5hbWVdPVwiZmlsZU5hbWVcIlxyXG4gICAgW2xvYWRlcl09XCJsb2FkZXJcIlxyXG4gICAgW2RlZmF1bHRPd25lcl09XCJkZWZhdWx0T3duZXJcIlxyXG4gICAgW3RhYlR5cGVdPVwidGFiVHlwZVwiXHJcbiAgICBbYnVsa1VwbG9hZF09XCJidWxrVXBsb2FkXCJcclxuICAgIChzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQpPVwic3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKClcIlxyXG4gICAgKHNlbGVjdGVkVGFiKT1cInNlbGVjdGVkVGFiKCRldmVudClcIlxyXG4gICAgKGNhbmNlbCk9XCJyZXNldCgpXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eVR5cGVdPVwiJ211bHRpVGFiJ1wiPlxyXG48L2FwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXc+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcblxyXG48aW5wdXQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImZpbGVWYWx1ZVwiIGlkPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBhY2NlcHQ9XCIueGxzeFwiIChjaGFuZ2UpPVwidXBsb2FkZWRGaWxlKCRldmVudClcIiBtdWx0aXBsZSAvPlxyXG48YXBwLXNtaWxleS1kaWFsb2ctaW5saW5lICpuZ0lmPVwic2hvd1NtaWxleVwiIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VcIiBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCIgKGFjdGlvbik9XCJhY3Rpb24oJGV2ZW50KVwiIChjbG9zZVNtaWxleSk9XCJjbG9zZVNtaWxleSgkZXZlbnQpXCI+PC9hcHAtc21pbGV5LWRpYWxvZy1pbmxpbmU+Il19