nsc-react-component 2.8.55 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/base/table/index.d.ts +7 -0
- package/lib/base/table/index.js +123 -12
- package/lib/page/BasePage/index.d.ts +1 -5
- package/lib/page/BasePage/index.js +16 -118
- package/package.json +1 -1
|
@@ -39,6 +39,8 @@ interface NSCTableProps extends TableProps<any> {
|
|
|
39
39
|
toolbar?: ToolBarProps | boolean;
|
|
40
40
|
autoSize?: boolean;
|
|
41
41
|
sortSearch?: boolean;
|
|
42
|
+
showRowSelection?: boolean;
|
|
43
|
+
rowKey?: string;
|
|
42
44
|
}
|
|
43
45
|
export declare type INSCTableProps = typeof NSCTable.defaultProps & NSCTableProps;
|
|
44
46
|
export { DndContextType, IBodyRowProps };
|
|
@@ -101,6 +103,11 @@ declare class NSCTable extends React.Component<INSCTableProps, any> {
|
|
|
101
103
|
};
|
|
102
104
|
getColumns(): any;
|
|
103
105
|
renderToolBar(): JSX.Element;
|
|
106
|
+
getSelectedRowKeys(): any;
|
|
107
|
+
getSelectedRowDatas(): any;
|
|
108
|
+
resetSelectedRowKeys(): void;
|
|
109
|
+
rowSelectionOnSelect(record: any, selected: any): void;
|
|
110
|
+
rowSelectionOnSelectAll(selected: any, selectedRows: any, changeRows: any): void;
|
|
104
111
|
render(): JSX.Element;
|
|
105
112
|
}
|
|
106
113
|
declare const _default: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<any>>;
|
package/lib/base/table/index.js
CHANGED
|
@@ -220,7 +220,9 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
220
220
|
sortInfo: {},
|
|
221
221
|
defaultSort: true,
|
|
222
222
|
checkColumn: [],
|
|
223
|
-
defaultCheck: true
|
|
223
|
+
defaultCheck: true,
|
|
224
|
+
selectedRowKeys: [],
|
|
225
|
+
selectedRowDatas: []
|
|
224
226
|
};
|
|
225
227
|
|
|
226
228
|
if (props.store instanceof Store) {
|
|
@@ -870,6 +872,99 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
870
872
|
}
|
|
871
873
|
}, /*#__PURE__*/React.createElement(RedoOutlined, null)));
|
|
872
874
|
}
|
|
875
|
+
}, {
|
|
876
|
+
key: "getSelectedRowKeys",
|
|
877
|
+
value: function getSelectedRowKeys() {
|
|
878
|
+
return this.state.selectedRowKeys;
|
|
879
|
+
}
|
|
880
|
+
}, {
|
|
881
|
+
key: "getSelectedRowDatas",
|
|
882
|
+
value: function getSelectedRowDatas() {
|
|
883
|
+
return this.state.selectedRowDatas;
|
|
884
|
+
}
|
|
885
|
+
}, {
|
|
886
|
+
key: "resetSelectedRowKeys",
|
|
887
|
+
value: function resetSelectedRowKeys() {
|
|
888
|
+
this.setState({
|
|
889
|
+
selectedRowKeys: [],
|
|
890
|
+
selectedRowDatas: []
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
}, {
|
|
894
|
+
key: "rowSelectionOnSelect",
|
|
895
|
+
value: function rowSelectionOnSelect(record, selected) {
|
|
896
|
+
var _this$state3 = this.state,
|
|
897
|
+
selectedRowKeys = _this$state3.selectedRowKeys,
|
|
898
|
+
selectedRowDatas = _this$state3.selectedRowDatas;
|
|
899
|
+
var _this$props$rowKey = this.props.rowKey,
|
|
900
|
+
rowKey = _this$props$rowKey === void 0 ? "id" : _this$props$rowKey;
|
|
901
|
+
|
|
902
|
+
var newSelectedRowKeys = _toConsumableArray(selectedRowKeys);
|
|
903
|
+
|
|
904
|
+
var newSelectedRowDatas = _toConsumableArray(selectedRowDatas);
|
|
905
|
+
|
|
906
|
+
if (selected) {
|
|
907
|
+
newSelectedRowKeys = [].concat(_toConsumableArray(newSelectedRowKeys), [record[rowKey]]);
|
|
908
|
+
newSelectedRowDatas = [].concat(_toConsumableArray(newSelectedRowDatas), [record]);
|
|
909
|
+
} else {
|
|
910
|
+
selectedRowKeys.map(function (item, index) {
|
|
911
|
+
if (item === record[rowKey]) {
|
|
912
|
+
newSelectedRowKeys.splice(index, 1);
|
|
913
|
+
}
|
|
914
|
+
});
|
|
915
|
+
selectedRowDatas.map(function (item, index) {
|
|
916
|
+
if (item[rowKey] === record[rowKey]) {
|
|
917
|
+
newSelectedRowDatas.splice(index, 1);
|
|
918
|
+
}
|
|
919
|
+
});
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
this.setState({
|
|
923
|
+
selectedRowKeys: newSelectedRowKeys,
|
|
924
|
+
selectedRowDatas: newSelectedRowDatas
|
|
925
|
+
});
|
|
926
|
+
}
|
|
927
|
+
}, {
|
|
928
|
+
key: "rowSelectionOnSelectAll",
|
|
929
|
+
value: function rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
|
|
930
|
+
var _this$state4 = this.state,
|
|
931
|
+
selectedRowKeys = _this$state4.selectedRowKeys,
|
|
932
|
+
selectedRowDatas = _this$state4.selectedRowDatas;
|
|
933
|
+
var _this$props$rowKey2 = this.props.rowKey,
|
|
934
|
+
rowKey = _this$props$rowKey2 === void 0 ? "id" : _this$props$rowKey2;
|
|
935
|
+
var newids = [];
|
|
936
|
+
var newdatas = [];
|
|
937
|
+
|
|
938
|
+
if (changeRows.length > 0) {
|
|
939
|
+
var changeIds = changeRows.map(function (item) {
|
|
940
|
+
return item[rowKey];
|
|
941
|
+
});
|
|
942
|
+
|
|
943
|
+
if (selected) {
|
|
944
|
+
newids = [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(changeIds));
|
|
945
|
+
newdatas = [].concat(_toConsumableArray(selectedRowDatas), _toConsumableArray(changeRows));
|
|
946
|
+
} else {
|
|
947
|
+
selectedRowKeys.map(function (item, index) {
|
|
948
|
+
if (changeIds.indexOf(item) == -1) {
|
|
949
|
+
newids.push(item);
|
|
950
|
+
}
|
|
951
|
+
});
|
|
952
|
+
selectedRowDatas.map(function (item, index) {
|
|
953
|
+
if (changeIds.indexOf(item[rowKey]) == -1) {
|
|
954
|
+
newdatas.push(item);
|
|
955
|
+
}
|
|
956
|
+
});
|
|
957
|
+
}
|
|
958
|
+
} else {
|
|
959
|
+
newids = _toConsumableArray(selectedRowKeys);
|
|
960
|
+
newdatas = _toConsumableArray(selectedRowDatas);
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
this.setState({
|
|
964
|
+
selectedRowKeys: _toConsumableArray(newids),
|
|
965
|
+
selectedRowDatas: _toConsumableArray(newdatas)
|
|
966
|
+
});
|
|
967
|
+
}
|
|
873
968
|
}, {
|
|
874
969
|
key: "render",
|
|
875
970
|
value: function render() {
|
|
@@ -877,16 +972,16 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
877
972
|
_this$props$toolbar;
|
|
878
973
|
|
|
879
974
|
var _this = this,
|
|
880
|
-
_this$
|
|
881
|
-
loading = _this$
|
|
882
|
-
dataSource = _this$
|
|
883
|
-
_this$
|
|
884
|
-
pagination = _this$
|
|
885
|
-
searchText = _this$
|
|
886
|
-
fieldOption = _this$
|
|
887
|
-
searchColor = _this$
|
|
888
|
-
tableSize = _this$
|
|
889
|
-
props = utils.omit(this.props, ["store", "onChange", "columns", "resetColumn", "toolbar", "sortFields", "filterColumn", "sortSearch"], {
|
|
975
|
+
_this$state5 = this.state,
|
|
976
|
+
loading = _this$state5.loading,
|
|
977
|
+
dataSource = _this$state5.dataSource,
|
|
978
|
+
_this$state5$paginati = _this$state5.pagination,
|
|
979
|
+
pagination = _this$state5$paginati === void 0 ? {} : _this$state5$paginati,
|
|
980
|
+
searchText = _this$state5.searchText,
|
|
981
|
+
fieldOption = _this$state5.fieldOption,
|
|
982
|
+
searchColor = _this$state5.searchColor,
|
|
983
|
+
tableSize = _this$state5.tableSize,
|
|
984
|
+
props = utils.omit(this.props, ["store", "onChange", "columns", "resetColumn", "toolbar", "sortFields", "filterColumn", "sortSearch", "showRowSelection"], {
|
|
890
985
|
rowKey: "id",
|
|
891
986
|
clickChangeColor: false
|
|
892
987
|
});
|
|
@@ -978,6 +1073,22 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
978
1073
|
toolFlag = tableTool.show === false ? false : true;
|
|
979
1074
|
}
|
|
980
1075
|
|
|
1076
|
+
console.log('this.props.showRowSelection', this.props.showRowSelection);
|
|
1077
|
+
|
|
1078
|
+
if (this.props.showRowSelection) {
|
|
1079
|
+
console.log('aaaaaa');
|
|
1080
|
+
var _this$props$rowSelect = this.props.rowSelection,
|
|
1081
|
+
rowSelection = _this$props$rowSelect === void 0 ? {} : _this$props$rowSelect;
|
|
1082
|
+
props = _objectSpread(_objectSpread({}, props), {}, {
|
|
1083
|
+
rowSelection: _objectSpread({
|
|
1084
|
+
selectedRowKeys: this.state.selectedRowKeys,
|
|
1085
|
+
onSelect: this.rowSelectionOnSelect.bind(this),
|
|
1086
|
+
onSelectAll: this.rowSelectionOnSelectAll.bind(this),
|
|
1087
|
+
columnWidth: 40
|
|
1088
|
+
}, rowSelection)
|
|
1089
|
+
});
|
|
1090
|
+
}
|
|
1091
|
+
|
|
981
1092
|
var DefaultTable = /*#__PURE__*/React.createElement(React.Fragment, null, toolFlag && this.renderToolBar(), /*#__PURE__*/React.createElement(_Table, _extends({
|
|
982
1093
|
childrenColumnName: "childNodes",
|
|
983
1094
|
sheitem: true,
|
|
@@ -1021,4 +1132,4 @@ _defineProperty(NSCTable, "defaultProps", {
|
|
|
1021
1132
|
});
|
|
1022
1133
|
|
|
1023
1134
|
export default withZhLocale(NSCTable);
|
|
1024
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdGFibGUvaW5kZXgudHN4Il0sIm5hbWVzIjpbIkFwcHN0b3JlT3V0bGluZWQiLCJDaGVja091dGxpbmVkIiwiQ29sdW1uSGVpZ2h0T3V0bGluZWQiLCJTZWFyY2hPdXRsaW5lZCIsIlNvcnRBc2NlbmRpbmdPdXRsaW5lZCIsIlNvcnREZXNjZW5kaW5nT3V0bGluZWQiLCJSZWRvT3V0bGluZWQiLCJpc0VtcHR5T2JqIiwiU3RvcmUiLCJQYWdlU3RvcmUiLCJ1dGlscyIsIlJlYWN0IiwiRG5kUHJvdmlkZXIiLCJCb2R5Um93IiwiRG5kQ29udGV4dFR5cGUiLCJJQm9keVJvd1Byb3BzIiwidHJlZVV0aWxzIiwic3R5bGVzIiwiQm9keVJvd0NvbXBvbmVudCIsIkhUTUw1QmFja2VuZCIsIndpdGhaaExvY2FsZSIsIlJlc2l6YWJsZSIsImdldExlc3MiLCJnZXROb2RlIiwiTm9EYXRhIiwiZ2V0U3RvcmFnZSIsImNvbmZpZyIsIlJlc2l6ZWFibGVUaXRsZSIsInByb3BzIiwib25SZXNpemUiLCJ3aWR0aCIsInJlc3RQcm9wcyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJjcmVhdGVSZWYiLCJvbkJlZm9yZUxvYWQiLCJsb2FkIiwiaGVhZGVyIiwiY2VsbCIsImluZGV4IiwiZSIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsInNldFN0YXRlIiwiZXYiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwiX3RoaXMiLCJldmVudFR5cGUiLCJwYXlsb2FkIiwidGFibGVTaXplIiwiZHJhZ0luZGV4IiwiaG92ZXJJbmRleCIsImRyYWciLCJ0YXJnZXQiLCJkcmFnTm9kZSIsInJlY29yZCIsInRhcmdldE5vZGUiLCJtb3ZlQXJyYXkiLCJpZHMiLCJwYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlSWRzIiwicGFyYW1zIiwiaWQiLCJwYXJlbnRJZCIsImF0dHJpYnV0ZSIsIm1vdmVSb3ciLCJzdG9yZSIsInJlbG9hZCIsIm1vZGFsIiwidHlwZSIsInN0b3JlUHJlZml4IiwiYXV0b1R5cGUiLCJjb250ZW50IiwiZGF0YVNvdXJjZSIsImNvbHVtbnMiLCJsb2FkaW5nIiwicGFnaW5hdGlvbiIsImFjdGl2ZUluZGV4Iiwic2VhcmNoVGV4dCIsImZpZWxkT3B0aW9uIiwic2VhcmNoQ29sb3IiLCJzb3J0cyIsImZpbHRlclBhcmFtcyIsInNvcnRUeXBlIiwic29ydGVyIiwic29ydEluZm8iLCJkZWZhdWx0U29ydCIsImNoZWNrQ29sdW1uIiwiZGVmYXVsdENoZWNrIiwibGlzdGVuZXJzIiwibGlzdGVuZXJzUHJvcHMiLCJyZXN0U3RvcmUiLCJzdG9yZVByb3BzIiwibW9kZWwiLCJjb21wb25lbnQiLCJvcHRpb25zIiwiY2FsbGJhY2siLCJkYXRhQ2hhbmdlZCIsIm1vZGVsRGF0YSIsInBhZ2luZyIsImdldFBhZ2luYXRpb24iLCJvbkVycm9yTG9hZCIsImVyciIsInJlc3BvbnNlIiwiYXV0b0xvYWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50IiwicmVzaXplQ29sdW1uIiwic2V0RGF0YSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5NZXNzYWdlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInByZXZQcm9wcyIsInByZVN0YXRlIiwicmVzZXRDb2x1bW4iLCJuZXdDb2xzIiwiY29sc3MiLCJtYXAiLCJjb2wiLCJ0ZW1wIiwib25IZWFkZXJDZWxsIiwiY29sdW1uIiwiaGFuZGxlUmVzaXplIiwicHVzaCIsImZpbHRlcnMiLCJleHRyYSIsImF1dG9PbkNoYW5nZSIsImF1dG9Tb3J0IiwiYXV0b1BhZ2luYXRpb24iLCJvbkNoYW5nZSIsImlzTXVsdGlwbGUiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVQYWdpbmF0aW9uIiwiZ2V0UGFnaW5hdGlvbkJ5U3RvcmUiLCJwIiwiY3VycmVudEtleSIsInBhZ2VTaXplS2V5IiwicGFnZVNpemUiLCJhc2NQYXJhbXMiLCJnZXRTb3J0UGFyYW0iLCJvbkNoYW5nZUZuIiwiZ2V0TW9kZWwiLCJ2YWwiLCJjaGVja2VkVmFsdWUiLCJsZW5ndGgiLCJ3YXJuaW5nIiwiZmlsdGVyQ29sdW1ucyIsIm5ld0NvbCIsImluY2x1ZGVzIiwiZGF0YUluZGV4IiwiaW5pdFNob3ciLCJzb3J0U3RhdGUiLCJzb3J0U2VhcmNoIiwib3JkZXJJdGVtcyIsImZpZWxkIiwiYXNjIiwib3JkZXIiLCJmb3JFYWNoIiwidiIsInN0cmluZ2lmeSIsInNvcnRGaWVsZHMiLCJkZWZhdWx0U2hvd0NvbHMiLCJmaWx0ZXIiLCJlbGxpcHNpcyIsInJlbmRlciIsInNob3dUaXRsZSIsInRleHQiLCJpbmRleE9mIiwic29ydE9yZGVyIiwibXVsdGlwbGUiLCJpdGVtIiwiZmlsdGVyUHJvcHMiLCJvYmoiLCJzZWFyY2hLZXkiLCJEaXYiLCJ0aXRsZSIsInBsYWNlaG9sZGVyIiwicmVmIiwidGFibGVTZWFyY2hSZWYiLCJmaWx0ZXJEcm9wZG93biIsInNldFNlbGVjdGVkS2V5cyIsInNlbGVjdGVkS2V5cyIsImNvbmZpcm0iLCJjbGVhckZpbHRlcnMiLCJuZXdGaWx0ZXJQYXJhbXMiLCJrZXkiLCJnZXRWYWx1ZSIsInNvcnRQYXJhbSIsImZpbHRlckljb24iLCJmaWx0ZXJDb2x1bW4iLCJjb2xMaXN0cyIsInRvb2xiYXIiLCJ0YWJsZVRvb2wiLCJ0b29scyIsInRvb2xzQ2xpY2siLCJvblRvb2xDbGljayIsInNpemVJdGVtIiwic29ydEl0ZW0iLCJzb3J0Q29udGVudCIsImN1cnNvciIsImNvbG9yIiwic2l6ZUNvbnRlbnQiLCJiaW5kIiwibGFiZWwiLCJ2YWx1ZSIsImRpc2FibGVkIiwiZm9udFNpemUiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwibWFyZ2luUmlnaHQiLCJvblJlZnJlc2giLCJvbWl0Iiwicm93S2V5IiwiY2xpY2tDaGFuZ2VDb2xvciIsInBvc2l0aW9uIiwic2hvd1NpemVDaGFuZ2VyIiwic2hvd1F1aWNrSnVtcGVyIiwic2hvd1RvdGFsIiwidG90YWwiLCJmcm9tIiwidG8iLCJvblJvd0ZuIiwib25Sb3ciLCJjdXN0b20iLCJvbkNsaWNrRm4iLCJvbkNsaWNrIiwiZXZlbnQiLCJyb3dDbGFzc05hbWUiLCJjbGlja1Jvd1N0eWxlIiwibmV3RGF0YVNvdXJjZSIsImdldFNlYXJjaE1lbnVEYXRhcyIsInRyZWVEYXRhcyIsImV4cGFuZGVkUm93S2V5cyIsIm9wZW5LZXlzIiwiZHJhZ2FibGUiLCJkcmFnYWJsZVByb3BzIiwiY29tcG9uZW50cyIsInJlc2l6ZVByb3BzIiwidG9vbEZsYWciLCJ0b29scHJvcHMiLCJzaG93IiwiRGVmYXVsdFRhYmxlIiwicmVuZGVyVG9vbEJhciIsImdldENvbHVtbnMiLCJlbXB0eVRleHQiLCJ4IiwiQ29tcG9uZW50IiwiZHJhZ1VybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDRUEsZ0JBREYsRUFFRUMsYUFGRixFQUdFQyxvQkFIRixFQUlFQyxjQUpGLEVBS0VDLHFCQUxGLEVBTUVDLHNCQU5GLEVBT0VDLFlBUEYsUUFRTyxtQkFSUDtBQVNBLFNBQVNDLFVBQVQsUUFBMkIsbUJBQTNCO0FBQ0EsT0FBT0MsS0FBUCxJQUFnQkMsU0FBaEIsUUFBNkMsYUFBN0M7QUFDQSxTQUFTQyxLQUFULFFBQXNCLHVCQUF0QjtBQWNBLE9BQU8sS0FBS0MsS0FBWixNQUF1QixPQUF2QjtBQUNBLFNBQVNDLFdBQVQsUUFBNEIsV0FBNUI7QUFDQSxPQUFPQyxPQUFQLElBQWtCQyxjQUFsQixFQUFrQ0MsYUFBbEMsUUFBdUQsbUJBQXZEO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixpQkFBdEI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLHFCQUFuQjtBQUNBLElBQVFDLGdCQUFSLEdBQTJDTCxPQUEzQyxDQUFRSyxnQkFBUjtBQUFBLElBQTBCQyxZQUExQixHQUEyQ04s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IEBBdXRob3I6IHJ4emh1XHJcbiAqIEBEYXRlOiAyMDIxLTAzLTIzIDA4OjQ2OjIwXHJcbiAqIEBMYXN0RWRpdG9yczogcnh6aHVcclxuICogQExhc3RFZGl0VGltZTogMjAyMS0wMy0yMyAxMDozMDo0MlxyXG4gKi9cclxuaW1wb3J0IHtcclxuICBBcHBzdG9yZU91dGxpbmVkLFxyXG4gIENoZWNrT3V0bGluZWQsXHJcbiAgQ29sdW1uSGVpZ2h0T3V0bGluZWQsXHJcbiAgU2VhcmNoT3V0bGluZWQsXHJcbiAgU29ydEFzY2VuZGluZ091dGxpbmVkLFxyXG4gIFNvcnREZXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgUmVkb091dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBpc0VtcHR5T2JqIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uLFxyXG4gIENoZWNrYm94LFxyXG4gIENoZWNrYm94T3B0aW9uVHlwZSxcclxuICBNZW51LFxyXG4gIG1lc3NhZ2UsXHJcbiAgUG9wb3ZlcixcclxuICBTcGFjZSxcclxuICBUYWJsZSxcclxuICBUYWJsZVByb3BzLFxyXG4gIFRvb2x0aXAsXHJcbn0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IHsgQ29sdW1uVHlwZSwgVGFibGVQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSBcImFudGQvbGliL3RhYmxlXCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBEbmRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1kbmRcIjtcclxuaW1wb3J0IEJvZHlSb3csIHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfSBmcm9tIFwiLi4vY29tbW9uL0JvZHlSb3dcIjtcclxuaW1wb3J0IHRyZWVVdGlscyBmcm9tIFwiLi4vLi4vdHJlZVV0aWxzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuY29uc3QgeyBCb2R5Um93Q29tcG9uZW50LCBIVE1MNUJhY2tlbmQgfSA9IEJvZHlSb3c7XHJcbmltcG9ydCB3aXRoWmhMb2NhbGUgZnJvbSBcIi4uL2NvbW1vbi93aXRoWmhMb2NhbGVcIjtcclxuaW1wb3J0IHsgUmVzaXphYmxlIH0gZnJvbSBcInJlYWN0LXJlc2l6YWJsZVwiO1xyXG5pbXBvcnQgXCIuL3Jlc2l6ZS5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXNzLCBnZXROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbmltcG9ydCBOb0RhdGEgZnJvbSBcIi4uLy4uL2Jhc2UvY29tbW9uL05vRGF0YVwiO1xyXG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbnRlcmZhY2UgSURyYWdQYXJhbXMge1xyXG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgaWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xyXG4gIHBhcmVudElkOiBzdHJpbmcgfCBudW1iZXI7XHJcbn1cclxuLy8gaW50ZXJmYWNlIFN0b3JlUHJvcHMge31cclxuXHJcbmV4cG9ydCB0eXBlIFN0b3JlVHlwZSA9IFwiUGFnZVN0b3JlXCIgfCBcIlRyZWVTdG9yZVwiIHwgXCJCYXNlU3RvcmVcIjtcclxuXHJcbmludGVyZmFjZSBOU0NUYWJsZVBhZ2luYXRpb24gZXh0ZW5kcyBUYWJsZVBhZ2luYXRpb25Db25maWcge1xyXG4gIHRvdGFsS2V5Pzogc3RyaW5nO1xyXG4gIHBhZ2VTaXplS2V5Pzogc3RyaW5nO1xyXG4gIGN1cnJlbnRLZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBUb29sQmFyUHJvcHMge1xyXG4gIHNob3c6IGJvb2xlYW47XHJcbiAgdG9vbHM/OiBBcnJheTxzdHJpbmc+O1xyXG4gIG9uVG9vbENsaWNrPzogeyBvblJlZnJlc2g/OiBhbnk7IG9uU29ydD86IGFueSB9O1xyXG59XHJcbmludGVyZmFjZSBOU0NUYWJsZVByb3BzIGV4dGVuZHMgVGFibGVQcm9wczxhbnk+IHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1RvdGFsPzogYm9vbGVhbjsgLy8g5piv5ZCm5pi+56S65oC75p2h5pWw5L+h5oGv77yM6buY6K6kdHJ1ZVxyXG4gIGRyYWdhYmxlPzogYm9vbGVhbjsgLy8g5piv5ZCm5Y+v5ouW5YqoLCDpu5jorqRmYWxzZVxyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8vIOaYr+WQpuaUr+aMgei/h+a7pOaYvuekuuihqOagvOWIlywg6buY6K6kdHJ1ZVxyXG4gIG1vdmVSb3c/OiAocGFyYW1zOiBJRHJhZ1BhcmFtcykgPT4gdm9pZDsgLy8g5ouW5ou95a6M5oiQ5ZCO55qE5Zue6LCDXHJcbiAgZHJhZ1VybD86IHN0cmluZzsgLy8g5L+d5a2Y5ouW5ou95o6S5bqP55qE5o6l5Y+jXHJcbiAgcGFnaW5hdGlvbj86IGZhbHNlIHwgTlNDVGFibGVQYWdpbmF0aW9uO1xyXG4gIGF1dG9QYWdpbmF0aW9uPzogYm9vbGVhbjsgLy8g57uE5Lu25piv5ZCm6Ieq5Yqo5aSE55CG5YiG6aG1XHJcbiAgYXV0b1NvcnQ/OiBib29sZWFuOyAvL+e7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuaOkuW6j1xyXG4gIGF1dG9PbkNoYW5nZT86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqG9uQ2hhbmdlLCBmYWxzZeWImeS4jeWBmuS7u+S9leWkhOeQhuWFqOmDqOS6pOe7meiwg+eUqOaWuVxyXG4gIHJlc2l6ZUNvbHVtbj86IGJvb2xlYW47XHJcbiAgc29ydEZpZWxkcz86IEFycmF5PHN0cmluZz47IC8v6ZyA6KaB5o6S5bqP55qE5a2X5q61SW5kZXhcclxuICB0b29sYmFyPzogVG9vbEJhclByb3BzIHwgYm9vbGVhbjtcclxuICBhdXRvU2l6ZT86IGJvb2xlYW47XHJcbiAgc29ydFNlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5re75Yqg5o6S5bqP5p+l6K+iLOm7mOiupHRydWVcclxuICAvLyB0YWJsZVNpemU/OiBcInNtYWxsXCIgfCBcIm1pZGRsZVwiIHwgXCJkZWZhdWx0XCIgfCBcImF1dG9cIjtcclxuICAvLyBzaXplPzogXCJzbWFsbFwiIHwgXCJtaWRkbGVcIiB8IFwiZGVmYXVsdFwiIHwgXCJhdXRvXCI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElOU0NUYWJsZVByb3BzID0gdHlwZW9mIE5TQ1RhYmxlLmRlZmF1bHRQcm9wcyAmIE5TQ1RhYmxlUHJvcHM7XHJcbmV4cG9ydCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH07XHJcblxyXG5jb25zdCBSZXNpemVhYmxlVGl0bGUgPSAocHJvcHM6IGFueSkgPT4ge1xyXG4gIGNvbnN0IHsgb25SZXNpemUsIHdpZHRoLCAuLi5yZXN0UHJvcHMgfSA9IHByb3BzO1xyXG4gIHJldHVybiAoXHJcbiAgICA8UmVzaXphYmxlXHJcbiAgICAgIHdpZHRoPXt3aWR0aCB8fCAxNTB9XHJcbiAgICAgIGhlaWdodD17MH1cclxuICAgICAgb25SZXNpemU9e29uUmVzaXplfVxyXG4gICAgICBkcmFnZ2FibGVPcHRzPXt7IGVuYWJsZVVzZXJTZWxlY3RIYWNrOiBmYWxzZSB9fVxyXG4gICAgPlxyXG4gICAgICA8dGggey4uLnJlc3RQcm9wc30gLz5cclxuICAgIDwvUmVzaXphYmxlPlxyXG4gICk7XHJcbn07XHJcbmNsYXNzIE5TQ1RhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElOU0NUYWJsZVByb3BzLCBhbnk+IHtcclxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgZHJhZ2FibGU6IGZhbHNlLFxyXG4gICAgc2hvd1RvdGFsOiB0cnVlLFxyXG4gICAgZmlsdGVyQ29sdW1uOiB0cnVlLFxyXG4gICAgZHJhZ1VybDogXCJcIixcclxuICAgIGF1dG9QYWdpbmF0aW9uOiB0cnVlLFxyXG4gICAgYXV0b1NvcnQ6IHRydWUsXHJcbiAgICBhdXRvT25DaGFuZ2U6IHRydWUsXHJcbiAgICByZXNpemVDb2x1bW46IHRydWUsXHJcbiAgICB0b29sYmFyOiB7XHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIG9uVG9vbENsaWNrOiB7fSBhcyBhbnksXHJcbiAgICB9IGFzIGFueSxcclxuICB9O1xyXG5cclxuICBzdG9yZSA9IHt9IGFzIFN0b3JlUHJvcHM7XHJcbiAgdGhJY29uUmVmID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xyXG4gIHRhYmxlU2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuXHJcbiAgbGlzdGVuZXJzID0ge1xyXG4gICAgb25CZWZvcmVMb2FkOiBudWxsLFxyXG4gICAgbG9hZDogbnVsbCxcclxuICB9O1xyXG5cclxuICBjb21wb25lbnRzID0ge1xyXG4gICAgaGVhZGVyOiB7XHJcbiAgICAgIGNlbGw6IFJlc2l6ZWFibGVUaXRsZSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCBtb2RhbCA9IHByb3BzLnR5cGUgfHwgXCJhdXRvXCI7XHJcbiAgICBsZXQgc3RvcmVQcmVmaXggPSBnZXRTdG9yYWdlKFwic3RvcmUtcHJlLWtleVwiKTtcclxuICAgIGxldCBhdXRvVHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIGF1dG9UeXBlID0gYXV0b1R5cGU/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBkYXRhU291cmNlOiBbXSxcclxuICAgICAgY29sdW1uczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBwYWdpbmF0aW9uOiB7fSxcclxuICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAvL+aQnOe0ouaWh+acrFxyXG4gICAgICBzZWFyY2hUZXh0OiBudWxsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogbnVsbCxcclxuICAgICAgc2VhcmNoQ29sb3I6IG51bGwsXHJcbiAgICAgIGNvbHM6IFtdLFxyXG4gICAgICBzb3J0czogW10sXHJcbiAgICAgIGZpbHRlclBhcmFtczoge30sXHJcbiAgICAgIHRhYmxlU2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8IGF1dG9UeXBlIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICBzb3J0VHlwZTogXCJzaW5nbGVcIixcclxuICAgICAgc29ydGVyOiBbXSwgLy/orrDlvZXlvZPliY3mjpLluo/lrZfmrrVcclxuICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgY2hlY2tDb2x1bW46IFtdLFxyXG4gICAgICBkZWZhdWx0Q2hlY2s6IHRydWUsXHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLnN0b3JlIGluc3RhbmNlb2YgU3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZSA9IHByb3BzLnN0b3JlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeyBsaXN0ZW5lcnM6IGxpc3RlbmVyc1Byb3BzID0ge30sIC4uLnJlc3RTdG9yZSB9ID1cclxuICAgICAgICBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgICAgY29uc3Qgc3RvcmVQcm9wcyA9IHtcclxuICAgICAgICBtb2RlbDogXCJtb2RlbFwiLFxyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIG9uQmVmb3JlTG9hZDogKHN0b3JlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkJlZm9yZUxvYWQsIHRoaXMsIFtzdG9yZSwgb3B0aW9uc10pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFnaW5nID0gISh0aGlzLnByb3BzLnBhZ2luYXRpb24gPT09IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiAhdGhpcy5wcm9wcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBzdG9yZS5nZXRQYWdpbmF0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMuZGF0YUNoYW5nZWQsIHRoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgICBwYWdpbmcsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmxvYWQsIHRoaXMsIFtkYXRhLCBtb2RlbERhdGEsIHN0b3JlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb25FcnJvckxvYWQ6IChlcnIsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25FcnJvckxvYWQsIHRoaXMsIFtlcnIsIHJlc3BvbnNlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YTogcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgID8gcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgIDogcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgPyBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgLi4ucmVzdFN0b3JlLFxyXG4gICAgICAgIGF1dG9Mb2FkOiByZXN0U3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFBhZ2VTdG9yZShcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdG9yZVByb3BzLCB7XHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7IGN1cnJlbnQ6IDEsIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbiB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUgPVxyXG4gICAgKGluZGV4OiBhbnkpID0+XHJcbiAgICAoZTogYW55LCB7IHNpemUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc3QgbmV4dENvbHVtbnMgPSBbLi4uY29sc107XHJcbiAgICAgIG5leHRDb2x1bW5zW2luZGV4XSA9IHtcclxuICAgICAgICAuLi5uZXh0Q29sdW1uc1tpbmRleF0sXHJcbiAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGNvbHM6IG5leHRDb2x1bW5zLFxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMucHJvcHMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuZGF0YSkge1xyXG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEoc3RvcmUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgbGlzdGVuTWVzc2FnZSA9IChldikgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBldi5kYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShldi5kYXRhKSA6IGV2LmRhdGE7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKGRhdGEuZXZlbnRUeXBlID09IFwiY2hhbmdlVGFibGVTaXplXCIpIHtcclxuICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBkYXRhO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwiZGVmYXVsdFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwic21hbGxcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcIm1pZGRsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiBwYXlsb2FkLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZVN0YXRlKSB7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghcmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHByZVN0YXRlLmNvbHMgIT09IHRoaXMuc3RhdGUuY29scykge1xyXG4gICAgICAgIHRoaXMucmVzZXRDb2x1bW4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zICE9PSBwcmV2UHJvcHMuY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiB0aGlzLnByb3BzLmNvbHVtbnMgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZQcm9wcy5zaXplICE9PSB0aGlzLnByb3BzLnNpemUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0Q29sdW1uKCkge1xyXG4gICAgY29uc3QgeyBjb2xzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgbmV3Q29sczogYW55ID0gW107XHJcbiAgICBsZXQgY29sc3MgPSBjb2xzIHx8IFtdO1xyXG4gICAgY29sc3MubWFwKChjb2w6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgb25IZWFkZXJDZWxsOiAoY29sdW1uOiB7IHdpZHRoOiBhbnkgfSkgPT4gKHtcclxuICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICBvblJlc2l6ZTogdGhpcy5oYW5kbGVSZXNpemUoaW5kZXgpLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG4gICAgICBuZXdDb2xzLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBjb2x1bW5zOiBuZXdDb2xzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuIXpmaTpgInkuK3popzoibJcclxuICAgKi9cclxuICBjbGVhclNlbGVjdENvbG9yKCkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZUluZGV4OiAtMSB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGF1dG9PbkNoYW5nZSA9IHRydWUsXHJcbiAgICAgIGF1dG9Tb3J0LFxyXG4gICAgICBhdXRvUGFnaW5hdGlvbixcclxuICAgICAgb25DaGFuZ2UsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlKSB7XHJcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBoYW5kbGVQYWdpbmF0aW9uID0gKCkgPT4ge1xyXG4gICAgICBsZXQgcGFyYW1zID0ge30gYXMge1xyXG4gICAgICAgIHNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgcGFnZVNpemU/OiBzdHJpbmc7XHJcbiAgICAgICAgYXNjcz86IHN0cmluZztcclxuICAgICAgICBkZXNjcz86IHN0cmluZztcclxuICAgICAgICBbcHJvcE5hbWU6IHN0cmluZ106IHN0cmluZztcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHx8IHt9O1xyXG4gICAgICBpZiAoIWlzRW1wdHlPYmoocGFnaW5hdGlvbikpIHtcclxuICAgICAgICBjb25zdCBwID0ge1xyXG4gICAgICAgICAgW3BhZ2luZy5jdXJyZW50S2V5IHx8IFwiY3VycmVudFwiXTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgW3BhZ2luZy5wYWdlU2l6ZUtleSB8fCBcInNpemVcIl06IHBhZ2luYXRpb24ucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgcCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFzY1BhcmFtcyA9IHRoaXMuZ2V0U29ydFBhcmFtKHNvcnRlciwgdHJ1ZSk7XHJcbiAgICAgIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlciB9KTtcclxuICAgICAgfSBlbHNlIGlmICghaXNNdWx0aXBsZSAmJiAhaXNFbXB0eU9iaihzb3J0ZXIpKSB7XHJcbiAgICAgICAgc29ydGVyLmNvbHVtbiAmJlxyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW3NvcnRlcl0sIGRlZmF1bHRTb3J0OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbXSB9KTtcclxuICAgICAgfVxyXG4gICAgICBwYXJhbXMgPSB7IC4uLmZpbHRlclBhcmFtcywgLi4ucGFyYW1zLCAuLi5hc2NQYXJhbXMgfTtcclxuICAgICAgYXV0b1NvcnQgJiYgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uQ2hhbmdlRm4gPSB0aGlzLnByb3BzLm9uQ2hhbmdlO1xyXG5cclxuICAgIGF1dG9QYWdpbmF0aW9uICYmIGhhbmRsZVBhZ2luYXRpb24oKTtcclxuICAgIC8vIOeUqOaIt+S8oOS6hm9uQ2hhbmdl5L+d55WZ55So5oi36Ieq5Li75aSE55CG6KGo5qC85Y+Y5YyW55qE5p2D5YqbXHJcbiAgICBpZiAob25DaGFuZ2VGbikge1xyXG4gICAgICB1dGlscy5jYWxsYmFjayhvbkNoYW5nZUZuLCB0aGlzLCBbcGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaVsOaNruaooeWei+WvueixoVxyXG4gICAqL1xyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0TW9kZWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiPnOWNleaQnOe0oui/h+a7pOaYvuekulxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBoYW5kbGVTZWFyY2godmFsLCBmaWVsZE9wdGlvbiwgc2VhcmNoQ29sb3IpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWFyY2hUZXh0OiB2YWwsXHJcbiAgICAgIGZpZWxkT3B0aW9uOiBmaWVsZE9wdGlvbixcclxuICAgICAgc2VhcmNoQ29sb3I6IHNlYXJjaENvbG9yLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmqKHlnZfliJfooajnp7vliqjmjpLluo9cclxuICAgKi9cclxuICBtb3ZlUm93ID0gKGRyYWdJbmRleCwgaG92ZXJJbmRleCwgZHJhZywgdGFyZ2V0KSA9PiB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgZHJhZ05vZGUgPSBkcmFnLnJlY29yZDtcclxuICAgIGxldCB0YXJnZXROb2RlID0gdGFyZ2V0LnJlY29yZDtcclxuICAgIGRyYWdOb2RlLm1vdmVBcnJheShkcmFnTm9kZSwgdGFyZ2V0Tm9kZSk7XHJcbiAgICBsZXQgaWRzID0gZHJhZ05vZGUucGFyZW50Tm9kZS5nZXRDaGlsZE5vZGVJZHMoKTtcclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIGlkOiBkcmFnTm9kZS5pZCxcclxuICAgICAgcGFyZW50SWQ6IGRyYWdOb2RlLmF0dHJpYnV0ZS5wYXJlbnRJZCxcclxuICAgICAgaWRzOiBpZHMsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnByb3BzLm1vdmVSb3cpIHtcclxuICAgICAgdGhpcy5wcm9wcy5tb3ZlUm93KHBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3JlLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGZpbHRlckNvbHVtbihjaGVja2VkVmFsdWUpIHtcclxuICAgIGlmIChjaGVja2VkVmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6Iez5bCR5pi+56S65LiA5YiX77yBXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcCgoY29sOiBDb2x1bW5UeXBlPHt9PikgPT4ge1xyXG4gICAgICBjb25zdCBuZXdDb2wgPSB7IC4uLmNvbCB9IGFzIENvbHVtblR5cGU8e30+ICYgeyBpbml0U2hvdzogYm9vbGVhbiB9O1xyXG4gICAgICBpZiAoY2hlY2tlZFZhbHVlLmluY2x1ZGVzKGNvbC5kYXRhSW5kZXgpKSB7XHJcbiAgICAgICAgbmV3Q29sLmluaXRTaG93ID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdDb2wuaW5pdFNob3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3Q29sO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghcmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGNvbHVtbnM6IGZpbHRlckNvbHVtbnMsXHJcbiAgICAgICAgY2hlY2tDb2x1bW46IGNoZWNrZWRWYWx1ZSxcclxuICAgICAgICBkZWZhdWx0Q2hlY2s6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGNvbHM6IGZpbHRlckNvbHVtbnMsXHJcbiAgICAgICAgY2hlY2tDb2x1bW46IGNoZWNrZWRWYWx1ZSxcclxuICAgICAgICBkZWZhdWx0Q2hlY2s6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0U29ydFBhcmFtKHNvcnRlciwgc29ydFN0YXRlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KHNvcnRlcik7XHJcbiAgICBjb25zdCB7IHNvcnRTZWFyY2ggPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFzb3J0U2VhcmNoKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBzb3J0SW5mbyA9IHt9O1xyXG4gICAgbGV0IG9yZGVySXRlbXMgPSBbXTtcclxuICAgIGlmICghaXNFbXB0eU9iaihzb3J0ZXIpICYmICFpc011bHRpcGxlICYmIHNvcnRlci5jb2x1bW4pIHtcclxuICAgICAgb3JkZXJJdGVtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2x1bW46IHNvcnRlci5jb2x1bW4uZmllbGQgfHwgc29ydGVyLmNvbHVtbi5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBhc2M6IHNvcnRlci5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIGlmIChzb3J0ZXIuY29sdW1uKSBzb3J0SW5mb1tzb3J0ZXIuY29sdW1uLmRhdGFJbmRleF0gPSBzb3J0ZXIub3JkZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgc29ydGVyLmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICBzb3J0SW5mb1t2LmNvbHVtbi5kYXRhSW5kZXhdID0gdi5vcmRlcjtcclxuICAgICAgICBsZXQgZmllbGQgPSB2LmNvbHVtbi5maWVsZCB8fCB2LmNvbHVtbi5kYXRhSW5kZXg7XHJcbiAgICAgICAgb3JkZXJJdGVtcy5wdXNoKHtcclxuICAgICAgICAgIGNvbHVtbjogZmllbGQsXHJcbiAgICAgICAgICBhc2M6IHYub3JkZXIgPT0gXCJhc2NlbmRcIixcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc29ydFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHNvcnRJbmZvOiBzb3J0SW5mbyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBvcmRlckl0ZW1zOiBKU09OLnN0cmluZ2lmeShvcmRlckl0ZW1zKSB9O1xyXG4gIH1cclxuICBnZXRDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBzb3J0VHlwZSwgc29ydEluZm8gfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNvcnRGaWVsZHMgPSBbXSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRlZmF1bHRTaG93Q29scyA9IGNvbHVtbnMuZmlsdGVyKChjb2xzKSA9PiBjb2xzLmluaXRTaG93ICE9PSBmYWxzZSk7XHJcbiAgICBjb25zdCBjb2xzID0gZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoY29sLmVsbGlwc2lzICYmICFjb2wucmVuZGVyKSB7XHJcbiAgICAgICAgY29sLmVsbGlwc2lzID0ge1xyXG4gICAgICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbC5yZW5kZXIgPSAodGV4dCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFRvb2x0aXAgcGxhY2VtZW50PVwidG9wTGVmdFwiIHRpdGxlPXt0ZXh0fT5cclxuICAgICAgICAgICAgICB7dGV4dH1cclxuICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc29ydEZpZWxkcy5pbmRleE9mKGNvbC5kYXRhSW5kZXgpID4gLTEpIHtcclxuICAgICAgICBpZiAoc29ydFR5cGUgPT0gXCJzaW5nbGVcIikge1xyXG4gICAgICAgICAgY29sLnNvcnRlciA9IHRydWU7XHJcbiAgICAgICAgICBjb2wuc29ydE9yZGVyID0gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgPyBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0VHlwZSA9PSBcIm11bHRpcGxlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB7IG11bHRpcGxlOiBpbmRleCB9O1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29sO1xyXG4gICAgfSk7XHJcbiAgICBjb2xzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKGl0ZW0uZmlsdGVyUHJvcHMpKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHNlYXJjaEtleSB9ID0gaXRlbS5maWx0ZXJQcm9wcztcclxuICAgICAgICBsZXQgRGl2ID0gbnVsbDtcclxuICAgICAgICBsZXQgdGV4dCA9IGl0ZW0udGl0bGU7XHJcbiAgICAgICAgRGl2ID0gZ2V0Tm9kZSh0eXBlLCB7XHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjogYOaQnOe0oiR7dGV4dH1gLFxyXG4gICAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgICByZWY6IHRoaXMudGFibGVTZWFyY2hSZWYsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgZmlsdGVyRHJvcGRvd246ICh7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgICAgICBjb25maXJtLFxyXG4gICAgICAgICAgICBjbGVhckZpbHRlcnMsXHJcbiAgICAgICAgICB9KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInNlYXJjaFwiKX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwic3BhY2VcIil9PntEaXZ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8U3BhY2U+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3RmlsdGVyUGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBpdGVtLmZpZWxkIHx8IGl0ZW0uZGF0YUluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3RmlsdGVyUGFyYW1zW2tleV0gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2VhcmNoUmVmLmN1cnJlbnQ/LmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0UGFyYW0gPSB0aGlzLmdldFNvcnRQYXJhbSh0aGlzLnN0YXRlLnNvcnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgLi4ubmV3RmlsdGVyUGFyYW1zLCAuLi5zb3J0UGFyYW0gfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImJ1dHRvblwiKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOafpeivolxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvU3BhY2U+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmlsdGVySWNvbjogKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPFNlYXJjaE91dGxpbmVkIC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLm9iaixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHNbaW5kZXhdID0gb2JqO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb2xzO1xyXG4gIH1cclxuICByZW5kZXJUb29sQmFyKCkge1xyXG4gICAgbGV0IHsgdGFibGVTaXplLCBjb2x1bW5zLCBzb3J0VHlwZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IGZpbHRlckNvbHVtbiwgY29sdW1uczogY29sTGlzdHMsIHRvb2xiYXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbHMgPSBbXCJyZWZyZXNoXCIsIFwic2l6ZVwiLCBcInNvcnRcIiwgXCJjb2x1bW5cIl07XHJcbiAgICBsZXQgdG9vbHNDbGljayA9IHt9IGFzIGFueTtcclxuICAgIGlmICh0b29sYmFyID09IHRydWUpIHtcclxuICAgICAgdG9vbHMgPSB0b29sYmFyLm9uVG9vbENsaWNrXHJcbiAgICAgICAgPyB0b29sYmFyLm9uVG9vbENsaWNrXHJcbiAgICAgICAgOiBbXCJyZWZyZXNoXCIsIFwic2l6ZVwiLCBcInNvcnRcIiwgXCJjb2x1bW5cIl07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0b29scyA9IHRvb2xiYXIudG9vbHNcclxuICAgICAgICA/IHRvb2xiYXIudG9vbHNcclxuICAgICAgICA6IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgID8gdGFibGVUb29sLnRvb2xzXHJcbiAgICAgICAgOiB0b29scztcclxuICAgICAgdG9vbHNDbGljayA9IHRvb2xiYXIub25Ub29sQ2xpY2sgPyB0b29sYmFyLm9uVG9vbENsaWNrIDoge307XHJcbiAgICB9XHJcbiAgICBjb25zdCBzaXplSXRlbSA9IFtcclxuICAgICAgeyB0aXRsZTogXCLlrr3mnb5cIiwga2V5OiBcImRlZmF1bHRcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuS4reetiVwiLCBrZXk6IFwibWlkZGxlXCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLntKflh5FcIiwga2V5OiBcInNtYWxsXCIgfSxcclxuICAgIF07XHJcbiAgICBjb25zdCBzb3J0SXRlbSA9IFtcclxuICAgICAgeyB0aXRsZTogXCLljZXlrZfmrrXmjpLluo9cIiwga2V5OiBcInNpbmdsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5aSa5a2X5q615o6S5bqPXCIsIGtleTogXCJtdWx0aXBsZVwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydENvbnRlbnQgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb3RlbnQtdGl0bGVcIil9XHJcbiAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICBjdXJzb3I6IHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQgPyBcIm5vdC1hbGxvd2VkXCIgOiBcInBvaW50ZXJcIixcclxuICAgICAgICAgICAgY29sb3I6IHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQgJiYgXCJyZ2JhKDAsMCwwLC40NSlcIixcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLmRlZmF1bHRTb3J0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtdLCBzb3J0SW5mbzoge30sIGRlZmF1bHRTb3J0OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuc3RhdGUuZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICDmgaLlpI3pu5jorqTmjpLluo9cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7c29ydEl0ZW0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHNvcnRlcjogW10sXHJcbiAgICAgICAgICAgICAgICAgIHNvcnRJbmZvOiB7fSxcclxuICAgICAgICAgICAgICAgICAgc29ydFR5cGU6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0U29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgPyAoXHJcbiAgICAgICAgICAgICAgICA8YT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogXCJyZ2JhKDAsMCwwLC40NSlcIiB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg5b2T5YmN5o6S5bqPXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5zb3J0ZXIubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC10aWVtXCIpfSBrZXk9e2luZGV4fT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2l0ZW0ub3JkZXIgPT0gXCJhc2NlbmRcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgIDxTb3J0QXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnREZXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0uY29sdW1uLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICA8Lz5cclxuICAgICAgICApfVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgICBjb25zdCBzaXplQ29udGVudCA9IChcclxuICAgICAgPD5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY290ZW50LXRpdGxlXCIpfT7ooajmoLzlr4bluqY8L2Rpdj5cclxuICAgICAgICB7c2l6ZUl0ZW0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlU2l6ZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3RhYmxlU2l6ZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gKFxyXG4gICAgICA8Q2hlY2tib3guR3JvdXBcclxuICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJDb2x1bW4uYmluZCh0aGlzKX1cclxuICAgICAgICBvcHRpb25zPXtjb2xMaXN0cy5tYXAoXHJcbiAgICAgICAgICAoY29sOiBDb2x1bW5UeXBlPHt9PiAmIHsgZmlsdGVyQ29sdW1uOiBib29sZWFuOyBkYXRhSW5kZXg6IGFueSB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY29sLmRhdGFJbmRleCkge1xyXG4gICAgICAgICAgICAgIGNvbC5kYXRhSW5kZXggPSBjb2wudGl0bGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBsYWJlbDogY29sLnRpdGxlLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBjb2wuZGF0YUluZGV4LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjb2wuZmlsdGVyQ29sdW1uID09PSBmYWxzZSxcclxuICAgICAgICAgICAgfSBhcyBDaGVja2JveE9wdGlvblR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKX1cclxuICAgICAgICAvLyBkZWZhdWx0VmFsdWU9e2RlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleCl9XHJcbiAgICAgICAgdmFsdWU9e1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5kZWZhdWx0Q2hlY2tcclxuICAgICAgICAgICAgPyBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wpID0+IGNvbC5kYXRhSW5kZXgpXHJcbiAgICAgICAgICAgIDogdGhpcy5zdGF0ZS5jaGVja0NvbHVtblxyXG4gICAgICAgIH1cclxuICAgICAgPjwvQ2hlY2tib3guR3JvdXA+XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRhYmxlLXRvb2wtYmFyXCIpfT5cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcImNvbHVtblwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHRpdGxlPVwi6YCJ5oup5pi+56S655qE5YiXXCJcclxuICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCJcclxuICAgICAgICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxyXG4gICAgICAgICAgICAgIG92ZXJsYXlTdHlsZT17eyBtaW5XaWR0aDogNDEwLCBtYXhXaWR0aDogNDUwIH19XHJcbiAgICAgICAgICAgICAgLy8gZ2V0UG9wdXBDb250YWluZXI9eygpID0+IHRoaXMudGhJY29uUmVmLmN1cnJlbnR9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8QXBwc3RvcmVPdXRsaW5lZCBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImFwcC1zdG9yZS1pY29uXCIpfSAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic29ydFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c29ydENvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxTb3J0QXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInNpemVcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRlbnQ9e3NpemVDb250ZW50fSB0cmlnZ2VyPVwiY2xpY2tcIj5cclxuICAgICAgICAgICAgICA8Q29sdW1uSGVpZ2h0T3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInJlZnJlc2hcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICBpZiAodG9vbHNDbGljay5vblJlZnJlc2gpIHtcclxuICAgICAgICAgICAgICAgIHRvb2xzQ2xpY2sub25SZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUubG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxSZWRvT3V0bGluZWQgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpcyxcclxuICAgICAge1xyXG4gICAgICAgIGxvYWRpbmcsXHJcbiAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICBwYWdpbmF0aW9uID0ge30sXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvcixcclxuICAgICAgICB0YWJsZVNpemUsXHJcbiAgICAgIH0gPSB0aGlzLnN0YXRlLFxyXG4gICAgICBwcm9wcyA9IHV0aWxzLm9taXQoXHJcbiAgICAgICAgdGhpcy5wcm9wcyxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBcInN0b3JlXCIsXHJcbiAgICAgICAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICAgICAgICBcImNvbHVtbnNcIixcclxuICAgICAgICAgIFwicmVzZXRDb2x1bW5cIixcclxuICAgICAgICAgIFwidG9vbGJhclwiLFxyXG4gICAgICAgICAgXCJzb3J0RmllbGRzXCIsXHJcbiAgICAgICAgICBcImZpbHRlckNvbHVtblwiLFxyXG4gICAgICAgICAgXCJzb3J0U2VhcmNoXCIsXHJcbiAgICAgICAgXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dLZXk6IFwiaWRcIixcclxuICAgICAgICAgIGNsaWNrQ2hhbmdlQ29sb3I6IGZhbHNlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIGlmIChwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICBwcm9wcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBbXCJib3R0b21SaWdodFwiXSxcclxuICAgICAgICBzaG93U2l6ZUNoYW5nZXI6IHRydWUsXHJcbiAgICAgICAgc2hvd1F1aWNrSnVtcGVyOiB0cnVlLFxyXG4gICAgICAgIC4uLnByb3BzLnBhZ2luYXRpb24sXHJcbiAgICAgICAgLi4ucGFnaW5hdGlvbixcclxuICAgICAgfTtcclxuICAgICAgaWYgKHByb3BzLnNob3dUb3RhbCA9PSB0cnVlKSB7XHJcbiAgICAgICAgcHJvcHMucGFnaW5hdGlvbi5zaG93VG90YWwgPSBmdW5jdGlvbiAodG90YWwsIFtmcm9tLCB0b10pIHtcclxuICAgICAgICAgIC8vIHJldHVybiBcIuaYvuekuiBcIiArIGZyb20gKyBcIiAtIFwiICsgdG8gKyBcIuadoe+8jOWFsSBcIiArIHRvdGFsICsgXCIg5p2hXCI7XHJcbiAgICAgICAgICByZXR1cm4gXCLlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3BzLm9uQ2hhbmdlID0gZnVuY3Rpb24gKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgICAgX3RoaXMub25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSk7XHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLmNsaWNrQ2hhbmdlQ29sb3IpIHtcclxuICAgICAgY29uc3Qgb25Sb3dGbiA9IHByb3BzLm9uUm93O1xyXG4gICAgICBwcm9wcy5vblJvdyA9IGZ1bmN0aW9uIChyZWNvcmQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIGN1c3RvbSA9IG9uUm93Rm4gPyBvblJvd0ZuKHJlY29yZCwgaW5kZXgpIDoge307XHJcbiAgICAgICAgY29uc3Qgb25DbGlja0ZuID0gY3VzdG9tLm9uQ2xpY2s7XHJcbiAgICAgICAgY3VzdG9tLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlSW5kZXg6IGluZGV4LCAvL+iOt+WPlueCueWHu+ihjOeahOe0ouW8lVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB1dGlscy5jYWxsYmFjayhvbkNsaWNrRm4sIF90aGlzLCBbZXZlbnRdKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjdXN0b207XHJcbiAgICAgIH07XHJcbiAgICAgIHByb3BzLnJvd0NsYXNzTmFtZSA9IGZ1bmN0aW9uIChyZWNvcmQsIGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSBfdGhpcy5zdGF0ZS5hY3RpdmVJbmRleFxyXG4gICAgICAgICAgPyBgJHtzdHlsZXMuY2xpY2tSb3dTdHlsZX1gXHJcbiAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3RGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRyZWVVdGlscy5nZXRTZWFyY2hNZW51RGF0YXMoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yXHJcbiAgICAgICk7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhLnRyZWVEYXRhcztcclxuICAgICAgcHJvcHMuZXhwYW5kZWRSb3dLZXlzID0gZGF0YS5vcGVuS2V5cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgfVxyXG4gICAgcHJvcHMuc3RvcmUgPSBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgIHByb3BzLnN0b3JlLmF1dG9Mb2FkID0gcHJvcHMuc3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgY29uc3QgeyBkcmFnYWJsZSB9ID0gX3RoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkcmFnYWJsZVByb3BzID1cclxuICAgICAgZHJhZ2FibGUgPT09IHRydWVcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgY29tcG9uZW50czogQm9keVJvd0NvbXBvbmVudCxcclxuICAgICAgICAgICAgb25Sb3c6IChyZWNvcmQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgICBtb3ZlUm93OiB0aGlzLm1vdmVSb3csXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge307XHJcbiAgICBsZXQgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3QgcmVzaXplUHJvcHMgPVxyXG4gICAgICByZXNpemVDb2x1bW4gPT09IHRydWUgPyB7IGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50cyB9IDogbnVsbDtcclxuICAgIGNvbnN0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9IHRydWU7XHJcbiAgICBsZXQgdG9vbHByb3BzID1cclxuICAgICAgdGhpcy5wcm9wcy50b29sYmFyID09PSBmYWxzZSB8fCB0aGlzLnByb3BzLnRvb2xiYXI/LnNob3cgPT09IGZhbHNlXHJcbiAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgIDogdHJ1ZTtcclxuICAgIGlmICghdG9vbHByb3BzKSB7XHJcbiAgICAgIHRvb2xGbGFnID0gdG9vbHByb3BzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdG9vbEZsYWcgPSB0YWJsZVRvb2wuc2hvdyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBEZWZhdWx0VGFibGUgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge3Rvb2xGbGFnICYmIHRoaXMucmVuZGVyVG9vbEJhcigpfVxyXG4gICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lPVwiY2hpbGROb2Rlc1wiXHJcbiAgICAgICAgICBzaGVpdGVtXHJcbiAgICAgICAgICBkYXRhU291cmNlPXtuZXdEYXRhU291cmNlfVxyXG4gICAgICAgICAgY29sdW1ucz17dGhpcy5nZXRDb2x1bW5zKCl9XHJcbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbXCJuc2MtdGFibGVcIl19XHJcbiAgICAgICAgICBsb2NhbGU9e3tcclxuICAgICAgICAgICAgZW1wdHlUZXh0OiA8Tm9EYXRhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGFibGUtbm9kYXRhXCIpfSAvPixcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBzY3JvbGw9e3sgeDogXCJtYXgtY29udGVudFwiIH19XHJcbiAgICAgICAgICB7Li4ucmVzaXplUHJvcHN9XHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICB7Li4uZHJhZ2FibGVQcm9wc31cclxuICAgICAgICAgIHNpemU9e3RhYmxlU2l6ZX1cclxuICAgICAgICAvPlxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdhYmxlID09PSB0cnVlID8gKFxyXG4gICAgICA8RG5kUHJvdmlkZXIgYmFja2VuZD17SFRNTDVCYWNrZW5kfT57RGVmYXVsdFRhYmxlfTwvRG5kUHJvdmlkZXI+XHJcbiAgICApIDogKFxyXG4gICAgICBEZWZhdWx0VGFibGVcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB3aXRoWmhMb2NhbGUoTlNDVGFibGUpO1xyXG4iXX0=
|
|
1135
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdGFibGUvaW5kZXgudHN4Il0sIm5hbWVzIjpbIkFwcHN0b3JlT3V0bGluZWQiLCJDaGVja091dGxpbmVkIiwiQ29sdW1uSGVpZ2h0T3V0bGluZWQiLCJTZWFyY2hPdXRsaW5lZCIsIlNvcnRBc2NlbmRpbmdPdXRsaW5lZCIsIlNvcnREZXNjZW5kaW5nT3V0bGluZWQiLCJSZWRvT3V0bGluZWQiLCJpc0VtcHR5T2JqIiwiU3RvcmUiLCJQYWdlU3RvcmUiLCJ1dGlscyIsIlJlYWN0IiwiRG5kUHJvdmlkZXIiLCJCb2R5Um93IiwiRG5kQ29udGV4dFR5cGUiLCJJQm9keVJvd1Byb3BzIiwidHJlZVV0aWxzIiwic3R5bGVzIiwiQm9keVJvd0NvbXBvbmVudCIsIkhUTUw1QmFja2VuZCIsIndpdGhaaExvY2FsZSIsIlJlc2l6YWJsZSIsImdldExlc3MiLCJnZXROb2RlIiwiTm9EYXRhIiwiZ2V0U3RvcmFnZSIsImNvbmZpZyIsIlJlc2l6ZWFibGVUaXRsZSIsInByb3BzIiwib25SZXNpemUiLCJ3aWR0aCIsInJlc3RQcm9wcyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJjcmVhdGVSZWYiLCJvbkJlZm9yZUxvYWQiLCJsb2FkIiwiaGVhZGVyIiwiY2VsbCIsImluZGV4IiwiZSIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsInNldFN0YXRlIiwiZXYiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwiX3RoaXMiLCJldmVudFR5cGUiLCJwYXlsb2FkIiwidGFibGVTaXplIiwiZHJhZ0luZGV4IiwiaG92ZXJJbmRleCIsImRyYWciLCJ0YXJnZXQiLCJkcmFnTm9kZSIsInJlY29yZCIsInRhcmdldE5vZGUiLCJtb3ZlQXJyYXkiLCJpZHMiLCJwYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlSWRzIiwicGFyYW1zIiwiaWQiLCJwYXJlbnRJZCIsImF0dHJpYnV0ZSIsIm1vdmVSb3ciLCJzdG9yZSIsInJlbG9hZCIsIm1vZGFsIiwidHlwZSIsInN0b3JlUHJlZml4IiwiYXV0b1R5cGUiLCJjb250ZW50IiwiZGF0YVNvdXJjZSIsImNvbHVtbnMiLCJsb2FkaW5nIiwicGFnaW5hdGlvbiIsImFjdGl2ZUluZGV4Iiwic2VhcmNoVGV4dCIsImZpZWxkT3B0aW9uIiwic2VhcmNoQ29sb3IiLCJzb3J0cyIsImZpbHRlclBhcmFtcyIsInNvcnRUeXBlIiwic29ydGVyIiwic29ydEluZm8iLCJkZWZhdWx0U29ydCIsImNoZWNrQ29sdW1uIiwiZGVmYXVsdENoZWNrIiwic2VsZWN0ZWRSb3dLZXlzIiwic2VsZWN0ZWRSb3dEYXRhcyIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwic3RvcmVQcm9wcyIsIm1vZGVsIiwiY29tcG9uZW50Iiwib3B0aW9ucyIsImNhbGxiYWNrIiwiZGF0YUNoYW5nZWQiLCJtb2RlbERhdGEiLCJwYWdpbmciLCJnZXRQYWdpbmF0aW9uIiwib25FcnJvckxvYWQiLCJlcnIiLCJyZXNwb25zZSIsImF1dG9Mb2FkIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VycmVudCIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuTWVzc2FnZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwcmV2UHJvcHMiLCJwcmVTdGF0ZSIsInJlc2V0Q29sdW1uIiwibmV3Q29scyIsImNvbHNzIiwibWFwIiwiY29sIiwidGVtcCIsIm9uSGVhZGVyQ2VsbCIsImNvbHVtbiIsImhhbmRsZVJlc2l6ZSIsInB1c2giLCJmaWx0ZXJzIiwiZXh0cmEiLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwib25DaGFuZ2UiLCJpc011bHRpcGxlIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlUGFnaW5hdGlvbiIsImdldFBhZ2luYXRpb25CeVN0b3JlIiwicCIsImN1cnJlbnRLZXkiLCJwYWdlU2l6ZUtleSIsInBhZ2VTaXplIiwiYXNjUGFyYW1zIiwiZ2V0U29ydFBhcmFtIiwib25DaGFuZ2VGbiIsImdldE1vZGVsIiwidmFsIiwiY2hlY2tlZFZhbHVlIiwibGVuZ3RoIiwid2FybmluZyIsImZpbHRlckNvbHVtbnMiLCJuZXdDb2wiLCJpbmNsdWRlcyIsImRhdGFJbmRleCIsImluaXRTaG93Iiwic29ydFN0YXRlIiwic29ydFNlYXJjaCIsIm9yZGVySXRlbXMiLCJmaWVsZCIsImFzYyIsIm9yZGVyIiwiZm9yRWFjaCIsInYiLCJzdHJpbmdpZnkiLCJzb3J0RmllbGRzIiwiZGVmYXVsdFNob3dDb2xzIiwiZmlsdGVyIiwiZWxsaXBzaXMiLCJyZW5kZXIiLCJzaG93VGl0bGUiLCJ0ZXh0IiwiaW5kZXhPZiIsInNvcnRPcmRlciIsIm11bHRpcGxlIiwiaXRlbSIsImZpbHRlclByb3BzIiwib2JqIiwic2VhcmNoS2V5IiwiRGl2IiwidGl0bGUiLCJwbGFjZWhvbGRlciIsInJlZiIsInRhYmxlU2VhcmNoUmVmIiwiZmlsdGVyRHJvcGRvd24iLCJzZXRTZWxlY3RlZEtleXMiLCJzZWxlY3RlZEtleXMiLCJjb25maXJtIiwiY2xlYXJGaWx0ZXJzIiwibmV3RmlsdGVyUGFyYW1zIiwia2V5IiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwiZmlsdGVyQ29sdW1uIiwiY29sTGlzdHMiLCJ0b29sYmFyIiwidGFibGVUb29sIiwidG9vbHMiLCJ0b29sc0NsaWNrIiwib25Ub29sQ2xpY2siLCJzaXplSXRlbSIsInNvcnRJdGVtIiwic29ydENvbnRlbnQiLCJjdXJzb3IiLCJjb2xvciIsInNpemVDb250ZW50IiwiYmluZCIsImxhYmVsIiwidmFsdWUiLCJkaXNhYmxlZCIsImZvbnRTaXplIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsIm1hcmdpblJpZ2h0Iiwib25SZWZyZXNoIiwic2VsZWN0ZWQiLCJyb3dLZXkiLCJuZXdTZWxlY3RlZFJvd0tleXMiLCJuZXdTZWxlY3RlZFJvd0RhdGFzIiwic3BsaWNlIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsIm5ld2RhdGFzIiwiY2hhbmdlSWRzIiwib21pdCIsImNsaWNrQ2hhbmdlQ29sb3IiLCJwb3NpdGlvbiIsInNob3dTaXplQ2hhbmdlciIsInNob3dRdWlja0p1bXBlciIsInNob3dUb3RhbCIsInRvdGFsIiwiZnJvbSIsInRvIiwib25Sb3dGbiIsIm9uUm93IiwiY3VzdG9tIiwib25DbGlja0ZuIiwib25DbGljayIsImV2ZW50Iiwicm93Q2xhc3NOYW1lIiwiY2xpY2tSb3dTdHlsZSIsIm5ld0RhdGFTb3VyY2UiLCJnZXRTZWFyY2hNZW51RGF0YXMiLCJ0cmVlRGF0YXMiLCJleHBhbmRlZFJvd0tleXMiLCJvcGVuS2V5cyIsImRyYWdhYmxlIiwiZHJhZ2FibGVQcm9wcyIsImNvbXBvbmVudHMiLCJyZXNpemVQcm9wcyIsInRvb2xGbGFnIiwidG9vbHByb3BzIiwic2hvdyIsImNvbnNvbGUiLCJsb2ciLCJzaG93Um93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uIiwib25TZWxlY3QiLCJyb3dTZWxlY3Rpb25PblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwicm93U2VsZWN0aW9uT25TZWxlY3RBbGwiLCJjb2x1bW5XaWR0aCIsIkRlZmF1bHRUYWJsZSIsInJlbmRlclRvb2xCYXIiLCJnZXRDb2x1bW5zIiwiZW1wdHlUZXh0IiwieCIsIkNvbXBvbmVudCIsImRyYWdVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLGdCQURGLEVBRUVDLGFBRkYsRUFHRUMsb0JBSEYsRUFJRUMsY0FKRixFQUtFQyxxQkFMRixFQU1FQyxzQkFORixFQU9FQyxZQVBGLFFBUU8sbUJBUlA7QUFTQSxTQUFTQyxVQUFULFFBQTJCLG1CQUEzQjtBQUNBLE9BQU9DLEtB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LFlBQXJDLENBREssR0FHTEEsWUFIRjtBQUtEOzs7O0VBNTNCb0JqUSxLQUFLLENBQUNzUSxTOztnQkFBdkJoUCxRLGtCQUNrQjtBQUNwQjJOLEVBQUFBLFFBQVEsRUFBRSxLQURVO0FBRXBCakIsRUFBQUEsU0FBUyxFQUFFLElBRlM7QUFHcEJyQyxFQUFBQSxZQUFZLEVBQUUsSUFITTtBQUlwQjRFLEVBQUFBLE9BQU8sRUFBRSxFQUpXO0FBS3BCMUksRUFBQUEsY0FBYyxFQUFFLElBTEk7QUFNcEJELEVBQUFBLFFBQVEsRUFBRSxJQU5VO0FBT3BCRCxFQUFBQSxZQUFZLEVBQUUsSUFQTTtBQVFwQnBCLEVBQUFBLFlBQVksRUFBRSxJQVJNO0FBU3BCc0YsRUFBQUEsT0FBTyxFQUFFO0FBQ1AwRCxJQUFBQSxJQUFJLEVBQUUsSUFEQztBQUVQdEQsSUFBQUEsV0FBVyxFQUFFO0FBRk47QUFUVyxDOztBQTgzQnhCLGVBQWV4TCxZQUFZLENBQUNhLFFBQUQsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBARGVzY3JpcHR0aW9uOlxyXG4gKiBAdmVyc2lvbjpcclxuICogQEF1dGhvcjogcnh6aHVcclxuICogQERhdGU6IDIwMjEtMDMtMjMgMDg6NDY6MjBcclxuICogQExhc3RFZGl0b3JzOiByeHpodVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIxLTAzLTIzIDEwOjMwOjQyXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gIEFwcHN0b3JlT3V0bGluZWQsXHJcbiAgQ2hlY2tPdXRsaW5lZCxcclxuICBDb2x1bW5IZWlnaHRPdXRsaW5lZCxcclxuICBTZWFyY2hPdXRsaW5lZCxcclxuICBTb3J0QXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgU29ydERlc2NlbmRpbmdPdXRsaW5lZCxcclxuICBSZWRvT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGlzRW1wdHlPYmogfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgQ2hlY2tib3gsXHJcbiAgQ2hlY2tib3hPcHRpb25UeXBlLFxyXG4gIE1lbnUsXHJcbiAgbWVzc2FnZSxcclxuICBQb3BvdmVyLFxyXG4gIFNwYWNlLFxyXG4gIFRhYmxlLFxyXG4gIFRhYmxlUHJvcHMsXHJcbiAgVG9vbHRpcCxcclxufSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBUYWJsZVBhZ2luYXRpb25Db25maWcgfSBmcm9tIFwiYW50ZC9saWIvdGFibGVcIjtcclxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IERuZFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LWRuZFwiO1xyXG5pbXBvcnQgQm9keVJvdywgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9IGZyb20gXCIuLi9jb21tb24vQm9keVJvd1wiO1xyXG5pbXBvcnQgdHJlZVV0aWxzIGZyb20gXCIuLi8uLi90cmVlVXRpbHNcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5jb25zdCB7IEJvZHlSb3dDb21wb25lbnQsIEhUTUw1QmFja2VuZCB9ID0gQm9keVJvdztcclxuaW1wb3J0IHdpdGhaaExvY2FsZSBmcm9tIFwiLi4vY29tbW9uL3dpdGhaaExvY2FsZVwiO1xyXG5pbXBvcnQgeyBSZXNpemFibGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlXCI7XHJcbmltcG9ydCBcIi4vcmVzaXplLm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IE5vRGF0YSBmcm9tIFwiLi4vLi4vYmFzZS9jb21tb24vTm9EYXRhXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmludGVyZmFjZSBJRHJhZ1BhcmFtcyB7XHJcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcbiAgcGFyZW50SWQ6IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vLyBpbnRlcmZhY2UgU3RvcmVQcm9wcyB7fVxyXG5cclxuZXhwb3J0IHR5cGUgU3RvcmVUeXBlID0gXCJQYWdlU3RvcmVcIiB8IFwiVHJlZVN0b3JlXCIgfCBcIkJhc2VTdG9yZVwiO1xyXG5cclxuaW50ZXJmYWNlIE5TQ1RhYmxlUGFnaW5hdGlvbiBleHRlbmRzIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB7XHJcbiAgdG90YWxLZXk/OiBzdHJpbmc7XHJcbiAgcGFnZVNpemVLZXk/OiBzdHJpbmc7XHJcbiAgY3VycmVudEtleT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRvb2xCYXJQcm9wcyB7XHJcbiAgc2hvdzogYm9vbGVhbjtcclxuICB0b29scz86IEFycmF5PHN0cmluZz47XHJcbiAgb25Ub29sQ2xpY2s/OiB7IG9uUmVmcmVzaD86IGFueTsgb25Tb3J0PzogYW55IH07XHJcbn1cclxuaW50ZXJmYWNlIE5TQ1RhYmxlUHJvcHMgZXh0ZW5kcyBUYWJsZVByb3BzPGFueT4ge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93VG90YWw/OiBib29sZWFuOyAvLyDmmK/lkKbmmL7npLrmgLvmnaHmlbDkv6Hmga/vvIzpu5jorqR0cnVlXHJcbiAgZHJhZ2FibGU/OiBib29sZWFuOyAvLyDmmK/lkKblj6/mi5bliqgsIOm7mOiupGZhbHNlXHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy8g5piv5ZCm5pSv5oyB6L+H5ruk5pi+56S66KGo5qC85YiXLCDpu5jorqR0cnVlXHJcbiAgbW92ZVJvdz86IChwYXJhbXM6IElEcmFnUGFyYW1zKSA9PiB2b2lkOyAvLyDmi5bmi73lrozmiJDlkI7nmoTlm57osINcclxuICBkcmFnVXJsPzogc3RyaW5nOyAvLyDkv53lrZjmi5bmi73mjpLluo/nmoTmjqXlj6NcclxuICBwYWdpbmF0aW9uPzogZmFsc2UgfCBOU0NUYWJsZVBhZ2luYXRpb247XHJcbiAgYXV0b1BhZ2luYXRpb24/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqjlpITnkIbliIbpobVcclxuICBhdXRvU29ydD86IGJvb2xlYW47IC8v57uE5Lu25piv5ZCm6Ieq5Yqo5aSE55CG5o6S5bqPXHJcbiAgYXV0b09uQ2hhbmdlPzogYm9vbGVhbjsgLy8g57uE5Lu25piv5ZCm6Ieq5Yqob25DaGFuZ2UsIGZhbHNl5YiZ5LiN5YGa5Lu75L2V5aSE55CG5YWo6YOo5Lqk57uZ6LCD55So5pa5XHJcbiAgcmVzaXplQ29sdW1uPzogYm9vbGVhbjtcclxuICBzb3J0RmllbGRzPzogQXJyYXk8c3RyaW5nPjsgLy/pnIDopoHmjpLluo/nmoTlrZfmrrVJbmRleFxyXG4gIHRvb2xiYXI/OiBUb29sQmFyUHJvcHMgfCBib29sZWFuO1xyXG4gIGF1dG9TaXplPzogYm9vbGVhbjtcclxuICBzb3J0U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmt7vliqDmjpLluo/mn6Xor6Is6buY6K6kdHJ1ZVxyXG4gIC8vIHRhYmxlU2l6ZT86IFwic21hbGxcIiB8IFwibWlkZGxlXCIgfCBcImRlZmF1bHRcIiB8IFwiYXV0b1wiO1xyXG4gIC8vIHNpemU/OiBcInNtYWxsXCIgfCBcIm1pZGRsZVwiIHwgXCJkZWZhdWx0XCIgfCBcImF1dG9cIjtcclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjtcclxuICByb3dLZXk/OnN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTlNDVGFibGVQcm9wcyA9IHR5cGVvZiBOU0NUYWJsZS5kZWZhdWx0UHJvcHMgJiBOU0NUYWJsZVByb3BzO1xyXG5leHBvcnQgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9O1xyXG5cclxuY29uc3QgUmVzaXplYWJsZVRpdGxlID0gKHByb3BzOiBhbnkpID0+IHtcclxuICBjb25zdCB7IG9uUmVzaXplLCB3aWR0aCwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICByZXR1cm4gKFxyXG4gICAgPFJlc2l6YWJsZVxyXG4gICAgICB3aWR0aD17d2lkdGggfHwgMTUwfVxyXG4gICAgICBoZWlnaHQ9ezB9XHJcbiAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cclxuICAgICAgZHJhZ2dhYmxlT3B0cz17eyBlbmFibGVVc2VyU2VsZWN0SGFjazogZmFsc2UgfX1cclxuICAgID5cclxuICAgICAgPHRoIHsuLi5yZXN0UHJvcHN9IC8+XHJcbiAgICA8L1Jlc2l6YWJsZT5cclxuICApO1xyXG59O1xyXG5jbGFzcyBOU0NUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTlNDVGFibGVQcm9wcywgYW55PiB7XHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgIGRyYWdhYmxlOiBmYWxzZSxcclxuICAgIHNob3dUb3RhbDogdHJ1ZSxcclxuICAgIGZpbHRlckNvbHVtbjogdHJ1ZSxcclxuICAgIGRyYWdVcmw6IFwiXCIsXHJcbiAgICBhdXRvUGFnaW5hdGlvbjogdHJ1ZSxcclxuICAgIGF1dG9Tb3J0OiB0cnVlLFxyXG4gICAgYXV0b09uQ2hhbmdlOiB0cnVlLFxyXG4gICAgcmVzaXplQ29sdW1uOiB0cnVlLFxyXG4gICAgdG9vbGJhcjoge1xyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBvblRvb2xDbGljazoge30gYXMgYW55LFxyXG4gICAgfSBhcyBhbnksXHJcbiAgfTtcclxuXHJcbiAgc3RvcmUgPSB7fSBhcyBTdG9yZVByb3BzO1xyXG4gIHRoSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICB0YWJsZVNlYXJjaFJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcblxyXG4gIGxpc3RlbmVycyA9IHtcclxuICAgIG9uQmVmb3JlTG9hZDogbnVsbCxcclxuICAgIGxvYWQ6IG51bGwsXHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50cyA9IHtcclxuICAgIGhlYWRlcjoge1xyXG4gICAgICBjZWxsOiBSZXNpemVhYmxlVGl0bGUsXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgbW9kYWwgPSBwcm9wcy50eXBlIHx8IFwiYXV0b1wiO1xyXG4gICAgbGV0IHN0b3JlUHJlZml4ID0gZ2V0U3RvcmFnZShcInN0b3JlLXByZS1rZXlcIik7XHJcbiAgICBsZXQgYXV0b1R5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBhdXRvVHlwZSA9IGF1dG9UeXBlPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZGF0YVNvdXJjZTogW10sXHJcbiAgICAgIGNvbHVtbnM6IFtdLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgcGFnaW5hdGlvbjoge30sXHJcbiAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgLy/mkJzntKLmlofmnKxcclxuICAgICAgc2VhcmNoVGV4dDogbnVsbCxcclxuICAgICAgZmllbGRPcHRpb246IG51bGwsXHJcbiAgICAgIHNlYXJjaENvbG9yOiBudWxsLFxyXG4gICAgICBjb2xzOiBbXSxcclxuICAgICAgc29ydHM6IFtdLFxyXG4gICAgICBmaWx0ZXJQYXJhbXM6IHt9LFxyXG4gICAgICB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB8fCBhdXRvVHlwZSB8fCBcImRlZmF1bHRcIixcclxuICAgICAgc29ydFR5cGU6IFwic2luZ2xlXCIsXHJcbiAgICAgIHNvcnRlcjogW10sIC8v6K6w5b2V5b2T5YmN5o6S5bqP5a2X5q61XHJcbiAgICAgIHNvcnRJbmZvOiB7fSxcclxuICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXHJcbiAgICAgIGNoZWNrQ29sdW1uOiBbXSxcclxuICAgICAgZGVmYXVsdENoZWNrOiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlID0gcHJvcHMuc3RvcmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB7IGxpc3RlbmVyczogbGlzdGVuZXJzUHJvcHMgPSB7fSwgLi4ucmVzdFN0b3JlIH0gPVxyXG4gICAgICAgIHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgICBjb25zdCBzdG9yZVByb3BzID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIm1vZGVsXCIsXHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgICAgb25CZWZvcmVMb2FkOiAoc3RvcmUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uQmVmb3JlTG9hZCwgdGhpcywgW3N0b3JlLCBvcHRpb25zXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YUNoYW5nZWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYWdpbmcgPSAhKHRoaXMucHJvcHMucGFnaW5hdGlvbiA9PT0gZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocGFnaW5nICYmICF0aGlzLnByb3BzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHN0b3JlLmdldFBhZ2luYXRpb24oKSxcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBtb2RlbERhdGEsIGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5kYXRhQ2hhbmdlZCwgdGhpcywgW1xyXG4gICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgbW9kZWxEYXRhLFxyXG4gICAgICAgICAgICAgIHN0b3JlLFxyXG4gICAgICAgICAgICAgIHBhZ2luZyxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbG9hZDogKGRhdGEsIG1vZGVsRGF0YSwgc3RvcmUpID0+IHtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMubG9hZCwgdGhpcywgW2RhdGEsIG1vZGVsRGF0YSwgc3RvcmVdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvbkVycm9yTG9hZDogKGVyciwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkVycm9yTG9hZCwgdGhpcywgW2VyciwgcmVzcG9uc2VdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiByZXN0U3RvcmUuZGF0YVxyXG4gICAgICAgICAgPyByZXN0U3RvcmUuZGF0YVxyXG4gICAgICAgICAgOiBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA/IHByb3BzLmRhdGFTb3VyY2VcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAuLi5yZXN0U3RvcmUsXHJcbiAgICAgICAgYXV0b0xvYWQ6IHJlc3RTdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgUGFnZVN0b3JlKFxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlUHJvcHMsIHtcclxuICAgICAgICAgIHBhZ2luYXRpb246IHsgY3VycmVudDogMSwgLi4udGhpcy5wcm9wcy5wYWdpbmF0aW9uIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVJlc2l6ZSA9XHJcbiAgICAoaW5kZXg6IGFueSkgPT5cclxuICAgIChlOiBhbnksIHsgc2l6ZSB9OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjb2xzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICBjb25zdCBuZXh0Q29sdW1ucyA9IFsuLi5jb2xzXTtcclxuICAgICAgbmV4dENvbHVtbnNbaW5kZXhdID0ge1xyXG4gICAgICAgIC4uLm5leHRDb2x1bW5zW2luZGV4XSxcclxuICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sczogbmV4dENvbHVtbnMsXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghcmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiBbLi4udGhpcy5wcm9wcy5jb2x1bW5zXSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiBbLi4udGhpcy5wcm9wcy5jb2x1bW5zXSB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5wcm9wcy5zdG9yZTtcclxuICAgIGlmIChzdG9yZSAmJiBzdG9yZS5kYXRhKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShzdG9yZS5kYXRhKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmxpc3Rlbk1lc3NhZ2UpO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmxpc3Rlbk1lc3NhZ2UpO1xyXG4gIH1cclxuICBsaXN0ZW5NZXNzYWdlID0gKGV2KSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGV2LmRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKGV2LmRhdGEpIDogZXYuZGF0YTtcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBpZiAoZGF0YS5ldmVudFR5cGUgPT0gXCJjaGFuZ2VUYWJsZVNpemVcIikge1xyXG4gICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGRhdGE7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJkZWZhdWx0XCIgfHxcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJzbWFsbFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwibWlkZGxlXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyB0YWJsZVNpemU6IHBheWxvYWQuc2l6ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocHJlU3RhdGUuY29scyAhPT0gdGhpcy5zdGF0ZS5jb2xzKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHM6IHRoaXMucHJvcHMuY29sdW1ucyB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJldlByb3BzLnNpemUgIT09IHRoaXMucHJvcHMuc2l6ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRDb2x1bW4oKSB7XHJcbiAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBuZXdDb2xzOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb2xzcyA9IGNvbHMgfHwgW107XHJcbiAgICBjb2xzcy5tYXAoKGNvbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICBvbkhlYWRlckNlbGw6IChjb2x1bW46IHsgd2lkdGg6IGFueSB9KSA9PiAoe1xyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLmhhbmRsZVJlc2l6ZShpbmRleCksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0NvbHMucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNvbHVtbnM6IG5ld0NvbHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOmAieS4reminOiJslxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0Q29sb3IoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlSW5kZXg6IC0xIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgYXV0b09uQ2hhbmdlID0gdHJ1ZSxcclxuICAgICAgYXV0b1NvcnQsXHJcbiAgICAgIGF1dG9QYWdpbmF0aW9uLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShzb3J0ZXIpO1xyXG4gICAgaWYgKGF1dG9PbkNoYW5nZSA9PT0gZmFsc2UpIHtcclxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhbmRsZVBhZ2luYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSB7fSBhcyB7XHJcbiAgICAgICAgc2l6ZT86IHN0cmluZztcclxuICAgICAgICBwYWdlU2l6ZT86IHN0cmluZztcclxuICAgICAgICBhc2NzPzogc3RyaW5nO1xyXG4gICAgICAgIGRlc2NzPzogc3RyaW5nO1xyXG4gICAgICAgIFtwcm9wTmFtZTogc3RyaW5nXTogc3RyaW5nO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLmdldFBhZ2luYXRpb25CeVN0b3JlKCkgfHwge307XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihwYWdpbmF0aW9uKSkge1xyXG4gICAgICAgIGNvbnN0IHAgPSB7XHJcbiAgICAgICAgICBbcGFnaW5nLmN1cnJlbnRLZXkgfHwgXCJjdXJyZW50XCJdOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICBbcGFnaW5nLnBhZ2VTaXplS2V5IHx8IFwic2l6ZVwiXTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCBwKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgYXNjUGFyYW1zID0gdGhpcy5nZXRTb3J0UGFyYW0oc29ydGVyLCB0cnVlKTtcclxuICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKCFpc011bHRpcGxlICYmICFpc0VtcHR5T2JqKHNvcnRlcikpIHtcclxuICAgICAgICBzb3J0ZXIuY29sdW1uICYmXHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbc29ydGVyXSwgZGVmYXVsdFNvcnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtdIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zLCAuLi5wYXJhbXMsIC4uLmFzY1BhcmFtcyB9O1xyXG4gICAgICBhdXRvU29ydCAmJiB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DaGFuZ2VGbiA9IHRoaXMucHJvcHMub25DaGFuZ2U7XHJcblxyXG4gICAgYXV0b1BhZ2luYXRpb24gJiYgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgLy8g55So5oi35Lyg5LqGb25DaGFuZ2Xkv53nlZnnlKjmiLfoh6rkuLvlpITnkIbooajmoLzlj5jljJbnmoTmnYPliptcclxuICAgIGlmIChvbkNoYW5nZUZuKSB7XHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2hhbmdlRm4sIHRoaXMsIFtwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5pWw5o2u5qih5Z6L5a+56LGhXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I+c5Y2V5pCc57Si6L+H5ruk5pi+56S6XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIGhhbmRsZVNlYXJjaCh2YWwsIGZpZWxkT3B0aW9uLCBzZWFyY2hDb2xvcikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlYXJjaFRleHQ6IHZhbCxcclxuICAgICAgZmllbGRPcHRpb246IGZpZWxkT3B0aW9uLFxyXG4gICAgICBzZWFyY2hDb2xvcjogc2VhcmNoQ29sb3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaooeWdl+WIl+ihqOenu+WKqOaOkuW6j1xyXG4gICAqL1xyXG4gIG1vdmVSb3cgPSAoZHJhZ0luZGV4LCBob3ZlckluZGV4LCBkcmFnLCB0YXJnZXQpID0+IHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBkcmFnTm9kZSA9IGRyYWcucmVjb3JkO1xyXG4gICAgbGV0IHRhcmdldE5vZGUgPSB0YXJnZXQucmVjb3JkO1xyXG4gICAgZHJhZ05vZGUubW92ZUFycmF5KGRyYWdOb2RlLCB0YXJnZXROb2RlKTtcclxuICAgIGxldCBpZHMgPSBkcmFnTm9kZS5wYXJlbnROb2RlLmdldENoaWxkTm9kZUlkcygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IGRyYWdOb2RlLmlkLFxyXG4gICAgICBwYXJlbnRJZDogZHJhZ05vZGUuYXR0cmlidXRlLnBhcmVudElkLFxyXG4gICAgICBpZHM6IGlkcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHMubW92ZVJvdykge1xyXG4gICAgICB0aGlzLnByb3BzLm1vdmVSb3cocGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyQ29sdW1uKGNoZWNrZWRWYWx1ZSkge1xyXG4gICAgaWYgKGNoZWNrZWRWYWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLoh7PlsJHmmL7npLrkuIDliJfvvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlckNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKChjb2w6IENvbHVtblR5cGU8e30+KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH0gYXMgQ29sdW1uVHlwZTx7fT4gJiB7IGluaXRTaG93OiBib29sZWFuIH07XHJcbiAgICAgIGlmIChjaGVja2VkVmFsdWUuaW5jbHVkZXMoY29sLmRhdGFJbmRleCkpIHtcclxuICAgICAgICBuZXdDb2wuaW5pdFNob3cgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdDb2w7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sdW1uczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjaGVja0NvbHVtbjogY2hlY2tlZFZhbHVlLFxyXG4gICAgICAgIGRlZmF1bHRDaGVjazogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjaGVja0NvbHVtbjogY2hlY2tlZFZhbHVlLFxyXG4gICAgICAgIGRlZmF1bHRDaGVjazogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRTb3J0UGFyYW0oc29ydGVyLCBzb3J0U3RhdGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGNvbnN0IHsgc29ydFNlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXNvcnRTZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IHNvcnRJbmZvID0ge307XHJcbiAgICBsZXQgb3JkZXJJdGVtcyA9IFtdO1xyXG4gICAgaWYgKCFpc0VtcHR5T2JqKHNvcnRlcikgJiYgIWlzTXVsdGlwbGUgJiYgc29ydGVyLmNvbHVtbikge1xyXG4gICAgICBvcmRlckl0ZW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHVtbjogc29ydGVyLmNvbHVtbi5maWVsZCB8fCBzb3J0ZXIuY29sdW1uLmRhdGFJbmRleCxcclxuICAgICAgICAgIGFzYzogc29ydGVyLm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKHNvcnRlci5jb2x1bW4pIHNvcnRJbmZvW3NvcnRlci5jb2x1bW4uZGF0YUluZGV4XSA9IHNvcnRlci5vcmRlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICBzb3J0ZXIuZm9yRWFjaCgodikgPT4ge1xyXG4gICAgICAgIHNvcnRJbmZvW3YuY29sdW1uLmRhdGFJbmRleF0gPSB2Lm9yZGVyO1xyXG4gICAgICAgIGxldCBmaWVsZCA9IHYuY29sdW1uLmZpZWxkIHx8IHYuY29sdW1uLmRhdGFJbmRleDtcclxuICAgICAgICBvcmRlckl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgY29sdW1uOiBmaWVsZCxcclxuICAgICAgICAgIGFzYzogdi5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzb3J0U3RhdGUpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgc29ydEluZm86IHNvcnRJbmZvLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG9yZGVySXRlbXM6IEpTT04uc3RyaW5naWZ5KG9yZGVySXRlbXMpIH07XHJcbiAgfVxyXG4gIGdldENvbHVtbnMoKSB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIHNvcnRUeXBlLCBzb3J0SW5mbyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc29ydEZpZWxkcyA9IFtdIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuICAgIGNvbnN0IGNvbHMgPSBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChjb2wuZWxsaXBzaXMgJiYgIWNvbC5yZW5kZXIpIHtcclxuICAgICAgICBjb2wuZWxsaXBzaXMgPSB7XHJcbiAgICAgICAgICBzaG93VGl0bGU6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sLnJlbmRlciA9ICh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8VG9vbHRpcCBwbGFjZW1lbnQ9XCJ0b3BMZWZ0XCIgdGl0bGU9e3RleHR9PlxyXG4gICAgICAgICAgICAgIHt0ZXh0fVxyXG4gICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzb3J0RmllbGRzLmluZGV4T2YoY29sLmRhdGFJbmRleCkgPiAtMSkge1xyXG4gICAgICAgIGlmIChzb3J0VHlwZSA9PSBcInNpbmdsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKHNvcnRUeXBlID09IFwibXVsdGlwbGVcIikge1xyXG4gICAgICAgICAgY29sLnNvcnRlciA9IHsgbXVsdGlwbGU6IGluZGV4IH07XHJcbiAgICAgICAgICBjb2wuc29ydE9yZGVyID0gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgPyBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb2w7XHJcbiAgICB9KTtcclxuICAgIGNvbHMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoIWlzRW1wdHlPYmooaXRlbS5maWx0ZXJQcm9wcykpIHtcclxuICAgICAgICBsZXQgb2JqID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCBwcm9wcywgc2VhcmNoS2V5IH0gPSBpdGVtLmZpbHRlclByb3BzO1xyXG4gICAgICAgIGxldCBEaXYgPSBudWxsO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gaXRlbS50aXRsZTtcclxuICAgICAgICBEaXYgPSBnZXROb2RlKHR5cGUsIHtcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBg5pCc57SiJHt0ZXh0fWAsXHJcbiAgICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICAgIHJlZjogdGhpcy50YWJsZVNlYXJjaFJlZixcclxuICAgICAgICB9KTtcclxuICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICBmaWx0ZXJEcm9wZG93bjogKHtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIGNvbmZpcm0sXHJcbiAgICAgICAgICAgIGNsZWFyRmlsdGVycyxcclxuICAgICAgICAgIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwic2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJzcGFjZVwiKX0+e0Rpdn08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxTcGFjZT5cclxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdGaWx0ZXJQYXJhbXMgPSB7IC4uLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGl0ZW0uZmllbGQgfHwgaXRlbS5kYXRhSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXdGaWx0ZXJQYXJhbXNba2V5XSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTZWFyY2hSZWYuY3VycmVudD8uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXM6IHsgLi4ubmV3RmlsdGVyUGFyYW1zIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRQYXJhbSA9IHRoaXMuZ2V0U29ydFBhcmFtKHRoaXMuc3RhdGUuc29ydGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUubG9hZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMsIC4uLnNvcnRQYXJhbSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiYnV0dG9uXCIpfVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg5p+l6K+iXHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9TcGFjZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmaWx0ZXJJY29uOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8U2VhcmNoT3V0bGluZWQgLz47XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ub2JqLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sc1tpbmRleF0gPSBvYmo7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbHM7XHJcbiAgfVxyXG4gIHJlbmRlclRvb2xCYXIoKSB7XHJcbiAgICBsZXQgeyB0YWJsZVNpemUsIGNvbHVtbnMsIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgZmlsdGVyQ29sdW1uLCBjb2x1bW5zOiBjb2xMaXN0cywgdG9vbGJhciB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29scyA9IFtcInJlZnJlc2hcIiwgXCJzaXplXCIsIFwic29ydFwiLCBcImNvbHVtblwiXTtcclxuICAgIGxldCB0b29sc0NsaWNrID0ge30gYXMgYW55O1xyXG4gICAgaWYgKHRvb2xiYXIgPT0gdHJ1ZSkge1xyXG4gICAgICB0b29scyA9IHRvb2xiYXIub25Ub29sQ2xpY2tcclxuICAgICAgICA/IHRvb2xiYXIub25Ub29sQ2xpY2tcclxuICAgICAgICA6IFtcInJlZnJlc2hcIiwgXCJzaXplXCIsIFwic29ydFwiLCBcImNvbHVtblwiXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRvb2xzID0gdG9vbGJhci50b29sc1xyXG4gICAgICAgID8gdG9vbGJhci50b29sc1xyXG4gICAgICAgIDogdGFibGVUb29sLnRvb2xzXHJcbiAgICAgICAgPyB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA6IHRvb2xzO1xyXG4gICAgICB0b29sc0NsaWNrID0gdG9vbGJhci5vblRvb2xDbGljayA/IHRvb2xiYXIub25Ub29sQ2xpY2sgOiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNpemVJdGVtID0gW1xyXG4gICAgICB7IHRpdGxlOiBcIuWuveadvlwiLCBrZXk6IFwiZGVmYXVsdFwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5Lit562JXCIsIGtleTogXCJtaWRkbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIue0p+WHkVwiLCBrZXk6IFwic21hbGxcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRJdGVtID0gW1xyXG4gICAgICB7IHRpdGxlOiBcIuWNleWtl+auteaOkuW6j1wiLCBrZXk6IFwic2luZ2xlXCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLlpJrlrZfmrrXmjpLluo9cIiwga2V5OiBcIm11bHRpcGxlXCIgfSxcclxuICAgIF07XHJcbiAgICBjb25zdCBzb3J0Q29udGVudCA9IChcclxuICAgICAgPD5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCA/IFwibm90LWFsbG93ZWRcIiA6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCAmJiBcInJnYmEoMCwwLDAsLjQ1KVwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10sIHNvcnRJbmZvOiB7fSwgZGVmYXVsdFNvcnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOaBouWkjem7mOiupOaOkuW6j1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzb3J0SXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgc29ydGVyOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICAgICAgICAgICAgICBzb3J0VHlwZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgICAge3RoaXMuc3RhdGUuc29ydGVyLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgPD5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcInJnYmEoMCwwLDAsLjQ1KVwiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlvZPliY3mjpLluo9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9IGtleT17aW5kZXh9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7aXRlbS5vcmRlciA9PSBcImFzY2VuZFwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydERlc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS5jb2x1bW4udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb3RlbnQtdGl0bGVcIil9PuihqOagvOWvhuW6pjwvZGl2PlxyXG4gICAgICAgIHtzaXplSXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAge3RhYmxlU2l6ZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0U2hvd0NvbHMgPSBjb2x1bW5zLmZpbHRlcigoY29scykgPT4gY29scy5pbml0U2hvdyAhPT0gZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSAoXHJcbiAgICAgIDxDaGVja2JveC5Hcm91cFxyXG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlckNvbHVtbi5iaW5kKHRoaXMpfVxyXG4gICAgICAgIG9wdGlvbnM9e2NvbExpc3RzLm1hcChcclxuICAgICAgICAgIChjb2w6IENvbHVtblR5cGU8e30+ICYgeyBmaWx0ZXJDb2x1bW46IGJvb2xlYW47IGRhdGFJbmRleDogYW55IH0pID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjb2wuZGF0YUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY29sLmRhdGFJbmRleCA9IGNvbC50aXRsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBjb2wudGl0bGUsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGNvbC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNvbC5maWx0ZXJDb2x1bW4gPT09IGZhbHNlLFxyXG4gICAgICAgICAgICB9IGFzIENoZWNrYm94T3B0aW9uVHlwZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApfVxyXG4gICAgICAgIC8vIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sKSA9PiBjb2wuZGF0YUluZGV4KX1cclxuICAgICAgICB2YWx1ZT17XHJcbiAgICAgICAgICB0aGlzLnN0YXRlLmRlZmF1bHRDaGVja1xyXG4gICAgICAgICAgICA/IGRlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleClcclxuICAgICAgICAgICAgOiB0aGlzLnN0YXRlLmNoZWNrQ29sdW1uXHJcbiAgICAgICAgfVxyXG4gICAgICA+PC9DaGVja2JveC5Hcm91cD5cclxuICAgICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGFibGUtdG9vbC1iYXJcIil9PlxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwiY29sdW1uXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCLpgInmi6nmmL7npLrnmoTliJdcIlxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9XCJjbGlja1wiXHJcbiAgICAgICAgICAgICAgb3ZlcmxheVN0eWxlPXt7IG1pbldpZHRoOiA0MTAsIG1heFdpZHRoOiA0NTAgfX1cclxuICAgICAgICAgICAgICAvLyBnZXRQb3B1cENvbnRhaW5lcj17KCkgPT4gdGhpcy50aEljb25SZWYuY3VycmVudH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxBcHBzdG9yZU91dGxpbmVkIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiYXBwLXN0b3JlLWljb25cIil9IC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzb3J0XCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzb3J0Q29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic2l6ZVwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c2l6ZUNvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxDb2x1bW5IZWlnaHRPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwicmVmcmVzaFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgIGlmICh0b29sc0NsaWNrLm9uUmVmcmVzaCkge1xyXG4gICAgICAgICAgICAgICAgdG9vbHNDbGljay5vblJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFJlZG9PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXM7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0RhdGFzO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdChyZWNvcmQ6IGFueSwgc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dLZXlzLCByZWNvcmRbcm93S2V5XV07XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dEYXRhcywgcmVjb3JkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtW3Jvd0tleV0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IG5ld1NlbGVjdGVkUm93S2V5cyxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogbmV3U2VsZWN0ZWRSb3dEYXRhcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdEFsbChzZWxlY3RlZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueSwgY2hhbmdlUm93czogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBsZXQgbmV3ZGF0YXM6IGFueSA9IFtdO1xyXG4gICAgaWYgKGNoYW5nZVJvd3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgY2hhbmdlSWRzID0gY2hhbmdlUm93cy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtyb3dLZXldKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzLCAuLi5jaGFuZ2VSb3dzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbVtyb3dLZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdkYXRhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogWy4uLm5ld2RhdGFzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9hZGluZyxcclxuICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgIHBhZ2luYXRpb24gPSB7fSxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yLFxyXG4gICAgICAgIHRhYmxlU2l6ZSxcclxuICAgICAgfSA9IHRoaXMuc3RhdGUsXHJcbiAgICAgIHByb3BzID0gdXRpbHMub21pdChcclxuICAgICAgICB0aGlzLnByb3BzLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwic3RvcmVcIixcclxuICAgICAgICAgIFwib25DaGFuZ2VcIixcclxuICAgICAgICAgIFwiY29sdW1uc1wiLFxyXG4gICAgICAgICAgXCJyZXNldENvbHVtblwiLFxyXG4gICAgICAgICAgXCJ0b29sYmFyXCIsXHJcbiAgICAgICAgICBcInNvcnRGaWVsZHNcIixcclxuICAgICAgICAgIFwiZmlsdGVyQ29sdW1uXCIsXHJcbiAgICAgICAgICBcInNvcnRTZWFyY2hcIixcclxuICAgICAgICAgIFwic2hvd1Jvd1NlbGVjdGlvblwiLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93S2V5OiBcImlkXCIsXHJcbiAgICAgICAgICBjbGlja0NoYW5nZUNvbG9yOiBmYWxzZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICBpZiAocHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgcHJvcHMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICBwb3NpdGlvbjogW1wiYm90dG9tUmlnaHRcIl0sXHJcbiAgICAgICAgc2hvd1NpemVDaGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSxcclxuICAgICAgICAuLi5wcm9wcy5wYWdpbmF0aW9uLFxyXG4gICAgICAgIC4uLnBhZ2luYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChwcm9wcy5zaG93VG90YWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHByb3BzLnBhZ2luYXRpb24uc2hvd1RvdGFsID0gZnVuY3Rpb24gKHRvdGFsLCBbZnJvbSwgdG9dKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gXCLmmL7npLogXCIgKyBmcm9tICsgXCIgLSBcIiArIHRvICsgXCLmnaHvvIzlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgICAgcmV0dXJuIFwi5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9wcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICAgIF90aGlzLm9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5jbGlja0NoYW5nZUNvbG9yKSB7XHJcbiAgICAgIGNvbnN0IG9uUm93Rm4gPSBwcm9wcy5vblJvdztcclxuICAgICAgcHJvcHMub25Sb3cgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXN0b20gPSBvblJvd0ZuID8gb25Sb3dGbihyZWNvcmQsIGluZGV4KSA6IHt9O1xyXG4gICAgICAgIGNvbnN0IG9uQ2xpY2tGbiA9IGN1c3RvbS5vbkNsaWNrO1xyXG4gICAgICAgIGN1c3RvbS5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCwgLy/ojrflj5bngrnlh7vooYznmoTntKLlvJVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXRpbHMuY2FsbGJhY2sob25DbGlja0ZuLCBfdGhpcywgW2V2ZW50XSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tO1xyXG4gICAgICB9O1xyXG4gICAgICBwcm9wcy5yb3dDbGFzc05hbWUgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXhcclxuICAgICAgICAgID8gYCR7c3R5bGVzLmNsaWNrUm93U3R5bGV9YFxyXG4gICAgICAgICAgOiBcIlwiO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0RhdGFTb3VyY2UgPSBbXTtcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0cmVlVXRpbHMuZ2V0U2VhcmNoTWVudURhdGFzKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvclxyXG4gICAgICApO1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YS50cmVlRGF0YXM7XHJcbiAgICAgIHByb3BzLmV4cGFuZGVkUm93S2V5cyA9IGRhdGEub3BlbktleXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuICAgIH1cclxuICAgIHByb3BzLnN0b3JlID0gcHJvcHMuc3RvcmUgfHwge307XHJcbiAgICBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9IHByb3BzLnN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGNvbnN0IHsgZHJhZ2FibGUgfSA9IF90aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZHJhZ2FibGVQcm9wcyA9XHJcbiAgICAgIGRyYWdhYmxlID09PSB0cnVlXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IEJvZHlSb3dDb21wb25lbnQsXHJcbiAgICAgICAgICAgIG9uUm93OiAocmVjb3JkLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgICBpbmRleCxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbW92ZVJvdzogdGhpcy5tb3ZlUm93LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHt9O1xyXG4gICAgbGV0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZVByb3BzID1cclxuICAgICAgcmVzaXplQ29sdW1uID09PSB0cnVlID8geyBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHMgfSA6IG51bGw7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbEZsYWcgPSB0cnVlO1xyXG4gICAgbGV0IHRvb2xwcm9wcyA9XHJcbiAgICAgIHRoaXMucHJvcHMudG9vbGJhciA9PT0gZmFsc2UgfHwgdGhpcy5wcm9wcy50b29sYmFyPy5zaG93ID09PSBmYWxzZVxyXG4gICAgICAgID8gZmFsc2VcclxuICAgICAgICA6IHRydWU7XHJcbiAgICBpZiAoIXRvb2xwcm9wcykge1xyXG4gICAgICB0b29sRmxhZyA9IHRvb2xwcm9wcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRvb2xGbGFnID0gdGFibGVUb29sLnNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMucHJvcHMuc2hvd1Jvd1NlbGVjdGlvbicsdGhpcy5wcm9wcy5zaG93Um93U2VsZWN0aW9uKVxyXG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICBjb25zb2xlLmxvZygnYWFhYWFhJylcclxuICAgICAgY29uc3QgeyByb3dTZWxlY3Rpb24gPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgcHJvcHMgPSB7XHJcbiAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgIG9uU2VsZWN0QWxsOiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aDogNDAsXHJcbiAgICAgICAgICAuLi5yb3dTZWxlY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IERlZmF1bHRUYWJsZSA9IChcclxuICAgICAgPD5cclxuICAgICAgICB7dG9vbEZsYWcgJiYgdGhpcy5yZW5kZXJUb29sQmFyKCl9XHJcbiAgICAgICAgPFRhYmxlXHJcbiAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWU9XCJjaGlsZE5vZGVzXCJcclxuICAgICAgICAgIHNoZWl0ZW1cclxuICAgICAgICAgIGRhdGFTb3VyY2U9e25ld0RhdGFTb3VyY2V9XHJcbiAgICAgICAgICBjb2x1bW5zPXt0aGlzLmdldENvbHVtbnMoKX1cclxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1tcIm5zYy10YWJsZVwiXX1cclxuICAgICAgICAgIGxvY2FsZT17e1xyXG4gICAgICAgICAgICBlbXB0eVRleHQ6IDxOb0RhdGEgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0YWJsZS1ub2RhdGFcIil9IC8+LFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHNjcm9sbD17eyB4OiBcIm1heC1jb250ZW50XCIgfX1cclxuICAgICAgICAgIHsuLi5yZXNpemVQcm9wc31cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICAgIHsuLi5kcmFnYWJsZVByb3BzfVxyXG4gICAgICAgICAgc2l6ZT17dGFibGVTaXplfVxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZHJhZ2FibGUgPT09IHRydWUgPyAoXHJcbiAgICAgIDxEbmRQcm92aWRlciBiYWNrZW5kPXtIVE1MNUJhY2tlbmR9PntEZWZhdWx0VGFibGV9PC9EbmRQcm92aWRlcj5cclxuICAgICkgOiAoXHJcbiAgICAgIERlZmF1bHRUYWJsZVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHdpdGhaaExvY2FsZShOU0NUYWJsZSk7XHJcbiJdfQ==
|
|
@@ -82,13 +82,9 @@ declare class BasePage extends PureComponent<NSCBaseBageProps, any> {
|
|
|
82
82
|
tableLoad(params: any): void;
|
|
83
83
|
onSearch(params: any): void;
|
|
84
84
|
tableReload(params?: {}, autoLoad?: boolean): void;
|
|
85
|
-
rowSelectionOnSelect(record: any, selected: any): void;
|
|
86
|
-
rowSelectionOnSelectAll(selected: any, selectedRows: any, changeRows: any): void;
|
|
87
85
|
getSelectedRowKeys(): any;
|
|
88
86
|
getSelectedRowDatas(): any;
|
|
89
|
-
resetSelectedRowKeys():
|
|
90
|
-
setSelectedRowKeys(data: any): void;
|
|
91
|
-
setSelectedRowDatas(data: any): void;
|
|
87
|
+
resetSelectedRowKeys(): any;
|
|
92
88
|
getSearchValues(): any;
|
|
93
89
|
getChildrenData(data: any, keys?: any[]): any[];
|
|
94
90
|
renderToolButtons(toolbuttons: any, marginflag?: boolean): JSX.Element;
|
|
@@ -291,118 +291,26 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
291
291
|
}
|
|
292
292
|
});
|
|
293
293
|
}
|
|
294
|
-
}, {
|
|
295
|
-
key: "rowSelectionOnSelect",
|
|
296
|
-
value: function rowSelectionOnSelect(record, selected) {
|
|
297
|
-
var _this$state2 = this.state,
|
|
298
|
-
selectedRowKeys = _this$state2.selectedRowKeys,
|
|
299
|
-
selectedRowDatas = _this$state2.selectedRowDatas;
|
|
300
|
-
var tableProps = this.props.tableProps;
|
|
301
|
-
var _tableProps$rowKey = tableProps.rowKey,
|
|
302
|
-
rowKey = _tableProps$rowKey === void 0 ? "id" : _tableProps$rowKey;
|
|
303
|
-
|
|
304
|
-
var newSelectedRowKeys = _toConsumableArray(selectedRowKeys);
|
|
305
|
-
|
|
306
|
-
var newSelectedRowDatas = _toConsumableArray(selectedRowDatas);
|
|
307
|
-
|
|
308
|
-
if (selected) {
|
|
309
|
-
newSelectedRowKeys = [].concat(_toConsumableArray(newSelectedRowKeys), [record[rowKey]]);
|
|
310
|
-
newSelectedRowDatas = [].concat(_toConsumableArray(newSelectedRowDatas), [record]);
|
|
311
|
-
} else {
|
|
312
|
-
selectedRowKeys.map(function (item, index) {
|
|
313
|
-
if (item === record[rowKey]) {
|
|
314
|
-
newSelectedRowKeys.splice(index, 1);
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
selectedRowDatas.map(function (item, index) {
|
|
318
|
-
if (item[rowKey] === record[rowKey]) {
|
|
319
|
-
newSelectedRowDatas.splice(index, 1);
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
this.setState({
|
|
325
|
-
selectedRowKeys: newSelectedRowKeys,
|
|
326
|
-
selectedRowDatas: newSelectedRowDatas
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
}, {
|
|
330
|
-
key: "rowSelectionOnSelectAll",
|
|
331
|
-
value: function rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
|
|
332
|
-
var _this$state3 = this.state,
|
|
333
|
-
selectedRowKeys = _this$state3.selectedRowKeys,
|
|
334
|
-
selectedRowDatas = _this$state3.selectedRowDatas;
|
|
335
|
-
var tableProps = this.props.tableProps;
|
|
336
|
-
var _tableProps$rowKey2 = tableProps.rowKey,
|
|
337
|
-
rowKey = _tableProps$rowKey2 === void 0 ? "id" : _tableProps$rowKey2;
|
|
338
|
-
var newids = [];
|
|
339
|
-
var newdatas = [];
|
|
340
|
-
|
|
341
|
-
if (changeRows.length > 0) {
|
|
342
|
-
var changeIds = changeRows.map(function (item) {
|
|
343
|
-
return item[rowKey];
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
if (selected) {
|
|
347
|
-
newids = [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(changeIds));
|
|
348
|
-
newdatas = [].concat(_toConsumableArray(selectedRowDatas), _toConsumableArray(changeRows));
|
|
349
|
-
} else {
|
|
350
|
-
selectedRowKeys.map(function (item, index) {
|
|
351
|
-
if (changeIds.indexOf(item) == -1) {
|
|
352
|
-
newids.push(item);
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
selectedRowDatas.map(function (item, index) {
|
|
356
|
-
if (changeIds.indexOf(item[rowKey]) == -1) {
|
|
357
|
-
newdatas.push(item);
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
} else {
|
|
362
|
-
newids = _toConsumableArray(selectedRowKeys);
|
|
363
|
-
newdatas = _toConsumableArray(selectedRowDatas);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
this.setState({
|
|
367
|
-
selectedRowKeys: _toConsumableArray(newids),
|
|
368
|
-
selectedRowDatas: _toConsumableArray(newdatas)
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
294
|
}, {
|
|
372
295
|
key: "getSelectedRowKeys",
|
|
373
296
|
value: function getSelectedRowKeys() {
|
|
374
|
-
|
|
297
|
+
var _this$tableRef$curren3;
|
|
298
|
+
|
|
299
|
+
return (_this$tableRef$curren3 = this.tableRef.current) === null || _this$tableRef$curren3 === void 0 ? void 0 : _this$tableRef$curren3.getSelectedRowKeys();
|
|
375
300
|
}
|
|
376
301
|
}, {
|
|
377
302
|
key: "getSelectedRowDatas",
|
|
378
303
|
value: function getSelectedRowDatas() {
|
|
379
|
-
|
|
304
|
+
var _this$tableRef$curren4;
|
|
305
|
+
|
|
306
|
+
return (_this$tableRef$curren4 = this.tableRef.current) === null || _this$tableRef$curren4 === void 0 ? void 0 : _this$tableRef$curren4.getSelectedRowDatas();
|
|
380
307
|
}
|
|
381
308
|
}, {
|
|
382
309
|
key: "resetSelectedRowKeys",
|
|
383
310
|
value: function resetSelectedRowKeys() {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
});
|
|
388
|
-
}
|
|
389
|
-
}, {
|
|
390
|
-
key: "setSelectedRowKeys",
|
|
391
|
-
value: function setSelectedRowKeys(data) {
|
|
392
|
-
var currentPage = this.state.currentPage;
|
|
393
|
-
this.setState({
|
|
394
|
-
selectedRowKeys: data,
|
|
395
|
-
selectedRowKeysStore: _defineProperty({}, currentPage, data)
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
}, {
|
|
399
|
-
key: "setSelectedRowDatas",
|
|
400
|
-
value: function setSelectedRowDatas(data) {
|
|
401
|
-
var currentPage = this.state.currentPage;
|
|
402
|
-
this.setState({
|
|
403
|
-
selectedRowDatas: data,
|
|
404
|
-
selectedRowDatasStore: _defineProperty({}, currentPage, data)
|
|
405
|
-
});
|
|
311
|
+
var _this$tableRef$curren5;
|
|
312
|
+
|
|
313
|
+
return (_this$tableRef$curren5 = this.tableRef.current) === null || _this$tableRef$curren5 === void 0 ? void 0 : _this$tableRef$curren5.resetSelectedRowKeys();
|
|
406
314
|
}
|
|
407
315
|
}, {
|
|
408
316
|
key: "getSearchValues",
|
|
@@ -419,8 +327,8 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
419
327
|
|
|
420
328
|
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
421
329
|
var tableProps = this.props.tableProps;
|
|
422
|
-
var _tableProps$
|
|
423
|
-
rowKey = _tableProps$
|
|
330
|
+
var _tableProps$rowKey = tableProps.rowKey,
|
|
331
|
+
rowKey = _tableProps$rowKey === void 0 ? "id" : _tableProps$rowKey;
|
|
424
332
|
var resKey = [];
|
|
425
333
|
|
|
426
334
|
if (data.childNodes) {
|
|
@@ -695,9 +603,9 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
695
603
|
}, {
|
|
696
604
|
key: "setTableData",
|
|
697
605
|
value: function setTableData(data) {
|
|
698
|
-
var _this$tableRef$
|
|
606
|
+
var _this$tableRef$curren6;
|
|
699
607
|
|
|
700
|
-
(_this$tableRef$
|
|
608
|
+
(_this$tableRef$curren6 = this.tableRef.current) === null || _this$tableRef$curren6 === void 0 ? void 0 : _this$tableRef$curren6.store.setData(data);
|
|
701
609
|
}
|
|
702
610
|
}, {
|
|
703
611
|
key: "setTreeData",
|
|
@@ -777,17 +685,6 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
777
685
|
store: store
|
|
778
686
|
}, othertableParams);
|
|
779
687
|
|
|
780
|
-
if (showRowSelection) {
|
|
781
|
-
tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
|
|
782
|
-
rowSelection: _objectSpread({
|
|
783
|
-
selectedRowKeys: this.state.selectedRowKeys,
|
|
784
|
-
onSelect: this.rowSelectionOnSelect.bind(this),
|
|
785
|
-
onSelectAll: this.rowSelectionOnSelectAll.bind(this),
|
|
786
|
-
columnWidth: 40
|
|
787
|
-
}, rowSelection)
|
|
788
|
-
});
|
|
789
|
-
}
|
|
790
|
-
|
|
791
688
|
var tableColumn = [];
|
|
792
689
|
var searchForms = [];
|
|
793
690
|
var editorForms = [];
|
|
@@ -1056,7 +953,8 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
1056
953
|
_this4.tableLoad(params);
|
|
1057
954
|
}
|
|
1058
955
|
}
|
|
1059
|
-
}, tableProps.toolbar)
|
|
956
|
+
}, tableProps.toolbar),
|
|
957
|
+
showRowSelection: showRowSelection
|
|
1060
958
|
}, tableParams)))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
|
|
1061
959
|
ref: this.editorRef,
|
|
1062
960
|
callBack: this.tableReload.bind(this),
|
|
@@ -1078,4 +976,4 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
1078
976
|
}(PureComponent);
|
|
1079
977
|
|
|
1080
978
|
export default BasePage;
|
|
1081
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsIlRhYmxlIiwiVHJlZSIsIkJ1dHRvbiIsIk1vZGFsIiwiUG9wb3ZlciIsIm1lc3NhZ2UiLCJJY29uIiwiaWNvblR5cGUiLCJFZGl0b3JGb3JtIiwiY2xzIiwic3R5bGVzIiwidXRpbHMiLCJEb3duT3V0bGluZWQiLCJFeWVPdXRsaW5lZCIsIkVkaXRPdXRsaW5lZCIsIlJpZ2h0T3V0bGluZWQiLCJQbHVzT3V0bGluZWQiLCJFbGxpcHNpc091dGxpbmVkIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJvbWl0IiwiY29uZmlnIiwiZ2V0U3RvcmFnZSIsIkhlYWRlclNlYXJjaCIsIkJhc2VQYWdlIiwicHJvcHMiLCJjcmVhdGVSZWYiLCJjaGVja2VkVHJlZUtleXMiLCJzdGF0ZSIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJ2YWx1ZSIsImRlcHRJZCIsIm9uU2VhcmNoIiwic2VsZWN0ZWQiLCJyZXMiLCJrZXkiLCJrZXlzIiwibGVuZ3RoIiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJ0cmVlU2VhcmNoUHJhbXMiLCJpbml0RGF0YSIsInBhcmFtcyIsImNhbGxCYWNrIiwic2VhcmNoUmVmIiwiY3VycmVudCIsInNldFNlYXJjaFBhcmFtcyIsImVkaXRvcmZsYWciLCJlZGl0b3JSZWYiLCJzaG93IiwiaGlkZUZvcm0iLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImRlbGV0ZVVybCIsIm9uRGVsZXRlIiwiZGVsZXRlUGFyYW1zIiwid2FybmluZyIsIkVycm9yIiwiY29uZmlybSIsIm9uT2siLCJkZWZhdWx0UGFyYW1zIiwibWV0aG9kIiwiaWRzIiwiam9pbiIsInJlcXVlc3RQYXJhbXMiLCJ0aGVuIiwiY29kZSIsInN1Y2Nlc3MiLCJlcnJvciIsImNhdGNoIiwiY29uc29sZSIsImxvZyIsInRhYmxlUmVmIiwic3RvcmUiLCJsb2FkIiwib25DYWxsQmFja3MiLCJ0YWJsZUxvYWQiLCJvblNlYXJjaENhbGxCYWNrIiwiY2FsbGJhY2siLCJhdXRvTG9hZCIsInJlbG9hZCIsImRhdGEiLCJyZWNvcmRzIiwiY3VycmVudFBhZ2UiLCJyZWNvcmQiLCJ0YWJsZVByb3BzIiwicm93S2V5IiwibmV3U2VsZWN0ZWRSb3dLZXlzIiwibmV3U2VsZWN0ZWRSb3dEYXRhcyIsIm1hcCIsIml0ZW0iLCJpbmRleCIsInNwbGljZSIsInNldFN0YXRlIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsIm5ld2RhdGFzIiwiY2hhbmdlSWRzIiwiaW5kZXhPZiIsInB1c2giLCJzZWxlY3RlZFJvd0tleXNTdG9yZSIsInNlbGVjdGVkUm93RGF0YXNTdG9yZSIsImZyb21WYWx1ZSIsImdldFNlYXJjaFZhbHVlcyIsInJlc0tleSIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImdldENoaWxkcmVuRGF0YSIsInRvb2xidXR0b25zIiwibWFyZ2luZmxhZyIsImZsYWciLCJzaG93U2VhcmNoIiwicGFnZVR5cGUiLCJvbkNsaWNrIiwiaWNvbiIsIm1hcmdpbkxlZnQiLCJjb2x1bW5CdXR0b25zIiwiZWRpdG9yRm9ybSIsImJ1dHRvbnMiLCJhY3Rpb25Qb3JwcyIsImJhc2VBY3Rpb25Db2x1bW4iLCJuZXdCdXR0b25zIiwic2hvd0ljb24iLCJyZWNvcmRTaG93IiwiZXZhbCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsImtleXdvcmQiLCJ0cmVlUHJvcHMiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRGaWVsZHMiLCJ0ZXh0IiwibmV3VGV4dCIsImkiLCJsYWJlbCIsInNldERhdGEiLCJ0cmVlUmVmIiwiY29sdW1ucyIsInN1Ym1pdFVybCIsImZvcm1Qcm9wcyIsInNob3dMZWZ0Iiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJvblNob3dGb3JtIiwiZm9ybUNoYW5nZVZhbGlkIiwiY2xhc3NOYW1lIiwidG9vbEJ1dHRvblBvc2l0aW9uIiwiZmlsdGVyQ29sdW1uIiwiYWN0aW9uQ29sdW1uIiwic2hvd1Jvd1NlbGVjdGlvbiIsImNvbHVtbk9yZGVyIiwicm93U2VsZWN0aW9uIiwiZXhwYW5kYWJsZSIsIm90aGVydGFibGVQYXJhbXMiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsIm90aGVydHJlZVBhcmFtcyIsInRhYmxlUGFyYW1zIiwib25TZWxlY3QiLCJyb3dTZWxlY3Rpb25PblNlbGVjdCIsImJpbmQiLCJvblNlbGVjdEFsbCIsInJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsIiwiY29sdW1uV2lkdGgiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJkZWZhdWx0VmFsdWUiLCJ0ZW1wIiwic2VhcmNoIiwiZmllbGQiLCJkYXRhSW5kZXgiLCJ0aXRsZSIsImxhYmVsQ29sIiwid3JhcHBlckNvbCIsImVkaXRvciIsInJ1bGVzIiwic3BhbiIsImRpY3ROYW1lIiwidW5kZWZpbmVkIiwiY29sdW1uU2VhcmNoIiwiZmlsdGVyUHJvcHMiLCJ0ZW1wUHJvcCIsInN0eWxlIiwicmVuZGVyIiwiZ2V0VGV4dCIsImVsbGlwc2lzIiwiY29sdW1uU2hvdyIsInNlbGZCdXR0b25zIiwic2hvd0Zvcm0iLCJkZWxldGUzIiwiQXJyYXkiLCJpc0FycmF5IiwiYWxpZ24iLCJ0ZXh0QWxpZ24iLCJ3aWR0aCIsImZpeGVkIiwicmVuZGVyQ2xvdW1uQnV0dG9uIiwicmVhY29yZCIsInNlYXJjaEZsYWciLCJ0b29sRmxhZyIsInBhZ2luYXRpb24iLCJzY3JvbGwiLCJ4IiwidGFibGVUb29sIiwicGFnZVRpdGxlIiwiZGlzcGxheSIsInRyZWVTZWxlY3QiLCJvblJlc2V0Iiwic2VhcmNoRm9ybVByb3BzIiwicmVuZGVyVG9vbEJ1dHRvbnMiLCJ0b29sYmFyIiwidG9vbHMiLCJleHBhbmRJY29uIiwiZXhwYW5kZWQiLCJvbkV4cGFuZCIsImUiLCJvblRvb2xDbGljayIsIm9uUmVmcmVzaCIsInRhYmxlUmVsb2FkIiwib25TdWJtaXQiLCJvbkhpZGVGb3JtIiwib25Gb3JtQ2hhbmdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtBQVAsSUFBZ0JDLGFBQWhCLFFBQWdELE9BQWhEO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixrQkFBbEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLGlCQUFqQjtBQUVBLE9BQU9DLE1BQVAsTUFBbUIsbUJBQW5CO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixrQkFBbEI7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLG9CQUFwQjtBQUNBLE9BQU9DLE9BQVAsTUFBb0Isb0JBQXBCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQiw0QkFBakI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLGlCQUF6QjtBQUNBLE9BQU9DLFVBQVAsTUFBdUIsUUFBdkI7QUFDQSxPQUFPQyxHQUFQLE1BQWdCLFlBQWhCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixxQkFBbkI7QUFHQSxTQUFTQyxLQUFULFFBQXNCLHVCQUF0QjtBQUNBLFNBQ0VDLFlBREYsRUFFRUMsV0FGRixFQUdFQyxZQUhGLEVBSUVDLGFBSkYsRUFLRUMsWUFMRixFQU1FQyxnQkFORixRQU9PLG1CQVBQO0FBUUEsU0FBU0MsT0FBVCxRQUFpQyxhQUFqQztBQUNBLE9BQU9DLE9BQVAsTUFBb0IsYUFBcEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLFNBQWpCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixjQUFu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QUFBLFlBQVksRUFBRXJELFlBUGhCO0FBUUUsUUFBQSxVQUFVLEVBQUUsS0FBS2xLLEtBQUwsQ0FBV3dOLFVBUnpCO0FBU0UsUUFBQSxZQUFZLEVBQUUsS0FBS3hOLEtBQUwsQ0FBV3lOLFlBVDNCO0FBVUUsUUFBQSxRQUFRLEVBQUUsS0FBS3pOLEtBQUwsQ0FBV3VCLFFBQVgsSUFBdUIsTUFWbkM7QUFXRSxRQUFBLFdBQVcsRUFBRW1ILGVBWGY7QUFZRSxRQUFBLFVBQVUsb0JBQU9MLFNBQVA7QUFaWixRQS9GSixDQU5GLENBREY7QUF3SEQ7Ozs7RUF4MkJvQi9KLGE7O0FBMDJCdkIsZUFBZXlCLFFBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi4vLi4vYmFzZS90YWJsZVwiO1xyXG5pbXBvcnQgVHJlZSBmcm9tIFwiLi4vLi4vYmFzZS90cmVlXCI7XHJcbmltcG9ydCBGb3JtIGZyb20gXCIuLi8uLi9iYXNlL2Zvcm1cIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYmFzZS9idXR0b25cIjtcclxuaW1wb3J0IE1vZGFsIGZyb20gXCIuLi8uLi9iYXNlL21vZGFsXCI7XHJcbmltcG9ydCBQb3BvdmVyIGZyb20gXCIuLi8uLi9iYXNlL3BvcG92ZXJcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uLy4uL2Jhc2UvbWVzc2FnZVwiO1xyXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vLi4vYmFzZS9jb21tb24vSWNvbkZvbnRcIjtcclxuaW1wb3J0IHsgaWNvblR5cGUgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCBFZGl0b3JGb3JtIGZyb20gXCIuL0Zvcm1cIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IFJvdyBmcm9tIFwiLi4vLi4vYmFzZS9ncmlkL1Jvd1wiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBEb3duT3V0bGluZWQsXHJcbiAgRXllT3V0bGluZWQsXHJcbiAgRWRpdE91dGxpbmVkLFxyXG4gIFJpZ2h0T3V0bGluZWQsXHJcbiAgUGx1c091dGxpbmVkLFxyXG4gIEVsbGlwc2lzT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSBcIm5zYy1yZXF1ZXN0XCI7XHJcbmltcG9ydCBvbWl0IGZyb20gXCJvbWl0LmpzXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IElGb3JtUHJvcHMgfSBmcm9tIFwiLi4vLi4vYmFzZS9mb3JtL0Zvcm1cIjtcclxuaW1wb3J0IEhlYWRlclNlYXJjaCBmcm9tIFwiLi4vSGVhZGVyU2VhcmNoXCI7XHJcbmludGVyZmFjZSBUYWJsZVByb3BzIHtcclxuICBhY3Rpb25Db2x1bW4/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuaTjeS9nOWIl1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuui/h+a7pOaMiemSrlxyXG4gIHNob3dSb3dTZWxlY3Rpb24/OiBib29sZWFuOyAvL+aYr+WQpuihqOagvOWLvumAieWIl1xyXG4gIHBhZ2luYXRpb24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWIhumhtVxyXG4gIGNvbHVtbk9yZGVyPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrooajmoLzluo/liJdcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuaW50ZXJmYWNlIFRyZWVQcm9wcyB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuaQnOe0ouahhlxyXG4gIHNlYXJjaEtleT86IHN0cmluZzsgLy/mkJzntKJ2YWx1ZeWvueW6lOeahGtleVxyXG4gIHNlYXJjaEZpZWxkPzogc3RyaW5nOyAvL+afpeivouWvueW6lOeahGtleVxyXG4gIHRpdGxlQWxpYXM/OiBzdHJpbmc7IC8v5qCRdGl0bGXlr7nlupTnmoRrZXks6buY6K6kdGl0bGVcclxuICBub2RlUG9ycHM/OiBvYmplY3Q7XHJcbiAgcGFyYW50U2VsZWN0PzogYm9vbGVhbjtcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuaW50ZXJmYWNlIEZvcm1Qcm9wcyBleHRlbmRzIElGb3JtUHJvcHMge31cclxuaW50ZXJmYWNlIE5TQ0Jhc2VCYWdlUHJvcHMge1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWktOmDqOaQnOe0ouagj1xyXG4gIHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzOyAvL+ihqOagvOWPguaVsFxyXG4gIHRyZWVQcm9wcz86IFRyZWVQcm9wczsgLy/lt6bkvqfmoJHlj4LmlbBcclxuICBzdWJtaXRQYXJhbXM/OiBPYmplY3Q7IC8v5re75Yqg5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HZGF0YeS8oOmAklxyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBvblN1Ym1pdD86ICh2YWx1ZT86IGFueSwgbGFiZWw/OiBhbnkpID0+IHZvaWQ7XHJcbiAgY29sdW1uczogQXJyYXk8T2JqZWN0PjtcclxuICBzaG93TGVmdD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65bem5L6n55uu5b2V5qCRXHJcbiAgc2hvd1Rvb2xCdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuaMiemSruagj1xyXG4gIGVkaXRvckZvcm0/OiBib29sZWFuOyAvL+aYr+WQpumcgOimgeihqOWNleWKn+iDvSAsIOS4umZhbHNlIOe8lui+ke+8jOafpeeci++8jOaWsOWinuWKn+iDveWdh+S4jeWPr+eUqFxyXG4gIGRlbGV0ZVVybD86IHN0cmluZzsgLy/liKDpmaR1cmxcclxuICBvbkRlbGV0ZT86IChzZWxlY3RlZEtleXM/OiBBcnJheTxhbnk+KSA9PiB2b2lkOyAvL+WIoOmZpOWPguaVsO+8jOm7mOiupG1vdGhvZDpwb3N077yMIOWPguaVsOmAmui/h2lkc+aLvOaOpeS8oOmAkue7meWQjuWPsFxyXG4gIGRlbGV0ZVBhcmFtcz86IE9iamVjdDtcclxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBvblNlYXJjaD86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcclxuICBpbml0RGF0YT86IGFueTsgLy/liJ3lp4vljJblm57osIPlh73mlbDvvIzlnKhjb21wb25lbnREaWRNb3VudOS4reiwg+eUqFxyXG4gIGJ1dHRvbnM/OiBBcnJheTxzdHJpbmc+OyAvL+aMiemSrumbhuWQiCAgWydhZGQnLCdkZWxldGUnLCdzZWFyY2gnLCdlZGl0b3InXVxyXG4gIG9uU2hvd0Zvcm0/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25IaWRlRm9ybT86ICgpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25Gb3JtQ2hhbmdlPzogKGNoYW5nZWRWYWx1ZXM/OiBhbnksIGFsbFZhbHVlcz86IGFueSkgPT4gdm9pZDsgLy/ooajljZVvbkNoYW5nZeWbnuiwg1xyXG4gIGZvcm1UeXBlPzogXCJtb2RhbFwiIHwgXCJkcmF3ZXJcIjtcclxuICBmb3JtQ2hhbmdlVmFsaWQ/OiBib29sZWFuOyAvL+ihqOWNleagoemqjFxyXG4gIGNsYXNzTmFtZT86IGFueTtcclxuICB0b29sQnV0dG9uUG9zaXRpb24/OiBcInJpZ2h0XCIgfCBcImJ1dHRvbVwiO1xyXG4gIHBhZ2VUaXRsZT86IHN0cmluZyB8IFJlYWN0Tm9kZTtcclxuICBmb3JtUHJvcHM/OiBGb3JtUHJvcHM7XHJcbiAgYWN0aW9uUG9ycHM/OiB7IHRleHRBbGlnbj86IHN0cmluZzsgc2hvd0ljb24/OiBib29sZWFuOyB3aWR0aD86IG51bWJlciB9O1xyXG4gIHNlYXJjaEZvcm1Qcm9wcz86IHsgd3JhcHBlckNvbD86IGFueTsgbGFiZWxDb2w/OiBhbnkgfTtcclxuICBvblRyZWVTZWxlY3Q/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25DYWxsQmFja3M/OiB7XHJcbiAgICB0cmVlU2VsZWN0Q2FsbEJhY2s/OiBhbnk7XHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55O1xyXG4gIH07XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGRhdGVGb3JtYXQgPSB7fSBhcyBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IHsgc3RvcmVQcmVmaXggfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHR5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcImZvcm1UeXBlXCIgOiBcImZvcm1UeXBlXCJcclxuICAgICk7XHJcbiAgICB0eXBlID0gdHlwZT8uY29udGVudDtcclxuICAgIGxldCBzaXplID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBzaXplID0gc2l6ZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHR5cGU6IFwiYWRkXCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICB0cmVlU2VsZWN0ZWRLZXk6IFwiXCIsXHJcbiAgICAgIGV4cGFuZDogZmFsc2UsXHJcbiAgICAgIGZvcm1UeXBlOiB0eXBlIHx8IFwibW9kYWxcIixcclxuICAgICAgdGFibGVTaXplOiBzaXplIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IGluaXREYXRhIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaW5pdERhdGEgJiYgaW5pdERhdGEoKTtcclxuICB9XHJcblxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCA9IChjaGVja2VkVHJlZUtleXM6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHZhbHVlID0geyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCwgZGVwdElkOiBjaGVja2VkVHJlZUtleXNbMF0gfTtcclxuICAgIGlmICh0aGlzLnByb3BzLm9uU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25TZWFyY2godmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy50YWJsZUxvYWQodmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIC8v5pi+56S66KGo5Y2VXHJcbiAgc2hvd0Zvcm0odmFsdWU/OiBhbnksIGVkaXRvcmZsYWcgPSBcImFkZFwiKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5zaG93KHZhbHVlLCBlZGl0b3JmbGFnKTtcclxuICB9XHJcblxyXG4gIC8v5YWz6Zet6KGo5Y2VXHJcbiAgaGlkZUZvcm0oKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5oaWRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5zZXRMb2FkaW5nKGxvYWRpbmcpO1xyXG4gIH1cclxuXHJcbiAgLy/mibnph4/liKDpmaRcclxuICBvbkRlbGV0ZSgpIHtcclxuICAgIGNvbnN0IHsgZGVsZXRlVXJsLCBvbkRlbGV0ZSwgZGVsZXRlUGFyYW1zIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIG1lc3NhZ2Uud2FybmluZyhcIuivt+mAieaLqeimgeWIoOmZpOeahOaVsOaNru+8gVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG9uRGVsZXRlKSB7XHJcbiAgICAgIG9uRGVsZXRlICYmIG9uRGVsZXRlKHNlbGVjdGVkUm93S2V5cyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZGVsZXRlVXJsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVybOS4jeiDveS4uuepuu+8gVwiKTtcclxuICAgIH1cclxuICAgIE1vZGFsLmNvbmZpcm0oe1xyXG4gICAgICBjb250ZW50OiBcIuaYr+WQpuehruiupOWIoOmZpOaJgOmAiemhue+8n1wiLFxyXG4gICAgICAvLyBjZW50ZXJlZDp0cnVlLFxyXG4gICAgICBvbk9rOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhcmFtcyA9IHtcclxuICAgICAgICAgIG1ldGhvZDogXCJwb3N0XCIsXHJcbiAgICAgICAgICBwYXJhbXM6IHsgaWRzOiBzZWxlY3RlZFJvd0tleXMuam9pbigpIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgcmVxdWVzdFBhcmFtcyA9IHt9IGFzIGFueTtcclxuICAgICAgICBpZiAoZGVmYXVsdFBhcmFtcykge1xyXG4gICAgICAgICAgcmVxdWVzdFBhcmFtcyA9IHsgLi4uZGVsZXRlUGFyYW1zIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcXVlc3RQYXJhbXMgPSB7IC4uLmRlZmF1bHRQYXJhbXMgfTtcclxuICAgICAgICByZXF1ZXN0KGRlbGV0ZVVybCwge1xyXG4gICAgICAgICAgLi4ucmVxdWVzdFBhcmFtcyxcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlczogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5zdWNjZXNzKFwi5Yig6Zmk5oiQ5Yqf77yBXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZXJyb3IoXCLliKDpmaTlpLHotKXvvIFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiLCBlcnJvcik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICB0YWJsZUxvYWQocGFyYW1zOiBhbnkpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUubG9hZCh7XHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8v5p+l6K+iXHJcbiAgb25TZWFyY2gocGFyYW1zKSB7XHJcbiAgICBjb25zdCB7IG9uU2VhcmNoLCBvbkNhbGxCYWNrcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaCh7IC4uLnBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGFibGVMb2FkKHsgLi4ucGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgIG9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrICYmXHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrLCB0aGlzLCBbcGFyYW1zXSk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQocGFyYW1zID0ge30sIGF1dG9Mb2FkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5yZWxvYWQoe1xyXG4gICAgICBjYWxsYmFjazogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGF1dG9Mb2FkICYmXHJcbiAgICAgICAgICByZXM/LmRhdGE/LnJlY29yZHM/Lmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlICE9PSAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLnJlbG9hZCh7XHJcbiAgICAgICAgICAgIHBhcmFtczogeyBjdXJyZW50OiAxLCAuLi5wYXJhbXMgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdChyZWNvcmQ6IGFueSwgc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgIGxldCBuZXdTZWxlY3RlZFJvd0RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXNdO1xyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5uZXdTZWxlY3RlZFJvd0tleXMsIHJlY29yZFtyb3dLZXldXTtcclxuICAgICAgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5uZXdTZWxlY3RlZFJvd0RhdGFzLCByZWNvcmRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW1bcm93S2V5XSA9PT0gcmVjb3JkW3Jvd0tleV0pIHtcclxuICAgICAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogbmV3U2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBuZXdTZWxlY3RlZFJvd0RhdGFzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsKHNlbGVjdGVkOiBhbnksIHNlbGVjdGVkUm93czogYW55LCBjaGFuZ2VSb3dzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzLCBzZWxlY3RlZFJvd0RhdGFzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgbmV3aWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBuZXdkYXRhczogYW55ID0gW107XHJcbiAgICBpZiAoY2hhbmdlUm93cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjaGFuZ2VJZHMgPSBjaGFuZ2VSb3dzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3Jvd0tleV0pO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzLCAuLi5jaGFuZ2VJZHNdO1xyXG4gICAgICAgIG5ld2RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXMsIC4uLmNoYW5nZVJvd3NdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUlkcy5pbmRleE9mKGl0ZW0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld2lkcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGVjdGVkUm93RGF0YXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtW3Jvd0tleV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld2RhdGFzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld2lkcyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFsuLi5uZXdpZHNdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbLi4ubmV3ZGF0YXNdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cztcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dEYXRhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93RGF0YXM7XHJcbiAgfVxyXG4gIHJlc2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93S2V5cyhkYXRhKSB7XHJcbiAgICBjb25zdCB7IGN1cnJlbnRQYWdlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogZGF0YSxcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzU3RvcmU6IHsgW2N1cnJlbnRQYWdlXTogZGF0YSB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93RGF0YXMoZGF0YSkge1xyXG4gICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBkYXRhLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzU3RvcmU6IHsgW2N1cnJlbnRQYWdlXTogZGF0YSB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlYXJjaFZhbHVlcygpIHtcclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgIHJldHVybiB7IC4uLmZyb21WYWx1ZSwgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfTtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuRGF0YShkYXRhLCBrZXlzID0gW10pIHtcclxuICAgIGNvbnN0IHsgdGFibGVQcm9wcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IHJlc0tleSA9IFtdO1xyXG4gICAgaWYgKGRhdGEuY2hpbGROb2Rlcykge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGROb2RlcztcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5EYXRhKGl0ZW0uY2hpbGROb2Rlcywga2V5cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBpdGVtW3Jvd0tleV1dO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXNLZXkgPSBbLi4ua2V5cywgZGF0YVtyb3dLZXldXTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNLZXk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJUb29sQnV0dG9ucyh0b29sYnV0dG9uczogYW55LCBtYXJnaW5mbGFnID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGZsYWcgPSB0b29sYnV0dG9ucy5sZW5ndGggPiA1O1xyXG4gICAgY29uc3QgeyBzaG93U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPSBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiA0KSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJ0b29sLWJ1dHRvbnNcIiksIHtcclxuICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0b29sLWJ1dHRvbnMtbWFyZ2luXCIpXTogIXNob3dTZWFyY2ggfHwgbWFyZ2luZmxhZyxcclxuICAgICAgICB9KX1cclxuICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAwIH19XHJcbiAgICAgID5cclxuICAgICAgICB7dG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e2luZGV4fT57aXRlbX08L2Rpdj47XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wLWJveCddfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAg5pu05aSaIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtpbmRleH0+e2l0ZW19PC9kaXY+O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zOiBhbnksIHJlY29yZDogYW55KSB7XHJcbiAgICBjb25zdCB7IGVkaXRvckZvcm0gPSB0cnVlLCBidXR0b25zID0gW10sIGFjdGlvblBvcnBzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGNvbnN0IG5ld0J1dHRvbnMgPSBbXTtcclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUG9ycHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgY29sdW1uQnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgcmVjb3JkU2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChyZWNvcmRTaG93KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgIGlmIChldmFsKHJlY29yZFNob3cpKSB7XHJcbiAgICAgICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgY29uc3Qgc2hvdyA9IHJlY29yZFNob3cocmVjb3JkKTtcclxuICAgICAgICAgIHNob3cgJiYgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgZmxhZyA9IG5ld0J1dHRvbnMubGVuZ3RoID4gMztcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJlZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC1pdGVtXCIpXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT57aWNvbn08L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAzKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpLCB7XHJcbiAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yX2ZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAzKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICB0cmlnZ2VyPXtbXCJjbGlja1wiXX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wJ119XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpfT5cclxuICAgICAgICAgICAgICAgIDxFbGxpcHNpc091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJlZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yX2ZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCBvYmo6IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWFyY2hLZXkgPSBcImtleVwiLFxyXG4gICAgICBzZWFyY2hGaWVsZCA9IFwiXCIsXHJcbiAgICAgIHBhcmFudFNlbGVjdCA9IHRydWUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcy50cmVlUHJvcHM7XHJcbiAgICBjb25zdCB7IHRyZWVTZWxlY3RlZEtleSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHNlbGVjdGVkTm9kZXMgfSA9IG9iajtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgaWYgKHBhcmFudFNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVzWzBdLmlzTGVhZiB8fCAhc2VsZWN0ZWROb2Rlc1swXS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMub25UcmVlU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25UcmVlU2VsZWN0KHNlbGVjdGVkS2V5cywgb2JqKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpIHx8IHt9O1xyXG4gICAgc2VhcmNoRmllbGQgJiYgdGhpcy50YWJsZUxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2sgJiZcclxuICAgICAgdXRpbHMuY2FsbGJhY2sodGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrLCB0aGlzLCBbXHJcbiAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgIG9iaixcclxuICAgICAgXSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VhcmNoKCkge1xyXG4gICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICB9XHJcbiAgZ2V0VGV4dChwcm9wcywgdGV4dCkge1xyXG4gICAgbGV0IG5ld1RleHQgPSB0ZXh0O1xyXG4gICAgaWYgKHByb3BzPy5kYXRhICYmIHByb3BzPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBkYXRhID0gcHJvcHMuZGF0YTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkYXRhW2ldLnZhbHVlID09IHRleHQpIHtcclxuICAgICAgICAgIG5ld1RleHQgPSBkYXRhW2ldLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1RleHQ7XHJcbiAgfVxyXG4gIHNldFRhYmxlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIHNldFRyZWVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZS5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZEtleSA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgbGV0IHJlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIHNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBzZWxlY3RlZFtrZXldO1xyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzID0gWy4uLnJlcywgLi4ua2V5c107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNvbHVtbnMgPSBbXSxcclxuICAgICAgc2hvd1NlYXJjaCA9IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuLFxyXG4gICAgICBzdWJtaXRVcmwgPSBcIlwiLFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICAgIHRyZWVQcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUHJvcHMgPSB7fSxcclxuICAgICAgc2hvd0xlZnQgPSBmYWxzZSxcclxuICAgICAgc3VibWl0UGFyYW1zID0ge30sXHJcbiAgICAgIHNob3dUb29sQnV0dG9uID0gdHJ1ZSxcclxuICAgICAgYnV0dG9ucyA9IFtdLFxyXG4gICAgICBlZGl0b3JGb3JtID0gdHJ1ZSxcclxuICAgICAgb25TaG93Rm9ybSxcclxuICAgICAgZm9ybUNoYW5nZVZhbGlkID0gdHJ1ZSxcclxuICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPSBcImJ1dHRvbVwiLFxyXG4gICAgICBhY3Rpb25Qb3JwcyxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzdG9yZSA9IHt9LFxyXG4gICAgICBmaWx0ZXJDb2x1bW4gPSB0cnVlLFxyXG4gICAgICBhY3Rpb25Db2x1bW4gPSB0cnVlLFxyXG4gICAgICBzaG93Um93U2VsZWN0aW9uID0gdHJ1ZSxcclxuICAgICAgY29sdW1uT3JkZXIgPSB0cnVlLFxyXG4gICAgICByb3dTZWxlY3Rpb24gPSB7fSxcclxuICAgICAgZXhwYW5kYWJsZSA9IHt9LFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zXHJcbiAgICB9ID0gdGFibGVQcm9wcztcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuXHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7IGZpbHRlckNvbHVtbiwgc3RvcmUsIC4uLm90aGVydGFibGVQYXJhbXMgfSBhcyBhbnk7XHJcbiAgICBpZiAoc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgICByb3dTZWxlY3Rpb246IHtcclxuICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgICAgICBvblNlbGVjdDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgb25TZWxlY3RBbGw6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3RBbGwuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGNvbHVtbldpZHRoOiA0MCxcclxuICAgICAgICAgIC4uLnJvd1NlbGVjdGlvbixcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IHRhYmxlQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGNvbHVtbkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICBpZiAodGVtcC5zZWFyY2ggPT09IHRydWUgfHwgdGVtcC5zZWFyY2g/LnNob3cgPT09IHRydWUpIHtcclxuICAgICAgICBzZWFyY2hGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC5zZWFyY2g/LmxhYmVsIHx8IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICAgIGxhYmVsQ29sOiB0ZW1wLnNlYXJjaD8ubGFiZWxDb2wsXHJcbiAgICAgICAgICB3cmFwcGVyQ29sOiB0ZW1wLnNlYXJjaD8ud3JhcHBlckNvbCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC5zZWFyY2g7XHJcbiAgICAgIHRlbXAuZWRpdG9yICE9PSBmYWxzZSAmJlxyXG4gICAgICAgIGVkaXRvckZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAucnVsZXMgPyB0ZW1wLnJ1bGVzIDogW10sXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBzcGFuOiB0ZW1wLnNwYW4sXHJcbiAgICAgICAgICBkaWN0TmFtZTogdGVtcC5kaWN0TmFtZSxcclxuICAgICAgICAgIHByb3BzOiBvbWl0KHsgLi4udGVtcC5wcm9wcyB9LCBbXCJkZWZhdWx0VmFsdWVcIiwgXCJ2YWx1ZVwiXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gbnVsbFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleDtcclxuICAgICAgICBkZWZhdWx0VmFsdWVbbmFtZV0gPSB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucnVsZXM7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNwYW47XHJcbiAgICAgIGlmICh0ZW1wLmNvbHVtblNlYXJjaCkge1xyXG4gICAgICAgIHRlbXAuZmlsdGVyUHJvcHMgPSB7XHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnR5cGU7XHJcbiAgICAgIGxldCB0ZW1wUHJvcCA9IHsgLi4udGVtcC5wcm9wcyB9O1xyXG4gICAgICBpZiAodGVtcC5zdHlsZSkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAge3RleHQgIT09IFwiXCIgJiYgdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB1bmRlZmluZWQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC1iYWNrXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wID0ge1xyXG4gICAgICAgICAgcmVuZGVyOiAodGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Pnt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucHJvcHM7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUG9ycHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGVkaXRvckZvcm0gPT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwic2VhcmNoXCIpID4gLTEpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhyZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImRldGFpbFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJkZXRhaWxcIik7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxFeWVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5p+l55yLXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChidXR0b25zLmluZGV4T2YoXCJlZGl0b3JcIikgPiAtMSkge1xyXG4gICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZWRpdG9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PEVkaXRPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg57yW6L6RXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiYWRkXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvblNob3dGb3JtIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgIG9uU2hvd0Zvcm0oKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5re75YqgXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZGVsZXRlXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzKX1cclxuICAgICAgICAgIGljb249ezxJY29uIHR5cGU9e2ljb25UeXBlLmRlbGV0ZTN9IC8+fVxyXG4gICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBhY3Rpb25Qb3Jwcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGFjdGlvblBvcnBzPy50ZXh0QWxpZ25cclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgIDogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYWN0aW9uUG9ycHM/LndpZHRoXHJcbiAgICAgICAgICA/IGFjdGlvblBvcnBzPy53aWR0aFxyXG4gICAgICAgICAgOiBiYXNlQWN0aW9uQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgIDogMjAwLFxyXG4gICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgZWxsaXBzaXM6IHRydWUsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIGlmIChjb2x1bW5PcmRlcilcclxuICAgICAgdGFibGVDb2x1bW4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwi5bqP5Y+3XCIsXHJcbiAgICAgICAgICB3aWR0aDogODAsXHJcbiAgICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQsIHJlYWNvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8PntpbmRleCArIDF9PC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRhYmxlQ29sdW1uLFxyXG4gICAgICBdO1xyXG4gICAgbGV0IHNlYXJjaEZsYWcgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgdG9vbEZsYWcgPSBzaG93VG9vbEJ1dHRvbiAmJiBzZWxmQnV0dG9ucy5sZW5ndGggPiAwO1xyXG4gICAgaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsID0gdGFibGVQYXJhbXMuc2Nyb2xsO1xyXG4gICAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgICBzY3JvbGw6IHsgeDogXCJtYXgtY29udGVudFwiLCAuLi5zY3JvbGwgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2VcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2UtdGl0bGVcIikpfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMucGFnZVRpdGxlfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJwYWdlLXBhbmVcIikpfVxyXG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7c2hvd0xlZnQgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibGVmdFwiKX0+XHJcbiAgICAgICAgICAgICAgPFRyZWVcclxuICAgICAgICAgICAgICAgIHN0b3JlPXt7IC4uLnRyZWVTdG9yZSB9fVxyXG4gICAgICAgICAgICAgICAgc2hvd0ljb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgY2hlY2thYmxlPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e3RyZWVTZWFyY2h9XHJcbiAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy50cmVlU2VsZWN0LmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXM9e1t0aGlzLnN0YXRlLnRyZWVTZWxlY3RlZEtleV19XHJcbiAgICAgICAgICAgICAgICB0aXRsZUFsaWFzPXt0aXRsZUFsaWFzfVxyXG4gICAgICAgICAgICAgICAgey4uLm90aGVydHJlZVBhcmFtc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInJpZ2h0XCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5vLWxlZnQtcmlnaHRcIildOiAhc2hvd0xlZnQsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgICA8SGVhZGVyU2VhcmNoXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hGb3Jtcz17c2VhcmNoRm9ybXN9XHJcbiAgICAgICAgICAgICAgICB0b29sQnV0dG9uUG9zaXRpb249e3Rvb2xCdXR0b25Qb3NpdGlvbn1cclxuICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICBvblJlc2V0PXt0aGlzLnByb3BzLm9uUmVzZXR9XHJcbiAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2VhcmNoUmVmfVxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRm9ybVByb3BzPXt0aGlzLnByb3BzLnNlYXJjaEZvcm1Qcm9wc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAge3Nob3dUb29sQnV0dG9uICYmXHJcbiAgICAgICAgICAgICAgc2VsZkJ1dHRvbnMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbiA9PSBcImJ1dHRvbVwiICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUb29sQnV0dG9ucyhzZWxmQnV0dG9ucywgc2VhcmNoRm9ybXMubGVuZ3RoID09IDApfVxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidGFibGVcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0YWJsZS10b3BcIildOlxyXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoRmxhZyAmJiAhdG9vbEZsYWcpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlUHJvcHMudG9vbGJhciA9PSBmYWxzZSB8fFxyXG4gICAgICAgICAgICAgICAgICB0YWJsZVByb3BzLnRvb2xiYXI/LnRvb2xzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICB0YWJsZVRvb2w/LnRvb2xzPy5sZW5ndGggPT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSaWdodE91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIGNvbHVtbk9yZGVyPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gcGFnaW5hdGlvbi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgdG9vbGJhcj17e1xyXG4gICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAge2VkaXRvckZvcm0gJiYgKFxyXG4gICAgICAgICAgICA8RWRpdG9yRm9ybVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgICAgY2FsbEJhY2s9e3RoaXMudGFibGVSZWxvYWQuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICBmb3JtUHJvcHM9e2VkaXRvckZvcm1zfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFVybD17c3VibWl0VXJsfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFBhcmFtcz17c3VibWl0UGFyYW1zfVxyXG4gICAgICAgICAgICAgIG9uU3VibWl0PXt0aGlzLnByb3BzLm9uU3VibWl0fVxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxyXG4gICAgICAgICAgICAgIG9uSGlkZUZvcm09e3RoaXMucHJvcHMub25IaWRlRm9ybX1cclxuICAgICAgICAgICAgICBvbkZvcm1DaGFuZ2U9e3RoaXMucHJvcHMub25Gb3JtQ2hhbmdlfVxyXG4gICAgICAgICAgICAgIGZvcm1UeXBlPXt0aGlzLnByb3BzLmZvcm1UeXBlIHx8IFwiYXV0b1wifVxyXG4gICAgICAgICAgICAgIGNoYW5nZVZhbGlkPXtmb3JtQ2hhbmdlVmFsaWR9XHJcbiAgICAgICAgICAgICAgb3RoZXJQcm9wcz17eyAuLi5mb3JtUHJvcHMgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgQmFzZVBhZ2U7XHJcbiJdfQ==
|
|
979
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsIlRhYmxlIiwiVHJlZSIsIkJ1dHRvbiIsIk1vZGFsIiwiUG9wb3ZlciIsIm1lc3NhZ2UiLCJJY29uIiwiaWNvblR5cGUiLCJFZGl0b3JGb3JtIiwiY2xzIiwic3R5bGVzIiwidXRpbHMiLCJEb3duT3V0bGluZWQiLCJFeWVPdXRsaW5lZCIsIkVkaXRPdXRsaW5lZCIsIlJpZ2h0T3V0bGluZWQiLCJQbHVzT3V0bGluZWQiLCJFbGxpcHNpc091dGxpbmVkIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJvbWl0IiwiY29uZmlnIiwiZ2V0U3RvcmFnZSIsIkhlYWRlclNlYXJjaCIsIkJhc2VQYWdlIiwicHJvcHMiLCJjcmVhdGVSZWYiLCJjaGVja2VkVHJlZUtleXMiLCJzdGF0ZSIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJ2YWx1ZSIsImRlcHRJZCIsIm9uU2VhcmNoIiwic2VsZWN0ZWQiLCJyZXMiLCJrZXkiLCJrZXlzIiwibGVuZ3RoIiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJ0cmVlU2VhcmNoUHJhbXMiLCJpbml0RGF0YSIsInBhcmFtcyIsImNhbGxCYWNrIiwic2VhcmNoUmVmIiwiY3VycmVudCIsInNldFNlYXJjaFBhcmFtcyIsImVkaXRvcmZsYWciLCJlZGl0b3JSZWYiLCJzaG93IiwiaGlkZUZvcm0iLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImRlbGV0ZVVybCIsIm9uRGVsZXRlIiwiZGVsZXRlUGFyYW1zIiwid2FybmluZyIsIkVycm9yIiwiY29uZmlybSIsIm9uT2siLCJkZWZhdWx0UGFyYW1zIiwibWV0aG9kIiwiaWRzIiwiam9pbiIsInJlcXVlc3RQYXJhbXMiLCJ0aGVuIiwiY29kZSIsInN1Y2Nlc3MiLCJlcnJvciIsImNhdGNoIiwiY29uc29sZSIsImxvZyIsInRhYmxlUmVmIiwic3RvcmUiLCJsb2FkIiwib25DYWxsQmFja3MiLCJ0YWJsZUxvYWQiLCJvblNlYXJjaENhbGxCYWNrIiwiY2FsbGJhY2siLCJhdXRvTG9hZCIsInJlbG9hZCIsImRhdGEiLCJyZWNvcmRzIiwiY3VycmVudFBhZ2UiLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJmcm9tVmFsdWUiLCJnZXRTZWFyY2hWYWx1ZXMiLCJ0YWJsZVByb3BzIiwicm93S2V5IiwicmVzS2V5IiwiY2hpbGROb2RlcyIsImNoaWxkcmVuIiwibWFwIiwiaXRlbSIsImluZGV4IiwiZ2V0Q2hpbGRyZW5EYXRhIiwidG9vbGJ1dHRvbnMiLCJtYXJnaW5mbGFnIiwiZmxhZyIsInNob3dTZWFyY2giLCJwYWdlVHlwZSIsIm9uQ2xpY2siLCJpY29uIiwibWFyZ2luTGVmdCIsImNvbHVtbkJ1dHRvbnMiLCJyZWNvcmQiLCJlZGl0b3JGb3JtIiwiYnV0dG9ucyIsImFjdGlvblBvcnBzIiwiYmFzZUFjdGlvbkNvbHVtbiIsIm5ld0J1dHRvbnMiLCJzaG93SWNvbiIsInJlY29yZFNob3ciLCJldmFsIiwicHVzaCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsImtleXdvcmQiLCJ0cmVlUHJvcHMiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwic2V0U3RhdGUiLCJpc0xlYWYiLCJvblRyZWVTZWxlY3QiLCJ0cmVlU2VsZWN0Q2FsbEJhY2siLCJyZXNldEZpZWxkcyIsInRleHQiLCJuZXdUZXh0IiwiaSIsImxhYmVsIiwic2V0RGF0YSIsInRyZWVSZWYiLCJjb2x1bW5zIiwic3VibWl0VXJsIiwiZm9ybVByb3BzIiwic2hvd0xlZnQiLCJzdWJtaXRQYXJhbXMiLCJzaG93VG9vbEJ1dHRvbiIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJjbGFzc05hbWUiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJmaWx0ZXJDb2x1bW4iLCJhY3Rpb25Db2x1bW4iLCJzaG93Um93U2VsZWN0aW9uIiwiY29sdW1uT3JkZXIiLCJyb3dTZWxlY3Rpb24iLCJleHBhbmRhYmxlIiwib3RoZXJ0YWJsZVBhcmFtcyIsInRyZWVTdG9yZSIsInRyZWVTZWFyY2giLCJ0aXRsZUFsaWFzIiwib3RoZXJ0cmVlUGFyYW1zIiwidGFibGVQYXJhbXMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJkZWZhdWx0VmFsdWUiLCJ0ZW1wIiwic2VhcmNoIiwiZmllbGQiLCJkYXRhSW5kZXgiLCJ0aXRsZSIsImxhYmVsQ29sIiwid3JhcHBlckNvbCIsImVkaXRvciIsInJ1bGVzIiwic3BhbiIsImRpY3ROYW1lIiwidW5kZWZpbmVkIiwiY29sdW1uU2VhcmNoIiwiZmlsdGVyUHJvcHMiLCJ0ZW1wUHJvcCIsInN0eWxlIiwicmVuZGVyIiwiZ2V0VGV4dCIsImVsbGlwc2lzIiwiY29sdW1uU2hvdyIsInNlbGZCdXR0b25zIiwiaW5kZXhPZiIsInNob3dGb3JtIiwiYmluZCIsImRlbGV0ZTMiLCJBcnJheSIsImlzQXJyYXkiLCJhbGlnbiIsInRleHRBbGlnbiIsIndpZHRoIiwiZml4ZWQiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJyZWFjb3JkIiwic2VhcmNoRmxhZyIsInRvb2xGbGFnIiwicGFnaW5hdGlvbiIsInNjcm9sbCIsIngiLCJ0YWJsZVRvb2wiLCJwYWdlVGl0bGUiLCJkaXNwbGF5IiwidHJlZVNlbGVjdCIsIm9uUmVzZXQiLCJzZWFyY2hGb3JtUHJvcHMiLCJyZW5kZXJUb29sQnV0dG9ucyIsInRvb2xiYXIiLCJ0b29scyIsImV4cGFuZEljb24iLCJleHBhbmRlZCIsIm9uRXhwYW5kIiwiZSIsIm9uVG9vbENsaWNrIiwib25SZWZyZXNoIiwidGFibGVSZWxvYWQiLCJvblN1Ym1pdCIsIm9uSGlkZUZvcm0iLCJvbkZvcm1DaGFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUFnQkMsYUFBaEIsUUFBZ0QsT0FBaEQ7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLGtCQUFsQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsaUJBQWpCO0FBRUEsT0FBT0MsTUFBUCxNQUFtQixtQkFBbkI7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLGtCQUFsQjtBQUNBLE9BQU9DLE9BQVAsTUFBb0Isb0JBQXBCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixvQkFBcEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLDRCQUFqQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsaUJBQXpCO0FBQ0EsT0FBT0MsVUFBUCxNQUF1QixRQUF2QjtBQUNBLE9BQU9DLEdBQVAsTUFBZ0IsWUFBaEI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLHFCQUFuQjtBQUdBLFNBQVNDLEtBQVQsUUFBc0IsdUJBQXRCO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxXQUZGLEVBR0VDLFlBSEYsRUFJRUMsYUFKRixFQUtFQyxZQUxGLEVBTUVDLGdCQU5GLFFBT08sbUJBUFA7QUFRQSxTQUFTQyxPQUFULFFBQWlDLGFBQWpDO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixhQUFwQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsU0FBakI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLGNBQW5CO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixtQkFBM0I7QUFFQSxPQUFPQyxZQUFQLE1BQXlCLGlCQUF6Qjs7SUEwRE1DLFE7Ozs7O0FBTUosb0JBQVlDLEtBQVosRUFBd0I7QUFBQTs7QUFBQTs7QUFBQTs7QUFDdEIsOEJBQU1BLEtBQU47O0FBRHNCLDRFQUxiM0IsS0FBSyxDQUFDNEIsU0FBTixFQUthOztBQUFBLDJFQUpk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eUIsUUFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9iYXNlL3RhYmxlXCI7XHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi9iYXNlL3RyZWVcIjtcclxuaW1wb3J0IEZvcm0gZnJvbSBcIi4uLy4uL2Jhc2UvZm9ybVwiO1xyXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi8uLi9iYXNlL2J1dHRvblwiO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uL2Jhc2UvbW9kYWxcIjtcclxuaW1wb3J0IFBvcG92ZXIgZnJvbSBcIi4uLy4uL2Jhc2UvcG9wb3ZlclwiO1xyXG5pbXBvcnQgbWVzc2FnZSBmcm9tIFwiLi4vLi4vYmFzZS9tZXNzYWdlXCI7XHJcbmltcG9ydCBJY29uIGZyb20gXCIuLi8uLi9iYXNlL2NvbW1vbi9JY29uRm9udFwiO1xyXG5pbXBvcnQgeyBpY29uVHlwZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IEVkaXRvckZvcm0gZnJvbSBcIi4vRm9ybVwiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgUm93IGZyb20gXCIuLi8uLi9iYXNlL2dyaWQvUm93XCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgRWxsaXBzaXNPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IG9taXQgZnJvbSBcIm9taXQuanNcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgSUZvcm1Qcm9wcyB9IGZyb20gXCIuLi8uLi9iYXNlL2Zvcm0vRm9ybVwiO1xyXG5pbXBvcnQgSGVhZGVyU2VhcmNoIGZyb20gXCIuLi9IZWFkZXJTZWFyY2hcIjtcclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66L+H5ruk5oyJ6ZKuXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm6KGo5qC85Yu+6YCJ5YiXXHJcbiAgcGFnaW5hdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65YiG6aG1XHJcbiAgY29sdW1uT3JkZXI/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuihqOagvOW6j+WIl1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgVHJlZVByb3BzIHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pCc57Si5qGGXHJcbiAgc2VhcmNoS2V5Pzogc3RyaW5nOyAvL+aQnOe0onZhbHVl5a+55bqU55qEa2V5XHJcbiAgc2VhcmNoRmllbGQ/OiBzdHJpbmc7IC8v5p+l6K+i5a+55bqU55qEa2V5XHJcbiAgdGl0bGVBbGlhcz86IHN0cmluZzsgLy/moJF0aXRsZeWvueW6lOeahGtleSzpu5jorqR0aXRsZVxyXG4gIG5vZGVQb3Jwcz86IG9iamVjdDtcclxuICBwYXJhbnRTZWxlY3Q/OiBib29sZWFuO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgRm9ybVByb3BzIGV4dGVuZHMgSUZvcm1Qcm9wcyB7fVxyXG5pbnRlcmZhY2UgTlNDQmFzZUJhZ2VQcm9wcyB7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65aS06YOo5pCc57Si5qCPXHJcbiAgdGFibGVQcm9wcz86IFRhYmxlUHJvcHM7IC8v6KGo5qC85Y+C5pWwXHJcbiAgdHJlZVByb3BzPzogVHJlZVByb3BzOyAvL+W3puS+p+agkeWPguaVsFxyXG4gIHN1Ym1pdFBhcmFtcz86IE9iamVjdDsgLy/mt7vliqDlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dkYXRh5Lyg6YCSXHJcbiAgc3VibWl0VXJsPzogc3RyaW5nO1xyXG4gIG9uU3VibWl0PzogKHZhbHVlPzogYW55LCBsYWJlbD86IGFueSkgPT4gdm9pZDtcclxuICBjb2x1bW5zOiBBcnJheTxPYmplY3Q+O1xyXG4gIHNob3dMZWZ0PzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlt6bkvqfnm67lvZXmoJFcclxuICBzaG93VG9vbEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65oyJ6ZKu5qCPXHJcbiAgZWRpdG9yRm9ybT86IGJvb2xlYW47IC8v5piv5ZCm6ZyA6KaB6KGo5Y2V5Yqf6IO9ICwg5Li6ZmFsc2Ug57yW6L6R77yM5p+l55yL77yM5paw5aKe5Yqf6IO95Z2H5LiN5Y+v55SoXHJcbiAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIG9uRGVsZXRlPzogKHNlbGVjdGVkS2V5cz86IEFycmF5PGFueT4pID0+IHZvaWQ7IC8v5Yig6Zmk5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HaWRz5ou85o6l5Lyg6YCS57uZ5ZCO5Y+wXHJcbiAgZGVsZXRlUGFyYW1zPzogT2JqZWN0O1xyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xyXG4gIGluaXREYXRhPzogYW55OyAvL+WIneWni+WMluWbnuiwg+WHveaVsO+8jOWcqGNvbXBvbmVudERpZE1vdW505Lit6LCD55SoXHJcbiAgYnV0dG9ucz86IEFycmF5PHN0cmluZz47IC8v5oyJ6ZKu6ZuG5ZCIICBbJ2FkZCcsJ2RlbGV0ZScsJ3NlYXJjaCcsJ2VkaXRvciddXHJcbiAgb25TaG93Rm9ybT86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkhpZGVGb3JtPzogKCkgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkZvcm1DaGFuZ2U/OiAoY2hhbmdlZFZhbHVlcz86IGFueSwgYWxsVmFsdWVzPzogYW55KSA9PiB2b2lkOyAvL+ihqOWNlW9uQ2hhbmdl5Zue6LCDXHJcbiAgZm9ybVR5cGU/OiBcIm1vZGFsXCIgfCBcImRyYXdlclwiO1xyXG4gIGZvcm1DaGFuZ2VWYWxpZD86IGJvb2xlYW47IC8v6KGo5Y2V5qCh6aqMXHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIHRvb2xCdXR0b25Qb3NpdGlvbj86IFwicmlnaHRcIiB8IFwiYnV0dG9tXCI7XHJcbiAgcGFnZVRpdGxlPzogc3RyaW5nIHwgUmVhY3ROb2RlO1xyXG4gIGZvcm1Qcm9wcz86IEZvcm1Qcm9wcztcclxuICBhY3Rpb25Qb3Jwcz86IHsgdGV4dEFsaWduPzogc3RyaW5nOyBzaG93SWNvbj86IGJvb2xlYW47IHdpZHRoPzogbnVtYmVyIH07XHJcbiAgc2VhcmNoRm9ybVByb3BzPzogeyB3cmFwcGVyQ29sPzogYW55OyBsYWJlbENvbD86IGFueSB9O1xyXG4gIG9uVHJlZVNlbGVjdD86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkNhbGxCYWNrcz86IHtcclxuICAgIHRyZWVTZWxlY3RDYWxsQmFjaz86IGFueTtcclxuICAgIG9uU2VhcmNoQ2FsbEJhY2s/OiBhbnk7XHJcbiAgfTtcclxufVxyXG5cclxuY2xhc3MgQmFzZVBhZ2UgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PE5TQ0Jhc2VCYWdlUHJvcHMsIGFueT4ge1xyXG4gIHRhYmxlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICB0cmVlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBzZWFyY2hSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGVkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgZGF0ZUZvcm1hdCA9IHt9IGFzIGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgeyBzdG9yZVByZWZpeCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwiZm9ybVR5cGVcIiA6IFwiZm9ybVR5cGVcIlxyXG4gICAgKTtcclxuICAgIHR5cGUgPSB0eXBlPy5jb250ZW50O1xyXG4gICAgbGV0IHNpemUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIHNpemUgPSBzaXplPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgdHlwZTogXCJhZGRcIixcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgICAgZXhwYW5kOiBmYWxzZSxcclxuICAgICAgZm9ybVR5cGU6IHR5cGUgfHwgXCJtb2RhbFwiLFxyXG4gICAgICB0YWJsZVNpemU6IHNpemUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpbml0RGF0YSAmJiBpbml0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoUGFyYW1zKHBhcmFtcywgY2FsbEJhY2spIHtcclxuICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnNldFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xyXG4gICAgY2FsbEJhY2sgJiYgY2FsbEJhY2socGFyYW1zKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ID0gKGNoZWNrZWRUcmVlS2V5czogYW55KSA9PiB7XHJcbiAgICBjb25zdCB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgdmFsdWUgPSB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50LCBkZXB0SWQ6IGNoZWNrZWRUcmVlS2V5c1swXSB9O1xyXG4gICAgaWYgKHRoaXMucHJvcHMub25TZWFyY2gpIHtcclxuICAgICAgdGhpcy5wcm9wcy5vblNlYXJjaCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgLy/mmL7npLrooajljZVcclxuICBzaG93Rm9ybSh2YWx1ZT86IGFueSwgZWRpdG9yZmxhZyA9IFwiYWRkXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNob3codmFsdWUsIGVkaXRvcmZsYWcpO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICAvL+aJuemHj+WIoOmZpFxyXG4gIG9uRGVsZXRlKCkge1xyXG4gICAgY29uc3QgeyBkZWxldGVVcmwsIG9uRGVsZXRlLCBkZWxldGVQYXJhbXMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGlmIChzZWxlY3RlZFJvd0tleXMubGVuZ3RoID09IDApIHtcclxuICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgb25EZWxldGUgJiYgb25EZWxldGUoc2VsZWN0ZWRSb3dLZXlzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFkZWxldGVVcmwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJs5LiN6IO95Li656m677yBXCIpO1xyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcclxuICAgICAgICAgIHBhcmFtczogeyBpZHM6IHNlbGVjdGVkUm93S2V5cy5qb2luKCkgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCByZXF1ZXN0UGFyYW1zID0ge30gYXMgYW55O1xyXG4gICAgICAgIGlmIChkZWZhdWx0UGFyYW1zKSB7XHJcbiAgICAgICAgICByZXF1ZXN0UGFyYW1zID0geyAuLi5kZWxldGVQYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWVzdFBhcmFtcyA9IHsgLi4uZGVmYXVsdFBhcmFtcyB9O1xyXG4gICAgICAgIHJlcXVlc3QoZGVsZXRlVXJsLCB7XHJcbiAgICAgICAgICAuLi5yZXF1ZXN0UGFyYW1zLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLnN1Y2Nlc3MoXCLliKDpmaTmiJDlip/vvIFcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy/mn6Xor6JcclxuICBvblNlYXJjaChwYXJhbXMpIHtcclxuICAgIGNvbnN0IHsgb25TZWFyY2gsIG9uQ2FsbEJhY2tzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKG9uU2VhcmNoKSB7XHJcbiAgICAgIG9uU2VhcmNoKHsgLi4ucGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJsZUxvYWQoeyAuLi5wYXJhbXMsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH0pO1xyXG4gICAgb25DYWxsQmFja3M/Lm9uU2VhcmNoQ2FsbEJhY2sgJiZcclxuICAgICAgdXRpbHMuY2FsbGJhY2sob25DYWxsQmFja3M/Lm9uU2VhcmNoQ2FsbEJhY2ssIHRoaXMsIFtwYXJhbXNdKTtcclxuICB9XHJcbiAgLy/ooajmoLzph43mlrDliqDovb1cclxuICB0YWJsZVJlbG9hZChwYXJhbXMgPSB7fSwgYXV0b0xvYWQgPSB0cnVlKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLnJlbG9hZCh7XHJcbiAgICAgIGNhbGxiYWNrOiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYXV0b0xvYWQgJiZcclxuICAgICAgICAgIHJlcz8uZGF0YT8ucmVjb3Jkcz8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgIT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUucmVsb2FkKHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7IGN1cnJlbnQ6IDEsIC4uLnBhcmFtcyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnJlc2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICByZXR1cm4geyAuLi5mcm9tVmFsdWUsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH07XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZHJlbkRhdGEoZGF0YSwga2V5cyA9IFtdKSB7XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCByZXNLZXkgPSBbXTtcclxuICAgIGlmIChkYXRhLmNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkTm9kZXM7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICB0aGlzLmdldENoaWxkcmVuRGF0YShpdGVtLmNoaWxkTm9kZXMsIGtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNLZXkgPSBbLi4ua2V5cywgaXRlbVtyb3dLZXldXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGRhdGFbcm93S2V5XV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzS2V5O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyVG9vbEJ1dHRvbnModG9vbGJ1dHRvbnM6IGFueSwgbWFyZ2luZmxhZyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBmbGFnID0gdG9vbGJ1dHRvbnMubGVuZ3RoID4gNTtcclxuICAgIGNvbnN0IHsgc2hvd1NlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gNCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidG9vbC1idXR0b25zXCIpLCB7XHJcbiAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwidG9vbC1idXR0b25zLW1hcmdpblwiKV06ICFzaG93U2VhcmNoIHx8IG1hcmdpbmZsYWcsXHJcbiAgICAgICAgfSl9XHJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMCB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3Rvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtpbmRleH0+e2l0ZW19PC9kaXY+O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXI9e1tcImNsaWNrXCJdfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcC1ib3gnXX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOabtOWkmiA8RG93bk91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17aW5kZXh9PntpdGVtfTwvZGl2PjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICByZW5kZXJDbG91bW5CdXR0b24oY29sdW1uQnV0dG9uczogYW55LCByZWNvcmQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBlZGl0b3JGb3JtID0gdHJ1ZSwgYnV0dG9ucyA9IFtdLCBhY3Rpb25Qb3JwcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBjb25zdCBuZXdCdXR0b25zID0gW107XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblBvcnBzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGNvbHVtbkJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHJlY29yZFNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAocmVjb3JkU2hvdykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICBpZiAoZXZhbChyZWNvcmRTaG93KSkge1xyXG4gICAgICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHNob3cgPSByZWNvcmRTaG93KHJlY29yZCk7XHJcbiAgICAgICAgICBzaG93ICYmIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGZsYWcgPSBuZXdCdXR0b25zLmxlbmd0aCA+IDM7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMykge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcImVkaXRvcl9maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gMykge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcCddfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKX0+XHJcbiAgICAgICAgICAgICAgICA8RWxsaXBzaXNPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcImVkaXRvcl9maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIC8v5qCR54K55Ye75LqL5Lu2XHJcbiAgdHJlZVNlbGVjdChzZWxlY3RlZEtleXM6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgIGxldCBrZXl3b3JkID0gXCJcIjtcclxuICAgIGNvbnN0IHtcclxuICAgICAgc2VhcmNoS2V5ID0gXCJrZXlcIixcclxuICAgICAgc2VhcmNoRmllbGQgPSBcIlwiLFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH0gPSBvYmo7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIGtleXdvcmQgPSBzZWxlY3RlZE5vZGVzWzBdLmRhdGFyZWYuYXR0cmlidXRlW3NlYXJjaEtleV07XHJcbiAgICAgIGlmIChwYXJhbnRTZWxlY3QpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7IFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2Rlc1swXS5pc0xlYWYgfHwgIXNlbGVjdGVkTm9kZXNbMF0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEtleXNbMF0gIT09IHRyZWVTZWxlY3RlZEtleSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHRyZWVTZWxlY3RlZEtleToga2V5d29yZCxcclxuICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLm9uVHJlZVNlbGVjdCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uVHJlZVNlbGVjdChzZWxlY3RlZEtleXMsIG9iaik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKSB8fCB7fTtcclxuICAgIHNlYXJjaEZpZWxkICYmIHRoaXMudGFibGVMb2FkKHsgLi4uZnJvbVZhbHVlLCBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0pO1xyXG4gICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrICYmXHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjaywgdGhpcywgW1xyXG4gICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICBvYmosXHJcbiAgICAgIF0pO1xyXG4gIH1cclxuICByZXNldFNlYXJjaCgpIHtcclxuICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnJlc2V0RmllbGRzKCk7XHJcbiAgfVxyXG4gIGdldFRleHQocHJvcHMsIHRleHQpIHtcclxuICAgIGxldCBuZXdUZXh0ID0gdGV4dDtcclxuICAgIGlmIChwcm9wcz8uZGF0YSAmJiBwcm9wcz8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZGF0YSA9IHByb3BzLmRhdGE7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZGF0YVtpXS52YWx1ZSA9PSB0ZXh0KSB7XHJcbiAgICAgICAgICBuZXdUZXh0ID0gZGF0YVtpXS5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdUZXh0O1xyXG4gIH1cclxuICBzZXRUYWJsZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBzZXRUcmVlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRyZWVSZWYuY3VycmVudD8uc3RvcmUuc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRLZXkgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgIGxldCByZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGtleSBpbiBzZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBrZXlzID0gc2VsZWN0ZWRba2V5XTtcclxuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlcyA9IFsuLi5yZXMsIC4uLmtleXNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjb2x1bW5zID0gW10sXHJcbiAgICAgIHNob3dTZWFyY2ggPSB0cnVlLFxyXG4gICAgICBjaGlsZHJlbixcclxuICAgICAgc3VibWl0VXJsID0gXCJcIixcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgICB0cmVlUHJvcHMgPSB7fSxcclxuICAgICAgZm9ybVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID0gXCJidXR0b21cIixcclxuICAgICAgYWN0aW9uUG9ycHMsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmUgPSB7fSxcclxuICAgICAgZmlsdGVyQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1NlbGVjdGlvbiA9IHRydWUsXHJcbiAgICAgIGNvbHVtbk9yZGVyID0gdHJ1ZSxcclxuICAgICAgcm93U2VsZWN0aW9uID0ge30sXHJcbiAgICAgIGV4cGFuZGFibGUgPSB7fSxcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgICAgLi4ub3RoZXJ0YWJsZVBhcmFtc1xyXG4gICAgfSA9IHRhYmxlUHJvcHM7XHJcblxyXG4gICAgY29uc3Qge1xyXG4gICAgICBzdG9yZTogdHJlZVN0b3JlID0ge30sXHJcbiAgICAgIHNob3dTZWFyY2g6IHRyZWVTZWFyY2ggPSB0cnVlLFxyXG4gICAgICB0aXRsZUFsaWFzID0gXCJ0aXRsZVwiLFxyXG4gICAgICAuLi5vdGhlcnRyZWVQYXJhbXNcclxuICAgIH0gPSB0cmVlUHJvcHM7XHJcblxyXG4gICAgbGV0IHRhYmxlUGFyYW1zID0geyBmaWx0ZXJDb2x1bW4sIHN0b3JlLCAuLi5vdGhlcnRhYmxlUGFyYW1zIH0gYXMgYW55O1xyXG4gICAgbGV0IHRhYmxlQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGNvbHVtbkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICBpZiAodGVtcC5zZWFyY2ggPT09IHRydWUgfHwgdGVtcC5zZWFyY2g/LnNob3cgPT09IHRydWUpIHtcclxuICAgICAgICBzZWFyY2hGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC5zZWFyY2g/LmxhYmVsIHx8IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICAgIGxhYmVsQ29sOiB0ZW1wLnNlYXJjaD8ubGFiZWxDb2wsXHJcbiAgICAgICAgICB3cmFwcGVyQ29sOiB0ZW1wLnNlYXJjaD8ud3JhcHBlckNvbCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC5zZWFyY2g7XHJcbiAgICAgIHRlbXAuZWRpdG9yICE9PSBmYWxzZSAmJlxyXG4gICAgICAgIGVkaXRvckZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAucnVsZXMgPyB0ZW1wLnJ1bGVzIDogW10sXHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBzcGFuOiB0ZW1wLnNwYW4sXHJcbiAgICAgICAgICBkaWN0TmFtZTogdGVtcC5kaWN0TmFtZSxcclxuICAgICAgICAgIHByb3BzOiBvbWl0KHsgLi4udGVtcC5wcm9wcyB9LCBbXCJkZWZhdWx0VmFsdWVcIiwgXCJ2YWx1ZVwiXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gbnVsbFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleDtcclxuICAgICAgICBkZWZhdWx0VmFsdWVbbmFtZV0gPSB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucnVsZXM7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNwYW47XHJcbiAgICAgIGlmICh0ZW1wLmNvbHVtblNlYXJjaCkge1xyXG4gICAgICAgIHRlbXAuZmlsdGVyUHJvcHMgPSB7XHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnR5cGU7XHJcbiAgICAgIGxldCB0ZW1wUHJvcCA9IHsgLi4udGVtcC5wcm9wcyB9O1xyXG4gICAgICBpZiAodGVtcC5zdHlsZSkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAge3RleHQgIT09IFwiXCIgJiYgdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB1bmRlZmluZWQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC1iYWNrXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvbC10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wID0ge1xyXG4gICAgICAgICAgcmVuZGVyOiAodGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Pnt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucHJvcHM7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUG9ycHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGVkaXRvckZvcm0gPT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwic2VhcmNoXCIpID4gLTEpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhyZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImRldGFpbFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJkZXRhaWxcIik7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxFeWVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5p+l55yLXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChidXR0b25zLmluZGV4T2YoXCJlZGl0b3JcIikgPiAtMSkge1xyXG4gICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZWRpdG9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PEVkaXRPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg57yW6L6RXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiYWRkXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvblNob3dGb3JtIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgIG9uU2hvd0Zvcm0oKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5re75YqgXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZGVsZXRlXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzKX1cclxuICAgICAgICAgIGljb249ezxJY29uIHR5cGU9e2ljb25UeXBlLmRlbGV0ZTN9IC8+fVxyXG4gICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBhY3Rpb25Qb3Jwcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGFjdGlvblBvcnBzPy50ZXh0QWxpZ25cclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgIDogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYWN0aW9uUG9ycHM/LndpZHRoXHJcbiAgICAgICAgICA/IGFjdGlvblBvcnBzPy53aWR0aFxyXG4gICAgICAgICAgOiBiYXNlQWN0aW9uQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgIDogMjAwLFxyXG4gICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgZWxsaXBzaXM6IHRydWUsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIGlmIChjb2x1bW5PcmRlcilcclxuICAgICAgdGFibGVDb2x1bW4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwi5bqP5Y+3XCIsXHJcbiAgICAgICAgICB3aWR0aDogODAsXHJcbiAgICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQsIHJlYWNvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8PntpbmRleCArIDF9PC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRhYmxlQ29sdW1uLFxyXG4gICAgICBdO1xyXG4gICAgbGV0IHNlYXJjaEZsYWcgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgdG9vbEZsYWcgPSBzaG93VG9vbEJ1dHRvbiAmJiBzZWxmQnV0dG9ucy5sZW5ndGggPiAwO1xyXG4gICAgaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsID0gdGFibGVQYXJhbXMuc2Nyb2xsO1xyXG4gICAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgICBzY3JvbGw6IHsgeDogXCJtYXgtY29udGVudFwiLCAuLi5zY3JvbGwgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2VcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInBhZ2UtdGl0bGVcIikpfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMucGFnZVRpdGxlfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJwYWdlLXBhbmVcIikpfVxyXG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7c2hvd0xlZnQgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibGVmdFwiKX0+XHJcbiAgICAgICAgICAgICAgPFRyZWVcclxuICAgICAgICAgICAgICAgIHN0b3JlPXt7IC4uLnRyZWVTdG9yZSB9fVxyXG4gICAgICAgICAgICAgICAgc2hvd0ljb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgY2hlY2thYmxlPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e3RyZWVTZWFyY2h9XHJcbiAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy50cmVlU2VsZWN0LmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXM9e1t0aGlzLnN0YXRlLnRyZWVTZWxlY3RlZEtleV19XHJcbiAgICAgICAgICAgICAgICB0aXRsZUFsaWFzPXt0aXRsZUFsaWFzfVxyXG4gICAgICAgICAgICAgICAgey4uLm90aGVydHJlZVBhcmFtc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInJpZ2h0XCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5vLWxlZnQtcmlnaHRcIildOiAhc2hvd0xlZnQsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgICA8SGVhZGVyU2VhcmNoXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hGb3Jtcz17c2VhcmNoRm9ybXN9XHJcbiAgICAgICAgICAgICAgICB0b29sQnV0dG9uUG9zaXRpb249e3Rvb2xCdXR0b25Qb3NpdGlvbn1cclxuICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICBvblJlc2V0PXt0aGlzLnByb3BzLm9uUmVzZXR9XHJcbiAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2VhcmNoUmVmfVxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRm9ybVByb3BzPXt0aGlzLnByb3BzLnNlYXJjaEZvcm1Qcm9wc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAge3Nob3dUb29sQnV0dG9uICYmXHJcbiAgICAgICAgICAgICAgc2VsZkJ1dHRvbnMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbiA9PSBcImJ1dHRvbVwiICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUb29sQnV0dG9ucyhzZWxmQnV0dG9ucywgc2VhcmNoRm9ybXMubGVuZ3RoID09IDApfVxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidGFibGVcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0YWJsZS10b3BcIildOlxyXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoRmxhZyAmJiAhdG9vbEZsYWcpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlUHJvcHMudG9vbGJhciA9PSBmYWxzZSB8fFxyXG4gICAgICAgICAgICAgICAgICB0YWJsZVByb3BzLnRvb2xiYXI/LnRvb2xzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICB0YWJsZVRvb2w/LnRvb2xzPy5sZW5ndGggPT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSaWdodE91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIGNvbHVtbk9yZGVyPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gcGFnaW5hdGlvbi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgdG9vbGJhcj17e1xyXG4gICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIHNob3dSb3dTZWxlY3Rpb249e3Nob3dSb3dTZWxlY3Rpb259XHJcbiAgICAgICAgICAgICAgICB7Li4udGFibGVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIHtlZGl0b3JGb3JtICYmIChcclxuICAgICAgICAgICAgPEVkaXRvckZvcm1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMuZWRpdG9yUmVmfVxyXG4gICAgICAgICAgICAgIGNhbGxCYWNrPXt0aGlzLnRhYmxlUmVsb2FkLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgZm9ybVByb3BzPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIG90aGVyUHJvcHM9e3sgLi4uZm9ybVByb3BzIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VQYWdlO1xyXG4iXX0=
|