@churchillliving/se-ui-toolkit 6.54.665 → 6.54.667

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.
@@ -273,27 +273,69 @@ export function getFormField({ formSections }, field) {
273
273
  }
274
274
  // this function is always return a value of the field. If returnDisplayFieldValue is true and displayField
275
275
  // exist in the field then always return a displayField value.
276
+ // export function getFormFieldValue(
277
+ // { formSections }: IDynamicForm,
278
+ // field: string,
279
+ // returnDisplayFieldValue:boolean = false
280
+ // ) {
281
+ // let value;
282
+ // for (const section of formSections as any) {
283
+ // section.fields.forEach((formField: any) => {
284
+ // if (formField.field?.toLowerCase() === field?.toLowerCase()) {
285
+ // let isValid = typeof formField.value === 'object' && formField.control !== EFormControl.CALENDAR && returnDisplayFieldValue;
286
+ // if (
287
+ // (formField.control === EFormControl.LOOKUP_INPUT || formField.control === EFormControl.INPUT) &&
288
+ // formField.displayField
289
+ // ) {
290
+ // value = isValid ? formField.value?.text : formField.value?.value;
291
+ // } else {
292
+ // value = isValid
293
+ // ? formField.value?.text
294
+ // : typeof formField.value === 'object' && formField.control !== EFormControl.CALENDAR && formField.control !== EFormControl.MULTISELECT
295
+ // ? formField.value?.value
296
+ // : formField.value;
297
+ // }
298
+ // }
299
+ // });
300
+ // }
301
+ // return value;
302
+ // }
276
303
  export function getFormFieldValue({ formSections }, field, returnDisplayFieldValue = false) {
277
- let value;
278
304
  for (const section of formSections) {
279
- section.fields.forEach((formField) => {
280
- if (formField.field?.toLowerCase() === field?.toLowerCase()) {
281
- let isValid = typeof formField.value === 'object' && formField.control !== EFormControl.CALENDAR && returnDisplayFieldValue;
282
- if ((formField.control === EFormControl.LOOKUP_INPUT || formField.control === EFormControl.INPUT) &&
283
- formField.displayField) {
284
- value = isValid ? formField.value?.text : formField.value?.value;
285
- }
286
- else {
287
- value = isValid
288
- ? formField.value?.text
289
- : typeof formField.value === 'object' && formField.control !== EFormControl.CALENDAR && formField.control !== EFormControl.MULTISELECT
290
- ? formField.value?.value
291
- : formField.value;
292
- }
305
+ if (section?.fields) {
306
+ const value = getFormFieldsInfo(section?.fields, field, returnDisplayFieldValue);
307
+ if (value !== undefined)
308
+ return value;
309
+ }
310
+ if (section?.headerFields) {
311
+ const value = getFormFieldsInfo(section?.headerFields, field, returnDisplayFieldValue);
312
+ if (value !== undefined)
313
+ return value;
314
+ }
315
+ }
316
+ return undefined;
317
+ }
318
+ export function getFormFieldsInfo(sectionFields, field, returnDisplayFieldValue = false) {
319
+ for (const formField of sectionFields) {
320
+ if (formField.field?.toLowerCase() === field?.toLowerCase()) {
321
+ const isValid = typeof formField.value === 'object' && formField.control !== EFormControl.CALENDAR && returnDisplayFieldValue;
322
+ if ((formField.control === EFormControl.LOOKUP_INPUT ||
323
+ formField.control === EFormControl.INPUT) &&
324
+ formField.displayField) {
325
+ return isValid ? formField.value?.text : formField.value?.value;
293
326
  }
294
- });
327
+ else {
328
+ return isValid
329
+ ? formField.value?.text
330
+ : typeof formField.value === 'object' &&
331
+ formField.control !== EFormControl.CALENDAR &&
332
+ formField.control !== EFormControl.MULTISELECT
333
+ ? formField.value?.value
334
+ : formField.value;
335
+ }
336
+ }
295
337
  }
296
- return value;
338
+ return undefined;
297
339
  }
298
340
  export function getFormFieldValueAsString(dynamicForm, field) {
299
341
  let value = getFormFieldValue(dynamicForm, field, true);
@@ -490,111 +532,109 @@ function setEditFormFieldsValue(data, formFields, keys, record, allData) {
490
532
  }
491
533
  formField.label.labelControl.hyperlink.link = setHyperlink(keys, record, formField.label?.labelControl?.hyperlink?.link, paramKeys, params, allData);
492
534
  }
493
- else {
494
- if (formField.control === EFormControl.CALENDAR && matchedKey) {
495
- formField.value = formField.timeOnly ? record[matchedKey] : record[matchedKey]
496
- ? new Date(record[matchedKey])
497
- : '';
498
- }
499
- else if (formField.control === EFormControl.CARD) {
500
- if (formField.card && formField.card.formSections) {
501
- if (!formField.card.data) {
502
- formField.card.data = data;
503
- }
504
- setEditFormFieldsInfo(data, formField.card);
535
+ if (formField.control === EFormControl.CALENDAR && matchedKey) {
536
+ formField.value = formField.timeOnly ? record[matchedKey] : record[matchedKey]
537
+ ? new Date(record[matchedKey])
538
+ : '';
539
+ }
540
+ else if (formField.control === EFormControl.CARD) {
541
+ if (formField.card && formField.card.formSections) {
542
+ if (!formField.card.data) {
543
+ formField.card.data = data;
505
544
  }
545
+ setEditFormFieldsInfo(data, formField.card);
506
546
  }
507
- else if (formField.control === EFormControl.AUTOCOMPLETE &&
508
- matchedKey) {
509
- let arrayValue = [];
510
- if (record[matchedKey] && formField.displayField) {
511
- arrayValue.push({ [formField.displayField]: record[matchedKey] });
512
- }
513
- formField.value = arrayValue;
547
+ }
548
+ else if (formField.control === EFormControl.AUTOCOMPLETE &&
549
+ matchedKey) {
550
+ let arrayValue = [];
551
+ if (record[matchedKey] && formField.displayField) {
552
+ arrayValue.push({ [formField.displayField]: record[matchedKey] });
514
553
  }
515
- else if (formField.control === EFormControl.LOOKUP_INPUT || formField.control === EFormControl.INPUT) {
516
- if (formField.label &&
517
- formField.label.labelControl &&
518
- formField.label.labelControl.lookupControl &&
519
- formField.label.labelControl.lookupControl.data) {
520
- const obj = autoSetLookupData(formField.label.labelControl.lookupControl.data.data, record);
521
- if (obj) {
522
- formField.label.labelControl.lookupControl.data.data = obj;
523
- }
554
+ formField.value = arrayValue;
555
+ }
556
+ else if (formField.control === EFormControl.LOOKUP_INPUT || formField.control === EFormControl.INPUT) {
557
+ if (formField.label &&
558
+ formField.label.labelControl &&
559
+ formField.label.labelControl.lookupControl &&
560
+ formField.label.labelControl.lookupControl.data) {
561
+ const obj = autoSetLookupData(formField.label.labelControl.lookupControl.data.data, record);
562
+ if (obj) {
563
+ formField.label.labelControl.lookupControl.data.data = obj;
524
564
  }
525
- if (formField.lookupControl &&
526
- formField.lookupControl.data &&
527
- formField.lookupControl.data.data) {
528
- const obj = autoSetLookupData(formField.lookupControl.data.data, record);
529
- if (obj) {
530
- formField.lookupControl.data.data = obj;
531
- }
565
+ }
566
+ if (formField.lookupControl &&
567
+ formField.lookupControl.data &&
568
+ formField.lookupControl.data.data) {
569
+ const obj = autoSetLookupData(formField.lookupControl.data.data, record);
570
+ if (obj) {
571
+ formField.lookupControl.data.data = obj;
532
572
  }
533
- if (record[matchedKey]) {
534
- formField.value = toTrim(record[matchedKey]);
573
+ }
574
+ if (record[matchedKey]) {
575
+ formField.value = toTrim(record[matchedKey]);
576
+ }
577
+ if (formField.displayField &&
578
+ formField.displayField.length > 0) {
579
+ const matchDisplayField = getMatchKey(record, formField.displayField);
580
+ if (matchDisplayField) {
581
+ formField.value = {
582
+ text: toTrim(record[matchDisplayField]),
583
+ value: formField.value?.value,
584
+ };
535
585
  }
536
- if (formField.displayField &&
537
- formField.displayField.length > 0) {
538
- const matchDisplayField = getMatchKey(record, formField.displayField);
539
- if (matchDisplayField) {
540
- formField.value = {
541
- text: toTrim(record[matchDisplayField]),
542
- value: formField.value?.value,
543
- };
544
- }
545
- const matchValueField = getMatchKey(record, formField.field);
546
- if (matchValueField) {
547
- formField.value = {
548
- text: formField.value?.text,
549
- value: toTrim(record[matchValueField]),
550
- };
551
- }
586
+ const matchValueField = getMatchKey(record, formField.field);
587
+ if (matchValueField) {
588
+ formField.value = {
589
+ text: formField.value?.text,
590
+ value: toTrim(record[matchValueField]),
591
+ };
552
592
  }
553
593
  }
554
- else if (formField.control === EFormControl.COMPONENT &&
555
- formField.componentControl?.data) {
556
- const setDataFromRecord = findKeysAndValue(formField.componentControl.data, record);
557
- formField.componentControl.data = setDataFromRecord?.data;
558
- if (setDataFromRecord?.matchData) {
559
- changeDynamicFormState(formField.componentControl.id, formField.componentControl?.data, false);
560
- }
594
+ }
595
+ else if (formField.control === EFormControl.COMPONENT &&
596
+ formField.componentControl?.data) {
597
+ const setDataFromRecord = findKeysAndValue(formField.componentControl.data, record);
598
+ formField.componentControl.data = setDataFromRecord?.data;
599
+ if (setDataFromRecord?.matchData) {
600
+ changeDynamicFormState(formField.componentControl.id, formField.componentControl?.data, false);
561
601
  }
562
- else if (formField.control === EFormControl.NUMERIC &&
563
- formField.label?.labelControl?.lookupControl?.data?.data) {
564
- let setData = formField.label.labelControl.lookupControl;
565
- setData.data.data = findKeysAndValue(setData.data.data, record)?.data;
566
- changeDynamicFormState(setData.id, setData.data.data, false);
602
+ }
603
+ else if (formField.control === EFormControl.NUMERIC &&
604
+ formField.label?.labelControl?.lookupControl?.data?.data) {
605
+ let setData = formField.label.labelControl.lookupControl;
606
+ setData.data.data = findKeysAndValue(setData.data.data, record)?.data;
607
+ changeDynamicFormState(setData.id, setData.data.data, false);
608
+ }
609
+ else if (formField.control === EFormControl.HYPERLINK
610
+ && formField.hyperlink?.target === EHyperlink.DIALOG
611
+ && formField.hyperlink.params) {
612
+ formField.hyperlink.params = findKeysAndValue(formField.hyperlink.params, record)?.data;
613
+ }
614
+ else if (matchedKey) {
615
+ if (formField.format) {
616
+ formField.value = formatFormFieldValue(formField, record[matchedKey]);
567
617
  }
568
- else if (formField.control === EFormControl.HYPERLINK
569
- && formField.hyperlink?.target === EHyperlink.DIALOG
570
- && formField.hyperlink.params) {
571
- formField.hyperlink.params = findKeysAndValue(formField.hyperlink.params, record)?.data;
618
+ else if (formField.control === EFormControl.CHECKBOX) {
619
+ formField.value =
620
+ record[matchedKey] &&
621
+ (record[matchedKey].toString() === '1' ||
622
+ record[matchedKey].toString() === 'true')
623
+ ? true
624
+ : false;
572
625
  }
573
- else if (matchedKey) {
574
- if (formField.format) {
575
- formField.value = formatFormFieldValue(formField, record[matchedKey]);
576
- }
577
- else if (formField.control === EFormControl.CHECKBOX) {
578
- formField.value =
579
- record[matchedKey] &&
580
- (record[matchedKey].toString() === '1' ||
581
- record[matchedKey].toString() === 'true')
582
- ? true
583
- : false;
584
- }
585
- else if (formField.control === EFormControl.DROPDOWN) {
586
- let dropValue = record[matchedKey];
587
- if (dropValue && dropValue?.toString() !== '0') {
588
- formField.value = dropValue.toString();
589
- }
590
- }
591
- else if (formField.control === EFormControl.SELECTBUTTON) {
592
- formField.value = toTrim(record[matchedKey]) || formField.value;
593
- }
594
- else {
595
- formField.value = toTrim(record[matchedKey]);
626
+ else if (formField.control === EFormControl.DROPDOWN) {
627
+ let dropValue = record[matchedKey];
628
+ if (dropValue && dropValue?.toString() !== '0') {
629
+ formField.value = dropValue.toString();
596
630
  }
597
631
  }
632
+ else if (formField.control === EFormControl.SELECTBUTTON) {
633
+ formField.value = toTrim(record[matchedKey]) || formField.value;
634
+ }
635
+ else {
636
+ formField.value = toTrim(record[matchedKey]);
637
+ }
598
638
  }
599
639
  });
600
640
  }
@@ -1134,4 +1174,4 @@ export function calendarMinMaxValue(item, value, index) {
1134
1174
  return validation;
1135
1175
  }
1136
1176
  /* #endregion */
1137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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O0lBQzdELElBQUksVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUNqQyxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFDO1FBQy9DLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDekIsQ0FBQztTQUNJLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFDO1FBQ3BELFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFDRCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnksIElGaWx0ZXJEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQge1xuICBFRm9ybWF0VHlwZSxcbiAgRUZvcm1Db250cm9sLFxuICBFSHlwZXJsaW5rLFxuICBFTWF0Y2hNb2RlLFxuICBFT3BlcmF0b3IsXG4gIElEeW5hbWljQ2FyZCxcbiAgSUR5bmFtaWNGb3JtLFxuICBJRm9ybWF0LFxuICBJRm9ybUZpZWxkLFxuICBJRm9ybVNlY3Rpb24sXG59IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IGFkZEdsb2JhbEZpbHRlciwgRUdyaWRDb2x1bW5UeXBlLCBJR2xvYmFsRmlsdGVyLCBJR3JpZENvbHVtbiwgSUdyaWRGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qICNyZWdpb24gcHVibGljIG1ldGhvZHMgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHZhbHVlIDogYW55XG4gKiBGdW5jdGlvbiByZWNlaXZlcyB0aGUgdmFsdWUgYW5kIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdGVkLlxuICogRG8gbm90IHVzZSBmYXQgYXJyb3cgZnVuY3Rpb24gYXMgdGhleSBkbyBub3QgcHJlc2VydmUgdGhlIGNvbnRleHQuXG4gKiB0aGlzLnZhbHVlIHJlZmVycyB0byB0aGUgdmFsdWUgb2YgSUZvcm1GaWVsZCBPYmplY3RcbiAqIE1vZGlmeSB0aGlzLnZhbHVlIGRpcmVjdGx5IHRvIHJlY2VpdmUgZWZmZWN0XG4gKi9cbiB2YXIgc3BsaXRTY3JlZW4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGZvcm1zdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY29sdW1uc1N0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjYXJkU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIHJvdXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmaWx0ZXJCdG5DaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5zU3RhdGUocGFnZVNldHRpbmc6IGFueSkge1xuICBjb2x1bW5zU3RhdGUubmV4dChwYWdlU2V0dGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNvbHVtbnNTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNvbHVtbnNTdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvblNjcmVlblNwbGl0Q2hhbmdlICgpe1xuICByZXR1cm4gc3BsaXRTY3JlZW4uYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU3BsaXRTY3JlZW4obWVudUl0ZW0pe1xuICBzcGxpdFNjcmVlbi5uZXh0KHtvcmlnQ29tcG9uZW50OiBtZW51SXRlbS5vcmlnQ29tcG9uZW50LCBwYW5lbENvbXBvbmVudDogbWVudUl0ZW0/LmNvbXBvbmVudCwgY29uZmlnRGF0YTptZW51SXRlbT8uZGF0YT8uZGF0YX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShpZDogYW55LCBkYXRhOiBhbnksIGxvYWRDb21wb25lbnQ/OiBhbnkpIHtcbiAgZm9ybXN0YXRlLm5leHQoeyBpZCwgZGF0YSwgbG9hZENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZvcm1zdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0bihzdGF0ZVZhbHVlKSB7XG4gIGZpbHRlckJ0bkNoYW5nZS5uZXh0KHN0YXRlVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZpbHRlckJ0bkNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uUm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcmV0dXJuIHJvdXRlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcm91dGVDaGFuZ2UubmV4dCgnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gb25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY2FyZFN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuIH1cblxuIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljQ2FyZFN0YXRlKGRhdGE6IGFueSkge1xuICBjYXJkU3RhdGUubmV4dCh7IGRhdGEgfSk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gY2xvc2VJRnJhbWUoKXtcbiAgbGV0IGNsb3NlID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucC1kaWFsb2ctY2xvc2UtYnV0dG9uJylhcyBIVE1MRWxlbWVudFxuICAgIGlmKGNsb3NlKSB7XG4gICAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOmJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIGxldCB2YWx1ZTtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZvcm1TZWN0aW9ucyBhcyBhbnkpIHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWQgPyBmb3JtRmllbGQudmFsdWU/LnRleHQgOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICAgIDogdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXSxcbikge1xuICBsZXQgc2VjdGlvbkZpZWxkczogYW55O1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiAodmFsdWUgfHwgdmFsdWUgPT0gJycpID8gdmFsdWUgOiBudWxsLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5maWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmhlYWRlckZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhOiBhbnksIGZvcm1GaWVsZHM6IGFueSwga2V5czogYW55LCByZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55KXtcbiAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhLCBtYXRjaGVkS2V5KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHBhcmFtcyl7XG4gICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLm9yaWduYWxMaW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtJZCAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudGltZU9ubHkgPyByZWNvcmRbbWF0Y2hlZEtleV0gOiByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICA/IG5ldyBEYXRlKHJlY29yZFttYXRjaGVkS2V5XSBhcyBzdHJpbmcpXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNhcmQgJiYgZm9ybUZpZWxkLmNhcmQuZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBmb3JtRmllbGQuY2FyZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBtYXRjaGVkS2V5XG4gICAgICApIHtcbiAgICAgICAgbGV0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZFttYXRjaGVkS2V5XSAmJiBmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBhcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYocmVjb3JkW21hdGNoZWRLZXldKXtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXRjaERpc3BsYXlGaWVsZCA9IGdldE1hdGNoS2V5KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHRvVHJpbShyZWNvcmRbbWF0Y2hEaXNwbGF5RmllbGRdKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICBpZiAobWF0Y2hWYWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgdmFsdWU6IHRvVHJpbShyZWNvcmRbbWF0Y2hWYWx1ZUZpZWxkXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSxcbiAgICAgICAgICByZWNvcmRcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSA9IHNldERhdGFGcm9tUmVjb3JkPy5kYXRhO1xuICAgICAgICBpZihzZXREYXRhRnJvbVJlY29yZD8ubWF0Y2hEYXRhKXtcbiAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQsXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgbGV0IHNldERhdGEgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2w7XG4gICAgICAgIHNldERhdGEuZGF0YS5kYXRhID0gZmluZEtleXNBbmRWYWx1ZShzZXREYXRhLmRhdGEuZGF0YSwgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyBcbiAgICAgICAgJiYgIGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cgXG4gICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBmaW5kS2V5c0FuZFZhbHVlKGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLCByZWNvcmQpPy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPVxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldICYmXG4gICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfWVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgZHJvcFZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGRyb3BWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT10b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKSB8fCBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBtYXRjaGVkS2V5OiBhbnkgPSAnJykge1xuICBpZiAoaXRlbS5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQgJiYgaXRlbT8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmIG1hdGNoZWRLZXkpIHtcbiAgICBpdGVtLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gIH1cbiAgaWYgKFxuICAgIGl0ZW0ubGFiZWwgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluayAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXNcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyk7XG4gICAgY29uc3QgbGluayA9IGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rO1xuICAgIGlmIChpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaykge1xuICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgbGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rKFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgcmVjb3JkOiBhbnksXG4gIGxpbms6IHN0cmluZyxcbiAgcGFyYW1LZXlzOiBzdHJpbmdbXSxcbiAgcGFyYW1zOiBhbnksXG4gIGFsbERhdGE6IGFueVtdID0gW11cbik6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5rOiBzdHJpbmcgPSBsaW5rO1xuICByZWNvcmQgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZWNvcmQpO1xuICBwYXJhbUtleXMuZm9yRWFjaCgocGFyYW1rZXkpID0+IHtcbiAgICBsZXQgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCk7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KSB7XG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbUluUmVjb3JkICYmIHBhcmFtICE9IHBhcmFtVmFsdWUgJiYgcHJvcFZhbHVlKSB7XG4gICAgICAgICAgaWYgKG5ld0xpbmsuaW5jbHVkZXMocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHBhcmFtID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSAhPSBwYXJhbVZhbHVlID8gcGFyYW1WYWx1ZSA6IHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0gIT0gcGFyYW1WYWx1ZSA/IHBhcmFtIDogcGFyYW1WYWx1ZSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0ocGFyYW1WYWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgPyBwcm9wVmFsdWUgOiBwYXJhbVZhbHVlKSk7XG4gICAgICAgIFxuICAgICAgICBpZiAobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKG51bGwpKSB7XG4gICAgICAgICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UobnVsbCwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldCBwYXJhbSB2YWx1ZSBmcm9tIGFwaSByZXNwb25zZSwgaWYgcGFyYW0ga2V5IGV4aXN0cyBpbiBpdFxuICAgICAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgcGFyYW1WYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShcbiAgICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksXG4gICAgICAgICAgICAgIHRvVHJpbShwYXJhbVZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKCcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmVwbGFjZSB0aGUge3twYXJhbX19IHdpdGggZW1wdHlcbiAgaWYobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKFwie3tcIikgJiYgbmV3TGluay5pbmNsdWRlcyhcIn19XCIpKXtcbiAgICBuZXdMaW5rID0gbmV3TGluaz8ucmVwbGFjZSgveysuKj99Ky9nLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuLy8gaXRzIGNoZWNraW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGluIGh5cGVybGluayBwYXJhbSB0aGVuIGl0IHNldCBrZXkgYXMgYSBwYXJhbVZhbHVlXG5mdW5jdGlvbiBzZXRQYXJhbUtleVZhbHVlKHJlY29yZDogYW55LCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBwYXJhbWtleTogYW55KXtcbiAgbGV0IHBhcmFtVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWYoYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApe1xuICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YTogYW55KT0+e1xuICAgICAgaWYoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KSA9PntcbiAgICAgICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCkuc29tZSgocmVjb3JkKT0+IHJlY29yZC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMocmVjb3JkKS5zb21lKCh4KT0+IHggPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIHJldHVybiBwYXJhbVZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZykge1xuICBsZXQgcHJvcFZhbHVlOiBhbnk7XG4gIGRhdGEucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoa2V5ICYmIHByb3BOYW1lICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHByb3BWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9wVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZDogYW55KSB7XG4gIGlmIChcbiAgICBmaWVsZC5mb3JtYXQ/LnR5cGUgPT09IEVGb3JtYXRUeXBlLkJPT0xFQU5fWU4gfHxcbiAgICBmaWVsZC5mb3JtYXQ/LmZvcm1hdHRlcj8ubmFtZSA9PT0gJ3RvQm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuIChmaWVsZC52YWx1ZSA9PT0gMSB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ3RydWUnIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAnWScpID8gJ1knIDogJ04nO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgIChmaWVsZC52YWx1ZSB8fCBmaWVsZC52YWx1ZSA9PT0gJycpXG4gICkge1xuICAgIGlmKGZpZWxkLnRpbWVPbmx5IHx8IGZpZWxkLnNob3d0aW1lKXtcbiAgICAgIC8vIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9IChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pJC87IC8vIFJlZ2V4IGZvciBkYXRldGltZSBmb3JtYXRcbiAgICAgIC8vIGNvbnN0IG1hdGNoID0gZmllbGQudmFsdWUubWF0Y2goZGF0ZVRpbWVSZWdleCk7XG4gICAgICAvLyBpZiAobWF0Y2gpIHtcbiAgICAgIC8vICAgZmllbGQudmFsdWUgPSBmb3JtYXREYXRlKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgLy8gfWVsc2Uge1xuICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgICAgLy8gfVxuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4gICkge1xuICBsZXQgb2JqID0ge307XG4gIGxldCByZWNvcmQgPSBzZXREYXRhRmllbGRzKFtyZXNwb25zZV0pO1xuICBpZiAocmVjb3JkICYmIHJlY29yZC5sZW5ndGggPiAwKSB7XG4gICAgcmVjb3JkLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgcmVjb3JkID0geDtcbiAgICB9KTtcbiAgfVxuICBpZiAoZmllbGREYXRhICYmIHJlY29yZCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkRGF0YSkuZm9yRWFjaCgoW2RhdGFLZXksIGRhdGFWYWx1ZV06IGFueSkgPT4ge1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFLZXk/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgbGV0IHZhbHVlID0gcm93S2V5cz8uZmluZChcbiAgICAgICAgKHgpID0+IGRhdGFWYWx1ZSAmJiBkYXRhVmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhVmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgICAgKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA/IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA6IHJlY29yZFt2YWx1ZV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJylcbiAgICBkaWFsb2dbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdicgKyBpZClcbiAgICBjb25zdCBkaWFsb2doZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZy1oZWFkZXInKVxuICAgIGRpYWxvZ2hlYWRlclswXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2aGVhZGVyJyArIGlkKVxuICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2JyArIGlkKTtcblxuICAgICAgbGV0IHBvczEgPSAwLFxuICAgICAgICBwb3MyID0gMCxcbiAgICAgICAgcG9zMyA9IDAsXG4gICAgICAgIHBvczQgPSAwO1xuICBcbiAgICAgIGNvbnN0IGRyYWdNb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MxID0gcG9zMyAtIGUuY2xpZW50WDtcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGVsbW50LnN0eWxlLnRvcCA9IGVsbW50Py5vZmZzZXRUb3AgLSBwb3MyICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IGVsbW50Py5vZmZzZXRMZWZ0IC0gcG9zMSArICdweCc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGNsb3NlRHJhZ0VsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgIH07XG4gIFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKS5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9IGVsc2UgaWYoZWxtbnQpIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0gIFxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyTWluTWF4VmFsdWUoaXRlbTogYW55LHZhbHVlOiBhbnksIGluZGV4KXtcbiAgbGV0IHZhbGlkYXRpb246IHN0cmluZyA9ICdlcXVhbCc7XG4gIHZhciB2YWxpZERhdGUgPSBuZXcgRGF0ZShpdGVtLnZhbGlkYXRpb25zW2luZGV4XS5leHByZXNzaW9uKTtcbiAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA8IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdncmVhdGVyJztcbiAgfVxuICBlbHNlIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpID4gY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ21pbmltdW0nO1xuICB9XG4gIHJldHVybiB2YWxpZGF0aW9uO1xufVxuLyogI2VuZHJlZ2lvbiAqL1xuIl19
1177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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RyxTQUFTLENBQUM7SUFDekIsQ0FBQztTQUNJLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFDO1FBQ3BELFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFDRCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnksIElGaWx0ZXJEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQge1xuICBFRm9ybWF0VHlwZSxcbiAgRUZvcm1Db250cm9sLFxuICBFSHlwZXJsaW5rLFxuICBFTWF0Y2hNb2RlLFxuICBFT3BlcmF0b3IsXG4gIElEeW5hbWljQ2FyZCxcbiAgSUR5bmFtaWNGb3JtLFxuICBJRm9ybWF0LFxuICBJRm9ybUZpZWxkLFxuICBJRm9ybVNlY3Rpb24sXG59IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IGFkZEdsb2JhbEZpbHRlciwgRUdyaWRDb2x1bW5UeXBlLCBJR2xvYmFsRmlsdGVyLCBJR3JpZENvbHVtbiwgSUdyaWRGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qICNyZWdpb24gcHVibGljIG1ldGhvZHMgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHZhbHVlIDogYW55XG4gKiBGdW5jdGlvbiByZWNlaXZlcyB0aGUgdmFsdWUgYW5kIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdGVkLlxuICogRG8gbm90IHVzZSBmYXQgYXJyb3cgZnVuY3Rpb24gYXMgdGhleSBkbyBub3QgcHJlc2VydmUgdGhlIGNvbnRleHQuXG4gKiB0aGlzLnZhbHVlIHJlZmVycyB0byB0aGUgdmFsdWUgb2YgSUZvcm1GaWVsZCBPYmplY3RcbiAqIE1vZGlmeSB0aGlzLnZhbHVlIGRpcmVjdGx5IHRvIHJlY2VpdmUgZWZmZWN0XG4gKi9cbiB2YXIgc3BsaXRTY3JlZW4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGZvcm1zdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY29sdW1uc1N0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjYXJkU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIHJvdXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmaWx0ZXJCdG5DaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5zU3RhdGUocGFnZVNldHRpbmc6IGFueSkge1xuICBjb2x1bW5zU3RhdGUubmV4dChwYWdlU2V0dGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNvbHVtbnNTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNvbHVtbnNTdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvblNjcmVlblNwbGl0Q2hhbmdlICgpe1xuICByZXR1cm4gc3BsaXRTY3JlZW4uYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU3BsaXRTY3JlZW4obWVudUl0ZW0pe1xuICBzcGxpdFNjcmVlbi5uZXh0KHtvcmlnQ29tcG9uZW50OiBtZW51SXRlbS5vcmlnQ29tcG9uZW50LCBwYW5lbENvbXBvbmVudDogbWVudUl0ZW0/LmNvbXBvbmVudCwgY29uZmlnRGF0YTptZW51SXRlbT8uZGF0YT8uZGF0YX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShpZDogYW55LCBkYXRhOiBhbnksIGxvYWRDb21wb25lbnQ/OiBhbnkpIHtcbiAgZm9ybXN0YXRlLm5leHQoeyBpZCwgZGF0YSwgbG9hZENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZvcm1zdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0bihzdGF0ZVZhbHVlKSB7XG4gIGZpbHRlckJ0bkNoYW5nZS5uZXh0KHN0YXRlVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZpbHRlckJ0bkNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uUm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcmV0dXJuIHJvdXRlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcm91dGVDaGFuZ2UubmV4dCgnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gb25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY2FyZFN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuIH1cblxuIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljQ2FyZFN0YXRlKGRhdGE6IGFueSkge1xuICBjYXJkU3RhdGUubmV4dCh7IGRhdGEgfSk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gY2xvc2VJRnJhbWUoKXtcbiAgbGV0IGNsb3NlID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucC1kaWFsb2ctY2xvc2UtYnV0dG9uJylhcyBIVE1MRWxlbWVudFxuICAgIGlmKGNsb3NlKSB7XG4gICAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuXG4vLyBleHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWUoXG4vLyAgIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbi8vICAgZmllbGQ6IHN0cmluZyxcbi8vICAgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU6Ym9vbGVhbiA9IGZhbHNlXG4vLyApIHtcbi8vICAgbGV0IHZhbHVlO1xuLy8gICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zIGFzIGFueSkge1xuLy8gICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4vLyAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuLy8gICAgICAgICBsZXQgaXNWYWxpZCA9IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU7XG4vLyAgICAgICAgIGlmIChcbi8vICAgICAgICAgICAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbi8vICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4vLyAgICAgICAgICkge1xuLy8gICAgICAgICAgIHZhbHVlID0gaXNWYWxpZCA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dCA6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkXG4vLyAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dFxuLy8gICAgICAgICAgICAgOiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1Rcbi8vICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZVxuLy8gICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWU7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICB9KTtcbi8vICAgfVxuLy8gICByZXR1cm4gdmFsdWU7XG4vLyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBhbnkge1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zIGFzIGFueSkge1xuICAgIGlmIChzZWN0aW9uPy5maWVsZHMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0Rm9ybUZpZWxkc0luZm8oc2VjdGlvbj8uZmllbGRzLCBmaWVsZCwgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHNlY3Rpb24/LmhlYWRlckZpZWxkcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXRGb3JtRmllbGRzSW5mbyhzZWN0aW9uPy5oZWFkZXJGaWVsZHMsIGZpZWxkLCByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZSk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkc0luZm8oXG4gIHNlY3Rpb25GaWVsZHM6IGFueVtdLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBhbnkge1xuICBmb3IgKGNvbnN0IGZvcm1GaWVsZCBvZiBzZWN0aW9uRmllbGRzKSB7XG4gICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fFxuICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dCA6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNWYWxpZFxuICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0XG4gICAgICAgICAgOiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnZhbHVlXG4gICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlQXNTdHJpbmcoZHluYW1pY0Zvcm06SUR5bmFtaWNGb3JtLGZpZWxkOnN0cmluZyk6c3RyaW5ne1xuICBsZXQgdmFsdWU6YW55ID0gZ2V0Rm9ybUZpZWxkVmFsdWUoZHluYW1pY0Zvcm0sZmllbGQsIHRydWUpO1xuICBpZiAodmFsdWUpe1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgIH1cbiAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25GaWVsZFZhbHVlKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICBmaWVsZDogc3RyaW5nXG4pIHtcbiAgbGV0IGZvcm06IElEeW5hbWljRm9ybSA9IHsgZm9ybVNlY3Rpb25zIH07XG4gIHJldHVybiBnZXRGb3JtRmllbGRWYWx1ZShmb3JtLCBmaWVsZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlRm9ybVZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW10sXG4pIHtcbiAgbGV0IHNlY3Rpb25GaWVsZHM6IGFueTtcbiAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcbiAgaWYgKHRhYmxlcyAmJiB0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcbiAgICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgICB9XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IGZpZWxkLnRhYmxlcz8ubWFwKCh0YWJsZSkgPT4gdGFibGUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICBpZiAodGFibGUgJiYgdGFibGUuaW5jbHVkZXModGFibGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlW3RhYmxlTmFtZV0pIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICB9XG4gICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3BvbnNlW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2F2ZUNhcmRWYWx1ZXMoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIHRhYmxlcz86IHN0cmluZ1tdXG4pIHtcbiAgbGV0IHZhbHVlczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQgJiYgZmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgIGZpZWxkLmNhcmQuZGF0YS5mb3JFYWNoKChjYXJkRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgIHNldFNhdmVGb3JtVmFsdWVzKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucywgdGFibGVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSkge1xuICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGRhdGEuZm9yRWFjaCgoZGF0YVJvdykgPT4ge1xuICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGFSb3csIGR5bmFtaWNGb3JtLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZHluYW1pY0Zvcm0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXIoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIG1hdGNoTW9kZTogRU1hdGNoTW9kZSA9IEVNYXRjaE1vZGUuRVFVQUxTLFxuICBvcGVyYXRvcjogRU9wZXJhdG9yID0gRU9wZXJhdG9yLkFORCxcbikge1xuICBjb25zdCBmaWx0ZXI6IGFueSA9IHtcbiAgICBmaWVsZDogZmllbGQsXG4gICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZT8udmFsdWUgfHwgdmFsdWU/LnRleHQpID8gdmFsdWU/LnZhbHVlIDogKHZhbHVlIHx8IHZhbHVlID09ICcnKSA/IHZhbHVlIDogbnVsbCxcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuZEZpbHRlcihmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIHJldHVybiBzZXRGaWx0ZXIoZmllbGQsIHZhbHVlLCBFTWF0Y2hNb2RlLkVRVUFMUywgRU9wZXJhdG9yLkFORClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBhbnkge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhW2ldLCBwcm9wTmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWVBc1N0cmluZyhcbiAgZGF0YTogYW55LFxuICBwcm9wTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBsZXQgdmFsdWUgPSBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3Rpb25Qcm9wVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBJRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbi5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHNldFByb3BWYWx1ZShzZWN0aW9uLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHMgKi9cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSB8IElEeW5hbWljQ2FyZCwgYWxsRGF0YTogYW55W10gPSBbXSkge1xuICBpZiAoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhLCBmb3JtU2VjdGlvbj8uZmllbGRzLCBrZXlzLCByZWNvcmQsIGFsbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5oZWFkZXJGaWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YTogYW55LCBmb3JtRmllbGRzOiBhbnksIGtleXM6IGFueSwgcmVjb3JkOiBhbnksIGFsbERhdGE6IGFueSl7XG4gIGZvcm1GaWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAvLyBzZXQgbGFiZWwgaHlwZXJsaW5rXG4gICAgICBzZXRMYWJlbEh5cGVybGluayhmb3JtRmllbGQsIHJlY29yZCwga2V5cywgYWxsRGF0YSwgbWF0Y2hlZEtleSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgJiZcbiAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsgJiZcbiAgICAgICgoZm9ybUZpZWxkLmh5cGVybGluay5saW5rSWQgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluaylcbiAgICApIHtcbiAgICAgIGxldCBwYXJhbXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXBhcmFtcyAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmh5cGVybGluay5saW5rLnNwbGl0KCd9fScpO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMubWFwKChwYXJhbUtleSkgPT4ge1xuICAgICAgICAgIHBhcmFtS2V5ID0gcGFyYW1LZXkucmVwbGFjZSgne3snLCAnJykudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBwYXJhbUtleTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5maWx0ZXIoKHgpID0+IHgubGVuZ3RoID4gMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihwYXJhbXMpe1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGZvcm1GaWVsZC5vcmlnbmFsTGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rSWQgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKSB8fFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnBhcmFtcztcbiAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAoIXBhcmFtcyAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5pbmNsdWRlcygnfX0nKVxuICAgICAgKSB7XG4gICAgICAgIHBhcmFtS2V5cyA9IGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/Lmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgfSBcbiAgICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIG1hdGNoZWRLZXkpIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnRpbWVPbmx5ID8gcmVjb3JkW21hdGNoZWRLZXldIDogcmVjb3JkW21hdGNoZWRLZXldXG4gICAgICAgICAgPyBuZXcgRGF0ZShyZWNvcmRbbWF0Y2hlZEtleV0gYXMgc3RyaW5nKVxuICAgICAgICAgIDogJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5jYXJkICYmIGZvcm1GaWVsZC5jYXJkLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFmb3JtRmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5jYXJkLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZm9ybUZpZWxkLmNhcmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgbWF0Y2hlZEtleVxuICAgICAgKSB7XG4gICAgICAgIGxldCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGlmIChyZWNvcmRbbWF0Y2hlZEtleV0gJiYgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGFycmF5VmFsdWUucHVzaCh7W2Zvcm1GaWVsZC5kaXNwbGF5RmllbGRdIDogcmVjb3JkW21hdGNoZWRLZXldfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gYXJyYXlWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKHJlY29yZFttYXRjaGVkS2V5XSl7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hEaXNwbGF5RmllbGQgPSBnZXRNYXRjaEtleShcbiAgICAgICAgICAgIHJlY29yZCxcbiAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaERpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0ZXh0OiB0b1RyaW0ocmVjb3JkW21hdGNoRGlzcGxheUZpZWxkXSksXG4gICAgICAgICAgICAgIHZhbHVlOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtYXRjaFZhbHVlRmllbGQgPSBnZXRNYXRjaEtleShyZWNvcmQsIGZvcm1GaWVsZC5maWVsZCk7XG4gICAgICAgICAgaWYgKG1hdGNoVmFsdWVGaWVsZCkge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0ZXh0OiBmb3JtRmllbGQudmFsdWU/LnRleHQsXG4gICAgICAgICAgICAgIHZhbHVlOiB0b1RyaW0ocmVjb3JkW21hdGNoVmFsdWVGaWVsZF0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UICYmXG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc2V0RGF0YUZyb21SZWNvcmQgPSBmaW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmRhdGEsXG4gICAgICAgICAgcmVjb3JkXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmRhdGEgPSBzZXREYXRhRnJvbVJlY29yZD8uZGF0YTtcbiAgICAgICAgaWYoc2V0RGF0YUZyb21SZWNvcmQ/Lm1hdGNoRGF0YSl7XG4gICAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmlkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGEsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQyAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgKSB7XG4gICAgICAgIGxldCBzZXREYXRhID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sO1xuICAgICAgICBzZXREYXRhLmRhdGEuZGF0YSA9IGZpbmRLZXlzQW5kVmFsdWUoc2V0RGF0YS5kYXRhLmRhdGEsIHJlY29yZCk/LmRhdGE7XG4gICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoc2V0RGF0YS5pZCwgc2V0RGF0YS5kYXRhLmRhdGEsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgXG4gICAgICAgICYmICBmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HIFxuICAgICAgICAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtc1xuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZmluZEtleXNBbmRWYWx1ZShmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcywgcmVjb3JkKT8uZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdCkge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1hdEZvcm1GaWVsZFZhbHVlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XSAmJlxuICAgICAgICAgICAgKHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICd0cnVlJylcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIH1lbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IGRyb3BWYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAoZHJvcFZhbHVlICYmIGRyb3BWYWx1ZT8udG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBkcm9wVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZihmb3JtRmllbGQuY29udHJvbD09PUVGb3JtQ29udHJvbC5TRUxFQ1RCVVRUT04pe1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWU9dG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSkgfHwgZm9ybUZpZWxkLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBtYXRjaGVkS2V5OiBhbnkgPSAnJykge1xuICBpZiAoaXRlbS5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQgJiYgaXRlbT8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmIG1hdGNoZWRLZXkpIHtcbiAgICBpdGVtLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gIH1cbiAgaWYgKFxuICAgIGl0ZW0ubGFiZWwgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluayAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXNcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyk7XG4gICAgY29uc3QgbGluayA9IGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rO1xuICAgIGlmIChpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaykge1xuICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgbGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rKFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgcmVjb3JkOiBhbnksXG4gIGxpbms6IHN0cmluZyxcbiAgcGFyYW1LZXlzOiBzdHJpbmdbXSxcbiAgcGFyYW1zOiBhbnksXG4gIGFsbERhdGE6IGFueVtdID0gW11cbik6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5rOiBzdHJpbmcgPSBsaW5rO1xuICByZWNvcmQgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZWNvcmQpO1xuICBwYXJhbUtleXMuZm9yRWFjaCgocGFyYW1rZXkpID0+IHtcbiAgICBsZXQgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCk7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KSB7XG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbUluUmVjb3JkICYmIHBhcmFtICE9IHBhcmFtVmFsdWUgJiYgcHJvcFZhbHVlKSB7XG4gICAgICAgICAgaWYgKG5ld0xpbmsuaW5jbHVkZXMocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHBhcmFtID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSAhPSBwYXJhbVZhbHVlID8gcGFyYW1WYWx1ZSA6IHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0gIT0gcGFyYW1WYWx1ZSA/IHBhcmFtIDogcGFyYW1WYWx1ZSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0ocGFyYW1WYWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgPyBwcm9wVmFsdWUgOiBwYXJhbVZhbHVlKSk7XG4gICAgICAgIFxuICAgICAgICBpZiAobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKG51bGwpKSB7XG4gICAgICAgICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UobnVsbCwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldCBwYXJhbSB2YWx1ZSBmcm9tIGFwaSByZXNwb25zZSwgaWYgcGFyYW0ga2V5IGV4aXN0cyBpbiBpdFxuICAgICAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgcGFyYW1WYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShcbiAgICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksXG4gICAgICAgICAgICAgIHRvVHJpbShwYXJhbVZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKCcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmVwbGFjZSB0aGUge3twYXJhbX19IHdpdGggZW1wdHlcbiAgaWYobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKFwie3tcIikgJiYgbmV3TGluay5pbmNsdWRlcyhcIn19XCIpKXtcbiAgICBuZXdMaW5rID0gbmV3TGluaz8ucmVwbGFjZSgveysuKj99Ky9nLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuLy8gaXRzIGNoZWNraW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGluIGh5cGVybGluayBwYXJhbSB0aGVuIGl0IHNldCBrZXkgYXMgYSBwYXJhbVZhbHVlXG5mdW5jdGlvbiBzZXRQYXJhbUtleVZhbHVlKHJlY29yZDogYW55LCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBwYXJhbWtleTogYW55KXtcbiAgbGV0IHBhcmFtVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWYoYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApe1xuICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YTogYW55KT0+e1xuICAgICAgaWYoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KSA9PntcbiAgICAgICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCkuc29tZSgocmVjb3JkKT0+IHJlY29yZC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMocmVjb3JkKS5zb21lKCh4KT0+IHggPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIHJldHVybiBwYXJhbVZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZykge1xuICBsZXQgcHJvcFZhbHVlOiBhbnk7XG4gIGRhdGEucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoa2V5ICYmIHByb3BOYW1lICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHByb3BWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9wVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZDogYW55KSB7XG4gIGlmIChcbiAgICBmaWVsZC5mb3JtYXQ/LnR5cGUgPT09IEVGb3JtYXRUeXBlLkJPT0xFQU5fWU4gfHxcbiAgICBmaWVsZC5mb3JtYXQ/LmZvcm1hdHRlcj8ubmFtZSA9PT0gJ3RvQm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuIChmaWVsZC52YWx1ZSA9PT0gMSB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ3RydWUnIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAnWScpID8gJ1knIDogJ04nO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgIChmaWVsZC52YWx1ZSB8fCBmaWVsZC52YWx1ZSA9PT0gJycpXG4gICkge1xuICAgIGlmKGZpZWxkLnRpbWVPbmx5IHx8IGZpZWxkLnNob3d0aW1lKXtcbiAgICAgIC8vIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9IChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pJC87IC8vIFJlZ2V4IGZvciBkYXRldGltZSBmb3JtYXRcbiAgICAgIC8vIGNvbnN0IG1hdGNoID0gZmllbGQudmFsdWUubWF0Y2goZGF0ZVRpbWVSZWdleCk7XG4gICAgICAvLyBpZiAobWF0Y2gpIHtcbiAgICAgIC8vICAgZmllbGQudmFsdWUgPSBmb3JtYXREYXRlKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgLy8gfWVsc2Uge1xuICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgICAgLy8gfVxuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4gICkge1xuICBsZXQgb2JqID0ge307XG4gIGxldCByZWNvcmQgPSBzZXREYXRhRmllbGRzKFtyZXNwb25zZV0pO1xuICBpZiAocmVjb3JkICYmIHJlY29yZC5sZW5ndGggPiAwKSB7XG4gICAgcmVjb3JkLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgcmVjb3JkID0geDtcbiAgICB9KTtcbiAgfVxuICBpZiAoZmllbGREYXRhICYmIHJlY29yZCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkRGF0YSkuZm9yRWFjaCgoW2RhdGFLZXksIGRhdGFWYWx1ZV06IGFueSkgPT4ge1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFLZXk/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgbGV0IHZhbHVlID0gcm93S2V5cz8uZmluZChcbiAgICAgICAgKHgpID0+IGRhdGFWYWx1ZSAmJiBkYXRhVmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhVmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgICAgKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA/IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA6IHJlY29yZFt2YWx1ZV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJylcbiAgICBkaWFsb2dbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdicgKyBpZClcbiAgICBjb25zdCBkaWFsb2doZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZy1oZWFkZXInKVxuICAgIGRpYWxvZ2hlYWRlclswXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2aGVhZGVyJyArIGlkKVxuICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2JyArIGlkKTtcblxuICAgICAgbGV0IHBvczEgPSAwLFxuICAgICAgICBwb3MyID0gMCxcbiAgICAgICAgcG9zMyA9IDAsXG4gICAgICAgIHBvczQgPSAwO1xuICBcbiAgICAgIGNvbnN0IGRyYWdNb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MxID0gcG9zMyAtIGUuY2xpZW50WDtcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGVsbW50LnN0eWxlLnRvcCA9IGVsbW50Py5vZmZzZXRUb3AgLSBwb3MyICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IGVsbW50Py5vZmZzZXRMZWZ0IC0gcG9zMSArICdweCc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGNsb3NlRHJhZ0VsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgIH07XG4gIFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKS5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9IGVsc2UgaWYoZWxtbnQpIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0gIFxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyTWluTWF4VmFsdWUoaXRlbTogYW55LHZhbHVlOiBhbnksIGluZGV4KXtcbiAgbGV0IHZhbGlkYXRpb246IHN0cmluZyA9ICdlcXVhbCc7XG4gIHZhciB2YWxpZERhdGUgPSBuZXcgRGF0ZShpdGVtLnZhbGlkYXRpb25zW2luZGV4XS5leHByZXNzaW9uKTtcbiAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA8IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdncmVhdGVyJztcbiAgfVxuICBlbHNlIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpID4gY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ21pbmltdW0nO1xuICB9XG4gIHJldHVybiB2YWxpZGF0aW9uO1xufVxuLyogI2VuZHJlZ2lvbiAqL1xuIl19