@yibozhang/pro-table 0.1.18 → 0.1.19

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.
@@ -70,8 +70,6 @@ export class ProTableComponent {
70
70
  this._selectedTableRow = null;
71
71
  // 选中的行数据(用于复选框选择)- 保留用于兼容性
72
72
  this._selectedRows = [];
73
- // 使用 Set 存储选中项的 ID,支持跨页选中
74
- this._selectedRowIds = new Set();
75
73
  // 全选状态
76
74
  this._checkedAll = false;
77
75
  // 半选状态(部分选中)
@@ -684,16 +682,6 @@ export class ProTableComponent {
684
682
  }
685
683
  // 直接设置数据对象的 checked 属性
686
684
  data.checked = checked;
687
- // 同步更新 _selectedRowIds(用于跨页选中)
688
- const id = this.getRowId(data);
689
- if (id !== undefined) {
690
- if (checked) {
691
- this._selectedRowIds.add(id);
692
- }
693
- else {
694
- this._selectedRowIds.delete(id);
695
- }
696
- }
697
685
  // 同步更新 _selectedRows(用于兼容性)
698
686
  const index = this._selectedRows.findIndex((row) => this.isSameRow(row, data));
699
687
  if (checked) {
@@ -741,16 +729,6 @@ export class ProTableComponent {
741
729
  // 批量设置 checked 属性
742
730
  availableRows.forEach((row) => {
743
731
  row.checked = checked;
744
- // 同步更新 _selectedRowIds(用于跨页选中)
745
- const id = this.getRowId(row);
746
- if (id !== undefined) {
747
- if (checked) {
748
- this._selectedRowIds.add(id);
749
- }
750
- else {
751
- this._selectedRowIds.delete(id);
752
- }
753
- }
754
732
  });
755
733
  // 同步更新 _selectedRows(用于兼容性)
756
734
  if (checked) {
@@ -776,17 +754,7 @@ export class ProTableComponent {
776
754
  return;
777
755
  }
778
756
  // 数据对象的 checked 属性已经通过双向绑定自动更新
779
- // 这里只需要同步更新 _selectedRowIds 和 _selectedRows
780
- // 同步更新 _selectedRowIds(用于跨页选中)
781
- const id = this.getRowId(data);
782
- if (id !== undefined) {
783
- if (checked) {
784
- this._selectedRowIds.add(id);
785
- }
786
- else {
787
- this._selectedRowIds.delete(id);
788
- }
789
- }
757
+ // 这里只需要同步更新 _selectedRows
790
758
  // 同步更新 _selectedRows(用于兼容性)
791
759
  const index = this._selectedRows.findIndex((row) => this.isSameRow(row, data));
792
760
  if (checked) {
@@ -836,8 +804,6 @@ export class ProTableComponent {
836
804
  row.checked = false;
837
805
  });
838
806
  }
839
- // 清空选中集合
840
- this._selectedRowIds.clear();
841
807
  this._selectedRows = [];
842
808
  this._checkedAll = false;
843
809
  this._indeterminate = false;
@@ -914,8 +880,6 @@ export class ProTableComponent {
914
880
  this._pageInfo.pageIndex > 1) {
915
881
  this._pageInfo.pageIndex = this._pageInfo.pageIndex - 1;
916
882
  }
917
- // 保存删除前的数据源(用于删除后查询时移除被删除项的选中状态)
918
- const previousDataSource = afterDelete && this.showCheckbox ? [...this.dataSource] : [];
919
883
  this._loading = true;
920
884
  if (this.request) {
921
885
  try {
@@ -925,34 +889,11 @@ export class ProTableComponent {
925
889
  } }, (this.sortMode === "server"
926
890
  ? { sort: this.buildServerSortPayload() }
927
891
  : {})));
928
- // 自动注入 checked 字段,支持跨页选中
892
+ // 查询后默认不保留跨页选中状态:每次返回的数据均初始化为未选中
929
893
  if (this.showCheckbox) {
930
894
  this.dataSource = (result.data || []).map((item) => {
931
- const id = this.getRowId(item);
932
- // 如果数据已有 checked 属性,保留;否则根据 _selectedRowIds 判断
933
- const checked = item.checked !== undefined
934
- ? item.checked
935
- : id !== undefined
936
- ? this._selectedRowIds.has(id)
937
- : false;
938
- return Object.assign(Object.assign({}, item), { checked: checked });
895
+ return Object.assign(Object.assign({}, item), { checked: false });
939
896
  });
940
- // 删除后查询:移除被删除项的选中状态
941
- if (afterDelete && previousDataSource.length > 0) {
942
- const newDataIds = new Set(this.dataSource.map((item) => this.getRowId(item)));
943
- // 遍历之前的数据源,如果不在新数据源中,说明被删除了,需要清除其选中状态
944
- previousDataSource.forEach((oldItem) => {
945
- const oldId = this.getRowId(oldItem);
946
- if (oldId !== undefined && !newDataIds.has(oldId)) {
947
- // 被删除的项,从选中集合中移除
948
- this._selectedRowIds.delete(oldId);
949
- // 如果数据对象还在其他地方引用,清除其选中状态
950
- if (oldItem.checked !== undefined) {
951
- oldItem.checked = false;
952
- }
953
- }
954
- });
955
- }
956
897
  }
957
898
  else {
958
899
  this.dataSource = result.data || [];
@@ -963,9 +904,9 @@ export class ProTableComponent {
963
904
  this.sortDataSourceInPlace();
964
905
  }
965
906
  this._pageInfo.total = result.total || 0;
966
- // 更新全选状态
907
+ // 取消跨页多选:查询后清空选中状态
967
908
  if (this.showCheckbox) {
968
- this.updateCheckAllStatus();
909
+ this.clearSelectedRows();
969
910
  }
970
911
  }
971
912
  catch (error) {
@@ -983,7 +924,6 @@ export class ProTableComponent {
983
924
  console.warn("未提供 _request 回调函数");
984
925
  this._loading = false;
985
926
  }
986
- // 不再调用 clearSelectedRows(),保留跨页选中状态
987
927
  });
988
928
  }
989
929
  // 触发列排序变更
@@ -1014,12 +954,11 @@ export class ProTableComponent {
1014
954
  }
1015
955
  handleTableRowClick(data) {
1016
956
  this._selectedTableRow = data;
1017
- // 如果开启了复选框,点击行时只选中点击行(如果行未被禁用)
1018
957
  if (this.showCheckbox && !this.isRowDisabled(data)) {
1019
958
  // 先清空所有选中行
1020
959
  this._selectedRows = [];
1021
- // 只选中当前点击的行
1022
- this.toggleRowChecked(data, true);
960
+ const nextChecked = !this.isRowChecked(data);
961
+ this.toggleRowChecked(data, nextChecked);
1023
962
  }
1024
963
  this.onRowClick.emit(this._selectedTableRow);
1025
964
  }
@@ -1134,6 +1073,6 @@ ProTableComponent.propDecorators = {
1134
1073
  actionBarTpl: [{ type: ContentChild, args: ["actionBar",] }],
1135
1074
  imgActionBarTpl: [{ type: ContentChild, args: ["ImgActionBar",] }],
1136
1075
  allTemplates: [{ type: ContentChildren, args: [TemplateRef,] }],
1137
- onWindowResize: [{ type: HostListener, args: ['window:resize',] }]
1076
+ onWindowResize: [{ type: HostListener, args: ["window:resize",] }]
1138
1077
  };
1139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9wcm9qZWN0cy92cHMtZnJvbnQvRnJvbnQvRGFzUE1TV2ViL2xpYi9wcm8tdGFibGUvc3JjLyIsInNvdXJjZXMiOlsibGliL3Byby10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBV2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBK0IsTUFBTSxVQUFVLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU9wQyxNQUFNLE9BQU8saUJBQWlCO0lBOEo1QixZQUdVLFlBQWdEO1FBQWhELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQWhLakQsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0IsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFFNUIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUV2QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBRS9CLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTlCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTlCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBRTlCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBRTVCLGVBQVUsR0FBVyxNQUFNLENBQUM7UUFF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QUUsZUFBZTtnQkFDekIscW5mQUF5Qzs7YUFFMUM7Ozs0Q0FnS0ksUUFBUSxZQUNSLE1BQU0sU0FBQyx1QkFBdUI7Ozs0QkEvSmhDLEtBQUs7MkJBRUwsS0FBSztvQkFFTCxLQUFLO3dCQUVMLEtBQUs7dUJBRUwsS0FBSztzQkFFTCxLQUFLOzRCQUVMLEtBQUs7NEJBRUwsS0FBSzs2QkFFTCxLQUFLOzJCQUVMLEtBQUs7eUJBRUwsS0FBSzt5QkFFTCxLQUFLOzRCQUVMLEtBQUs7eUJBRUwsS0FBSzt1QkFFTCxLQUFLOzRCQUVMLEtBQUs7NkJBRUwsS0FBSzs4QkFFTCxLQUFLO3FCQUVMLEtBQUs7c0JBRUwsS0FBSzswQkFFTCxLQUFLO3VCQUdMLEtBQUs7Z0NBRUwsS0FBSzsyQkFHTCxLQUFLOzJCQUVMLEtBQUs7MEJBR0wsS0FBSzsrQkFFTCxLQUFLO2lDQUdMLEtBQUs7Z0NBRUwsS0FBSzt5QkFFTCxNQUFNOzJCQUVOLE1BQU07NkJBRU4sTUFBTTtzQ0FFTixNQUFNOzJCQUVOLFlBQVksU0FBQyxXQUFXOzhCQUV4QixZQUFZLFNBQUMsY0FBYzsyQkFFM0IsZUFBZSxTQUFDLFdBQVc7NkJBbUUzQixZQUFZLFNBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGhhc0luLCBpc05pbCwgZGVib3VuY2UsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcbmltcG9ydCB7IFBST19UQUJMRV9ERUZBVUxUX0NPTFVNTiwgUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHtcclxuICBBdXRvQ29tcGxldGVGaWVsZFByb3BzLFxyXG4gIENoZWNrYm94RmllbGRQcm9wcyxcclxuICBPcHRpb25zVHlwZSxcclxuICBQcm9UYWJsZUNvbHVtbixcclxuICBQcm9UYWJsZVBhZ2VJbmZvLFxyXG4gIFByb1RhYmxlUmVxdWVzdFJlc3VsdCxcclxuICBQcm9UYWJsZVZhbHVlc0NoYW5nZSxcclxuICBTZWxlY3RGaWVsZFByb3BzLFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHsgUFJPX1RBQkxFX0NPTFVNTl9SRU1PVEUsIFByb1RhYmxlUmVtb3RlQ29sdW1uU2VydmljZSB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXByby10YWJsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvLXRhYmxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3Byby10YWJsZS5jb21wb25lbnQubGVzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuICBASW5wdXQoKSBzaG93U2VhcmNoQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0YWJsZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIEBJbnB1dCgpIG11bHRpUm93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBjb25maXJtQnRuVGV4dDogc3RyaW5nID0gXCLmn6Xor6JcIjtcclxuXHJcbiAgQElucHV0KCkgY2xlYXJCdG5UZXh0OiBzdHJpbmcgPSBcIua4heepulwiO1xyXG5cclxuICBASW5wdXQoKSBsYWJlbFdpZHRoOiBzdHJpbmcgPSBcIjkwcHhcIjtcclxuXHJcbiAgQElucHV0KCkgbGFiZWxBbGlnbjogc3RyaW5nID0gXCJyaWdodFwiO1xyXG5cclxuICBASW5wdXQoKSBmb3JtSXRlbVdpZHRoOiBzdHJpbmcgPSBcIjMzMHB4XCI7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIGJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgb3V0ZXJCb3JkZXJlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZnJvbnRQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNjcm9sbDogeyB4Pzogc3RyaW5nIHwgbnVtYmVyOyB5Pzogc3RyaW5nIHwgbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgcmVxdWVzdDogKHBhcmFtczogYW55KSA9PiBQcm9taXNlPFByb1RhYmxlUmVxdWVzdFJlc3VsdD47XHJcblxyXG4gIEBJbnB1dCgpIHN1bW1hcnlEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIOaOkuW6j+aooeW8j++8mmxvY2FsIOacrOWcsOaOkuW6j++8m3NlcnZlciDlnKjnur/mjpLluo/vvIjmj5DkuqTnu5nmjqXlj6PvvIlcclxuICBASW5wdXQoKSBzb3J0TW9kZTogXCJsb2NhbFwiIHwgXCJzZXJ2ZXJcIiA9IFwibG9jYWxcIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NvbHVtblNldHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5piv5ZCm5byA5ZCv5aSa5YiX5o6S5bqP77yI6buY6K6k5Y2V5YiX77yJXHJcbiAgQElucHV0KCkgbXVsdGlwbGVTb3J0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDliKTmlq3ooYzmmK/lkKbnpoHnlKjnmoTlh73mlbBcclxuICBASW5wdXQoKSByb3dEaXNhYmxlZDogKGRhdGE6IGFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSByZXJlbmRlck9uUmVzaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8g5piv5ZCm6Ieq5Yqo6Kem5Y+R6K+35rGCXHJcbiAgQElucHV0KCkgYXV0b1RyaWdnZXJSZXF1ZXN0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgY3VzdG9tVGFibGVSZW5kZXI/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dEYkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblZhbHVlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvVGFibGVWYWx1ZXNDaGFuZ2U+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblJlc2V0Rm9ybUJlZm9yZVJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAQ29udGVudENoaWxkKFwiYWN0aW9uQmFyXCIpIGFjdGlvbkJhclRwbCE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoXCJJbWdBY3Rpb25CYXJcIikgaW1nQWN0aW9uQmFyVHBsITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgYWxsVGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICBwcml2YXRlIF9zYXZlZFNlYXJjaFBhcmFtczogYW55ID0ge307XHJcblxyXG4gIC8vIOWtmOWCqOaooeadv+aYoOWwhOWFs+ezuyAtIOmAmui/h+Wtl+espuS4suWQjeensOaYoOWwhOWIsOaooeadv+W8leeUqFxyXG4gIHByaXZhdGUgdGVtcGxhdGVNYXAgPSBuZXcgTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLy8g5a2Y5YKo5omA5pyJ6Ieq5a6a5LmJ5qih5p2/55qE5byV55SoXHJcbiAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLy8g6K6w5b2V5ZCE5YiX5o6S5bqP54q25oCB77yaJ2FzY2VuZCcgfCAnZGVzY2VuZCcgfCBudWxsXHJcblxyXG4gIHByaXZhdGUgX3NvcnRNYXA6IFJlY29yZDxzdHJpbmcsIFwiYXNjZW5kXCIgfCBcImRlc2NlbmRcIiB8IG51bGw+ID0ge307XHJcblxyXG4gIC8vIOiusOW9leWkmuWIl+aOkuW6j+eahOS8mOWFiOe6p++8iOWQjuiuvue9rueahOS8mOWFiO+8iVxyXG4gIHByaXZhdGUgX3NvcnRQcmlvcml0eTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8g5a2Y5YKo5q+P5LiqIGF1dG9Db21wbGV0ZSDlrZfmrrXnmoTpmLLmipblh73mlbBcclxuICBwcml2YXRlIF9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcDogTWFwPHN0cmluZywgKGV2ZW50OiBFdmVudCkgPT4gdm9pZD4gPVxyXG4gICAgbmV3IE1hcCgpO1xyXG5cclxuICAvLyDku4XlnKjliJ3lp4vljJbml7bov5DooYzliJfphY3nva7pooTmo4Dmn6XvvIzpgb/lhY3lkI7nu63osIPnlKjph43lpI3op6blj5FcclxuICBwcml2YXRlIF9wcmVDaGVja0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgX2NvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgLy8g562b6YCJ6KGo5Y2V5pWw5o2u5a2Y5YKoXHJcbiAgX3NlYXJjaFBhcmFtczogYW55ID0ge307XHJcblxyXG4gIC8vIOetm+mAieihqOWNlWxpc3TmuLLmn5PmlbDmja5cclxuICBfc2VhcmNoRmlsZWRDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcblxyXG4gIF9wYWdlSW5mbzogUHJvVGFibGVQYWdlSW5mbyA9IHtcclxuICAgIHBhZ2VJbmRleDogMSxcclxuICAgIHBhZ2VTaXplOiAxNSxcclxuICAgIHRvdGFsOiAxMDAsXHJcbiAgICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMTUsIDIwLCA1MCwgMTAwLCA1MDAsIDEwMDBdLFxyXG4gIH07XHJcblxyXG4gIF9sb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIF9zZWxlY3RlZFRhYmxlUm93OiBhbnkgPSBudWxsO1xyXG5cclxuICAvLyDpgInkuK3nmoTooYzmlbDmja7vvIjnlKjkuo7lpI3pgInmoYbpgInmi6nvvIktIOS/neeVmeeUqOS6juWFvOWuueaAp1xyXG4gIF9zZWxlY3RlZFJvd3M6IGFueVtdID0gW107XHJcblxyXG4gIC8vIOS9v+eUqCBTZXQg5a2Y5YKo6YCJ5Lit6aG555qEIElE77yM5pSv5oyB6Leo6aG16YCJ5LitXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRSb3dJZHMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcclxuXHJcbiAgLy8g5YWo6YCJ54q25oCBXHJcbiAgX2NoZWNrZWRBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5Y2K6YCJ54q25oCB77yI6YOo5YiG6YCJ5Lit77yJXHJcbiAgX2luZGV0ZXJtaW5hdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g6L+c56iLY29sdW1uc1xyXG4gIF9zZXJ2ZXJDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcblxyXG4gIC8vIOWtmOWCqCBhdXRvQ29tcGxldGUg5a2X5q6155qE5pWw5o2u5rqQXHJcbiAgX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcclxuXHJcbiAgLy8g5o6n5Yi26KGo5qC85pi+56S654q25oCB77yM55So5LqO6YeN5paw5oyC6L29XHJcbiAgX3Nob3dUYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIOmYsuaKluWumuaXtuWZqO+8jOeUqOS6jueql+WPo+Wkp+Wwj+iwg+aVtFxyXG4gIHByaXZhdGUgcmVzaXplRGVib3VuY2U6IGFueTtcclxuICBcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5yZXJlbmRlck9uUmVzaXplKSByZXR1cm47XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnJlc2l6ZURlYm91bmNlKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZURlYm91bmNlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5yZXNpemVEZWJvdW5jZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyDpgJrov4cgbmdJZiDph43mlrDmjILovb3ooajmoLxcclxuICAgICAgdGhpcy5fc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Nob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSwgMTUwKTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgQEluamVjdChQUk9fVEFCTEVfQ09MVU1OX1JFTU9URSlcclxuICAgIHByaXZhdGUgY29sdW1uUmVtb3RlOiBQcm9UYWJsZVJlbW90ZUNvbHVtblNlcnZpY2UgfCBudWxsXHJcbiAgKSB7fVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGZldGNoUmVtb3RlQ29sdW1ucygpIHtcclxuICAgIGlmICghdGhpcy5jb2x1bW5SZW1vdGU/LmdldENvbCB8fCAhdGhpcy50YWJsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbHVtblJlbW90ZS5nZXRDb2wodGhpcy50YWJsZU5hbWUsIHRoaXMubXVsdGlSb3cpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RSZW1vdGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKSB7XHJcbiAgICBpZiAoIXRoaXMuY29sdW1uUmVtb3RlPy5zZXRDb2wgfHwgIXRoaXMudGFibGVOYW1lKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb2x1bW5SZW1vdGUuc2V0Q29sKFxyXG4gICAgICAgIHRoaXMudGFibGVOYW1lLFxyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgdGhpcy5tdWx0aVJvd1xyXG4gICAgICApO1xyXG4gICAgICBpZiAocmVzdWx0ICYmIGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHt9O1xyXG4gICAgdGhpcy5mb3JtYXRlSW5uZXJDb2x1bW5zKHRoaXMuY29sdW1ucyk7XHJcbiAgICBhd2FpdCB0aGlzLnNldFNlYXJjaFBhcmFtcyh0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOS9v+eUqCBQcm94eSDljIXoo4UgX3NlYXJjaFBhcmFtc++8jOaLpuaIquihqOWNlemhueWAvOWPmOWMluW5tuWQkeWkluWPkeWHuuS6i+S7tlxyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0gdGhpcy5jcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0aGlzLl9zZWFyY2hQYXJhbXMpO1xyXG4gICAgaWYgKHRoaXMuYXV0b1RyaWdnZXJSZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICAgIH1cclxuICAgIHRoaXMucXVlcnlEeW5hbWljQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8g6Ieq5Yqo5rOo5YaM5omA5pyJ6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICB0aGlzLmF1dG9SZWdpc3RlclRlbXBsYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcmVDaGVja1NlcnZlckNvbHVtbnMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmZldGNoUmVtb3RlQ29sdW1ucygpO1xyXG4gICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGluaXRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW4pXHJcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3AsXHJcbiAgICAgICAgICBpc1Nob3c6ICFjb2x1bW4uaGlkZUluVGFibGUsIC8vIOm7mOiupOWFqOmDqOaYvuekulxyXG4gICAgICAgICAgaGVhZGVyOiBjb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICBzb3J0TmFtZTogY29sdW1uLnNvcnROYW1lIHx8IG51bGwsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAocmVzLmNvZGUgPT09IDApIHtcclxuICAgICAgaWYgKCFpc0VxdWFsKHJlcy5kYXRhLnRhYkNvbHVtbiwgaW5pdENvbHVtbnMpKSB7XHJcbiAgICAgICAgY29uc3QgaW5pdFJlcyA9IGF3YWl0IHRoaXMucGVyc2lzdFJlbW90ZUNvbHVtbnMoaW5pdENvbHVtbnMpO1xyXG4gICAgICAgIGlmIChpbml0UmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuS4gOiHtFwiKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChyZXMuY29kZSA9PT0gMTApIHtcclxuICAgICAgLy8gY29kZSA9PT0gMTAg6KGo56S65pyq5Yid5aeL5YyW77yM6ZyA6KaB57un57ut5omn6KGM5ZCO57ut6YC76L6RXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBxdWVyeUR5bmFtaWNDb2x1bW5zKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlTmFtZSB8fCAhdGhpcy5jb2x1bW5SZW1vdGUpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5fcHJlQ2hlY2tEb25lKSB7XHJcbiAgICAgIGNvbnN0IGNoZWNrUmVzdWx0ID0gYXdhaXQgdGhpcy5wcmVDaGVja1NlcnZlckNvbHVtbnMoKTtcclxuICAgICAgdGhpcy5fcHJlQ2hlY2tEb25lID0gdHJ1ZTtcclxuICAgICAgaWYgKCFjaGVja1Jlc3VsdCkgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5mZXRjaFJlbW90ZUNvbHVtbnMoKTtcclxuICAgIGlmICghcmVzKSByZXR1cm47XHJcbiAgICBpZiAocmVzLmNvZGUgPT09IDApIHtcclxuICAgICAgY29uc3QgX3RhYkNvbHVtbiA9IHJlcy5kYXRhLnRhYkNvbHVtbi5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdGl0bGU6IGl0ZW0uaGVhZGVyLFxyXG4gICAgICAgICAgcHJvcDogaXRlbS5maWVsZCxcclxuICAgICAgICAgIHNvcnROYW1lOiBpdGVtLnNvcnROYW1lLFxyXG4gICAgICAgICAgaGlkZUluVGFibGU6ICFpdGVtLmlzU2hvdyxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5fc2VydmVyQ29sdW1ucyA9IF90YWJDb2x1bW47XHJcbiAgICAgIHRoaXMudXBkYXRlVGFibGVDb2x1bW5zKF90YWJDb2x1bW4pO1xyXG4gICAgfSBlbHNlIGlmIChyZXMuY29kZSA9PT0gMTApIHtcclxuICAgICAgLy8g5aaC5p6c5pyq6K6+572u5o6l5Y+j6L+U5Zue77yM6ZyA6KaB6buY6K6k6LCD55So5LiA5qyh5L+u5pS55Ye95pWw5Yid5aeL5YyW5pWw5o2uXHJcbiAgICAgIGNvbnN0IGluaXRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiAhY29sLmF1eGlsaWFyeUNvbHVtbilcclxuICAgICAgICAubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4ucHJvcCxcclxuICAgICAgICAgICAgaXNTaG93OiB0cnVlLCAvLyDpu5jorqTlhajpg6jmmL7npLpcclxuICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICAgIHNvcnROYW1lOiBjb2x1bW4uc29ydE5hbWUgfHwgbnVsbCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAvLyDosIPnlKjkv67mlLnmjqXlj6PliJ3lp4vljJbmlbDmja5cclxuICAgICAgY29uc3QgaW5pdFJlcyA9IGF3YWl0IHRoaXMucGVyc2lzdFJlbW90ZUNvbHVtbnMoaW5pdENvbHVtbnMpO1xyXG4gICAgICBpZiAoaW5pdFJlcykge1xyXG4gICAgICAgIHRoaXMucXVlcnlEeW5hbWljQ29sdW1ucygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdGVJbm5lckNvbHVtbnMoY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaGlkZUluVGFibGUpXHJcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4geyAuLi5QUk9fVEFCTEVfREVGQVVMVF9DT0xVTU4sIC4uLml0ZW0gfSBhcyBQcm9UYWJsZUNvbHVtbjtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDoh6rliqjms6jlhozmqKHmnb/nmoTmlrnms5VcclxuICBwcml2YXRlIGF1dG9SZWdpc3RlclRlbXBsYXRlcygpIHtcclxuICAgIC8vIOiOt+WPluaJgOaciemcgOimgeiHquWumuS5ieaooeadv+eahOWIl1xyXG4gICAgY29uc3QgY29sdW1uc1dpdGhDdXN0b21SZW5kZXIgPSB0aGlzLl9jb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbVJlbmRlclxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY29sdW1uc1dpdGhDdXN0b21SZW5kZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyDlsJ3or5Xku45Db250ZW50Q2hpbGRyZW7kuK3mn6Xmib7lr7nlupTnmoTmqKHmnb9cclxuICAgICAgY29sdW1uc1dpdGhDdXN0b21SZW5kZXIuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gY29sdW1uLmN1c3RvbVJlbmRlciE7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmZpbmRUZW1wbGF0ZUJ5TmFtZSh0ZW1wbGF0ZU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLnNldCh0ZW1wbGF0ZU5hbWUsIHRlbXBsYXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6I635Y+W5omA5pyJ6ZyA6KaB6Ieq5a6a5LmJbGFiZWzmqKHmnb/nmoTliJfvvIjkvb/nlKjljp/lp4tjb2x1bW5z77yM56Gu5L+d6aG65bqP5q2j56Gu77yJXHJcbiAgICBjb25zdCBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbUxhYmVsUmVuZGVyXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb2x1bW5zV2l0aEN1c3RvbUxhYmVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8g5bCd6K+V5LuOQ29udGVudENoaWxkcmVu5Lit5p+l5om+5a+55bqU55qEbGFiZWzmqKHmnb9cclxuICAgICAgY29sdW1uc1dpdGhDdXN0b21MYWJlbC5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZU5hbWUgPSBjb2x1bW4uY3VzdG9tTGFiZWxSZW5kZXIhO1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5maW5kTGFiZWxUZW1wbGF0ZUJ5TmFtZShcclxuICAgICAgICAgIHRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgIGNvbHVtbnNXaXRoQ3VzdG9tTGFiZWxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLnNldCh0ZW1wbGF0ZU5hbWUsIHRlbXBsYXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmoLnmja7lkI3np7Dmn6Xmib7mqKHmnb9cclxuICBwcml2YXRlIGZpbmRUZW1wbGF0ZUJ5TmFtZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmdldFRlbXBsYXRlRnJvbUNvbnRlbnQodGVtcGxhdGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIOS7jkNvbnRlbnRDaGlsZHJlbuS4reafpeaJvuaMh+WumuWQjeensOeahOaooeadv1xyXG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVGcm9tQ29udGVudChcclxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nXHJcbiAgKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xyXG4gICAgY29uc3QgY3VzdG9tUmVuZGVyQ29sdW1ucyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXIpO1xyXG4gICAgY29uc3QgdGVtcGxhdGVJbmRleCA9IGN1c3RvbVJlbmRlckNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAoY29sKSA9PiBjb2wuY3VzdG9tUmVuZGVyID09PSB0ZW1wbGF0ZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRlbXBsYXRlSW5kZXggPj0gMCkge1xyXG4gICAgICAvLyDojrflj5bmiYDmnInmqKHmnb/vvIzlubbov4fmu6TmjonnibnmrormqKHmnb/vvIhhY3Rpb25CYXLlkoxJbWdBY3Rpb25CYXLvvIlcclxuICAgICAgLy8g6L+Z5qC35Y+v5Lul6YG/5YWN5Zug5Li654m55q6K5qih5p2/55qE5L2N572u5a+86Ie057Si5byV6K6h566X6ZSZ6K+vXHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IHRoaXMuYWxsVGVtcGxhdGVzLnRvQXJyYXkoKTtcclxuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGVzID0gdGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAodHBsKSA9PiB0cGwgIT09IHRoaXMuYWN0aW9uQmFyVHBsICYmIHRwbCAhPT0gdGhpcy5pbWdBY3Rpb25CYXJUcGxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0ZW1wbGF0ZUluZGV4IDwgY3VzdG9tVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gY3VzdG9tVGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdO1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUud2Fybihg5pyq5om+5Yiw5qih5p2/ICR7dGVtcGxhdGVOYW1lfWApO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyDmoLnmja7lkI3np7Dmn6Xmib5sYWJlbOaooeadv1xyXG4gIHByaXZhdGUgZmluZExhYmVsVGVtcGxhdGVCeU5hbWUoXHJcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcclxuICAgIGN1c3RvbUxhYmVsQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXVxyXG4gICk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIGNvbnN0IHRlbXBsYXRlSW5kZXggPSBjdXN0b21MYWJlbENvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAoY29sKSA9PiBjb2wuY3VzdG9tTGFiZWxSZW5kZXIgPT09IHRlbXBsYXRlTmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGVtcGxhdGVJbmRleCA+PSAwKSB7XHJcbiAgICAgIC8vIOiOt+WPluaJgOacieaooeadv++8jOW5tui/h+a7pOaOieeJueauiuaooeadv++8iGFjdGlvbkJhcuWSjEltZ0FjdGlvbkJhcu+8iVxyXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmFsbFRlbXBsYXRlcy50b0FycmF5KCk7XHJcbiAgICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlcyA9IHRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgICAgKHRwbCkgPT4gdHBsICE9PSB0aGlzLmFjdGlvbkJhclRwbCAmJiB0cGwgIT09IHRoaXMuaW1nQWN0aW9uQmFyVHBsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyDorqHnrpdsYWJlbOaooeadv+eahOe0ouW8le+8mumcgOimgei3s+i/h+aJgOacieeahGN1c3RvbVJlbmRlcuaooeadv1xyXG4gICAgICBjb25zdCBjdXN0b21SZW5kZXJDb2x1bW5zID0gdGhpcy5fY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbVJlbmRlclxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsYWJlbFRlbXBsYXRlSW5kZXggPSBjdXN0b21SZW5kZXJDb2x1bW5zLmxlbmd0aCArIHRlbXBsYXRlSW5kZXg7XHJcblxyXG4gICAgICBpZiAobGFiZWxUZW1wbGF0ZUluZGV4IDwgY3VzdG9tVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gY3VzdG9tVGVtcGxhdGVzW2xhYmVsVGVtcGxhdGVJbmRleF07XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS53YXJuKGDmnKrmib7liLBsYWJlbOaooeadvyAke3RlbXBsYXRlTmFtZX1gKTtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g6K6+572u562b6YCJ6KGo5Y2V6buY6K6k5bGe5oCnXHJcbiAgcHJpdmF0ZSBzZXRTZWFyY2hGb3JtRGVmYXVsdFByb3AoY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnZhbHVlVHlwZSkge1xyXG4gICAgICAgIGlmIChpdGVtLmZpZWxkUHJvcHMpIHtcclxuICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyA9IHtcclxuICAgICAgICAgICAgLi4uUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbaXRlbS52YWx1ZVR5cGVdLFxyXG4gICAgICAgICAgICAuLi5pdGVtLmZpZWxkUHJvcHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpdGVtLmZpZWxkUHJvcHMgPSB7IC4uLlBST19UQUJMRV9ERUZBVUxUX1BST1BTW2l0ZW0udmFsdWVUeXBlXSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDliqjmgIHorr7nva5PcHRpb25zXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RSZXF1ZXN0KGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIGNvbHVtbnMubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmZpZWxkUHJvcHMgJiYgaGFzSW4oaXRlbS5maWVsZFByb3BzLCBcInJlcXVlc3RcIikpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IChcclxuICAgICAgICAgICAgaXRlbS5maWVsZFByb3BzIGFzIFNlbGVjdEZpZWxkUHJvcHNcclxuICAgICAgICAgICkucmVxdWVzdD8uKCk7XHJcbiAgICAgICAgICAoaXRlbS5maWVsZFByb3BzIGFzIFNlbGVjdEZpZWxkUHJvcHMpLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAoaXRlbS5maWVsZFByb3BzIGFzIFNlbGVjdEZpZWxkUHJvcHMpLm9wdGlvbnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRTZWFyY2hQYXJhbXMoY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zID0gW107XHJcbiAgICBjb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBmbGFnID0gIWl0ZW0uaGlkZUluU2VhcmNoICYmIGl0ZW0udmFsdWVUeXBlO1xyXG4gICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMucHVzaChjbG9uZURlZXAoaXRlbSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmxhZztcclxuICAgICAgfSlcclxuICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1tjb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8g5a+55LqOY2hlY2tib3jnsbvlnovvvIzku45vcHRpb25z5Lit5om+5Ye6Y2hlY2tlZOS4unRydWXnmoTpobnkvZzkuLrpu5jorqTlgLxcclxuICAgICAgICBpZiAoY29sdW1uLnZhbHVlVHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBjaGVja2VkVmFsdWVzID0gKGNvbHVtbi5maWVsZFByb3BzPy5vcHRpb25zIHx8IFtdKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQuY2hlY2tlZClcclxuICAgICAgICAgICAgLm1hcCgob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LnZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID1cclxuICAgICAgICAgICAgY2hlY2tlZFZhbHVlcy5sZW5ndGggPiAwID8gY2hlY2tlZFZhbHVlcyA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSBjb2x1bW4uZmllbGRQcm9wcz8udmFsdWUgfHwgZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5Yid5aeL5YyWIGF1dG9Db21wbGV0ZSDmlbDmja7mupBcclxuICAgICAgICBpZiAoY29sdW1uLnZhbHVlVHlwZSA9PT0gXCJhdXRvQ29tcGxldGVcIikge1xyXG4gICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8g5qC55o2u5YiX55qEIG9yZGVyIOWtl+autei/m+ihjOaOkuW6j++8jOacquiuvue9riBvcmRlciDnmoTmlL7lnKjmnIDlkI5cclxuICAgIHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBhT3JkZXIgPSBpc05pbChhPy5vcmRlcikgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGEub3JkZXI7XHJcbiAgICAgIGNvbnN0IGJPcmRlciA9IGlzTmlsKGI/Lm9yZGVyKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogYi5vcmRlcjtcclxuICAgICAgaWYgKGFPcmRlciA9PT0gYk9yZGVyKSByZXR1cm4gMDtcclxuICAgICAgcmV0dXJuIGFPcmRlciAtIGJPcmRlcjtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0U2VhcmNoRm9ybURlZmF1bHRQcm9wKHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyk7XHJcblxyXG4gICAgLy8g5bm25Y+R5Yqg6L295omA5pyJ6ZyA6KaB5byC5q2l6I635Y+W55qE6YCJ6aG5XHJcbiAgICB0aGlzLnNldFNlbGVjdFJlcXVlc3QodGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGFibGVDb2x1bW5zKGluamVjdENvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIC8vIDEuIOS9v+eUqOacgOWOn+Wni+eahGNvbHVtbnPkvZzkuLrmlbDmja7mupDvvIznoa7kv53ovoXliqnliJflrozlhajkuI3lj5flvbHlk41cclxuICAgIGNvbnN0IG9yaWdpbmFsQ29sdW1ucyA9IGNsb25lRGVlcCh0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAgIC8vIDIuIOWkhOeQhuWtl+auteaYoOWwhO+8iOWmguaenOaPkOS+m+S6hmZpZWxkc+WPguaVsO+8iVxyXG4gICAgbGV0IHByb2Nlc3NlZEluamVjdENvbHVtbnMgPSBpbmplY3RDb2x1bW5zO1xyXG5cclxuICAgIC8vIDMuIOWIhuemu+i+heWKqeWIl+WSjOmdnui+heWKqeWIl++8iOS9v+eUqOWOn+Wni+aVsOaNru+8iVxyXG4gICAgY29uc3Qgbm9uQXV4aWxpYXJ5Q29sdW1ucyA9IG9yaWdpbmFsQ29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+ICFjb2wuYXV4aWxpYXJ5Q29sdW1uXHJcbiAgICApO1xyXG5cclxuICAgIC8vIDQuIOaMieeFp2luamVjdENvbHVtbnPnmoTpobrluo/ph43mlrDmjpLliJfpnZ7ovoXliqnliJdcclxuICAgIGNvbnN0IHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuICAgIGNvbnN0IHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnMgPSBbLi4ubm9uQXV4aWxpYXJ5Q29sdW1uc107IC8vIOWkjeWItuS4gOS7veeUqOS6juafpeaJvuWSjOenu+mZpFxyXG5cclxuICAgIHByb2Nlc3NlZEluamVjdENvbHVtbnMuZm9yRWFjaCgoaW5qZWN0Q29sKSA9PiB7XHJcbiAgICAgIC8vIOafpeaJvumdnui+heWKqeWIl+S4reWvueW6lOeahOS4i+agh1xyXG4gICAgICBjb25zdCBleGlzdGluZ0NvbEluZGV4ID0gcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGNvbCkgPT4gY29sLnByb3AgPT09IGluamVjdENvbC5wcm9wXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChleGlzdGluZ0NvbEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIC8vIOWmguaenOaJvuWIsOebuOWQjOWIl++8jOeUqGluamVjdENvbHVtbnPkuK3nmoTlsZ7mgKfopobnm5bljp/lp4tjb2x1bW5z5Lit55qE5bGe5oCnXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdDb2wgPSByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zW2V4aXN0aW5nQ29sSW5kZXhdO1xyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVkQ29sID0geyAuLi5leGlzdGluZ0NvbCwgLi4uaW5qZWN0Q29sIH07XHJcbiAgICAgICAgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1ucy5wdXNoKHVwZGF0ZWRDb2wpO1xyXG4gICAgICAgIC8vIOS7juWJqeS9meaVsOe7hOS4reenu+mZpO+8jOmBv+WFjemHjeWkjVxyXG4gICAgICAgIHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnMuc3BsaWNlKGV4aXN0aW5nQ29sSW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWmguaenOayoeaJvuWIsOWvueW6lOeahOWIl++8jOebtOaOpea3u+WKoGluamVjdENvbHVtbnPkuK3nmoTliJdcclxuICAgICAgICByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zLnB1c2goaW5qZWN0Q29sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNS4g5aSE55CG5Ymp5L2Z55qE5Y6f5aeLY29sdW1uc+S4reeahOmdnui+heWKqeWIl++8iOWcqGluamVjdENvbHVtbnPkuK3mnKrlh7rnjrDnmoTliJfvvIlcclxuICAgIC8vIOi/meS6m+WIl+W6lOivpeiiq+makOiXj++8iOiuvue9rmhpZGVJblRhYmxl5Li6dHJ1Ze+8iVxyXG4gICAgcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucy5mb3JFYWNoKChyZW1haW5pbmdDb2wpID0+IHtcclxuICAgICAgY29uc3QgaGlkZGVuQ29sID0geyAuLi5yZW1haW5pbmdDb2wsIGhpZGVJblRhYmxlOiB0cnVlIH07XHJcbiAgICAgIHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnMucHVzaChoaWRkZW5Db2wpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNi4g5oyJ54Wn5Y6f5aeLY29sdW1uc+eahOmhuuW6j+mHjeaWsOe7hOWQiO+8muS/neaMgei+heWKqeWIl+eahOWOn+Wni+S9jee9ruWSjOWxnuaAp1xyXG4gICAgY29uc3QgZmluYWxDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcbiAgICBsZXQgbm9uQXV4aWxpYXJ5SW5kZXggPSAwO1xyXG4gICAgbGV0IGF1eGlsaWFyeUluZGV4ID0gMDtcclxuXHJcbiAgICBvcmlnaW5hbENvbHVtbnMuZm9yRWFjaCgob3JpZ2luYWxDb2wpID0+IHtcclxuICAgICAgaWYgKG9yaWdpbmFsQ29sLmF1eGlsaWFyeUNvbHVtbikge1xyXG4gICAgICAgIC8vIOWmguaenOaYr+i+heWKqeWIl++8jOS9v+eUqOWOn+Wni+WIl+aVsOaNru+8jOWujOWFqOS4jei/m+ihjOS7u+S9leS/ruaUuVxyXG4gICAgICAgIGZpbmFsQ29sdW1ucy5wdXNoKG9yaWdpbmFsQ29sKTtcclxuICAgICAgICBhdXhpbGlhcnlJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWmguaenOaYr+mdnui+heWKqeWIl++8jOS9v+eUqOmHjeaWsOaOkuW6j+WQjueahOWIl++8jOS9huS/neeVmeWOn+Wni+WIl+eahOaJgOacieWxnuaAp1xyXG4gICAgICAgIGNvbnN0IHJlb3JkZXJlZENvbCA9IHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnNbbm9uQXV4aWxpYXJ5SW5kZXhdO1xyXG4gICAgICAgIGlmIChyZW9yZGVyZWRDb2wpIHtcclxuICAgICAgICAgIC8vIOWQiOW5tuWOn+Wni+WIl+WSjOmHjeaWsOaOkuW6j+WQjueahOWIl++8jOehruS/neS/neeVmeaJgOacieWOn+Wni+WxnuaAp1xyXG4gICAgICAgICAgY29uc3QgbWVyZ2VkQ29sID0geyAuLi5vcmlnaW5hbENvbCwgLi4ucmVvcmRlcmVkQ29sIH07XHJcbiAgICAgICAgICBmaW5hbENvbHVtbnMucHVzaChtZXJnZWRDb2wpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyDlpoLmnpzph43mlrDmjpLluo/lkI7nmoTliJfkuI3lrZjlnKjvvIzkvb/nlKjljp/lp4vliJdcclxuICAgICAgICAgIGZpbmFsQ29sdW1ucy5wdXNoKG9yaWdpbmFsQ29sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9uQXV4aWxpYXJ5SW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm1hdGVJbm5lckNvbHVtbnMoZmluYWxDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIC8vIOmAmui/hyBQcm94eSDnm5HlkKwgX3NlYXJjaFBhcmFtcyDnmoTlsZ7mgKflj5jmm7RcclxuICBwcml2YXRlIGNyZWF0ZVNlYXJjaFBhcmFtc1Byb3h5KHRhcmdldDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGNvbnN0IGhhbmRsZXI6IFByb3h5SGFuZGxlcjxhbnk+ID0ge1xyXG4gICAgICBzZXQob2JqOiBhbnksIHByb3A6IHN0cmluZyB8IHN5bWJvbCwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhwcm9wKTtcclxuICAgICAgICBjb25zdCBvbGRWYWwgPSBvYmpba2V5XTtcclxuICAgICAgICBpZiAob2xkVmFsID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBzZWxmLm9uVmFsdWVzQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHNlbGYuZ2V0U2VhcmNoUGFyYW1zKCksXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpIHtcclxuICAgIGNvbnN0IGNsb25lU2VhcmNoUGFyYW1zID0gY2xvbmVEZWVwKHRoaXMuX3NlYXJjaFBhcmFtcyk7XHJcbiAgICByZXR1cm4gY2xvbmVTZWFyY2hQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkU2VydmVyU29ydFBheWxvYWQoKSB7XHJcbiAgICAvLyDmnoTlu7rmv4DmtLvmjpLluo/pm4blkIjvvIjmjInkvJjlhYjnuqfku47kvY7liLDpq5jvvIzmnKvlsL7kvJjlhYjvvIlcclxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLl9zb3J0UHJpb3JpdHkuZmlsdGVyKChrKSA9PiAhIXRoaXMuX3NvcnRNYXBba10pO1xyXG4gICAgaWYgKGFjdGl2ZUtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHNvcnRzID0gYWN0aXZlS2V5cy5tYXAoKGZpZWxkKSA9PiB7XHJcbiAgICAgIC8vIOafpeaJvuWvueW6lOeahOWIl+mFjee9ru+8jOS8mOWFiOS9v+eUqHNvcnROYW1l5a2X5q61XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wucHJvcCA9PT0gZmllbGQpO1xyXG4gICAgICBjb25zdCBzb3J0RmllbGQgPSBjb2x1bW4/LnNvcnROYW1lIHx8IGZpZWxkO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXHJcbiAgICAgICAgb3JkZXI6IHRoaXMuX3NvcnRNYXBbZmllbGRdISxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGVTb3J0KSB7XHJcbiAgICAgIHJldHVybiBzb3J0czsgLy8g5Lul5pWw57uE5b2i5byP5o+Q5Lqk5aSa5YiX5o6S5bqPXHJcbiAgICB9XHJcbiAgICBjb25zdCBbZmlyc3RdID0gc29ydHM7XHJcbiAgICByZXR1cm4gZmlyc3Q7IC8vIOWFvOWuueWNleWIl+e7k+aehCB7IGZpZWxkLCBvcmRlciB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnREYXRhU291cmNlSW5QbGFjZSgpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpIHx8IHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLl9zb3J0UHJpb3JpdHkuZmlsdGVyKChrKSA9PiAhIXRoaXMuX3NvcnRNYXBba10pO1xyXG4gICAgaWYgKGFjdGl2ZUtleXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgLy8g5aSN5Yi25LiA5Lu95LyY5YWI57qn77yM5LuO5YmN5Yiw5ZCO5LyY5YWI57qn5LuO5L2O5Yiw6auY77yI5pyA5ZCO6K6+572u55qE5a2X5q615LyY5YWI77yJXHJcbiAgICBjb25zdCBrZXlzSW5Qcmlvcml0eSA9IFsuLi5hY3RpdmVLZXlzXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBpID0ga2V5c0luUHJpb3JpdHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IGtleXNJblByaW9yaXR5W2ldO1xyXG4gICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5fc29ydE1hcFtmaWVsZF0hO1xyXG4gICAgICAgIGNvbnN0IGF2ID0gYT8uW2ZpZWxkXTtcclxuICAgICAgICBjb25zdCBidiA9IGI/LltmaWVsZF07XHJcbiAgICAgICAgY29uc3QgY21wID0gdGhpcy5jb21wYXJlVmFsdWVzKGF2LCBidik7XHJcbiAgICAgICAgaWYgKGNtcCAhPT0gMCkgcmV0dXJuIG9yZGVyID09PSBcImFzY2VuZFwiID8gY21wIDogLWNtcDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJlVmFsdWVzKGFWYWw6IGFueSwgYlZhbDogYW55KTogbnVtYmVyIHtcclxuICAgIGlmIChhVmFsID09IG51bGwgJiYgYlZhbCA9PSBudWxsKSByZXR1cm4gMDtcclxuICAgIGlmIChhVmFsID09IG51bGwpIHJldHVybiAtMTtcclxuICAgIGlmIChiVmFsID09IG51bGwpIHJldHVybiAxO1xyXG4gICAgaWYgKGFWYWwgaW5zdGFuY2VvZiBEYXRlICYmIGJWYWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiBhVmFsLmdldFRpbWUoKSAtIGJWYWwuZ2V0VGltZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSBcImJvb2xlYW5cIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgcmV0dXJuIGFWYWwgPT09IGJWYWwgPyAwIDogYVZhbCA/IDEgOiAtMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGJWYWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIGFWYWwubG9jYWxlQ29tcGFyZShiVmFsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFOdW0gPSBOdW1iZXIoYVZhbCk7XHJcbiAgICBjb25zdCBiTnVtID0gTnVtYmVyKGJWYWwpO1xyXG4gICAgaWYgKCFpc05hTihhTnVtKSAmJiAhaXNOYU4oYk51bSkpIHJldHVybiBhTnVtIC0gYk51bTtcclxuICAgIHJldHVybiBTdHJpbmcoYVZhbCkubG9jYWxlQ29tcGFyZShTdHJpbmcoYlZhbCkpO1xyXG4gIH1cclxuXHJcbiAgLy8g5omn6KGMIGF1dG9Db21wbGV0ZSDmlbDmja7mupDmn6Xor6LvvIjlrp7pmYXmiafooYzpgLvovpHvvIlcclxuICBwcml2YXRlIGV4ZWN1dGVBdXRvQ29tcGxldGVEYXRhU291cmNlKGV2ZW50OiBFdmVudCwgY29sdW1uOiBQcm9UYWJsZUNvbHVtbikge1xyXG4gICAgY29uc3QgZmllbGRLZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlICYmXHJcbiAgICAgIHR5cGVvZiAoY29sdW1uLmZpZWxkUHJvcHMgYXMgQXV0b0NvbXBsZXRlRmllbGRQcm9wcykuZGF0YVNvdXJjZSA9PT1cclxuICAgICAgICBcImZ1bmN0aW9uXCJcclxuICAgICkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlKFxyXG4gICAgICAgICAgZXZlbnRcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIOWmguaenOi/lOWbnueahOaYryBQcm9taXNl77yM5aSE55CG5byC5q2l57uT5p6cXHJcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IGRhdGEgfHwgW107XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0b0NvbXBsZXRlIGRhdGFTb3VyY2UgZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBbXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIOWQjOatpei/lOWbnue7k+aenFxyXG4gICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gcmVzdWx0IHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0b0NvbXBsZXRlIGRhdGFTb3VyY2UgZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlYXJjaFBhcmFtcyhvcHRpb25zPzoge1xyXG4gICAgdXNlU2F2ZWQ/OiBib29sZWFuOyAvLyDkvb/nlKjmnIDov5HkuIDmrKHmn6Xor6Lmj5DkuqTnmoTlj4LmlbDvvIzpu5jorqTkuLogZmFsc2XvvJtmYWxzZSDkuLrlvZPliY3ooajljZXlgLxcclxuICB9KTogYW55IHtcclxuICAgIGNvbnN0IHsgdXNlU2F2ZWQgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IHJhd1BhcmFtcyA9IHVzZVNhdmVkID8gdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgOiB0aGlzLl9zZWFyY2hQYXJhbXM7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBjbG9uZURlZXAocmF3UGFyYW1zIHx8IHt9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXgsXHJcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuX3BhZ2VJbmZvLnBhZ2VTaXplLFxyXG4gICAgICB9LFxyXG4gICAgICAvLyDlnKjnur/mjpLluo/mqKHlvI/vvJrmiormjpLluo/lr7nosaHmj5DkuqTnu5nmjqXlj6NcclxuICAgICAgLi4uKHRoaXMuc29ydE1vZGUgPT09IFwic2VydmVyXCJcclxuICAgICAgICA/IHsgc29ydDogdGhpcy5idWlsZFNlcnZlclNvcnRQYXlsb2FkKCkgfVxyXG4gICAgICAgIDoge30pLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWxvYWQoYWZ0ZXJEZWxldGU/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KGFmdGVyRGVsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGaWVsZHNWYWx1ZShmaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIE9iamVjdC5rZXlzKGZpZWxkcykuZm9yRWFjaCgoaykgPT4ge1xyXG4gICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba10gPSBmaWVsZHNba107IC8vIOS/neeVmSBQcm94ee+8jOmAkOmhuei1i+WAvOinpuWPkeaLpuaIqlxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RmllbGRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclNlbGVjdGVkUm93KCkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Q29sdW1ucyhcclxuICAgIGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10sXHJcbiAgICBvcHRpb25zPzoge1xyXG4gICAgICByZWxvYWQ/OiBib29sZWFuOyAvLyDmmK/lkKbph43mlrDliqDovb3mlbDmja7vvIzpu5jorqTkuLogZmFsc2VcclxuICAgIH1cclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIOabtOaWsCBjb2x1bW5zIOi+k+WFpeWxnuaAp1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY2xvbmVEZWVwKGNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOagvOW8j+WMluWGhemDqOWIl1xyXG4gICAgdGhpcy5mb3JtYXRlSW5uZXJDb2x1bW5zKHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgLy8g6YeN5paw6K6+572u5pCc57Si5Y+C5pWw77yI5byC5q2l5pON5L2c77yJXHJcbiAgICAvLyDlhYjmuIXnqbrml6fnmoTmkJzntKLlj4LmlbDvvIzpgb/lhY3ml6fmlbDmja7mrovnlZlcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHt9O1xyXG4gICAgYXdhaXQgdGhpcy5zZXRTZWFyY2hQYXJhbXModGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyDph43mlrDliJvlu7ogUHJveHnvvIznoa7kv53ooajljZXpobnlgLzlj5jljJbog73mraPluLjop6blj5Hkuovku7ZcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHRoaXMuY3JlYXRlU2VhcmNoUGFyYW1zUHJveHkodGhpcy5fc2VhcmNoUGFyYW1zKTtcclxuXHJcbiAgICAvLyDph43mlrDms6jlhozmqKHmnb/vvIjlpoLmnpznu4Tku7blt7Lnu4/liJ3lp4vljJblrozmiJDvvIlcclxuICAgIGlmICh0aGlzLmFsbFRlbXBsYXRlcykge1xyXG4gICAgICB0aGlzLmF1dG9SZWdpc3RlclRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOiuvue9ruS6hiByZWxvYWQg6YCJ6aG55Li6IHRydWXvvIzliJnph43mlrDmn6Xor6LmlbDmja5cclxuICAgIGlmIChvcHRpb25zPy5yZWxvYWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93RGF0YTxUID0gYW55PigpOiBUIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYmxlUm93O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENoZWNrZWRSb3dzPFQgPSBhbnk+KCk6IFRbXSB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIC8vIOi/lOWbnuW9k+WJjeaVsOaNrua6kOS4reaJgOaciSBjaGVja2VkIOS4uiB0cnVlIOeahOmhuVxyXG4gICAgLy8g5rOo5oSP77ya5aaC5p6c6ZyA6KaB6I635Y+W5omA5pyJ6aG155qE6YCJ5Lit6aG577yM6ZyA6KaB6YGN5Y6G5omA5pyJ5pWw5o2u5rqQ5oiW5L2/55SoIF9zZWxlY3RlZFJvd0lkc1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKHJvdykgPT4gcm93LmNoZWNrZWQgPT09IHRydWUpIGFzIFRbXTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluaMh+WumuWQjeensOeahOaooeadv1xyXG4gIGdldFRlbXBsYXRlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyDpppblhYjku47oh6rlrprkuYnmqKHmnb/kuK3mn6Xmib5cclxuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRlbXBsYXRlcy5nZXQobmFtZSk7XHJcbiAgICAgIGlmIChjdXN0b21UZW1wbGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBjdXN0b21UZW1wbGF0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g54S25ZCO5LuO6YCa55So5qih5p2/5pig5bCE5Lit5p+l5om+XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU1hcC5nZXQobmFtZSk7XHJcbiAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG9vbFRpcFRleHRWYWx1ZShjb2x1bW46IFByb1RhYmxlQ29sdW1uLCBkYXRhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qga2V5ID1cclxuICAgICAgY29sdW1uLmN1c3RvbVJlbmRlciAmJiB0aGlzLmdldFRlbXBsYXRlKGNvbHVtbi5jdXN0b21SZW5kZXIpXHJcbiAgICAgICAgPyBcIlwiXHJcbiAgICAgICAgOiBjb2x1bW4uZWxsaXBzaXNcclxuICAgICAgICA/IGNvbHVtbi5wcm9wXHJcbiAgICAgICAgOiBcIlwiO1xyXG4gICAgcmV0dXJuICFrZXkgPyBcIlwiIDogZGF0YVtrZXldO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVSb3dDaGVja2VkKGRhdGE6IGFueSkge1xyXG4gICAgLy8g5ZCv55So5aSN6YCJ5qGG5pe277ya6KGM6auY5Lqu5bqU5LiO5aSN6YCJ5qGG6YCJ5Lit54q25oCB5LiA6Ie077yI5pSv5oyB5aSa6YCJ77yJXHJcbiAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNSb3dDaGVja2VkKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgLy8g5pyq5ZCv55So5aSN6YCJ5qGG5pe277ya5LuN54S25L2/55So5Y2V6YCJ6KGM6auY5LquXHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkVGFibGVSb3cpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLl9zZWxlY3RlZFRhYmxlUm93KSA9PT0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvLyDmo4Dmn6XooYzmmK/lkKbooqvnpoHnlKhcclxuICBpc1Jvd0Rpc2FibGVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNob3dDaGVja2JveCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMucm93RGlzYWJsZWQgPyB0aGlzLnJvd0Rpc2FibGVkKGRhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyDmo4Dmn6XooYzmmK/lkKbooqvlpI3pgInmoYbpgInkuK3vvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICBpc1Jvd0NoZWNrZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyDnm7TmjqXor7vlj5bmlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKdcclxuICAgIHJldHVybiBkYXRhLmNoZWNrZWQgPT09IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyDliIfmjaLooYznmoTpgInkuK3nirbmgIHvvIjmlbDmja7pqbHliqjmqKHlvI/vvIzkv53nlZnnlKjkuo7lhbzlrrnvvIlcclxuICB0b2dnbGVSb3dDaGVja2VkKGRhdGE6IGFueSwgY2hlY2tlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyDpmLvmraLkuovku7blhpLms6HvvIzpgb/lhY3op6blj5HooYzngrnlh7tcclxuICAgIH1cclxuICAgIC8vIOWmguaenOihjOiiq+emgeeUqO+8jOS4jeWFgeiuuOWIh+aNoumAieS4reeKtuaAgVxyXG4gICAgaWYgKHRoaXMuaXNSb3dEaXNhYmxlZChkYXRhKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g55u05o6l6K6+572u5pWw5o2u5a+56LGh55qEIGNoZWNrZWQg5bGe5oCnXHJcbiAgICBkYXRhLmNoZWNrZWQgPSBjaGVja2VkO1xyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dJZHPvvIjnlKjkuo7ot6jpobXpgInkuK3vvIlcclxuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChkYXRhKTtcclxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuYWRkKGlkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5kZWxldGUoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmZpbmRJbmRleCgocm93KSA9PlxyXG4gICAgICB0aGlzLmlzU2FtZVJvdyhyb3csIGRhdGEpXHJcbiAgICApO1xyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5wdXNoKGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOWLvumAieWkjemAieahhuaXtuWQjOatpeiuvue9rumrmOS6rumAieS4reihjFxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g6Iul5b2T5YmN6auY5Lqu6KGM5Li66K+l6KGM77yM5YiZ5Y+W5raI6auY5LquXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ICYmXHJcbiAgICAgICAgdGhpcy5pc1NhbWVSb3codGhpcy5fc2VsZWN0ZWRUYWJsZVJvdywgZGF0YSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDmm7TmlrDlhajpgInnirbmgIHvvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICB1cGRhdGVDaGVja0FsbFN0YXR1cygpIHtcclxuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3ggfHwgIUFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSkge1xyXG4gICAgICB0aGlzLl9jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8g5Y+q6K6h566X5Y+v55So55qE6KGM77yI5pyq56aB55So55qE6KGM77yJXHJcbiAgICBjb25zdCBhdmFpbGFibGVSb3dzID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcihcclxuICAgICAgKHJvdykgPT4gIXRoaXMuaXNSb3dEaXNhYmxlZChyb3cpXHJcbiAgICApO1xyXG4gICAgLy8g5Z+65LqO5pWw5o2u5a+56LGh55qEIGNoZWNrZWQg5bGe5oCn6K6h566XXHJcbiAgICBjb25zdCBjaGVja2VkQ291bnQgPSBhdmFpbGFibGVSb3dzLmZpbHRlcihcclxuICAgICAgKHJvdykgPT4gcm93LmNoZWNrZWQgPT09IHRydWVcclxuICAgICkubGVuZ3RoO1xyXG4gICAgY29uc3QgdG90YWxDb3VudCA9IGF2YWlsYWJsZVJvd3MubGVuZ3RoO1xyXG4gICAgdGhpcy5fY2hlY2tlZEFsbCA9XHJcbiAgICAgIHRvdGFsQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50ID09PSB0b3RhbENvdW50O1xyXG4gICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWRDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50IDwgdG90YWxDb3VudDtcclxuICB9XHJcblxyXG4gIC8vIOWFqOmAiS/lj5bmtojlhajpgInvvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICB0b2dnbGVDaGVja0FsbChjaGVja2VkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5Y+q5aSE55CG5Y+v55So55qE6KGM77yI5pyq56aB55So55qE6KGM77yJXHJcbiAgICBjb25zdCBhdmFpbGFibGVSb3dzID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcihcclxuICAgICAgKHJvdykgPT4gIXRoaXMuaXNSb3dEaXNhYmxlZChyb3cpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIOaJuemHj+iuvue9riBjaGVja2VkIOWxnuaAp1xyXG4gICAgYXZhaWxhYmxlUm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgcm93LmNoZWNrZWQgPSBjaGVja2VkO1xyXG5cclxuICAgICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd0lkc++8iOeUqOS6jui3qOmhtemAieS4re+8iVxyXG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcclxuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuYWRkKGlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuZGVsZXRlKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dz77yI55So5LqO5YW85a655oCn77yJXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbLi4uYXZhaWxhYmxlUm93c107XHJcbiAgICAgIC8vIOWQjOatpeiuvue9rumrmOS6rumAieS4reihjOS4uuesrOS4gOadoeWPr+mAieaVsOaNrlxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID1cclxuICAgICAgICBhdmFpbGFibGVSb3dzLmxlbmd0aCA+IDAgPyBhdmFpbGFibGVSb3dzWzBdIDogbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xyXG4gICAgICAvLyDlj5bmtojpq5jkuq5cclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W6YCJ5Lit55qE6KGM5pWw5o2u77yI5L+d55WZ55So5LqO5YW85a655oCn77yJXHJcbiAgZ2V0U2VsZWN0ZWRSb3dzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldENoZWNrZWRSb3dzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDlpITnkIbooYwgY2hlY2tib3gg5Y+Y5YyW5LqL5Lu277yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgaGFuZGxlUm93Q2hlY2tlZENoYW5nZShkYXRhOiBhbnksIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp+W3sue7j+mAmui/h+WPjOWQkee7keWumuiHquWKqOabtOaWsFxyXG4gICAgLy8g6L+Z6YeM5Y+q6ZyA6KaB5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd0lkcyDlkowgX3NlbGVjdGVkUm93c1xyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dJZHPvvIjnlKjkuo7ot6jpobXpgInkuK3vvIlcclxuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChkYXRhKTtcclxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuYWRkKGlkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5kZWxldGUoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmZpbmRJbmRleCgocm93KSA9PlxyXG4gICAgICB0aGlzLmlzU2FtZVJvdyhyb3csIGRhdGEpXHJcbiAgICApO1xyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5wdXNoKGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOWLvumAieWkjemAieahhuaXtuWQjOatpeiuvue9rumrmOS6rumAieS4reihjFxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g6Iul5b2T5YmN6auY5Lqu6KGM5Li66K+l6KGM77yM5YiZ5Y+W5raI6auY5LquXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ICYmXHJcbiAgICAgICAgdGhpcy5pc1NhbWVSb3codGhpcy5fc2VsZWN0ZWRUYWJsZVJvdywgZGF0YSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDmm7TmlrDlhajpgInnirbmgIFcclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOWIt+aWsOWFqOmAieeKtuaAge+8iOeUqOS6juWFtuS7luWcuuaZr++8iVxyXG4gIHJlZnJlc2hDaGVja0FsbFN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluihjOeahOWUr+S4gOagh+ivhu+8iOeUqOS6jui3qOmhtemAieS4re+8iVxyXG4gIHByaXZhdGUgZ2V0Um93SWQoZGF0YTogYW55KTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBkYXRhLmlkID8/IGRhdGEua2V5ID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIOWIpOaWreS4pOihjOaYr+WQpuS4uuWQjOS4gOihjFxyXG4gIHByaXZhdGUgaXNTYW1lUm93KHJvdzE6IGFueSwgcm93MjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpZDEgPSB0aGlzLmdldFJvd0lkKHJvdzEpO1xyXG4gICAgY29uc3QgaWQyID0gdGhpcy5nZXRSb3dJZChyb3cyKTtcclxuXHJcbiAgICBpZiAoaWQxICE9PSB1bmRlZmluZWQgJiYgaWQyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGlkMSA9PT0gaWQyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZhbGxiYWNrIOWIsCBKU09OIOavlOi+g1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJvdzEpID09PSBKU09OLnN0cmluZ2lmeShyb3cyKTtcclxuICB9XHJcblxyXG4gIC8vIOa4heepuumAieS4reeahOihjO+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIGNsZWFyU2VsZWN0ZWRSb3dzKCkge1xyXG4gICAgLy8g5riF56m65b2T5YmN5pWw5o2u5rqQ5Lit5omA5pyJ6aG555qEIGNoZWNrZWQg54q25oCBXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDmuIXnqbrpgInkuK3pm4blkIhcclxuICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmNsZWFyKCk7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbXTtcclxuICAgIHRoaXMuX2NoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRmllbGRDaGVja0JveENoYW5nZShjaGVja0JveE9wdGlvbnM6IE9wdGlvbnNUeXBlW10sIGtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldEZpZWxkc1ZhbHVlKHtcclxuICAgICAgW2tleV06IGNoZWNrQm94T3B0aW9uc1xyXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZClcclxuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoKCkge1xyXG4gICAgdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgPSB0aGlzLmNsZWFyRW1wdHlTZWFyY2hQYXJhbXMoKTtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNldEZvcm0oKSB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9zZWFyY2hQYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoaXRlbS5maWVsZFByb3BzPy5uYW1lIHx8IGl0ZW0ucHJvcCkgPT09IGtleTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyDlr7nkuo5jaGVja2JveOexu+Wei++8jOmcgOimgeeJueauiuWkhOeQhum7mOiupOWAvFxyXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uPy52YWx1ZVR5cGUgPT09IFwiY2hlY2tib3hcIikge1xyXG4gICAgICAgIC8vIOS7juWOn+Wni2NvbHVtbnPphY3nva7kuK3ojrflj5bliJ3lp4vphY3nva7vvIzku6Xnoa7kv53kvb/nlKjmraPnoa7nmoTpu5jorqTlgLxcclxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKGl0ZW0uZmllbGRQcm9wcz8ubmFtZSB8fCBpdGVtLnByb3ApID09PSBrZXk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOS7juWOn+Wni29wdGlvbnPkuK3mib7lh7pjaGVja2Vk5Li6dHJ1ZeeahOmhueS9nOS4uum7mOiupOWAvFxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmllbGRQcm9wcyA9IG9yaWdpbmFsQ29sdW1uPy5maWVsZFByb3BzIGFzXHJcbiAgICAgICAgICB8IENoZWNrYm94RmllbGRQcm9wc1xyXG4gICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IChvcmlnaW5hbEZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAuZmlsdGVyKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQuY2hlY2tlZClcclxuICAgICAgICAgIC5tYXAoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC52YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID1cclxuICAgICAgICAgIGNoZWNrZWRWYWx1ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/IGNoZWNrZWRWYWx1ZXNcclxuICAgICAgICAgICAgOiBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIC8vIOagueaNrum7mOiupOWAvOaBouWkjW9wdGlvbnPnmoRjaGVja2Vk54q25oCB77yM5L2/55So5Y6f5aeLb3B0aW9uc+eahOe7k+aehFxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiBbXTtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSBvcmlnaW5hbEZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW107XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0RmllbGRQcm9wcyA9IHRhcmdldENvbHVtbi5maWVsZFByb3BzIGFzIENoZWNrYm94RmllbGRQcm9wcztcclxuICAgICAgICB0YXJnZXRGaWVsZFByb3BzLm9wdGlvbnMgPSBvcmlnaW5hbE9wdGlvbnMubWFwKChpdGVtOiBPcHRpb25zVHlwZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgY2hlY2tlZDogZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSB0YXJnZXRDb2x1bW4/LmZpZWxkUHJvcHNcclxuICAgICAgICAgID8gdGFyZ2V0Q29sdW1uPy5maWVsZFByb3BzLnZhbHVlIHx8XHJcbiAgICAgICAgICAgIFBST19UQUJMRV9ERUZBVUxUX1BST1BTW3RhcmdldENvbHVtbi52YWx1ZVR5cGVdLnZhbHVlXHJcbiAgICAgICAgICA6IFBST19UQUJMRV9ERUZBVUxUX1BST1BTW3RhcmdldENvbHVtbi52YWx1ZVR5cGVdLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zYXZlZFNlYXJjaFBhcmFtcyA9IHt9O1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gMTtcclxuICAgIHRoaXMub25SZXNldEZvcm1CZWZvcmVSZWxvYWQuZW1pdCgpO1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUGFnZUluZGV4Q2hhbmdlKHBhZ2VJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gMTtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZVF1ZXJ5KGFmdGVyRGVsZXRlPzogYm9vbGVhbikge1xyXG4gICAgLy8g5Yig6Zmk5ZCO5Yi35paw5LiU5b2T5YmN6aG15LuF5Ymp5LiA5p2h6K6w5b2V5pe277yM6Iul5LiN5Zyo56ys5LiA6aG15YiZ5YWI5Zue6YCA5LiA6aG1XHJcbiAgICBpZiAoXHJcbiAgICAgIGFmdGVyRGVsZXRlICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSAmJlxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID09PSAxICYmXHJcbiAgICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA+IDFcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggLSAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOS/neWtmOWIoOmZpOWJjeeahOaVsOaNrua6kO+8iOeUqOS6juWIoOmZpOWQjuafpeivouaXtuenu+mZpOiiq+WIoOmZpOmhueeahOmAieS4reeKtuaAge+8iVxyXG4gICAgY29uc3QgcHJldmlvdXNEYXRhU291cmNlID1cclxuICAgICAgYWZ0ZXJEZWxldGUgJiYgdGhpcy5zaG93Q2hlY2tib3ggPyBbLi4udGhpcy5kYXRhU291cmNlXSA6IFtdO1xyXG5cclxuICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMucmVxdWVzdCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCh7XHJcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpLFxyXG4gICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXgsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyDlnKjnur/mjpLluo/mqKHlvI/vvJrmiormjpLluo/lr7nosaHmj5DkuqTnu5nmjqXlj6NcclxuICAgICAgICAgIC4uLih0aGlzLnNvcnRNb2RlID09PSBcInNlcnZlclwiXHJcbiAgICAgICAgICAgID8geyBzb3J0OiB0aGlzLmJ1aWxkU2VydmVyU29ydFBheWxvYWQoKSB9XHJcbiAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDoh6rliqjms6jlhaUgY2hlY2tlZCDlrZfmrrXvvIzmlK/mjIHot6jpobXpgInkuK1cclxuICAgICAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IChyZXN1bHQuZGF0YSB8fCBbXSkubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChpdGVtKTtcclxuICAgICAgICAgICAgLy8g5aaC5p6c5pWw5o2u5bey5pyJIGNoZWNrZWQg5bGe5oCn77yM5L+d55WZ77yb5ZCm5YiZ5qC55o2uIF9zZWxlY3RlZFJvd0lkcyDliKTmlq1cclxuICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9XHJcbiAgICAgICAgICAgICAgaXRlbS5jaGVja2VkICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gaXRlbS5jaGVja2VkXHJcbiAgICAgICAgICAgICAgICA6IGlkICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5fc2VsZWN0ZWRSb3dJZHMuaGFzKGlkKVxyXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyDliKDpmaTlkI7mn6Xor6LvvJrnp7vpmaTooqvliKDpmaTpobnnmoTpgInkuK3nirbmgIFcclxuICAgICAgICAgIGlmIChhZnRlckRlbGV0ZSAmJiBwcmV2aW91c0RhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhSWRzID0gbmV3IFNldChcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UubWFwKChpdGVtKSA9PiB0aGlzLmdldFJvd0lkKGl0ZW0pKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgLy8g6YGN5Y6G5LmL5YmN55qE5pWw5o2u5rqQ77yM5aaC5p6c5LiN5Zyo5paw5pWw5o2u5rqQ5Lit77yM6K+05piO6KKr5Yig6Zmk5LqG77yM6ZyA6KaB5riF6Zmk5YW26YCJ5Lit54q25oCBXHJcbiAgICAgICAgICAgIHByZXZpb3VzRGF0YVNvdXJjZS5mb3JFYWNoKChvbGRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb2xkSWQgPSB0aGlzLmdldFJvd0lkKG9sZEl0ZW0pO1xyXG4gICAgICAgICAgICAgIGlmIChvbGRJZCAhPT0gdW5kZWZpbmVkICYmICFuZXdEYXRhSWRzLmhhcyhvbGRJZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIOiiq+WIoOmZpOeahOmhue+8jOS7jumAieS4rembhuWQiOS4reenu+mZpFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuZGVsZXRlKG9sZElkKTtcclxuICAgICAgICAgICAgICAgIC8vIOWmguaenOaVsOaNruWvueixoei/mOWcqOWFtuS7luWcsOaWueW8leeUqO+8jOa4hemZpOWFtumAieS4reeKtuaAgVxyXG4gICAgICAgICAgICAgICAgaWYgKG9sZEl0ZW0uY2hlY2tlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9sZEl0ZW0uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHJlc3VsdC5kYXRhIHx8IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9IHJlc3VsdC5zdW1tYXJ5RGF0YSB8fCBudWxsO1xyXG4gICAgICAgIC8vIOacrOWcsOaOkuW6j+aooeW8j++8muaLv+WIsOaVsOaNruWQjuWcqOWJjeerr+aOkuW6j1xyXG4gICAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBcImxvY2FsXCIpIHtcclxuICAgICAgICAgIHRoaXMuc29ydERhdGFTb3VyY2VJblBsYWNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BhZ2VJbmZvLnRvdGFsID0gcmVzdWx0LnRvdGFsIHx8IDA7XHJcbiAgICAgICAgLy8g5pu05paw5YWo6YCJ54q25oCBXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLmn6Xor6LlpLHotKU6XCIsIGVycm9yKTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICB0aGlzLl9wYWdlSW5mby50b3RhbCA9IDA7XHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9IG51bGw7XHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCLmnKrmj5DkvpsgX3JlcXVlc3Qg5Zue6LCD5Ye95pWwXCIpO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyDkuI3lho3osIPnlKggY2xlYXJTZWxlY3RlZFJvd3MoKe+8jOS/neeVmei3qOmhtemAieS4reeKtuaAgVxyXG4gIH1cclxuXHJcbiAgLy8g6Kem5Y+R5YiX5o6S5bqP5Y+Y5pu0XHJcbiAgb25Tb3J0Q2hhbmdlKHNvcnRLZXk6IHN0cmluZywgc29ydE9yZGVyOiBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsKSB7XHJcbiAgICAvLyDljZXliJfmjpLluo/vvJrph43nva7lhbblroPliJfvvJvlpJrliJfmjpLluo/vvJrkv53nlZnlhbblroPliJdcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZVNvcnQpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5fc29ydE1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gc29ydEtleSkgdGhpcy5fc29ydE1hcFtrZXldID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zb3J0TWFwW3NvcnRLZXldID0gc29ydE9yZGVyO1xyXG5cclxuICAgIC8vIOe7tOaKpOS8mOWFiOe6p+mYn+WIl++8muacieW6j+WIl+S4lOmdnuepuiAtPiDnva7kuo7mnKvlsL7vvJvkuLrnqbogLT4g56e76ZmkXHJcbiAgICB0aGlzLl9zb3J0UHJpb3JpdHkgPSB0aGlzLl9zb3J0UHJpb3JpdHkuZmlsdGVyKChrKSA9PiBrICE9PSBzb3J0S2V5KTtcclxuICAgIGlmIChzb3J0T3JkZXIpIHtcclxuICAgICAgdGhpcy5fc29ydFByaW9yaXR5LnB1c2goc29ydEtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IFwibG9jYWxcIikge1xyXG4gICAgICB0aGlzLnNvcnREYXRhU291cmNlSW5QbGFjZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5Zyo57q/5o6S5bqP77ya6YeN5paw6K+35rGCXHJcbiAgICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNvcnRPcmRlcihzb3J0S2V5OiBzdHJpbmcpOiBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0TWFwW3NvcnRLZXldIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJsZVJvd0NsaWNrKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICAvLyDlpoLmnpzlvIDlkK/kuoblpI3pgInmoYbvvIzngrnlh7vooYzml7blj6rpgInkuK3ngrnlh7vooYzvvIjlpoLmnpzooYzmnKrooqvnpoHnlKjvvIlcclxuICAgIGlmICh0aGlzLnNob3dDaGVja2JveCAmJiAhdGhpcy5pc1Jvd0Rpc2FibGVkKGRhdGEpKSB7XHJcbiAgICAgIC8vIOWFiOa4heepuuaJgOaciemAieS4reihjFxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbXTtcclxuICAgICAgLy8g5Y+q6YCJ5Lit5b2T5YmN54K55Ye755qE6KGMXHJcbiAgICAgIHRoaXMudG9nZ2xlUm93Q2hlY2tlZChkYXRhLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHRoaXMuX3NlbGVjdGVkVGFibGVSb3cpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFibGVSb3dEYkNsaWNrKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICB0aGlzLm9uUm93RGJDbGljay5lbWl0KHRoaXMuX3NlbGVjdGVkVGFibGVSb3cpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29sdW1uc1NldHRpbmdDb25maXJtKCkge1xyXG4gICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICAvLyDlpITnkIYgYXV0b0NvbXBsZXRlIOi+k+WFpeS6i+S7tu+8iOW4pumYsuaKlu+8iVxyXG4gIGhhbmRsZUF1dG9Db21wbGV0ZUlucHV0KGV2ZW50OiBFdmVudCwgY29sdW1uOiBQcm9UYWJsZUNvbHVtbikge1xyXG4gICAgY29uc3QgZmllbGRLZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuXHJcbiAgICAvLyDlpoLmnpzor6XlrZfmrrXov5jmsqHmnInpmLLmipblh73mlbDvvIzliJvlu7rkuIDkuKpcclxuICAgIGlmICghdGhpcy5fYXV0b0NvbXBsZXRlRGVib3VuY2VNYXAuaGFzKGZpZWxkS2V5KSkge1xyXG4gICAgICBjb25zdCBkZWJvdW5jZWRGbiA9IGRlYm91bmNlKChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8g6YeN5paw5p+l5om+5a+55bqU55qEIGNvbHVtbu+8jOehruS/neS9v+eUqOacgOaWsOeahOmFjee9rlxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuZmluZChcclxuICAgICAgICAgIChjb2wpID0+IChjb2wuZmllbGRQcm9wcz8ubmFtZSB8fCBjb2wucHJvcCkgPT09IGZpZWxkS2V5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY3VycmVudENvbHVtbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlQXV0b0NvbXBsZXRlRGF0YVNvdXJjZShldnQsIGN1cnJlbnRDb2x1bW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMzAwKTsgLy8gMzAwbXMg6Ziy5oqW5bu26L+fXHJcbiAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURlYm91bmNlTWFwLnNldChmaWVsZEtleSwgZGVib3VuY2VkRm4pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOiwg+eUqOmYsuaKluWHveaVsFxyXG4gICAgY29uc3QgZGVib3VuY2VkRm4gPSB0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5nZXQoZmllbGRLZXkpO1xyXG4gICAgaWYgKGRlYm91bmNlZEZuKSB7XHJcbiAgICAgIGRlYm91bmNlZEZuKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiOt+WPliBhdXRvQ29tcGxldGUg55qE5pWw5o2u5rqQXHJcbiAgZ2V0QXV0b0NvbXBsZXRlRGF0YVNvdXJjZShjb2x1bW46IFByb1RhYmxlQ29sdW1uKTogYW55W10ge1xyXG4gICAgY29uc3QgZmllbGRLZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZFByb3BzKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5maWVsZFByb3BzO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5oyH5a6a5ZCN56ew55qEbGFiZWzmqKHmnb9cclxuICBnZXRMYWJlbFRlbXBsYXRlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyDpppblhYjku47oh6rlrprkuYnmqKHmnb/kuK3mn6Xmib5cclxuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRlbXBsYXRlcy5nZXQobmFtZSk7XHJcbiAgICAgIGlmIChjdXN0b21UZW1wbGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBjdXN0b21UZW1wbGF0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g54S25ZCO5LuO6YCa55So5qih5p2/5pig5bCE5Lit5p+l5om+XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU1hcC5nZXQobmFtZSk7XHJcbiAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+WIGZvcm0taXRlbSDnmoTliqjmgIHnsbvlkI1cclxuICBnZXRGb3JtSXRlbUNsYXNzTmFtZShjb2x1bW46IFByb1RhYmxlQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRoaXMuZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3A7XHJcbiAgICByZXR1cm4gYHByby10YWJsZS0ke2ZpZWxkTmFtZX0tZm9ybS1pdGVtYDtcclxuICB9XHJcbn1cclxuIl19
1078
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9wcm9qZWN0cy92cHMtZnJvbnQvRnJvbnQvRGFzUE1TV2ViL2xpYi9wcm8tdGFibGUvc3JjLyIsInNvdXJjZXMiOlsibGliL3Byby10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFFTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBV2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBK0IsTUFBTSxVQUFVLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU9wQyxNQUFNLE9BQU8saUJBQWlCO0lBMko1QixZQUdVLFlBQWdEO1FBQWhELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQTdKakQsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0IsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFFNUIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUV2QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBRS9CLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTlCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTlCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBRTlCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBRTVCLGVBQVUsR0FBVyxNQUFNLENBQUM7UUFF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QWU7Z0JBQ3pCLHFuZkFBeUM7O2FBRTFDOzs7NENBNkpJLFFBQVEsWUFDUixNQUFNLFNBQUMsdUJBQXVCOzs7NEJBNUpoQyxLQUFLOzJCQUVMLEtBQUs7b0JBRUwsS0FBSzt3QkFFTCxLQUFLO3VCQUVMLEtBQUs7c0JBRUwsS0FBSzs0QkFFTCxLQUFLOzRCQUVMLEtBQUs7NkJBRUwsS0FBSzsyQkFFTCxLQUFLO3lCQUVMLEtBQUs7eUJBRUwsS0FBSzs0QkFFTCxLQUFLO3lCQUVMLEtBQUs7dUJBRUwsS0FBSzs0QkFFTCxLQUFLOzZCQUVMLEtBQUs7OEJBRUwsS0FBSztxQkFFTCxLQUFLO3NCQUVMLEtBQUs7MEJBRUwsS0FBSzt1QkFHTCxLQUFLO2dDQUVMLEtBQUs7MkJBR0wsS0FBSzsyQkFFTCxLQUFLOzBCQUdMLEtBQUs7K0JBRUwsS0FBSztpQ0FHTCxLQUFLO2dDQUVMLEtBQUs7eUJBRUwsTUFBTTsyQkFFTixNQUFNOzZCQUVOLE1BQU07c0NBRU4sTUFBTTsyQkFFTixZQUFZLFNBQUMsV0FBVzs4QkFFeEIsWUFBWSxTQUFDLGNBQWM7MkJBRTNCLGVBQWUsU0FBQyxXQUFXOzZCQWdFM0IsWUFBWSxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBoYXNJbiwgaXNOaWwsIGRlYm91bmNlLCBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJPX1RBQkxFX0RFRkFVTFRfQ09MVU1OLCBQUk9fVEFCTEVfREVGQVVMVF9QUk9QUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQXV0b0NvbXBsZXRlRmllbGRQcm9wcyxcbiAgQ2hlY2tib3hGaWVsZFByb3BzLFxuICBPcHRpb25zVHlwZSxcbiAgUHJvVGFibGVDb2x1bW4sXG4gIFByb1RhYmxlUGFnZUluZm8sXG4gIFByb1RhYmxlUmVxdWVzdFJlc3VsdCxcbiAgUHJvVGFibGVWYWx1ZXNDaGFuZ2UsXG4gIFNlbGVjdEZpZWxkUHJvcHMsXG59IGZyb20gXCIuL3R5cGVcIjtcbmltcG9ydCB7IFBST19UQUJMRV9DT0xVTU5fUkVNT1RFLCBQcm9UYWJsZVJlbW90ZUNvbHVtblNlcnZpY2UgfSBmcm9tIFwiLi90b2tlbnNcIjtcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtcHJvLXRhYmxlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvLXRhYmxlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9wcm8tdGFibGUuY29tcG9uZW50Lmxlc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFByb1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgdGFibGVOYW1lOiBzdHJpbmcgPSBcIlwiO1xuXG4gIEBJbnB1dCgpIG11bHRpUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGNvbmZpcm1CdG5UZXh0OiBzdHJpbmcgPSBcIuafpeivolwiO1xuXG4gIEBJbnB1dCgpIGNsZWFyQnRuVGV4dDogc3RyaW5nID0gXCLmuIXnqbpcIjtcblxuICBASW5wdXQoKSBsYWJlbFdpZHRoOiBzdHJpbmcgPSBcIjkwcHhcIjtcblxuICBASW5wdXQoKSBsYWJlbEFsaWduOiBzdHJpbmcgPSBcInJpZ2h0XCI7XG5cbiAgQElucHV0KCkgZm9ybUl0ZW1XaWR0aDogc3RyaW5nID0gXCIzMzBweFwiO1xuXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgYm9yZGVyZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIG91dGVyQm9yZGVyZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBmcm9udFBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzY3JvbGw6IHsgeD86IHN0cmluZyB8IG51bWJlcjsgeT86IHN0cmluZyB8IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgcmVxdWVzdDogKHBhcmFtczogYW55KSA9PiBQcm9taXNlPFByb1RhYmxlUmVxdWVzdFJlc3VsdD47XG5cbiAgQElucHV0KCkgc3VtbWFyeURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbDtcblxuICAvLyDmjpLluo/mqKHlvI/vvJpsb2NhbCDmnKzlnLDmjpLluo/vvJtzZXJ2ZXIg5Zyo57q/5o6S5bqP77yI5o+Q5Lqk57uZ5o6l5Y+j77yJXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBcImxvY2FsXCIgfCBcInNlcnZlclwiID0gXCJsb2NhbFwiO1xuXG4gIEBJbnB1dCgpIHNob3dDb2x1bW5TZXR0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g5piv5ZCm5byA5ZCv5aSa5YiX5o6S5bqP77yI6buY6K6k5Y2V5YiX77yJXG4gIEBJbnB1dCgpIG11bHRpcGxlU29ydDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIOWIpOaWreihjOaYr+WQpuemgeeUqOeahOWHveaVsFxuICBASW5wdXQoKSByb3dEaXNhYmxlZDogKGRhdGE6IGFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHJlcmVuZGVyT25SZXNpemU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIOaYr+WQpuiHquWKqOinpuWPkeivt+axglxuICBASW5wdXQoKSBhdXRvVHJpZ2dlclJlcXVlc3Q6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGN1c3RvbVRhYmxlUmVuZGVyPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAT3V0cHV0KCkgb25Sb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvblJvd0RiQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25WYWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFByb1RhYmxlVmFsdWVzQ2hhbmdlPigpO1xuXG4gIEBPdXRwdXQoKSBvblJlc2V0Rm9ybUJlZm9yZVJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBDb250ZW50Q2hpbGQoXCJhY3Rpb25CYXJcIikgYWN0aW9uQmFyVHBsITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKFwiSW1nQWN0aW9uQmFyXCIpIGltZ0FjdGlvbkJhclRwbCE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgYWxsVGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gIHByaXZhdGUgX3NhdmVkU2VhcmNoUGFyYW1zOiBhbnkgPSB7fTtcblxuICAvLyDlrZjlgqjmqKHmnb/mmKDlsITlhbPns7sgLSDpgJrov4flrZfnrKbkuLLlkI3np7DmmKDlsITliLDmqKHmnb/lvJXnlKhcbiAgcHJpdmF0ZSB0ZW1wbGF0ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXG4gIC8vIOWtmOWCqOaJgOacieiHquWumuS5ieaooeadv+eahOW8leeUqFxuICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXG4gIC8vIOiusOW9leWQhOWIl+aOkuW6j+eKtuaAge+8midhc2NlbmQnIHwgJ2Rlc2NlbmQnIHwgbnVsbFxuXG4gIHByaXZhdGUgX3NvcnRNYXA6IFJlY29yZDxzdHJpbmcsIFwiYXNjZW5kXCIgfCBcImRlc2NlbmRcIiB8IG51bGw+ID0ge307XG5cbiAgLy8g6K6w5b2V5aSa5YiX5o6S5bqP55qE5LyY5YWI57qn77yI5ZCO6K6+572u55qE5LyY5YWI77yJXG4gIHByaXZhdGUgX3NvcnRQcmlvcml0eTogc3RyaW5nW10gPSBbXTtcblxuICAvLyDlrZjlgqjmr4/kuKogYXV0b0NvbXBsZXRlIOWtl+auteeahOmYsuaKluWHveaVsFxuICBwcml2YXRlIF9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcDogTWFwPHN0cmluZywgKGV2ZW50OiBFdmVudCkgPT4gdm9pZD4gPVxuICAgIG5ldyBNYXAoKTtcblxuICAvLyDku4XlnKjliJ3lp4vljJbml7bov5DooYzliJfphY3nva7pooTmo4Dmn6XvvIzpgb/lhY3lkI7nu63osIPnlKjph43lpI3op6blj5FcbiAgcHJpdmF0ZSBfcHJlQ2hlY2tEb25lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgX2NvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcblxuICAvLyDnrZvpgInooajljZXmlbDmja7lrZjlgqhcbiAgX3NlYXJjaFBhcmFtczogYW55ID0ge307XG5cbiAgLy8g562b6YCJ6KGo5Y2VbGlzdOa4suafk+aVsOaNrlxuICBfc2VhcmNoRmlsZWRDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XG5cbiAgX3BhZ2VJbmZvOiBQcm9UYWJsZVBhZ2VJbmZvID0ge1xuICAgIHBhZ2VJbmRleDogMSxcbiAgICBwYWdlU2l6ZTogMTUsXG4gICAgdG90YWw6IDEwMCxcbiAgICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMTUsIDIwLCA1MCwgMTAwLCA1MDAsIDEwMDBdLFxuICB9O1xuXG4gIF9sb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgX3NlbGVjdGVkVGFibGVSb3c6IGFueSA9IG51bGw7XG5cbiAgLy8g6YCJ5Lit55qE6KGM5pWw5o2u77yI55So5LqO5aSN6YCJ5qGG6YCJ5oup77yJLSDkv53nlZnnlKjkuo7lhbzlrrnmgKdcbiAgX3NlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuICAvLyDlhajpgInnirbmgIFcbiAgX2NoZWNrZWRBbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDljYrpgInnirbmgIHvvIjpg6jliIbpgInkuK3vvIlcbiAgX2luZGV0ZXJtaW5hdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDov5znqItjb2x1bW5zXG4gIF9zZXJ2ZXJDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XG5cbiAgLy8g5a2Y5YKoIGF1dG9Db21wbGV0ZSDlrZfmrrXnmoTmlbDmja7mupBcbiAgX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcblxuICAvLyDmjqfliLbooajmoLzmmL7npLrnirbmgIHvvIznlKjkuo7ph43mlrDmjILovb1cbiAgX3Nob3dUYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8g6Ziy5oqW5a6a5pe25Zmo77yM55So5LqO56qX5Y+j5aSn5bCP6LCD5pW0XG4gIHByaXZhdGUgcmVzaXplRGVib3VuY2U6IGFueTtcblxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMucmVyZW5kZXJPblJlc2l6ZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMucmVzaXplRGVib3VuY2UpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZURlYm91bmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZURlYm91bmNlID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyDpgJrov4cgbmdJZiDph43mlrDmjILovb3ooajmoLxcbiAgICAgIHRoaXMuX3Nob3dUYWJsZSA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dUYWJsZSA9IHRydWU7XG4gICAgICB9LCAwKTtcbiAgICB9LCAxNTApO1xuICB9XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChQUk9fVEFCTEVfQ09MVU1OX1JFTU9URSlcbiAgICBwcml2YXRlIGNvbHVtblJlbW90ZTogUHJvVGFibGVSZW1vdGVDb2x1bW5TZXJ2aWNlIHwgbnVsbFxuICApIHt9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFJlbW90ZUNvbHVtbnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtblJlbW90ZT8uZ2V0Q29sIHx8ICF0aGlzLnRhYmxlTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbHVtblJlbW90ZS5nZXRDb2wodGhpcy50YWJsZU5hbWUsIHRoaXMubXVsdGlSb3cpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwZXJzaXN0UmVtb3RlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSkge1xuICAgIGlmICghdGhpcy5jb2x1bW5SZW1vdGU/LnNldENvbCB8fCAhdGhpcy50YWJsZU5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb2x1bW5SZW1vdGUuc2V0Q29sKFxuICAgICAgICB0aGlzLnRhYmxlTmFtZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgdGhpcy5tdWx0aVJvd1xuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHQgJiYgaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdC50b1Byb21pc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHt9O1xuICAgIHRoaXMuZm9ybWF0ZUlubmVyQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGF3YWl0IHRoaXMuc2V0U2VhcmNoUGFyYW1zKHRoaXMuY29sdW1ucyk7XG5cbiAgICAvLyDkvb/nlKggUHJveHkg5YyF6KOFIF9zZWFyY2hQYXJhbXPvvIzmi6bmiKrooajljZXpobnlgLzlj5jljJblubblkJHlpJblj5Hlh7rkuovku7ZcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB0aGlzLmNyZWF0ZVNlYXJjaFBhcmFtc1Byb3h5KHRoaXMuX3NlYXJjaFBhcmFtcyk7XG4gICAgaWYgKHRoaXMuYXV0b1RyaWdnZXJSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XG4gICAgfVxuICAgIHRoaXMucXVlcnlEeW5hbWljQ29sdW1ucygpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIOiHquWKqOazqOWGjOaJgOacieiHquWumuS5ieaooeadv1xuICAgIHRoaXMuYXV0b1JlZ2lzdGVyVGVtcGxhdGVzKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZUNoZWNrU2VydmVyQ29sdW1ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmZldGNoUmVtb3RlQ29sdW1ucygpO1xuICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaW5pdENvbHVtbnMgPSB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW4pXG4gICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3AsXG4gICAgICAgICAgaXNTaG93OiAhY29sdW1uLmhpZGVJblRhYmxlLCAvLyDpu5jorqTlhajpg6jmmL7npLpcbiAgICAgICAgICBoZWFkZXI6IGNvbHVtbi50aXRsZSxcbiAgICAgICAgICBzb3J0TmFtZTogY29sdW1uLnNvcnROYW1lIHx8IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICBpZiAocmVzLmNvZGUgPT09IDApIHtcbiAgICAgIGlmICghaXNFcXVhbChyZXMuZGF0YS50YWJDb2x1bW4sIGluaXRDb2x1bW5zKSkge1xuICAgICAgICBjb25zdCBpbml0UmVzID0gYXdhaXQgdGhpcy5wZXJzaXN0UmVtb3RlQ29sdW1ucyhpbml0Q29sdW1ucyk7XG4gICAgICAgIGlmIChpbml0UmVzKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIuS4gOiHtFwiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXMuY29kZSA9PT0gMTApIHtcbiAgICAgIC8vIGNvZGUgPT09IDEwIOihqOekuuacquWIneWni+WMlu+8jOmcgOimgee7p+e7reaJp+ihjOWQjue7remAu+i+kVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHF1ZXJ5RHluYW1pY0NvbHVtbnMoKSB7XG4gICAgaWYgKCF0aGlzLnRhYmxlTmFtZSB8fCAhdGhpcy5jb2x1bW5SZW1vdGUpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuX3ByZUNoZWNrRG9uZSkge1xuICAgICAgY29uc3QgY2hlY2tSZXN1bHQgPSBhd2FpdCB0aGlzLnByZUNoZWNrU2VydmVyQ29sdW1ucygpO1xuICAgICAgdGhpcy5fcHJlQ2hlY2tEb25lID0gdHJ1ZTtcbiAgICAgIGlmICghY2hlY2tSZXN1bHQpIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5mZXRjaFJlbW90ZUNvbHVtbnMoKTtcbiAgICBpZiAoIXJlcykgcmV0dXJuO1xuICAgIGlmIChyZXMuY29kZSA9PT0gMCkge1xuICAgICAgY29uc3QgX3RhYkNvbHVtbiA9IHJlcy5kYXRhLnRhYkNvbHVtbi5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aXRsZTogaXRlbS5oZWFkZXIsXG4gICAgICAgICAgcHJvcDogaXRlbS5maWVsZCxcbiAgICAgICAgICBzb3J0TmFtZTogaXRlbS5zb3J0TmFtZSxcbiAgICAgICAgICBoaWRlSW5UYWJsZTogIWl0ZW0uaXNTaG93LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9zZXJ2ZXJDb2x1bW5zID0gX3RhYkNvbHVtbjtcbiAgICAgIHRoaXMudXBkYXRlVGFibGVDb2x1bW5zKF90YWJDb2x1bW4pO1xuICAgIH0gZWxzZSBpZiAocmVzLmNvZGUgPT09IDEwKSB7XG4gICAgICAvLyDlpoLmnpzmnKrorr7nva7mjqXlj6Pov5Tlm57vvIzpnIDopoHpu5jorqTosIPnlKjkuIDmrKHkv67mlLnlh73mlbDliJ3lp4vljJbmlbDmja5cbiAgICAgIGNvbnN0IGluaXRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW4pXG4gICAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3AsXG4gICAgICAgICAgICBpc1Nob3c6IHRydWUsIC8vIOm7mOiupOWFqOmDqOaYvuekulxuICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICBzb3J0TmFtZTogY29sdW1uLnNvcnROYW1lIHx8IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIOiwg+eUqOS/ruaUueaOpeWPo+WIneWni+WMluaVsOaNrlxuICAgICAgY29uc3QgaW5pdFJlcyA9IGF3YWl0IHRoaXMucGVyc2lzdFJlbW90ZUNvbHVtbnMoaW5pdENvbHVtbnMpO1xuICAgICAgaWYgKGluaXRSZXMpIHtcbiAgICAgICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRlSW5uZXJDb2x1bW5zKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1uc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaGlkZUluVGFibGUpXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLlBST19UQUJMRV9ERUZBVUxUX0NPTFVNTiwgLi4uaXRlbSB9IGFzIFByb1RhYmxlQ29sdW1uO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyDoh6rliqjms6jlhozmqKHmnb/nmoTmlrnms5VcbiAgcHJpdmF0ZSBhdXRvUmVnaXN0ZXJUZW1wbGF0ZXMoKSB7XG4gICAgLy8g6I635Y+W5omA5pyJ6ZyA6KaB6Ieq5a6a5LmJ5qih5p2/55qE5YiXXG4gICAgY29uc3QgY29sdW1uc1dpdGhDdXN0b21SZW5kZXIgPSB0aGlzLl9jb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXJcbiAgICApO1xuXG4gICAgaWYgKGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIOWwneivleS7jkNvbnRlbnRDaGlsZHJlbuS4reafpeaJvuWvueW6lOeahOaooeadv1xuICAgICAgY29sdW1uc1dpdGhDdXN0b21SZW5kZXIuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IGNvbHVtbi5jdXN0b21SZW5kZXIhO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZmluZFRlbXBsYXRlQnlOYW1lKHRlbXBsYXRlTmFtZSk7XG5cbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXMuc2V0KHRlbXBsYXRlTmFtZSwgdGVtcGxhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDojrflj5bmiYDmnInpnIDopoHoh6rlrprkuYlsYWJlbOaooeadv+eahOWIl++8iOS9v+eUqOWOn+Wni2NvbHVtbnPvvIznoa7kv53pobrluo/mraPnoa7vvIlcbiAgICBjb25zdCBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21MYWJlbFJlbmRlclxuICAgICk7XG5cbiAgICBpZiAoY29sdW1uc1dpdGhDdXN0b21MYWJlbC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyDlsJ3or5Xku45Db250ZW50Q2hpbGRyZW7kuK3mn6Xmib7lr7nlupTnmoRsYWJlbOaooeadv1xuICAgICAgY29sdW1uc1dpdGhDdXN0b21MYWJlbC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gY29sdW1uLmN1c3RvbUxhYmVsUmVuZGVyITtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmZpbmRMYWJlbFRlbXBsYXRlQnlOYW1lKFxuICAgICAgICAgIHRlbXBsYXRlTmFtZSxcbiAgICAgICAgICBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXMuc2V0KHRlbXBsYXRlTmFtZSwgdGVtcGxhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyDmoLnmja7lkI3np7Dmn6Xmib7mqKHmnb9cbiAgcHJpdmF0ZSBmaW5kVGVtcGxhdGVCeU5hbWUodGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVGcm9tQ29udGVudCh0ZW1wbGF0ZU5hbWUpO1xuICB9XG5cbiAgLy8g5LuOQ29udGVudENoaWxkcmVu5Lit5p+l5om+5oyH5a6a5ZCN56ew55qE5qih5p2/XG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVGcm9tQ29udGVudChcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZ1xuICApOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgY3VzdG9tUmVuZGVyQ29sdW1ucyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXIpO1xuICAgIGNvbnN0IHRlbXBsYXRlSW5kZXggPSBjdXN0b21SZW5kZXJDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXIgPT09IHRlbXBsYXRlTmFtZVxuICAgICk7XG5cbiAgICBpZiAodGVtcGxhdGVJbmRleCA+PSAwKSB7XG4gICAgICAvLyDojrflj5bmiYDmnInmqKHmnb/vvIzlubbov4fmu6TmjonnibnmrormqKHmnb/vvIhhY3Rpb25CYXLlkoxJbWdBY3Rpb25CYXLvvIlcbiAgICAgIC8vIOi/meagt+WPr+S7pemBv+WFjeWboOS4uueJueauiuaooeadv+eahOS9jee9ruWvvOiHtOe0ouW8leiuoeeul+mUmeivr1xuICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5hbGxUZW1wbGF0ZXMudG9BcnJheSgpO1xuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGVzID0gdGVtcGxhdGVzLmZpbHRlcihcbiAgICAgICAgKHRwbCkgPT4gdHBsICE9PSB0aGlzLmFjdGlvbkJhclRwbCAmJiB0cGwgIT09IHRoaXMuaW1nQWN0aW9uQmFyVHBsXG4gICAgICApO1xuXG4gICAgICBpZiAodGVtcGxhdGVJbmRleCA8IGN1c3RvbVRlbXBsYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjdXN0b21UZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF07XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYOacquaJvuWIsOaooeadvyAke3RlbXBsYXRlTmFtZX1gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIOagueaNruWQjeensOafpeaJvmxhYmVs5qih5p2/XG4gIHByaXZhdGUgZmluZExhYmVsVGVtcGxhdGVCeU5hbWUoXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgY3VzdG9tTGFiZWxDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdXG4gICk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUluZGV4ID0gY3VzdG9tTGFiZWxDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21MYWJlbFJlbmRlciA9PT0gdGVtcGxhdGVOYW1lXG4gICAgKTtcblxuICAgIGlmICh0ZW1wbGF0ZUluZGV4ID49IDApIHtcbiAgICAgIC8vIOiOt+WPluaJgOacieaooeadv++8jOW5tui/h+a7pOaOieeJueauiuaooeadv++8iGFjdGlvbkJhcuWSjEltZ0FjdGlvbkJhcu+8iVxuICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5hbGxUZW1wbGF0ZXMudG9BcnJheSgpO1xuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGVzID0gdGVtcGxhdGVzLmZpbHRlcihcbiAgICAgICAgKHRwbCkgPT4gdHBsICE9PSB0aGlzLmFjdGlvbkJhclRwbCAmJiB0cGwgIT09IHRoaXMuaW1nQWN0aW9uQmFyVHBsXG4gICAgICApO1xuXG4gICAgICAvLyDorqHnrpdsYWJlbOaooeadv+eahOe0ouW8le+8mumcgOimgei3s+i/h+aJgOacieeahGN1c3RvbVJlbmRlcuaooeadv1xuICAgICAgY29uc3QgY3VzdG9tUmVuZGVyQ29sdW1ucyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKFxuICAgICAgICAoY29sKSA9PiBjb2wuY3VzdG9tUmVuZGVyXG4gICAgICApO1xuICAgICAgY29uc3QgbGFiZWxUZW1wbGF0ZUluZGV4ID0gY3VzdG9tUmVuZGVyQ29sdW1ucy5sZW5ndGggKyB0ZW1wbGF0ZUluZGV4O1xuXG4gICAgICBpZiAobGFiZWxUZW1wbGF0ZUluZGV4IDwgY3VzdG9tVGVtcGxhdGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGN1c3RvbVRlbXBsYXRlc1tsYWJlbFRlbXBsYXRlSW5kZXhdO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGDmnKrmib7liLBsYWJlbOaooeadvyAke3RlbXBsYXRlTmFtZX1gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIOiuvue9ruetm+mAieihqOWNlem7mOiupOWxnuaAp1xuICBwcml2YXRlIHNldFNlYXJjaEZvcm1EZWZhdWx0UHJvcChjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XG4gICAgY29sdW1ucy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS52YWx1ZVR5cGUpIHtcbiAgICAgICAgaWYgKGl0ZW0uZmllbGRQcm9wcykge1xuICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLlBST19UQUJMRV9ERUZBVUxUX1BST1BTW2l0ZW0udmFsdWVUeXBlXSxcbiAgICAgICAgICAgIC4uLml0ZW0uZmllbGRQcm9wcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyA9IHsgLi4uUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbaXRlbS52YWx1ZVR5cGVdIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIOWKqOaAgeiuvue9rk9wdGlvbnNcbiAgcHJpdmF0ZSBzZXRTZWxlY3RSZXF1ZXN0KGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcbiAgICBjb2x1bW5zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uZmllbGRQcm9wcyAmJiBoYXNJbihpdGVtLmZpZWxkUHJvcHMsIFwicmVxdWVzdFwiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCAoXG4gICAgICAgICAgICBpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wc1xuICAgICAgICAgICkucmVxdWVzdD8uKCk7XG4gICAgICAgICAgKGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzKS5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAoaXRlbS5maWVsZFByb3BzIGFzIFNlbGVjdEZpZWxkUHJvcHMpLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRTZWFyY2hQYXJhbXMoY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyA9IFtdO1xuICAgIGNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgZmxhZyA9ICFpdGVtLmhpZGVJblNlYXJjaCAmJiBpdGVtLnZhbHVlVHlwZTtcbiAgICAgICAgaWYgKGZsYWcpIHtcbiAgICAgICAgICB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMucHVzaChjbG9uZURlZXAoaXRlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbGFnO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1tjb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcblxuICAgICAgICAvLyDlr7nkuo5jaGVja2JveOexu+Wei++8jOS7jm9wdGlvbnPkuK3mib7lh7pjaGVja2Vk5Li6dHJ1ZeeahOmhueS9nOS4uum7mOiupOWAvFxuICAgICAgICBpZiAoY29sdW1uLnZhbHVlVHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IChjb2x1bW4uZmllbGRQcm9wcz8ub3B0aW9ucyB8fCBbXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC5jaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LnZhbHVlKTtcbiAgICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9XG4gICAgICAgICAgICBjaGVja2VkVmFsdWVzLmxlbmd0aCA+IDAgPyBjaGVja2VkVmFsdWVzIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gY29sdW1uLmZpZWxkUHJvcHM/LnZhbHVlIHx8IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWIneWni+WMliBhdXRvQ29tcGxldGUg5pWw5o2u5rqQXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVUeXBlID09PSBcImF1dG9Db21wbGV0ZVwiKSB7XG4gICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNba2V5XSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIOagueaNruWIl+eahCBvcmRlciDlrZfmrrXov5vooYzmjpLluo/vvIzmnKrorr7nva4gb3JkZXIg55qE5pS+5Zyo5pyA5ZCOXG4gICAgdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICBjb25zdCBhT3JkZXIgPSBpc05pbChhPy5vcmRlcikgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGEub3JkZXI7XG4gICAgICBjb25zdCBiT3JkZXIgPSBpc05pbChiPy5vcmRlcikgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGIub3JkZXI7XG4gICAgICBpZiAoYU9yZGVyID09PSBiT3JkZXIpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIGFPcmRlciAtIGJPcmRlcjtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U2VhcmNoRm9ybURlZmF1bHRQcm9wKHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyk7XG5cbiAgICAvLyDlubblj5HliqDovb3miYDmnInpnIDopoHlvILmraXojrflj5bnmoTpgInpoblcbiAgICB0aGlzLnNldFNlbGVjdFJlcXVlc3QodGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFibGVDb2x1bW5zKGluamVjdENvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcbiAgICAvLyAxLiDkvb/nlKjmnIDljp/lp4vnmoRjb2x1bW5z5L2c5Li65pWw5o2u5rqQ77yM56Gu5L+d6L6F5Yqp5YiX5a6M5YWo5LiN5Y+X5b2x5ZONXG4gICAgY29uc3Qgb3JpZ2luYWxDb2x1bW5zID0gY2xvbmVEZWVwKHRoaXMuY29sdW1ucyk7XG5cbiAgICAvLyAyLiDlpITnkIblrZfmrrXmmKDlsITvvIjlpoLmnpzmj5DkvpvkuoZmaWVsZHPlj4LmlbDvvIlcbiAgICBsZXQgcHJvY2Vzc2VkSW5qZWN0Q29sdW1ucyA9IGluamVjdENvbHVtbnM7XG5cbiAgICAvLyAzLiDliIbnprvovoXliqnliJflkozpnZ7ovoXliqnliJfvvIjkvb/nlKjljp/lp4vmlbDmja7vvIlcbiAgICBjb25zdCBub25BdXhpbGlhcnlDb2x1bW5zID0gb3JpZ2luYWxDb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2wpID0+ICFjb2wuYXV4aWxpYXJ5Q29sdW1uXG4gICAgKTtcblxuICAgIC8vIDQuIOaMieeFp2luamVjdENvbHVtbnPnmoTpobrluo/ph43mlrDmjpLliJfpnZ7ovoXliqnliJdcbiAgICBjb25zdCByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XG4gICAgY29uc3QgcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucyA9IFsuLi5ub25BdXhpbGlhcnlDb2x1bW5zXTsgLy8g5aSN5Yi25LiA5Lu955So5LqO5p+l5om+5ZKM56e76ZmkXG5cbiAgICBwcm9jZXNzZWRJbmplY3RDb2x1bW5zLmZvckVhY2goKGluamVjdENvbCkgPT4ge1xuICAgICAgLy8g5p+l5om+6Z2e6L6F5Yqp5YiX5Lit5a+55bqU55qE5LiL5qCHXG4gICAgICBjb25zdCBleGlzdGluZ0NvbEluZGV4ID0gcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAgIChjb2wpID0+IGNvbC5wcm9wID09PSBpbmplY3RDb2wucHJvcFxuICAgICAgKTtcbiAgICAgIGlmIChleGlzdGluZ0NvbEluZGV4ICE9PSAtMSkge1xuICAgICAgICAvLyDlpoLmnpzmib7liLDnm7jlkIzliJfvvIznlKhpbmplY3RDb2x1bW5z5Lit55qE5bGe5oCn6KaG55uW5Y6f5aeLY29sdW1uc+S4reeahOWxnuaAp1xuICAgICAgICBjb25zdCBleGlzdGluZ0NvbCA9IHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnNbZXhpc3RpbmdDb2xJbmRleF07XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZENvbCA9IHsgLi4uZXhpc3RpbmdDb2wsIC4uLmluamVjdENvbCB9O1xuICAgICAgICByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zLnB1c2godXBkYXRlZENvbCk7XG4gICAgICAgIC8vIOS7juWJqeS9meaVsOe7hOS4reenu+mZpO+8jOmBv+WFjemHjeWkjVxuICAgICAgICByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zLnNwbGljZShleGlzdGluZ0NvbEluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOWmguaenOayoeaJvuWIsOWvueW6lOeahOWIl++8jOebtOaOpea3u+WKoGluamVjdENvbHVtbnPkuK3nmoTliJdcbiAgICAgICAgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1ucy5wdXNoKGluamVjdENvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyA1LiDlpITnkIbliankvZnnmoTljp/lp4tjb2x1bW5z5Lit55qE6Z2e6L6F5Yqp5YiX77yI5ZyoaW5qZWN0Q29sdW1uc+S4reacquWHuueOsOeahOWIl++8iVxuICAgIC8vIOi/meS6m+WIl+W6lOivpeiiq+makOiXj++8iOiuvue9rmhpZGVJblRhYmxl5Li6dHJ1Ze+8iVxuICAgIHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnMuZm9yRWFjaCgocmVtYWluaW5nQ29sKSA9PiB7XG4gICAgICBjb25zdCBoaWRkZW5Db2wgPSB7IC4uLnJlbWFpbmluZ0NvbCwgaGlkZUluVGFibGU6IHRydWUgfTtcbiAgICAgIHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnMucHVzaChoaWRkZW5Db2wpO1xuICAgIH0pO1xuXG4gICAgLy8gNi4g5oyJ54Wn5Y6f5aeLY29sdW1uc+eahOmhuuW6j+mHjeaWsOe7hOWQiO+8muS/neaMgei+heWKqeWIl+eahOWOn+Wni+S9jee9ruWSjOWxnuaAp1xuICAgIGNvbnN0IGZpbmFsQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xuICAgIGxldCBub25BdXhpbGlhcnlJbmRleCA9IDA7XG4gICAgbGV0IGF1eGlsaWFyeUluZGV4ID0gMDtcblxuICAgIG9yaWdpbmFsQ29sdW1ucy5mb3JFYWNoKChvcmlnaW5hbENvbCkgPT4ge1xuICAgICAgaWYgKG9yaWdpbmFsQ29sLmF1eGlsaWFyeUNvbHVtbikge1xuICAgICAgICAvLyDlpoLmnpzmmK/ovoXliqnliJfvvIzkvb/nlKjljp/lp4vliJfmlbDmja7vvIzlrozlhajkuI3ov5vooYzku7vkvZXkv67mlLlcbiAgICAgICAgZmluYWxDb2x1bW5zLnB1c2gob3JpZ2luYWxDb2wpO1xuICAgICAgICBhdXhpbGlhcnlJbmRleCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5aaC5p6c5piv6Z2e6L6F5Yqp5YiX77yM5L2/55So6YeN5paw5o6S5bqP5ZCO55qE5YiX77yM5L2G5L+d55WZ5Y6f5aeL5YiX55qE5omA5pyJ5bGe5oCnXG4gICAgICAgIGNvbnN0IHJlb3JkZXJlZENvbCA9IHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnNbbm9uQXV4aWxpYXJ5SW5kZXhdO1xuICAgICAgICBpZiAocmVvcmRlcmVkQ29sKSB7XG4gICAgICAgICAgLy8g5ZCI5bm25Y6f5aeL5YiX5ZKM6YeN5paw5o6S5bqP5ZCO55qE5YiX77yM56Gu5L+d5L+d55WZ5omA5pyJ5Y6f5aeL5bGe5oCnXG4gICAgICAgICAgY29uc3QgbWVyZ2VkQ29sID0geyAuLi5vcmlnaW5hbENvbCwgLi4ucmVvcmRlcmVkQ29sIH07XG4gICAgICAgICAgZmluYWxDb2x1bW5zLnB1c2gobWVyZ2VkQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDlpoLmnpzph43mlrDmjpLluo/lkI7nmoTliJfkuI3lrZjlnKjvvIzkvb/nlKjljp/lp4vliJdcbiAgICAgICAgICBmaW5hbENvbHVtbnMucHVzaChvcmlnaW5hbENvbCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9uQXV4aWxpYXJ5SW5kZXgrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1hdGVJbm5lckNvbHVtbnMoZmluYWxDb2x1bW5zKTtcbiAgfVxuXG4gIC8vIOmAmui/hyBQcm94eSDnm5HlkKwgX3NlYXJjaFBhcmFtcyDnmoTlsZ7mgKflj5jmm7RcbiAgcHJpdmF0ZSBjcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0YXJnZXQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhhbmRsZXI6IFByb3h5SGFuZGxlcjxhbnk+ID0ge1xuICAgICAgc2V0KG9iajogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKHByb3ApO1xuICAgICAgICBjb25zdCBvbGRWYWwgPSBvYmpba2V5XTtcbiAgICAgICAgaWYgKG9sZFZhbCA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2VsZi5vblZhbHVlc0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiBzZWxmLmdldFNlYXJjaFBhcmFtcygpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRW1wdHlTZWFyY2hQYXJhbXMoKSB7XG4gICAgY29uc3QgY2xvbmVTZWFyY2hQYXJhbXMgPSBjbG9uZURlZXAodGhpcy5fc2VhcmNoUGFyYW1zKTtcbiAgICByZXR1cm4gY2xvbmVTZWFyY2hQYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyU29ydFBheWxvYWQoKSB7XG4gICAgLy8g5p6E5bu65r+A5rS75o6S5bqP6ZuG5ZCI77yI5oyJ5LyY5YWI57qn5LuO5L2O5Yiw6auY77yM5pyr5bC+5LyY5YWI77yJXG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+ICEhdGhpcy5fc29ydE1hcFtrXSk7XG4gICAgaWYgKGFjdGl2ZUtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzb3J0cyA9IGFjdGl2ZUtleXMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgLy8g5p+l5om+5a+55bqU55qE5YiX6YWN572u77yM5LyY5YWI5L2/55Soc29ydE5hbWXlrZfmrrVcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wucHJvcCA9PT0gZmllbGQpO1xuICAgICAgY29uc3Qgc29ydEZpZWxkID0gY29sdW1uPy5zb3J0TmFtZSB8fCBmaWVsZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICAgIG9yZGVyOiB0aGlzLl9zb3J0TWFwW2ZpZWxkXSEsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGlmICh0aGlzLm11bHRpcGxlU29ydCkge1xuICAgICAgcmV0dXJuIHNvcnRzOyAvLyDku6XmlbDnu4TlvaLlvI/mj5DkuqTlpJrliJfmjpLluo9cbiAgICB9XG4gICAgY29uc3QgW2ZpcnN0XSA9IHNvcnRzO1xuICAgIHJldHVybiBmaXJzdDsgLy8g5YW85a655Y2V5YiX57uT5p6EIHsgZmllbGQsIG9yZGVyIH1cbiAgfVxuXG4gIHByaXZhdGUgc29ydERhdGFTb3VyY2VJblBsYWNlKCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpIHx8IHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBhY3RpdmVLZXlzID0gdGhpcy5fc29ydFByaW9yaXR5LmZpbHRlcigoaykgPT4gISF0aGlzLl9zb3J0TWFwW2tdKTtcbiAgICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIOWkjeWItuS4gOS7veS8mOWFiOe6p++8jOS7juWJjeWIsOWQjuS8mOWFiOe6p+S7juS9juWIsOmrmO+8iOacgOWQjuiuvue9rueahOWtl+auteS8mOWFiO+8iVxuICAgIGNvbnN0IGtleXNJblByaW9yaXR5ID0gWy4uLmFjdGl2ZUtleXNdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IGtleXNJblByaW9yaXR5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0ga2V5c0luUHJpb3JpdHlbaV07XG4gICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5fc29ydE1hcFtmaWVsZF0hO1xuICAgICAgICBjb25zdCBhdiA9IGE/LltmaWVsZF07XG4gICAgICAgIGNvbnN0IGJ2ID0gYj8uW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgY21wID0gdGhpcy5jb21wYXJlVmFsdWVzKGF2LCBidik7XG4gICAgICAgIGlmIChjbXAgIT09IDApIHJldHVybiBvcmRlciA9PT0gXCJhc2NlbmRcIiA/IGNtcCA6IC1jbXA7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZVZhbHVlcyhhVmFsOiBhbnksIGJWYWw6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKGFWYWwgPT0gbnVsbCAmJiBiVmFsID09IG51bGwpIHJldHVybiAwO1xuICAgIGlmIChhVmFsID09IG51bGwpIHJldHVybiAtMTtcbiAgICBpZiAoYlZhbCA9PSBudWxsKSByZXR1cm4gMTtcbiAgICBpZiAoYVZhbCBpbnN0YW5jZW9mIERhdGUgJiYgYlZhbCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiBhVmFsLmdldFRpbWUoKSAtIGJWYWwuZ2V0VGltZSgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFWYWwgPT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiBiVmFsID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGFWYWwgPT09IGJWYWwgPyAwIDogYVZhbCA/IDEgOiAtMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBiVmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGFWYWwubG9jYWxlQ29tcGFyZShiVmFsKTtcbiAgICB9XG4gICAgY29uc3QgYU51bSA9IE51bWJlcihhVmFsKTtcbiAgICBjb25zdCBiTnVtID0gTnVtYmVyKGJWYWwpO1xuICAgIGlmICghaXNOYU4oYU51bSkgJiYgIWlzTmFOKGJOdW0pKSByZXR1cm4gYU51bSAtIGJOdW07XG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiVmFsKSk7XG4gIH1cblxuICAvLyDmiafooYwgYXV0b0NvbXBsZXRlIOaVsOaNrua6kOafpeivou+8iOWunumZheaJp+ihjOmAu+i+ke+8iVxuICBwcml2YXRlIGV4ZWN1dGVBdXRvQ29tcGxldGVEYXRhU291cmNlKGV2ZW50OiBFdmVudCwgY29sdW1uOiBQcm9UYWJsZUNvbHVtbikge1xuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XG5cbiAgICBpZiAoXG4gICAgICAoY29sdW1uLmZpZWxkUHJvcHMgYXMgQXV0b0NvbXBsZXRlRmllbGRQcm9wcykuZGF0YVNvdXJjZSAmJlxuICAgICAgdHlwZW9mIChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlID09PVxuICAgICAgICBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlKFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgICk7XG4gICAgICAgIC8vIOWmguaenOi/lOWbnueahOaYryBQcm9taXNl77yM5aSE55CG5byC5q2l57uT5p6cXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBkYXRhIHx8IFtdO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkF1dG9Db21wbGV0ZSBkYXRhU291cmNlIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IFtdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5ZCM5q2l6L+U5Zue57uT5p6cXG4gICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gcmVzdWx0IHx8IFtdO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0b0NvbXBsZXRlIGRhdGFTb3VyY2UgZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlYXJjaFBhcmFtcyhvcHRpb25zPzoge1xuICAgIHVzZVNhdmVkPzogYm9vbGVhbjsgLy8g5L2/55So5pyA6L+R5LiA5qyh5p+l6K+i5o+Q5Lqk55qE5Y+C5pWw77yM6buY6K6k5Li6IGZhbHNl77ybZmFsc2Ug5Li65b2T5YmN6KGo5Y2V5YC8XG4gIH0pOiBhbnkge1xuICAgIGNvbnN0IHsgdXNlU2F2ZWQgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCByYXdQYXJhbXMgPSB1c2VTYXZlZCA/IHRoaXMuX3NhdmVkU2VhcmNoUGFyYW1zIDogdGhpcy5fc2VhcmNoUGFyYW1zO1xuICAgIGNvbnN0IHBhcmFtcyA9IGNsb25lRGVlcChyYXdQYXJhbXMgfHwge30pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4LFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5fcGFnZUluZm8ucGFnZVNpemUsXG4gICAgICB9LFxuICAgICAgLy8g5Zyo57q/5o6S5bqP5qih5byP77ya5oqK5o6S5bqP5a+56LGh5o+Q5Lqk57uZ5o6l5Y+jXG4gICAgICAuLi4odGhpcy5zb3J0TW9kZSA9PT0gXCJzZXJ2ZXJcIlxuICAgICAgICA/IHsgc29ydDogdGhpcy5idWlsZFNlcnZlclNvcnRQYXlsb2FkKCkgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHJlbG9hZChhZnRlckRlbGV0ZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KGFmdGVyRGVsZXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGaWVsZHNWYWx1ZShmaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBPYmplY3Qua2V5cyhmaWVsZHMpLmZvckVhY2goKGspID0+IHtcbiAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trXSA9IGZpZWxkc1trXTsgLy8g5L+d55WZIFByb3h577yM6YCQ6aG56LWL5YC86Kem5Y+R5oum5oiqXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RmllbGRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWxlY3RlZFJvdygpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRDb2x1bW5zKFxuICAgIGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHJlbG9hZD86IGJvb2xlYW47IC8vIOaYr+WQpumHjeaWsOWKoOi9veaVsOaNru+8jOm7mOiupOS4uiBmYWxzZVxuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g5pu05pawIGNvbHVtbnMg6L6T5YWl5bGe5oCnXG4gICAgdGhpcy5jb2x1bW5zID0gY2xvbmVEZWVwKGNvbHVtbnMpO1xuXG4gICAgLy8g6YeN5paw5qC85byP5YyW5YaF6YOo5YiXXG4gICAgdGhpcy5mb3JtYXRlSW5uZXJDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG5cbiAgICAvLyDph43mlrDorr7nva7mkJzntKLlj4LmlbDvvIjlvILmraXmk43kvZzvvIlcbiAgICAvLyDlhYjmuIXnqbrml6fnmoTmkJzntKLlj4LmlbDvvIzpgb/lhY3ml6fmlbDmja7mrovnlZlcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB7fTtcbiAgICBhd2FpdCB0aGlzLnNldFNlYXJjaFBhcmFtcyh0aGlzLmNvbHVtbnMpO1xuXG4gICAgLy8g6YeN5paw5Yib5bu6IFByb3h577yM56Gu5L+d6KGo5Y2V6aG55YC85Y+Y5YyW6IO95q2j5bi46Kem5Y+R5LqL5Lu2XG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0gdGhpcy5jcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0aGlzLl9zZWFyY2hQYXJhbXMpO1xuXG4gICAgLy8g6YeN5paw5rOo5YaM5qih5p2/77yI5aaC5p6c57uE5Lu25bey57uP5Yid5aeL5YyW5a6M5oiQ77yJXG4gICAgaWYgKHRoaXMuYWxsVGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLmF1dG9SZWdpc3RlclRlbXBsYXRlcygpO1xuICAgIH1cblxuICAgIC8vIOWmguaenOiuvue9ruS6hiByZWxvYWQg6YCJ6aG55Li6IHRydWXvvIzliJnph43mlrDmn6Xor6LmlbDmja5cbiAgICBpZiAob3B0aW9ucz8ucmVsb2FkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkUm93RGF0YTxUID0gYW55PigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGVja2VkUm93czxUID0gYW55PigpOiBUW10ge1xuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLy8g6L+U5Zue5b2T5YmN5pWw5o2u5rqQ5Lit5omA5pyJIGNoZWNrZWQg5Li6IHRydWUg55qE6aG5XG4gICAgLy8g5rOo5oSP77ya5aaC5p6c6ZyA6KaB6I635Y+W5omA5pyJ6aG155qE6YCJ5Lit6aG577yM6ZyA6KaB6YGN5Y6G5omA5pyJ5pWw5o2u5rqQ5oiW5L2/55SoIF9zZWxlY3RlZFJvd0lkc1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChyb3cpID0+IHJvdy5jaGVja2VkID09PSB0cnVlKSBhcyBUW107XG4gIH1cblxuICAvLyDojrflj5bmjIflrprlkI3np7DnmoTmqKHmnb9cbiAgZ2V0VGVtcGxhdGUobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOmmluWFiOS7juiHquWumuS5ieaooeadv+S4reafpeaJvlxuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRlbXBsYXRlcy5nZXQobmFtZSk7XG4gICAgICBpZiAoY3VzdG9tVGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIGN1c3RvbVRlbXBsYXRlO1xuICAgICAgfVxuXG4gICAgICAvLyDnhLblkI7ku47pgJrnlKjmqKHmnb/mmKDlsITkuK3mn6Xmib5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU1hcC5nZXQobmFtZSk7XG4gICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFRvb2xUaXBUZXh0VmFsdWUoY29sdW1uOiBQcm9UYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXkgPVxuICAgICAgY29sdW1uLmN1c3RvbVJlbmRlciAmJiB0aGlzLmdldFRlbXBsYXRlKGNvbHVtbi5jdXN0b21SZW5kZXIpXG4gICAgICAgID8gXCJcIlxuICAgICAgICA6IGNvbHVtbi5lbGxpcHNpc1xuICAgICAgICA/IGNvbHVtbi5wcm9wXG4gICAgICAgIDogXCJcIjtcbiAgICByZXR1cm4gIWtleSA/IFwiXCIgOiBkYXRhW2tleV07XG4gIH1cblxuICBnZXRUYWJsZVJvd0NoZWNrZWQoZGF0YTogYW55KSB7XG4gICAgLy8g5ZCv55So5aSN6YCJ5qGG5pe277ya6KGM6auY5Lqu5bqU5LiO5aSN6YCJ5qGG6YCJ5Lit54q25oCB5LiA6Ie077yI5pSv5oyB5aSa6YCJ77yJXG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94KSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1Jvd0NoZWNrZWQoZGF0YSk7XG4gICAgfVxuICAgIC8vIOacquWQr+eUqOWkjemAieahhuaXtu+8muS7jeeEtuS9v+eUqOWNlemAieihjOmrmOS6rlxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLl9zZWxlY3RlZFRhYmxlUm93KSA9PT0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1cblxuICAvLyDmo4Dmn6XooYzmmK/lkKbooqvnpoHnlKhcbiAgaXNSb3dEaXNhYmxlZChkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucm93RGlzYWJsZWQgPyB0aGlzLnJvd0Rpc2FibGVkKGRhdGEpIDogZmFsc2U7XG4gIH1cblxuICAvLyDmo4Dmn6XooYzmmK/lkKbooqvlpI3pgInmoYbpgInkuK3vvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcbiAgaXNSb3dDaGVja2VkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHJldHVybiBmYWxzZTtcbiAgICAvLyDnm7TmjqXor7vlj5bmlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKdcbiAgICByZXR1cm4gZGF0YS5jaGVja2VkID09PSB0cnVlO1xuICB9XG5cbiAgLy8g5YiH5o2i6KGM55qE6YCJ5Lit54q25oCB77yI5pWw5o2u6amx5Yqo5qih5byP77yM5L+d55WZ55So5LqO5YW85a6577yJXG4gIHRvZ2dsZVJvd0NoZWNrZWQoZGF0YTogYW55LCBjaGVja2VkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8g6Zi75q2i5LqL5Lu25YaS5rOh77yM6YG/5YWN6Kem5Y+R6KGM54K55Ye7XG4gICAgfVxuICAgIC8vIOWmguaenOihjOiiq+emgeeUqO+8jOS4jeWFgeiuuOWIh+aNoumAieS4reeKtuaAgVxuICAgIGlmICh0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDnm7TmjqXorr7nva7mlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKdcbiAgICBkYXRhLmNoZWNrZWQgPSBjaGVja2VkO1xuXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy5maW5kSW5kZXgoKHJvdykgPT5cbiAgICAgIHRoaXMuaXNTYW1lUm93KHJvdywgZGF0YSlcbiAgICApO1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5wdXNoKGRhdGEpO1xuICAgICAgfVxuICAgICAgLy8g5Yu+6YCJ5aSN6YCJ5qGG5pe25ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGMXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgICAvLyDoi6XlvZPliY3pq5jkuq7ooYzkuLror6XooYzvvIzliJnlj5bmtojpq5jkuq5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyAmJlxuICAgICAgICB0aGlzLmlzU2FtZVJvdyh0aGlzLl9zZWxlY3RlZFRhYmxlUm93LCBkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcbiAgfVxuXG4gIC8vIOabtOaWsOWFqOmAieeKtuaAge+8iOaVsOaNrumpseWKqOaooeW8j++8iVxuICB1cGRhdGVDaGVja0FsbFN0YXR1cygpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5Y+q6K6h566X5Y+v55So55qE6KGM77yI5pyq56aB55So55qE6KGM77yJXG4gICAgY29uc3QgYXZhaWxhYmxlUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoXG4gICAgICAocm93KSA9PiAhdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdylcbiAgICApO1xuICAgIC8vIOWfuuS6juaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp+iuoeeul1xuICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGF2YWlsYWJsZVJvd3MuZmlsdGVyKFxuICAgICAgKHJvdykgPT4gcm93LmNoZWNrZWQgPT09IHRydWVcbiAgICApLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gYXZhaWxhYmxlUm93cy5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tlZEFsbCA9XG4gICAgICB0b3RhbENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLl9pbmRldGVybWluYXRlID0gY2hlY2tlZENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPCB0b3RhbENvdW50O1xuICB9XG5cbiAgLy8g5YWo6YCJL+WPlua2iOWFqOmAie+8iOaVsOaNrumpseWKqOaooeW8j++8iVxuICB0b2dnbGVDaGVja0FsbChjaGVja2VkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyDlj6rlpITnkIblj6/nlKjnmoTooYzvvIjmnKrnpoHnlKjnmoTooYzvvIlcbiAgICBjb25zdCBhdmFpbGFibGVSb3dzID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcihcbiAgICAgIChyb3cpID0+ICF0aGlzLmlzUm93RGlzYWJsZWQocm93KVxuICAgICk7XG5cbiAgICAvLyDmibnph4/orr7nva4gY2hlY2tlZCDlsZ7mgKdcbiAgICBhdmFpbGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgcm93LmNoZWNrZWQgPSBjaGVja2VkO1xuICAgIH0pO1xuXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gWy4uLmF2YWlsYWJsZVJvd3NdO1xuICAgICAgLy8g5ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGM5Li656ys5LiA5p2h5Y+v6YCJ5pWw5o2uXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID1cbiAgICAgICAgYXZhaWxhYmxlUm93cy5sZW5ndGggPiAwID8gYXZhaWxhYmxlUm93c1swXSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgLy8g5Y+W5raI6auY5LquXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XG4gIH1cblxuICAvLyDojrflj5bpgInkuK3nmoTooYzmlbDmja7vvIjkv53nlZnnlKjkuo7lhbzlrrnmgKfvvIlcbiAgZ2V0U2VsZWN0ZWRSb3dzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja2VkUm93cygpO1xuICB9XG5cbiAgLy8g5aSE55CG6KGMIGNoZWNrYm94IOWPmOWMluS6i+S7tu+8iOaVsOaNrumpseWKqOaooeW8j++8iVxuICBoYW5kbGVSb3dDaGVja2VkQ2hhbmdlKGRhdGE6IGFueSwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDmlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKflt7Lnu4/pgJrov4flj4zlkJHnu5Hlrproh6rliqjmm7TmlrBcbiAgICAvLyDov5nph4zlj6rpnIDopoHlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93c1xuXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy5maW5kSW5kZXgoKHJvdykgPT5cbiAgICAgIHRoaXMuaXNTYW1lUm93KHJvdywgZGF0YSlcbiAgICApO1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5wdXNoKGRhdGEpO1xuICAgICAgfVxuICAgICAgLy8g5Yu+6YCJ5aSN6YCJ5qGG5pe25ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGMXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgICAvLyDoi6XlvZPliY3pq5jkuq7ooYzkuLror6XooYzvvIzliJnlj5bmtojpq5jkuq5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyAmJlxuICAgICAgICB0aGlzLmlzU2FtZVJvdyh0aGlzLl9zZWxlY3RlZFRhYmxlUm93LCBkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOabtOaWsOWFqOmAieeKtuaAgVxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcbiAgfVxuXG4gIC8vIOWIt+aWsOWFqOmAieeKtuaAge+8iOeUqOS6juWFtuS7luWcuuaZr++8iVxuICByZWZyZXNoQ2hlY2tBbGxTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xuICB9XG5cbiAgLy8g6I635Y+W6KGM55qE5ZSv5LiA5qCH6K+G77yI55So5LqO6Leo6aG16YCJ5Lit77yJXG4gIHByaXZhdGUgZ2V0Um93SWQoZGF0YTogYW55KTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGF0YS5pZCA/PyBkYXRhLmtleSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDliKTmlq3kuKTooYzmmK/lkKbkuLrlkIzkuIDooYxcbiAgcHJpdmF0ZSBpc1NhbWVSb3cocm93MTogYW55LCByb3cyOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZDEgPSB0aGlzLmdldFJvd0lkKHJvdzEpO1xuICAgIGNvbnN0IGlkMiA9IHRoaXMuZ2V0Um93SWQocm93Mik7XG5cbiAgICBpZiAoaWQxICE9PSB1bmRlZmluZWQgJiYgaWQyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBpZDEgPT09IGlkMjtcbiAgICB9XG5cbiAgICAvLyBmYWxsYmFjayDliLAgSlNPTiDmr5TovoNcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocm93MSkgPT09IEpTT04uc3RyaW5naWZ5KHJvdzIpO1xuICB9XG5cbiAgLy8g5riF56m66YCJ5Lit55qE6KGM77yI5pWw5o2u6amx5Yqo5qih5byP77yJXG4gIGNsZWFyU2VsZWN0ZWRSb3dzKCkge1xuICAgIC8vIOa4heepuuW9k+WJjeaVsOaNrua6kOS4reaJgOaciemhueeahCBjaGVja2VkIOeKtuaAgVxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgcm93LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xuICAgIHRoaXMuX2NoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICB0aGlzLl9pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGVGaWVsZENoZWNrQm94Q2hhbmdlKGNoZWNrQm94T3B0aW9uczogT3B0aW9uc1R5cGVbXSwga2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEZpZWxkc1ZhbHVlKHtcbiAgICAgIFtrZXldOiBjaGVja0JveE9wdGlvbnNcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKVxuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaCgpIHtcbiAgICB0aGlzLl9zYXZlZFNlYXJjaFBhcmFtcyA9IHRoaXMuY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpO1xuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xuICB9XG5cbiAgaGFuZGxlUmVzZXRGb3JtKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuX3NlYXJjaFBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gKGl0ZW0uZmllbGRQcm9wcz8ubmFtZSB8fCBpdGVtLnByb3ApID09PSBrZXk7XG4gICAgICB9KTtcblxuICAgICAgLy8g5a+55LqOY2hlY2tib3jnsbvlnovvvIzpnIDopoHnibnmrorlpITnkIbpu5jorqTlgLxcbiAgICAgIGlmICh0YXJnZXRDb2x1bW4/LnZhbHVlVHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgIC8vIOS7juWOn+Wni2NvbHVtbnPphY3nva7kuK3ojrflj5bliJ3lp4vphY3nva7vvIzku6Xnoa7kv53kvb/nlKjmraPnoa7nmoTpu5jorqTlgLxcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoaXRlbS5maWVsZFByb3BzPy5uYW1lIHx8IGl0ZW0ucHJvcCkgPT09IGtleTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g5LuO5Y6f5aeLb3B0aW9uc+S4reaJvuWHumNoZWNrZWTkuLp0cnVl55qE6aG55L2c5Li66buY6K6k5YC8XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmllbGRQcm9wcyA9IG9yaWdpbmFsQ29sdW1uPy5maWVsZFByb3BzIGFzXG4gICAgICAgICAgfCBDaGVja2JveEZpZWxkUHJvcHNcbiAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IChvcmlnaW5hbEZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LmNoZWNrZWQpXG4gICAgICAgICAgLm1hcCgob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LnZhbHVlKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID1cbiAgICAgICAgICBjaGVja2VkVmFsdWVzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gY2hlY2tlZFZhbHVlc1xuICAgICAgICAgICAgOiBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcblxuICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IGRlZmF1bHRWYWx1ZTtcblxuICAgICAgICAvLyDmoLnmja7pu5jorqTlgLzmgaLlpI1vcHRpb25z55qEY2hlY2tlZOeKtuaAge+8jOS9v+eUqOWOn+Wni29wdGlvbnPnmoTnu5PmnoRcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IFtdO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSBvcmlnaW5hbEZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgIGNvbnN0IHRhcmdldEZpZWxkUHJvcHMgPSB0YXJnZXRDb2x1bW4uZmllbGRQcm9wcyBhcyBDaGVja2JveEZpZWxkUHJvcHM7XG4gICAgICAgIHRhcmdldEZpZWxkUHJvcHMub3B0aW9ucyA9IG9yaWdpbmFsT3B0aW9ucy5tYXAoKGl0ZW06IE9wdGlvbnNUeXBlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBjaGVja2VkOiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKGl0ZW0udmFsdWUpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSB0YXJnZXRDb2x1bW4/LmZpZWxkUHJvcHNcbiAgICAgICAgICA/IHRhcmdldENvbHVtbj8uZmllbGRQcm9wcy52YWx1ZSB8fFxuICAgICAgICAgICAgUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbdGFyZ2V0Q29sdW1uLnZhbHVlVHlwZV0udmFsdWVcbiAgICAgICAgICA6IFBST19UQUJMRV9ERUZBVUxUX1BST1BTW3RhcmdldENvbHVtbi52YWx1ZVR5cGVdLnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgPSB7fTtcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSAxO1xuICAgIHRoaXMub25SZXNldEZvcm1CZWZvcmVSZWxvYWQuZW1pdCgpO1xuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2VJbmRleENoYW5nZShwYWdlSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XG4gIH1cblxuICBoYW5kbGVQYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSAxO1xuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVF1ZXJ5KGFmdGVyRGVsZXRlPzogYm9vbGVhbikge1xuICAgIC8vIOWIoOmZpOWQjuWIt+aWsOS4lOW9k+WJjemhteS7heWJqeS4gOadoeiusOW9leaXtu+8jOiLpeS4jeWcqOesrOS4gOmhteWImeWFiOWbnumAgOS4gOmhtVxuICAgIGlmIChcbiAgICAgIGFmdGVyRGVsZXRlICYmXG4gICAgICBBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkgJiZcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA+IDFcbiAgICApIHtcbiAgICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCAtIDE7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHtcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpLFxuICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIOWcqOe6v+aOkuW6j+aooeW8j++8muaKiuaOkuW6j+WvueixoeaPkOS6pOe7meaOpeWPo1xuICAgICAgICAgIC4uLih0aGlzLnNvcnRNb2RlID09PSBcInNlcnZlclwiXG4gICAgICAgICAgICA/IHsgc29ydDogdGhpcy5idWlsZFNlcnZlclNvcnRQYXlsb2FkKCkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOafpeivouWQjum7mOiupOS4jeS/neeVmei3qOmhtemAieS4reeKtuaAge+8muavj+asoei/lOWbnueahOaVsOaNruWdh+WIneWni+WMluS4uuacqumAieS4rVxuICAgICAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSAocmVzdWx0LmRhdGEgfHwgW10pLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHJlc3VsdC5kYXRhIHx8IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9IHJlc3VsdC5zdW1tYXJ5RGF0YSB8fCBudWxsO1xuICAgICAgICAvLyDmnKzlnLDmjpLluo/mqKHlvI/vvJrmi7/liLDmlbDmja7lkI7lnKjliY3nq6/mjpLluo9cbiAgICAgICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IFwibG9jYWxcIikge1xuICAgICAgICAgIHRoaXMuc29ydERhdGFTb3VyY2VJblBsYWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGFnZUluZm8udG90YWwgPSByZXN1bHQudG90YWwgfHwgMDtcbiAgICAgICAgLy8g5Y+W5raI6Leo6aG15aSa6YCJ77ya5p+l6K+i5ZCO5riF56m66YCJ5Lit54q25oCBXG4gICAgICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIuafpeivouWksei0pTpcIiwgZXJyb3IpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgdGhpcy5fcGFnZUluZm8udG90YWwgPSAwO1xuICAgICAgICB0aGlzLnN1bW1hcnlEYXRhID0gbnVsbDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcIuacquaPkOS+myBfcmVxdWVzdCDlm57osIPlh73mlbBcIik7XG4gICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8g6Kem5Y+R5YiX5o6S5bqP5Y+Y5pu0XG4gIG9uU29ydENoYW5nZShzb3J0S2V5OiBzdHJpbmcsIHNvcnRPcmRlcjogXCJhc2NlbmRcIiB8IFwiZGVzY2VuZFwiIHwgbnVsbCkge1xuICAgIC8vIOWNleWIl+aOkuW6j++8mumHjee9ruWFtuWug+WIl++8m+WkmuWIl+aOkuW6j++8muS/neeVmeWFtuWug+WIl1xuICAgIGlmICghdGhpcy5tdWx0aXBsZVNvcnQpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX3NvcnRNYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICE9PSBzb3J0S2V5KSB0aGlzLl9zb3J0TWFwW2tleV0gPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX3NvcnRNYXBbc29ydEtleV0gPSBzb3J0T3JkZXI7XG5cbiAgICAvLyDnu7TmiqTkvJjlhYjnuqfpmJ/liJfvvJrmnInluo/liJfkuJTpnZ7nqbogLT4g572u5LqO5pyr5bC+77yb5Li656m6IC0+IOenu+mZpFxuICAgIHRoaXMuX3NvcnRQcmlvcml0eSA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+IGsgIT09IHNvcnRLZXkpO1xuICAgIGlmIChzb3J0T3JkZXIpIHtcbiAgICAgIHRoaXMuX3NvcnRQcmlvcml0eS5wdXNoKHNvcnRLZXkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBcImxvY2FsXCIpIHtcbiAgICAgIHRoaXMuc29ydERhdGFTb3VyY2VJblBsYWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOWcqOe6v+aOkuW6j++8mumHjeaWsOivt+axglxuICAgICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNvcnRPcmRlcihzb3J0S2V5OiBzdHJpbmcpOiBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydE1hcFtzb3J0S2V5XSB8fCBudWxsO1xuICB9XG5cbiAgaGFuZGxlVGFibGVSb3dDbGljayhkYXRhOiBhbnkpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcbiAgICBpZiAodGhpcy5zaG93Q2hlY2tib3ggJiYgIXRoaXMuaXNSb3dEaXNhYmxlZChkYXRhKSkge1xuICAgICAgLy8g5YWI5riF56m65omA5pyJ6YCJ5Lit6KGMXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgIGNvbnN0IG5leHRDaGVja2VkID0gIXRoaXMuaXNSb3dDaGVja2VkKGRhdGEpO1xuICAgICAgdGhpcy50b2dnbGVSb3dDaGVja2VkKGRhdGEsIG5leHRDaGVja2VkKTtcbiAgICB9XG4gICAgdGhpcy5vblJvd0NsaWNrLmVtaXQodGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyk7XG4gIH1cblxuICBoYW5kbGVUYWJsZVJvd0RiQ2xpY2soZGF0YTogYW55KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XG4gICAgdGhpcy5vblJvd0RiQ2xpY2suZW1pdCh0aGlzLl9zZWxlY3RlZFRhYmxlUm93KTtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbnNTZXR0aW5nQ29uZmlybSgpIHtcbiAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcbiAgfVxuXG4gIC8vIOWkhOeQhiBhdXRvQ29tcGxldGUg6L6T5YWl5LqL5Lu277yI5bim6Ziy5oqW77yJXG4gIGhhbmRsZUF1dG9Db21wbGV0ZUlucHV0KGV2ZW50OiBFdmVudCwgY29sdW1uOiBQcm9UYWJsZUNvbHVtbikge1xuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XG5cbiAgICAvLyDlpoLmnpzor6XlrZfmrrXov5jmsqHmnInpmLLmipblh73mlbDvvIzliJvlu7rkuIDkuKpcbiAgICBpZiAoIXRoaXMuX2F1dG9Db21wbGV0ZURlYm91bmNlTWFwLmhhcyhmaWVsZEtleSkpIHtcbiAgICAgIGNvbnN0IGRlYm91bmNlZEZuID0gZGVib3VuY2UoKGV2dDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8g6YeN5paw5p+l5om+5a+55bqU55qEIGNvbHVtbu+8jOehruS/neS9v+eUqOacgOaWsOeahOmFjee9rlxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gKGNvbC5maWVsZFByb3BzPy5uYW1lIHx8IGNvbC5wcm9wKSA9PT0gZmllbGRLZXlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4pIHtcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVBdXRvQ29tcGxldGVEYXRhU291cmNlKGV2dCwgY3VycmVudENvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMCk7IC8vIDMwMG1zIOmYsuaKluW7tui/n1xuICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGVib3VuY2VNYXAuc2V0KGZpZWxkS2V5LCBkZWJvdW5jZWRGbik7XG4gICAgfVxuXG4gICAgLy8g6LCD55So6Ziy5oqW5Ye95pWwXG4gICAgY29uc3QgZGVib3VuY2VkRm4gPSB0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5nZXQoZmllbGRLZXkpO1xuICAgIGlmIChkZWJvdW5jZWRGbikge1xuICAgICAgZGVib3VuY2VkRm4oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOiOt+WPliBhdXRvQ29tcGxldGUg55qE5pWw5o2u5rqQXG4gIGdldEF1dG9Db21wbGV0ZURhdGFTb3VyY2UoY29sdW1uOiBQcm9UYWJsZUNvbHVtbik6IGFueVtdIHtcbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xuICAgIHJldHVybiB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gfHwgW107XG4gIH1cblxuICBnZXRGaWVsZFByb3BzKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4uZmllbGRQcm9wcztcbiAgfVxuXG4gIC8vIOiOt+WPluaMh+WumuWQjeensOeahGxhYmVs5qih5p2/XG4gIGdldExhYmVsVGVtcGxhdGUobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOmmluWFiOS7juiHquWumuS5ieaooeadv+S4reafpeaJvlxuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGUgPSB0aGlzLmN1c3RvbVRlbXBsYXRlcy5nZXQobmFtZSk7XG4gICAgICBpZiAoY3VzdG9tVGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIGN1c3RvbVRlbXBsYXRlO1xuICAgICAgfVxuXG4gICAgICAvLyDnhLblkI7ku47pgJrnlKjmqKHmnb/mmKDlsITkuK3mn6Xmib5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU1hcC5nZXQobmFtZSk7XG4gICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIOiOt+WPliBmb3JtLWl0ZW0g55qE5Yqo5oCB57G75ZCNXG4gIGdldEZvcm1JdGVtQ2xhc3NOYW1lKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRoaXMuZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3A7XG4gICAgcmV0dXJuIGBwcm8tdGFibGUtJHtmaWVsZE5hbWV9LWZvcm0taXRlbWA7XG4gIH1cbn1cbiJdfQ==