@mediusinc/mng-commons 5.4.0-rc.2 → 5.4.0-rc.3
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/esm2022/form/components/autocomplete/autocomplete.component.mjs +11 -2
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +4 -1
- package/esm2022/table/helpers/filters.mjs +3 -2
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +7 -7
- package/fesm2022/mediusinc-mng-commons-form.mjs +10 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +5 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +6 -6
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/package.json +1 -1
- package/table/helpers/filters.d.ts +1 -1
- package/version-info.json +5 -5
|
@@ -217,7 +217,8 @@ export function filterSetMetadataOnDisplayChange(filter, displayMatchMode, displ
|
|
|
217
217
|
displayMatchMode: displayMatchMode,
|
|
218
218
|
matchMode: matchMode,
|
|
219
219
|
displayValue: displayValue,
|
|
220
|
-
value: value
|
|
220
|
+
value: value,
|
|
221
|
+
caseSensitive: filterType === FilterTypeEnum.String ? filter?.caseSensitive : undefined
|
|
221
222
|
};
|
|
222
223
|
}
|
|
223
224
|
export function filterAreDatesEqual(fromDate, toDate, filterDateCfg) {
|
|
@@ -294,4 +295,4 @@ export function filterGetNumberConfig(descriptor) {
|
|
|
294
295
|
fractionsMax: descriptor.numberMaxFractionDigits ?? displayCfg?.fractionsMax
|
|
295
296
|
};
|
|
296
297
|
}
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9oZWxwZXJzL2ZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUlILGVBQWUsRUFJZiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ3JDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUl2RyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsV0FBMEIsRUFBRSxVQUFrRCxFQUFFLFNBQXNDO0lBQzNKLElBQUksT0FBTyxHQUE2QixTQUFTLENBQUM7SUFDbEQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hFLE9BQU8sR0FBRztZQUNOLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFDO1lBQzlGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFDO1lBQ3BHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFDO1lBQzFGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFDO1lBQ2hHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFF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QUMsTUFBTSxFQUFFLG9CQUFvQjtRQUNoRixhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCO1FBQzFDLE1BQU0sRUFDRixVQUFVLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUssUUFBUSxFQUFFLFFBQVE7UUFDbEIsV0FBVyxFQUNQLFFBQVE7WUFDUixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9LLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFVBQXVDO0lBQ3pFLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakUsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyx5QkFBeUIsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvSixPQUFPO1FBQ0gsWUFBWSxFQUFFLFVBQVUsQ0FBQyx1QkFBdUIsSUFBSSxVQUFVLEVBQUUsWUFBWTtRQUM1RSxZQUFZLEVBQUUsVUFBVSxDQUFDLHVCQUF1QixJQUFJLFVBQVUsRUFBRSxZQUFZO0tBQy9FLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcmltZU5HQ29uZmlnLCBTZWxlY3RJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7XG4gICAgQ29tbW9uc0ZpbHRlck1ldGFkYXRhLFxuICAgIENvbW1vbnNNb2R1bGVDb25maWcsXG4gICAgQ29tbW9uc1NlcmlhbGl6YXRpb25Db25maWcsXG4gICAgRmlsdGVyTWF0Y2hNb2RlLFxuICAgIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSxcbiAgICBOdWxsYWJsZSxcbiAgICBTaW5nbGVPckFycmF5VHlwZSxcbiAgICBhbmd1bGFyRGF0ZUZvcm1hdEhhc1NlY29uZHMsXG4gICAgYW5ndWxhckRhdGVGb3JtYXRIYXNUaW1lLFxuICAgIGRhdGVUb0lzb1N0cmluZyxcbiAgICBmcm9tQW5ndWxhckRhdGVGb3JtYXRUb1ByaW1lLFxuICAgIGZyb21Bbmd1bGFyTnVtYmVyRm9ybWF0VG9GcmFjdGlvbnNcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcblxuaW1wb3J0IHtGaWx0ZXJEYXRlQ29uZmlnfSBmcm9tICcuLi9tb2RlbHMvZmlsdGVyLm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWF0Y2hNb2RlT3B0aW9ucyhwcmltZUNvbmZpZzogUHJpbWVOR0NvbmZpZywgZGVzY3JpcHRvcjogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4gfCB1bmRlZmluZWQsIGNtcFNlckNmZz86IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnKTogU2VsZWN0SXRlbVtdIHtcbiAgICBsZXQgb3B0aW9uczogU2VsZWN0SXRlbVtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChkZXNjcmlwdG9yID09IG51bGwgfHwgZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5TdHJpbmcpIHtcbiAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkNvbnRhaW5zLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkNvbnRhaW5zKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWlucywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RDb250YWlucyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aCwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aCwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FbmRzV2l0aCl9XG4gICAgICAgIF07XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkJvb2xlYW4pIHtcbiAgICAgICAgb3B0aW9ucyA9IFt7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX1dO1xuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW4pfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pfVxuICAgICAgICBdO1xuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Mb29rdXAgfHwgZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmlsdGVyTG9va3VwRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkluLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkluKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90SW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90SW4pfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMpfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWUgJiYgIWRlc2NyaXB0b3IuZGF0ZVZhbHVlTm9UaW1lICYmICFjbXBTZXJDZmc/LmZpbHRlcnNEYXRlT25seURpc2FibGVkKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbil9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbil9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3B0aW9ucz8ucHVzaChcbiAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyl9LFxuICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0KX1cbiAgICApO1xuXG4gICAgaWYgKGRlc2NyaXB0b3I/Lm1hdGNoTW9kZXMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGRlc2NyaXB0b3IubWF0Y2hNb2Rlcy5tYXAobW0gPT4gPFNlbGVjdEl0ZW0+e3ZhbHVlOiBtbSwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKG1tKX0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucyB8fCBbXTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWZhdWx0IG1hdGNoIG1vZGUgZm9yIGEgZmlsdGVyLlxuICpcbiAqIEBwYXJhbSB7RmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT59IFtkZXNjcmlwdG9yXSAtIFRoZSBmaWx0ZXIgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7U2VsZWN0SXRlbVtdfSBbbWF0Y2hNb2Rlcz1bXV0gLSBUaGUgYXZhaWxhYmxlIG1hdGNoIG1vZGVzIG9wdGlvbnMuXG4gKlxuICogQHJldHVybiB7RmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlfSBUaGUgZGVmYXVsdCBtYXRjaCBtb2RlIGZvciB0aGUgZmlsdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyR2V0RGVmYXVsdE1hdGNoTW9kZShkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4sIG1hdGNoTW9kZXM6IFNlbGVjdEl0ZW1bXSA9IFtdKTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlIHtcbiAgICBsZXQgZGVmYXVsdE1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlID0gRmlsdGVyTWF0Y2hNb2RlLkVxdWFscztcbiAgICBpZiAoZGVzY3JpcHRvcj8uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nKSBkZWZhdWx0TWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGg7XG4gICAgZWxzZSBpZiAoZGVzY3JpcHRvcj8uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyIHx8IGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUgfHwgZGVzY3JpcHRvcj8uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbilcbiAgICAgICAgZGVmYXVsdE1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgZWxzZSBpZiAoZGVzY3JpcHRvcj8uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwIHx8IGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW0pIHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBkZWZhdWx0TWF0Y2hNb2RlID0gZGVzY3JpcHRvcj8ubXVsdGlzZWxlY3QgPyBGaWx0ZXJNYXRjaE1vZGUuSW4gOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdE1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvdmVyd3JpdGUgdHlwZSBkZWZhdWx0IHNldCBpbiBkZXNjcmlwdG9yXG4gICAgaWYgKGRlc2NyaXB0b3I/LmRlZmF1bHRNYXRjaE1vZGUpIHtcbiAgICAgICAgZGVmYXVsdE1hdGNoTW9kZSA9IGRlc2NyaXB0b3IuZGVmYXVsdE1hdGNoTW9kZTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBkZWZhdWx0IG1vZGUgZXhpc3RzIVxuICAgIGlmIChtYXRjaE1vZGVzLmxlbmd0aCA+IDAgJiYgIW1hdGNoTW9kZXMuc29tZShtID0+IG0udmFsdWUgPT09IGRlZmF1bHRNYXRjaE1vZGUpKSB7XG4gICAgICAgIGRlZmF1bHRNYXRjaE1vZGUgPSBtYXRjaE1vZGVzWzBdLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0TWF0Y2hNb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU2V0TWV0YWRhdGFPbkNoYW5nZShcbiAgICBmaWx0ZXI6IENvbW1vbnNGaWx0ZXJNZXRhZGF0YSxcbiAgICBtYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsXG4gICAgdmFsdWU/OiBhbnksXG4gICAgZmlsdGVyVHlwZT86IEZpbHRlclR5cGVFbnVtLFxuICAgIGZpbHRlckRhdGVDZmc/OiBGaWx0ZXJEYXRlQ29uZmlnXG4pOiBDb21tb25zRmlsdGVyTWV0YWRhdGEge1xuICAgIGxldCBkaXNwbGF5VmFsdWUgPSBmaWx0ZXI/LmRpc3BsYXlWYWx1ZSA/PyB2YWx1ZTtcbiAgICBsZXQgZGlzcGxheU1hdGNoTW9kZSA9IGZpbHRlcj8uZGlzcGxheU1hdGNoTW9kZSA/PyBtYXRjaE1vZGU7XG5cbiAgICAvLyB3aGVuIGVxdWFscyBpcyB1c2VkIG9uIGRhdGVzIHdpdGggdGltZSwgdGhlIGFjdHVhbCBmaWx0ZXIgd2lsbCBiZSBiZXR3ZWVuLCBidXQgZGlzcGxheWVkIGFzIGVxdWFsc1xuICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlICYmICFmaWx0ZXJEYXRlQ2ZnPy52YWx1ZU5vVGltZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICB2YWx1ZS5ldmVyeSh2ID0+IHYgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGZpbHRlckFyZURhdGVzRXF1YWwodmFsdWVbMF0sIHZhbHVlWzFdLCBmaWx0ZXJEYXRlQ2ZnKSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzO1xuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSA9IG5ldyBEYXRlKHZhbHVlWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlICYmIGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAvLyBkaXNwbGF5IHZhbHVlIGZvciBjYWxlbmRhciBjYW5ub3QgYmUgc3RyaW5nLCBjb252ZXJ0IHRvIGRhdGVcbiAgICAgICAgZGlzcGxheVZhbHVlID0gQXJyYXkuaXNBcnJheShkaXNwbGF5VmFsdWUpXG4gICAgICAgICAgICA/IGRpc3BsYXlWYWx1ZS5tYXAodiA9PiAoISh2IGluc3RhbmNlb2YgRGF0ZSkgPyBuZXcgRGF0ZSh2KSA6IHYpKVxuICAgICAgICAgICAgOiBkaXNwbGF5VmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgID8gZGlzcGxheVZhbHVlXG4gICAgICAgICAgICAgIDogbmV3IERhdGUoZGlzcGxheVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkJvb2xlYW4gJiYgZGlzcGxheVZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGRpc3BsYXlWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9ICh0eXBlb2YgZGlzcGxheVZhbHVlID09PSAnc3RyaW5nJyAmJiBkaXNwbGF5VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSB8fCBkaXNwbGF5VmFsdWUgPT09IDE7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIgJiYgZGlzcGxheVZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGRpc3BsYXlWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgbnVtVmFsdWUgPSArZGlzcGxheVZhbHVlO1xuICAgICAgICBpZiAoIWlzTmFOKG51bVZhbHVlKSkge1xuICAgICAgICAgICAgZGlzcGxheVZhbHVlID0gbnVtVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIG1hdGNoTW9kZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBkaXNwbGF5TWF0Y2hNb2RlLFxuICAgICAgICBkaXNwbGF5VmFsdWVcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU2V0TWV0YWRhdGFPbkRpc3BsYXlDaGFuZ2UoXG4gICAgZmlsdGVyOiBDb21tb25zRmlsdGVyTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgZGlzcGxheU1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLFxuICAgIGRpc3BsYXlWYWx1ZTogYW55LFxuICAgIGZpbHRlclR5cGU/OiBGaWx0ZXJUeXBlRW51bSxcbiAgICBmaWx0ZXJEYXRlQ2ZnPzogRmlsdGVyRGF0ZUNvbmZpZ1xuKSB7XG4gICAgbGV0IG1hdGNoTW9kZSA9IGRpc3BsYXlNYXRjaE1vZGU7XG4gICAgbGV0IHZhbHVlOiBTaW5nbGVPckFycmF5VHlwZTxOdWxsYWJsZTxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4+ID0gZGlzcGxheVZhbHVlO1xuXG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXJEYXRlQ2ZnPy52YWx1ZU5vVGltZSAmJiBkaXNwbGF5VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5TWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZUNmZz8uc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlQ2ZnPy5zaG93U2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21EYXRlLnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0TWlsbGlzZWNvbmRzKDk5OSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21EYXRlLnNldFNlY29uZHMoMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldFNlY29uZHMoNTksIDk5OSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbZnJvbURhdGUsIHRvRGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXlNYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMiAmJiB2YWx1ZS5ldmVyeShpID0+IGkgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBpID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaSA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUodmFsdWVbMF0gYXMgRGF0ZSB8IHN0cmluZyB8IG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b0RhdGUgPSBuZXcgRGF0ZSh2YWx1ZVsxXSBhcyBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyQXJlRGF0ZXNFcXVhbChmcm9tRGF0ZSwgdG9EYXRlLCBmaWx0ZXJEYXRlQ2ZnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlID0gbmV3IERhdGUoZnJvbURhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGVDZmc/LnNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGVDZmc/LnNob3dTZWNvbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXRTZWNvbmRzKHRvRGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0TWludXRlcyh0b0RhdGUuZ2V0TWludXRlcygpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0RGF0ZSh0b0RhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW2Zyb21EYXRlLCB0b0RhdGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udmVydERhdGVUeXBlID0gZmlsdGVyRGF0ZUNmZz8udmFsdWVOb1RpbWUgPyAnZGF0ZScgOiAnZGF0ZS10aW1lJztcbiAgICAgICAgY29uc3QgY29udmVydERhdGVUaW1lT3B0cyA9IHtcbiAgICAgICAgICAgIHV0YzogZmlsdGVyRGF0ZUNmZz8udmFsdWVVdGMsXG4gICAgICAgICAgICBub01pbGxpczogZmlsdGVyRGF0ZUNmZz8udmFsdWVOb01pbGxpcyxcbiAgICAgICAgICAgIG5vVGltZXpvbmU6IGZpbHRlckRhdGVDZmc/LnZhbHVlTm9UaW1lem9uZVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgIHZhbHVlID09IG51bGxcbiAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZS5maWx0ZXIoaSA9PiBpICE9IG51bGwpLm1hcChpID0+IGRhdGVUb0lzb1N0cmluZyhpLCBjb252ZXJ0RGF0ZVR5cGUsIGNvbnZlcnREYXRlVGltZU9wdHMpKVxuICAgICAgICAgICAgICAgICAgOiBkYXRlVG9Jc29TdHJpbmcodmFsdWUsIGNvbnZlcnREYXRlVHlwZSwgY29udmVydERhdGVUaW1lT3B0cyk7XG4gICAgfVxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0KSB7XG4gICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRpc3BsYXlNYXRjaE1vZGU6IGRpc3BsYXlNYXRjaE1vZGUsXG4gICAgICAgIG1hdGNoTW9kZTogbWF0Y2hNb2RlLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFyZURhdGVzRXF1YWwoZnJvbURhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIsIHRvRGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciwgZmlsdGVyRGF0ZUNmZz86IEZpbHRlckRhdGVDb25maWcpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXRlVG9Jc29TdHJpbmcoZnJvbURhdGUpO1xuICAgIGNvbnN0IGVuZERhdGUgPSBkYXRlVG9Jc29TdHJpbmcodG9EYXRlKTtcblxuICAgIC8vIDIwMjAtMTEtMDJUMTE6MTI6MTIuMDAwXG4gICAgY29uc3QgY21wTGVuZ3RoID0gZmlsdGVyRGF0ZUNmZz8uc2hvd1RpbWUgPyAoZmlsdGVyRGF0ZUNmZz8uc2hvd1NlY29uZHMgPyAxOSA6IDE2KSA6IDEwO1xuXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZS5zdWJzdHJpbmcoMCwgY21wTGVuZ3RoKSA9PT0gZW5kRGF0ZS5zdWJzdHJpbmcoMCwgY21wTGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFwcGx5U2VyaWFsaXphdGlvbkNvbmZpZ1RvQ21wKGNvbmZpZzogQ29tbW9uc01vZHVsZUNvbmZpZyB8IG51bGwsIGNtcFNlckNmZzogQ29tbW9uc1NlcmlhbGl6YXRpb25Db25maWcpIHtcbiAgICAvLyBzZXQgZGVmYXVsdFxuICAgIGNtcFNlckNmZy5kYXRlVGltZUluVXRjID0gZmFsc2U7XG4gICAgY21wU2VyQ2ZnLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gdHJ1ZTtcbiAgICBjbXBTZXJDZmcuZGF0ZVRpbWVXaXRoTWlsbGlzID0gdHJ1ZTtcbiAgICBjbXBTZXJDZmcuZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQgPSBmYWxzZTtcbiAgICAvLyBzZXQgY3VzdG9taXphdGlvbnNcbiAgICBpZiAoY29uZmlnPy5zZXJpYWxpemF0aW9uKSB7XG4gICAgICAgIGlmIChjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZUluVXRjICE9PSB1bmRlZmluZWQpIGNtcFNlckNmZy5kYXRlVGltZUluVXRjID0gY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVJblV0YztcbiAgICAgICAgaWYgKGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lV2l0aFRpbWV6b25lICE9PSB1bmRlZmluZWQpIGNtcFNlckNmZy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICBpZiAoY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIGNtcFNlckNmZy5kYXRlVGltZVdpdGhNaWxsaXMgPSBjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZVdpdGhNaWxsaXM7XG4gICAgICAgIGlmIChjb25maWcuc2VyaWFsaXphdGlvbi5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQgPSBjb25maWcuc2VyaWFsaXphdGlvbi5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBZGp1c3REaXNwbGF5VmFsdWVPbk1hdGNoTW9kZUNoYW5nZShtYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsIHZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAobWF0Y2hNb2RlID09IG51bGwgfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIG5ldmVyIGNoYW5nZSwgb25seSBjaGFuZ2UgbGF0ZXIgaWYgc29tZXRoaW5nIGVsc2UgY2hhbmdlcyBoZXJlXG4gICAgfVxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gW3ZhbHVlLCB2YWx1ZV0gOiBbXTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLCB2YWx1ZVswXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLCB2YWx1ZVsxXV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkluIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLk5vdEluKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogdmFsdWUgPT0gbnVsbCA/IFtdIDogW3ZhbHVlXTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyR2V0RGF0ZUNvbmZpZyhkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4sIHNlckNmZz86IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnKTogRmlsdGVyRGF0ZUNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3dUaW1lID1cbiAgICAgICAgZGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWUgPz8gKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZCAmJiBkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQgPyBhbmd1bGFyRGF0ZUZvcm1hdEhhc1RpbWUoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IGZhbHNlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZU5vVGltZTogZGVzY3JpcHRvci5kYXRlVmFsdWVOb1RpbWUgfHwgKCFzZXJDZmc/LmZpbHRlcnNEYXRlT25seURpc2FibGVkICYmICFzaG93VGltZSksXG4gICAgICAgIHZhbHVlVXRjOiBkZXNjcmlwdG9yLmRhdGVWYWx1ZVV0YyA/PyBzZXJDZmc/LmRhdGVUaW1lSW5VdGMsXG4gICAgICAgIHZhbHVlTm9UaW1lem9uZTogZGVzY3JpcHRvci5kYXRlVmFsdWVOb1RpbWV6b25lID8/ICFzZXJDZmc/LmRhdGVUaW1lV2l0aFRpbWV6b25lLFxuICAgICAgICB2YWx1ZU5vTWlsbGlzOiAhc2VyQ2ZnPy5kYXRlVGltZVdpdGhNaWxsaXMsXG4gICAgICAgIGZvcm1hdDpcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuZGF0ZVBpY2tlckZvcm1hdCA/PyAoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHNob3dUaW1lOiBzaG93VGltZSxcbiAgICAgICAgc2hvd1NlY29uZHM6XG4gICAgICAgICAgICBzaG93VGltZSAmJlxuICAgICAgICAgICAgKGRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dTZWNvbmRzID8/IChkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQgJiYgZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0ID8gYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCkgOiBmYWxzZSkpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdldE51bWJlckNvbmZpZyhkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pIHtcbiAgICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5Q2ZnID0gZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGZyb21Bbmd1bGFyTnVtYmVyRm9ybWF0VG9GcmFjdGlvbnMoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcmFjdGlvbnNNaW46IGRlc2NyaXB0b3IubnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWluLFxuICAgICAgICBmcmFjdGlvbnNNYXg6IGRlc2NyaXB0b3IubnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWF4XG4gICAgfTtcbn1cbiJdfQ==
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9oZWxwZXJzL2ZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUlILGVBQWUsRUFJZiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ3JDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUl2RyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsV0FBMEIsRUFBRSxVQUFrRCxFQUFFLFNBQXNDO0lBQzNKLElBQUksT0FBTyxHQUE2QixTQUFTLENBQUM7SUFDbEQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hFLE9BQU8sR0FBRztZQUNOLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFDO1lBQzlGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFDO1lBQ3BHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFDO1lBQzFGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFDO1lBQ2hHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFF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RSxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHJpbWVOR0NvbmZpZywgU2VsZWN0SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge1xuICAgIENvbW1vbnNGaWx0ZXJNZXRhZGF0YSxcbiAgICBDb21tb25zTW9kdWxlQ29uZmlnLFxuICAgIENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnLFxuICAgIEZpbHRlck1hdGNoTW9kZSxcbiAgICBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsXG4gICAgTnVsbGFibGUsXG4gICAgU2luZ2xlT3JBcnJheVR5cGUsXG4gICAgYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzLFxuICAgIGFuZ3VsYXJEYXRlRm9ybWF0SGFzVGltZSxcbiAgICBkYXRlVG9Jc29TdHJpbmcsXG4gICAgZnJvbUFuZ3VsYXJEYXRlRm9ybWF0VG9QcmltZSxcbiAgICBmcm9tQW5ndWxhck51bWJlckZvcm1hdFRvRnJhY3Rpb25zXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5cbmltcG9ydCB7RmlsdGVyRGF0ZUNvbmZpZ30gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU1hdGNoTW9kZU9wdGlvbnMocHJpbWVDb25maWc6IFByaW1lTkdDb25maWcsIGRlc2NyaXB0b3I6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+IHwgdW5kZWZpbmVkLCBjbXBTZXJDZmc/OiBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyk6IFNlbGVjdEl0ZW1bXSB7XG4gICAgbGV0IG9wdGlvbnM6IFNlbGVjdEl0ZW1bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVzY3JpcHRvciA9PSBudWxsIHx8IGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nKSB7XG4gICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Db250YWlucywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Db250YWlucyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90Q29udGFpbnMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90Q29udGFpbnMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGgsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aCl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRW5kc1dpdGgsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRW5kc1dpdGgpfVxuICAgICAgICBdO1xuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMgPSBbe3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9XTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyKSB7XG4gICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbil9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKX1cbiAgICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwIHx8IGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSkge1xuICAgICAgICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpbHRlckxvb2t1cERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5JbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Jbil9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEluLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEluKX1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzKX1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lICYmICFkZXNjcmlwdG9yLmRhdGVWYWx1ZU5vVGltZSAmJiAhY21wU2VyQ2ZnPy5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnM/LnB1c2goXG4gICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FeGlzdHMpfSxcbiAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0LCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCl9XG4gICAgKTtcblxuICAgIGlmIChkZXNjcmlwdG9yPy5tYXRjaE1vZGVzKSB7XG4gICAgICAgIG9wdGlvbnMgPSBkZXNjcmlwdG9yLm1hdGNoTW9kZXMubWFwKG1tID0+IDxTZWxlY3RJdGVtPnt2YWx1ZTogbW0sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihtbSl9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnMgfHwgW107XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZGVmYXVsdCBtYXRjaCBtb2RlIGZvciBhIGZpbHRlci5cbiAqXG4gKiBAcGFyYW0ge0ZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+fSBbZGVzY3JpcHRvcl0gLSBUaGUgZmlsdGVyIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge1NlbGVjdEl0ZW1bXX0gW21hdGNoTW9kZXM9W11dIC0gVGhlIGF2YWlsYWJsZSBtYXRjaCBtb2RlcyBvcHRpb25zLlxuICpcbiAqIEByZXR1cm4ge0ZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZX0gVGhlIGRlZmF1bHQgbWF0Y2ggbW9kZSBmb3IgdGhlIGZpbHRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdldERlZmF1bHRNYXRjaE1vZGUoZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+LCBtYXRjaE1vZGVzOiBTZWxlY3RJdGVtW10gPSBbXSk6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSB7XG4gICAgbGV0IGRlZmF1bHRNYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSA9IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLlN0cmluZykgZGVmYXVsdE1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoO1xuICAgIGVsc2UgaWYgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciB8fCBkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlIHx8IGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkJvb2xlYW4pXG4gICAgICAgIGRlZmF1bHRNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzO1xuICAgIGVsc2UgaWYgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cCB8fCBkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmlsdGVyTG9va3VwRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZGVmYXVsdE1hdGNoTW9kZSA9IGRlc2NyaXB0b3I/Lm11bHRpc2VsZWN0ID8gRmlsdGVyTWF0Y2hNb2RlLkluIDogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3ZlcndyaXRlIHR5cGUgZGVmYXVsdCBzZXQgaW4gZGVzY3JpcHRvclxuICAgIGlmIChkZXNjcmlwdG9yPy5kZWZhdWx0TWF0Y2hNb2RlKSB7XG4gICAgICAgIGRlZmF1bHRNYXRjaE1vZGUgPSBkZXNjcmlwdG9yLmRlZmF1bHRNYXRjaE1vZGU7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgZGVmYXVsdCBtb2RlIGV4aXN0cyFcbiAgICBpZiAobWF0Y2hNb2Rlcy5sZW5ndGggPiAwICYmICFtYXRjaE1vZGVzLnNvbWUobSA9PiBtLnZhbHVlID09PSBkZWZhdWx0TWF0Y2hNb2RlKSkge1xuICAgICAgICBkZWZhdWx0TWF0Y2hNb2RlID0gbWF0Y2hNb2Rlc1swXS52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdE1hdGNoTW9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclNldE1ldGFkYXRhT25DaGFuZ2UoXG4gICAgZmlsdGVyOiBDb21tb25zRmlsdGVyTWV0YWRhdGEsXG4gICAgbWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLFxuICAgIHZhbHVlPzogYW55LFxuICAgIGZpbHRlclR5cGU/OiBGaWx0ZXJUeXBlRW51bSxcbiAgICBmaWx0ZXJEYXRlQ2ZnPzogRmlsdGVyRGF0ZUNvbmZpZ1xuKTogQ29tbW9uc0ZpbHRlck1ldGFkYXRhIHtcbiAgICBsZXQgZGlzcGxheVZhbHVlID0gZmlsdGVyPy5kaXNwbGF5VmFsdWUgPz8gdmFsdWU7XG4gICAgbGV0IGRpc3BsYXlNYXRjaE1vZGUgPSBmaWx0ZXI/LmRpc3BsYXlNYXRjaE1vZGUgPz8gbWF0Y2hNb2RlO1xuXG4gICAgLy8gd2hlbiBlcXVhbHMgaXMgdXNlZCBvbiBkYXRlcyB3aXRoIHRpbWUsIHRoZSBhY3R1YWwgZmlsdGVyIHdpbGwgYmUgYmV0d2VlbiwgYnV0IGRpc3BsYXllZCBhcyBlcXVhbHNcbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSAmJiAhZmlsdGVyRGF0ZUNmZz8udmFsdWVOb1RpbWUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgdmFsdWUuZXZlcnkodiA9PiB2IGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHYgPT09ICdudW1iZXInKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJBcmVEYXRlc0VxdWFsKHZhbHVlWzBdLCB2YWx1ZVsxXSwgZmlsdGVyRGF0ZUNmZykpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLkVxdWFscztcbiAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZVswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgbWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSAmJiBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgLy8gZGlzcGxheSB2YWx1ZSBmb3IgY2FsZW5kYXIgY2Fubm90IGJlIHN0cmluZywgY29udmVydCB0byBkYXRlXG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZGlzcGxheVZhbHVlKVxuICAgICAgICAgICAgPyBkaXNwbGF5VmFsdWUubWFwKHYgPT4gKCEodiBpbnN0YW5jZW9mIERhdGUpID8gbmV3IERhdGUodikgOiB2KSlcbiAgICAgICAgICAgIDogZGlzcGxheVZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICA/IGRpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgICA6IG5ldyBEYXRlKGRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuICYmIGRpc3BsYXlWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBkaXNwbGF5VmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICBkaXNwbGF5VmFsdWUgPSAodHlwZW9mIGRpc3BsYXlWYWx1ZSA9PT0gJ3N0cmluZycgJiYgZGlzcGxheVZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgfHwgZGlzcGxheVZhbHVlID09PSAxO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyICYmIGRpc3BsYXlWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBkaXNwbGF5VmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IG51bVZhbHVlID0gK2Rpc3BsYXlWYWx1ZTtcbiAgICAgICAgaWYgKCFpc05hTihudW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSA9IG51bVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBtYXRjaE1vZGUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZGlzcGxheU1hdGNoTW9kZSxcbiAgICAgICAgZGlzcGxheVZhbHVlXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclNldE1ldGFkYXRhT25EaXNwbGF5Q2hhbmdlKFxuICAgIGZpbHRlcjogQ29tbW9uc0ZpbHRlck1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIGRpc3BsYXlNYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSxcbiAgICBkaXNwbGF5VmFsdWU6IGFueSxcbiAgICBmaWx0ZXJUeXBlPzogRmlsdGVyVHlwZUVudW0sXG4gICAgZmlsdGVyRGF0ZUNmZz86IEZpbHRlckRhdGVDb25maWdcbikge1xuICAgIGxldCBtYXRjaE1vZGUgPSBkaXNwbGF5TWF0Y2hNb2RlO1xuICAgIGxldCB2YWx1ZTogU2luZ2xlT3JBcnJheVR5cGU8TnVsbGFibGU8RGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+PiA9IGRpc3BsYXlWYWx1ZTtcblxuICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgIGlmICghZmlsdGVyRGF0ZUNmZz8udmFsdWVOb1RpbWUgJiYgZGlzcGxheVZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZGlzcGxheU1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkVxdWFscykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGVDZmc/LnNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZUNmZz8uc2hvd1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldE1pbGxpc2Vjb25kcyg5OTkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXRTZWNvbmRzKDU5LCA5OTkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW2Zyb21EYXRlLCB0b0RhdGVdO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5TWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbikge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIgJiYgdmFsdWUuZXZlcnkoaSA9PiBpIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgaSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGkgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKHZhbHVlWzBdIGFzIERhdGUgfCBzdHJpbmcgfCBudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9EYXRlID0gbmV3IERhdGUodmFsdWVbMV0gYXMgRGF0ZSB8IHN0cmluZyB8IG51bWJlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckFyZURhdGVzRXF1YWwoZnJvbURhdGUsIHRvRGF0ZSwgZmlsdGVyRGF0ZUNmZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlQ2ZnPy5zaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlQ2ZnPy5zaG93U2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0U2Vjb25kcyh0b0RhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldE1pbnV0ZXModG9EYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldERhdGUodG9EYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFtmcm9tRGF0ZSwgdG9EYXRlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnZlcnREYXRlVHlwZSA9IGZpbHRlckRhdGVDZmc/LnZhbHVlTm9UaW1lID8gJ2RhdGUnIDogJ2RhdGUtdGltZSc7XG4gICAgICAgIGNvbnN0IGNvbnZlcnREYXRlVGltZU9wdHMgPSB7XG4gICAgICAgICAgICB1dGM6IGZpbHRlckRhdGVDZmc/LnZhbHVlVXRjLFxuICAgICAgICAgICAgbm9NaWxsaXM6IGZpbHRlckRhdGVDZmc/LnZhbHVlTm9NaWxsaXMsXG4gICAgICAgICAgICBub1RpbWV6b25lOiBmaWx0ZXJEYXRlQ2ZnPy52YWx1ZU5vVGltZXpvbmVcbiAgICAgICAgfTtcblxuICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICB2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gdmFsdWUuZmlsdGVyKGkgPT4gaSAhPSBudWxsKS5tYXAoaSA9PiBkYXRlVG9Jc29TdHJpbmcoaSwgY29udmVydERhdGVUeXBlLCBjb252ZXJ0RGF0ZVRpbWVPcHRzKSlcbiAgICAgICAgICAgICAgICAgIDogZGF0ZVRvSXNvU3RyaW5nKHZhbHVlLCBjb252ZXJ0RGF0ZVR5cGUsIGNvbnZlcnREYXRlVGltZU9wdHMpO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkaXNwbGF5TWF0Y2hNb2RlOiBkaXNwbGF5TWF0Y2hNb2RlLFxuICAgICAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5VmFsdWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nID8gZmlsdGVyPy5jYXNlU2Vuc2l0aXZlIDogdW5kZWZpbmVkXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFyZURhdGVzRXF1YWwoZnJvbURhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIsIHRvRGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciwgZmlsdGVyRGF0ZUNmZz86IEZpbHRlckRhdGVDb25maWcpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXRlVG9Jc29TdHJpbmcoZnJvbURhdGUpO1xuICAgIGNvbnN0IGVuZERhdGUgPSBkYXRlVG9Jc29TdHJpbmcodG9EYXRlKTtcblxuICAgIC8vIDIwMjAtMTEtMDJUMTE6MTI6MTIuMDAwXG4gICAgY29uc3QgY21wTGVuZ3RoID0gZmlsdGVyRGF0ZUNmZz8uc2hvd1RpbWUgPyAoZmlsdGVyRGF0ZUNmZz8uc2hvd1NlY29uZHMgPyAxOSA6IDE2KSA6IDEwO1xuXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZS5zdWJzdHJpbmcoMCwgY21wTGVuZ3RoKSA9PT0gZW5kRGF0ZS5zdWJzdHJpbmcoMCwgY21wTGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFwcGx5U2VyaWFsaXphdGlvbkNvbmZpZ1RvQ21wKGNvbmZpZzogQ29tbW9uc01vZHVsZUNvbmZpZyB8IG51bGwsIGNtcFNlckNmZzogQ29tbW9uc1NlcmlhbGl6YXRpb25Db25maWcpIHtcbiAgICAvLyBzZXQgZGVmYXVsdFxuICAgIGNtcFNlckNmZy5kYXRlVGltZUluVXRjID0gZmFsc2U7XG4gICAgY21wU2VyQ2ZnLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gdHJ1ZTtcbiAgICBjbXBTZXJDZmcuZGF0ZVRpbWVXaXRoTWlsbGlzID0gdHJ1ZTtcbiAgICBjbXBTZXJDZmcuZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQgPSBmYWxzZTtcbiAgICAvLyBzZXQgY3VzdG9taXphdGlvbnNcbiAgICBpZiAoY29uZmlnPy5zZXJpYWxpemF0aW9uKSB7XG4gICAgICAgIGlmIChjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZUluVXRjICE9PSB1bmRlZmluZWQpIGNtcFNlckNmZy5kYXRlVGltZUluVXRjID0gY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVJblV0YztcbiAgICAgICAgaWYgKGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lV2l0aFRpbWV6b25lICE9PSB1bmRlZmluZWQpIGNtcFNlckNmZy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICBpZiAoY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIGNtcFNlckNmZy5kYXRlVGltZVdpdGhNaWxsaXMgPSBjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZVdpdGhNaWxsaXM7XG4gICAgICAgIGlmIChjb25maWcuc2VyaWFsaXphdGlvbi5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQgPSBjb25maWcuc2VyaWFsaXphdGlvbi5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBZGp1c3REaXNwbGF5VmFsdWVPbk1hdGNoTW9kZUNoYW5nZShtYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsIHZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAobWF0Y2hNb2RlID09IG51bGwgfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7IC8vIG5ldmVyIGNoYW5nZSwgb25seSBjaGFuZ2UgbGF0ZXIgaWYgc29tZXRoaW5nIGVsc2UgY2hhbmdlcyBoZXJlXG4gICAgfVxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gW3ZhbHVlLCB2YWx1ZV0gOiBbXTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLCB2YWx1ZVswXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3ZhbHVlWzBdLCB2YWx1ZVsxXV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkluIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLk5vdEluKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogdmFsdWUgPT0gbnVsbCA/IFtdIDogW3ZhbHVlXTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyR2V0RGF0ZUNvbmZpZyhkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4sIHNlckNmZz86IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnKTogRmlsdGVyRGF0ZUNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3dUaW1lID1cbiAgICAgICAgZGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWUgPz8gKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZCAmJiBkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQgPyBhbmd1bGFyRGF0ZUZvcm1hdEhhc1RpbWUoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IGZhbHNlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZU5vVGltZTogZGVzY3JpcHRvci5kYXRlVmFsdWVOb1RpbWUgfHwgKCFzZXJDZmc/LmZpbHRlcnNEYXRlT25seURpc2FibGVkICYmICFzaG93VGltZSksXG4gICAgICAgIHZhbHVlVXRjOiBkZXNjcmlwdG9yLmRhdGVWYWx1ZVV0YyA/PyBzZXJDZmc/LmRhdGVUaW1lSW5VdGMsXG4gICAgICAgIHZhbHVlTm9UaW1lem9uZTogZGVzY3JpcHRvci5kYXRlVmFsdWVOb1RpbWV6b25lID8/ICFzZXJDZmc/LmRhdGVUaW1lV2l0aFRpbWV6b25lLFxuICAgICAgICB2YWx1ZU5vTWlsbGlzOiAhc2VyQ2ZnPy5kYXRlVGltZVdpdGhNaWxsaXMsXG4gICAgICAgIGZvcm1hdDpcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuZGF0ZVBpY2tlckZvcm1hdCA/PyAoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHNob3dUaW1lOiBzaG93VGltZSxcbiAgICAgICAgc2hvd1NlY29uZHM6XG4gICAgICAgICAgICBzaG93VGltZSAmJlxuICAgICAgICAgICAgKGRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dTZWNvbmRzID8/IChkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQgJiYgZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0ID8gYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCkgOiBmYWxzZSkpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdldE51bWJlckNvbmZpZyhkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pIHtcbiAgICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5Q2ZnID0gZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGZyb21Bbmd1bGFyTnVtYmVyRm9ybWF0VG9GcmFjdGlvbnMoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcmFjdGlvbnNNaW46IGRlc2NyaXB0b3IubnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWluLFxuICAgICAgICBmcmFjdGlvbnNNYXg6IGRlc2NyaXB0b3IubnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWF4XG4gICAgfTtcbn1cbiJdfQ==
|
|
@@ -113,11 +113,10 @@ export class FormEditorComponent {
|
|
|
113
113
|
const item = this.item();
|
|
114
114
|
if (item !== this.initialItemInput) {
|
|
115
115
|
// new item is different from the one the form was initialized with. Must trigger reset of form model.
|
|
116
|
-
|
|
116
|
+
// should be executed in untracked mode, because it updates multiple components underneath
|
|
117
|
+
untracked(() => this.resetFormModel(item));
|
|
117
118
|
}
|
|
118
|
-
}
|
|
119
|
-
// resetModel uses signal like concept
|
|
120
|
-
{ allowSignalWrites: true });
|
|
119
|
+
});
|
|
121
120
|
effect(() => {
|
|
122
121
|
this._formlyOptions.formState.disabled =
|
|
123
122
|
this.isFormDisabled() || this.autoSavePreviewDisabledForm() || this._formlyOptions.formState.descriptor?.disabled === true || this._formlyOptions.formState.details;
|
|
@@ -244,6 +243,7 @@ export class FormEditorComponent {
|
|
|
244
243
|
return formValue;
|
|
245
244
|
}
|
|
246
245
|
resetFormModel(item, opts) {
|
|
246
|
+
// have to use formly's reset model, because _form.reset() does not reset the values correctly
|
|
247
247
|
this._formlyOptions.resetModel?.(this.getFormModelFromItem(item));
|
|
248
248
|
if (opts?.markAsPristine !== false) {
|
|
249
249
|
// mark form as pristine, should be done in next event hook to allow formly to initialize first
|
|
@@ -361,13 +361,13 @@ export class FormEditorComponent {
|
|
|
361
361
|
const formModel = objectDeepCopy(item, { mapGettersToProperties: true }) ?? {};
|
|
362
362
|
const descriptor = this.descriptor();
|
|
363
363
|
descriptor.fields.forEach(field => {
|
|
364
|
-
if (field.getter &&
|
|
364
|
+
if (field.getter && formModel) {
|
|
365
365
|
const splitPath = field.property.split('.');
|
|
366
366
|
let currentObject = formModel;
|
|
367
367
|
for (let i = 0; i < splitPath.length; i++) {
|
|
368
368
|
const currentSubPath = splitPath[i];
|
|
369
369
|
if (i === splitPath.length - 1) {
|
|
370
|
-
currentObject[currentSubPath] = field.getter(
|
|
370
|
+
currentObject[currentSubPath] = field.getter(formModel?.[field.property], formModel);
|
|
371
371
|
}
|
|
372
372
|
else {
|
|
373
373
|
if (typeof currentObject[currentSubPath] !== 'object') {
|
|
@@ -468,4 +468,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
|
|
|
468
468
|
type: Component,
|
|
469
469
|
args: [{ standalone: true, selector: 'mng-form-editor', imports: [FormlyModule, ReactiveFormsModule, MessagesModule, AsyncPipe, ButtonModule, TranslateModule, DatePipe, EditorAutoSaveStatusComponent], providers: [provideFormComponent()], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (autoSaveShowRestore()) {\n <p-messages severity=\"warn\">\n <ng-template pTemplate>\n <div class=\"flex flex-grow-1 justify-content-between align-items-center\">\n <h6 class=\"m-0 p-0\">\n <em class=\"pi pi-save mr-4\"></em>\n {{\n 'mngEditor.autoSave.restore.title'\n | translate: {lastChange: autoSaveRestore()?.savedAt ? (autoSaveRestore()?.savedAt! | date: 'dd. MM. YYYY HH:mm:ss') : ''}\n }}\n </h6>\n <div>\n <p-button\n icon=\"pi pi-sync\"\n size=\"small\"\n [label]=\"'mngEditor.autoSave.restore.restore' | translate\"\n [styleClass]=\"restoreLocalStateButtonStyle\"\n [text]=\"true\"\n (click)=\"onAutoSaveRestore()\"></p-button>\n @if (autoSave()?.state !== 'preview' || autoSave()?.state !== 'previewCurrent') {\n <p-button\n icon=\"pi pi-eye\"\n size=\"small\"\n [label]=\"autoSavePreviewButtonLabel() | translate\"\n [styleClass]=\"previewLocalStateButtonStyle\"\n [text]=\"true\"\n (click)=\"onAutoSavePreview()\"></p-button>\n }\n <p-button\n icon=\"pi pi-times\"\n size=\"small\"\n [label]=\"'mngEditor.autoSave.restore.dismiss' | translate\"\n [styleClass]=\"clearLocalStateButtonStyle\"\n (click)=\"onAutoSaveDismiss()\"></p-button>\n </div>\n </div>\n </ng-template>\n </p-messages>\n}\n\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit($event)\">\n <formly-form [form]=\"form\" [fields]=\"formlyFields\" [options]=\"formlyOptions\" [model]=\"formlyInitialItem\"></formly-form>\n <button #submitButton pButton type=\"submit\" class=\"hidden\" [disabled]=\"form.disabled\" [loading]=\"submitLoading()\" loadingIcon=\"pi pi-spin pi-spinner\"></button>\n</form>\n<p-messages [value]=\"formMessages()\" [enableService]=\"false\"></p-messages>\n\n@if (descriptor().autoSave && showAutoSaveStatus()) {\n <mng-editor-auto-save-status [status]=\"autoSave()\"></mng-editor-auto-save-status>\n}\n" }]
|
|
470
470
|
}], ctorParameters: () => [] });
|
|
471
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBSVYsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQWtCLFNBQVMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFdkMsT0FBTyxFQUFDLFlBQVksRUFBcUIsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0UsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGNBQWMsRUFBRSxxQkFBcUIsRUFBVSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN4SixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRixPQUFPLEVBUUgsaUJBQWlCLEVBQ2pCLDhCQUE4QixFQUU5Qix1QkFBdUIsRUFDMUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5QyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7QUFVNUYsTUFBTSxPQUFPLG1CQUFtQjtJQTBFNUIsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRDtRQXBHaUIsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLHFCQUFxQixDQUFDO1FBQ25DLFdBQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsaUJBQW1DLENBQUEsQ0FBQyxDQUFDO1FBRTFELDBCQUFxQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RELFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsK0JBQTBCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJLLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE4QixDQUFDO1FBQzFELGtCQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUM7UUFDNUQsU0FBSSxHQUFHLEtBQUssQ0FBbUIsU0FBUyxDQUFDLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQztRQUM3RCxhQUFRLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUNoRCxXQUFNLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUM5Qyx1QkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQztRQUV2RSxnQkFBZ0I7UUFDVCxlQUFVLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ25ELGdCQUFXLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFDNUIsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQXVCLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDOUcsbUJBQWMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUV4RiwyQkFBMkI7UUFDcEIsMkJBQXNCLEdBQUcsU0FBUyxDQUF5QixjQUFjLENBQUMsQ0FBQztRQUVsRixtQkFBbUI7UUFDRixVQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxtQkFBYyxHQUFtQztZQUM5RCxTQUFTLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUMxRjtTQUNKLENBQUM7UUFDTSxrQkFBYSxHQUF3QixFQUFFLENBQUMsQ0FBQyx1REFBdUQ7UUFDaEcsdUJBQWtCLEdBQUcsRUFBRSxDQUFDLENBQUMsdURBQXVEO1FBR2hGLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFckcsaUJBQVksR0FBRyxNQUFNLENBQVksRUFBRSxDQUFDLENBQUM7UUFFNUMsV0FBVztRQUNLLGlDQUE0QixHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5RyxpQ0FBNEIsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0csK0JBQTBCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQzthQUM3RyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUM7YUFDaEQsY0FBYyxFQUFFO2FBQ2hCLEtBQUssRUFBRSxDQUFDO1FBQ04sb0JBQWUsR0FBRyxNQUFNLENBQTBDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLGFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEQsK0JBQTBCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM5QyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxTQUFTO29CQUNWLE9BQU8sMkNBQTJDLENBQUM7Z0JBQ3ZELEtBQUssZ0JBQWdCO29CQUNqQixPQUFPLDZDQUE2QyxDQUFDO2dCQUN6RDtvQkFDSSxPQUFPLG9DQUFvQyxDQUFDO1lBQ3BELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNJLHdCQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzNFLGdDQUEyQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQStCaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsTUFBTSxDQUNGLEdBQUcsRUFBRTtZQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDakMsc0dBQXNHO2dCQUN0RyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO1FBQ0Qsc0NBQXNDO1FBQ3RDLEVBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFDLENBQzVCLENBQUM7UUFFRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUTtnQkFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN4SyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNYLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUiw2REFBNkQ7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDdEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFFBQVE7UUFDWCxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEtBQUssdUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEtBQUssdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUM5QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEtBQUssdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNqRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3RCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVsRyxvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLHdDQUF3QztRQUN4QyxJQUNJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXO1lBQzdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixLQUFLLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEtBQUssdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQ25KLENBQUM7WUFDQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztnQkFDbEIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN0Qix3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsbURBQW1ELEVBQUUseURBQXlELEVBQUU7b0JBQzVKLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2lCQUNuRCxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLElBQWlDLEVBQUU7WUFDakcsWUFBWSxFQUFFLDhCQUE4QixDQUFDLE9BQU87U0FDdkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO2FBQ2xCLElBQUksQ0FDRCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ25DLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxJQUFpQyxFQUFFO2dCQUMxRixLQUFLLEVBQUUsQ0FBQztnQkFDUixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTthQUN2QyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVQLCtGQUErRjtRQUMvRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxXQUFXO1FBQ2QsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsSUFBaUMsRUFBRTtZQUNqRyxZQUFZLEVBQUUsOEJBQThCLENBQUMsVUFBVTtTQUMxRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sTUFBTTtRQUNULElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsNkRBQTZEO0lBQ3RELFFBQVEsQ0FBQyxLQUFZO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDakIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLGNBQWM7YUFDM0IsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBaUMsRUFBRTtnQkFDckYsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLFdBQVcsRUFBRSxjQUFjO2FBQzlCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ0osNkJBQTZCO1lBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDdEMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzVELEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BJLENBQUM7WUFDTCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQWdDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFDLENBQUM7WUFDdEYsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsaUNBQWlDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxDQUFDO1lBRXJKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQWlDLEVBQUU7Z0JBQ3JGLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixXQUFXLEVBQUUsY0FBYzthQUM5QixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUE4QjtRQUM5QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFDLHNCQUFzQixFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFFM0YsSUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM1QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLElBQUksT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ2pELFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3BDLENBQUM7b0JBRUQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztnQkFFRCxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFXLEVBQUUsSUFBbUM7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVsRSxJQUFJLElBQUksRUFBRSxjQUFjLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakMsK0ZBQStGO1lBQy9GLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFhLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sY0FBYyxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxhQUFhLENBQThCLEdBQWEsRUFBRSxLQUFxQixFQUFFLElBQWtDO1FBQ3RILE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUFVLEVBQUUsSUFBa0M7UUFDbEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBRU0sZUFBZSxDQUE4QixHQUFhLEVBQUUsS0FBcUIsRUFBRSxJQUFvQztRQUMxSCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxHQUFXLEVBQUUsS0FBVSxFQUFFLElBQW9DO1FBQ3RGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztZQUMzRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FBOEIsR0FBYSxFQUFFLEtBQXNCLEVBQUUsSUFBb0M7UUFDM0gsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0scUJBQXFCLENBQUMsR0FBVyxFQUFFLEtBQVcsRUFBRSxJQUFvQztRQUN2RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDM0UsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUI7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQy9GLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDMUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUI7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BELG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO2FBQU0sSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxFQUFDLENBQUMsQ0FBQztRQUNsRyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQjtRQUNwQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFDLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQXNCO1FBQy9DLE1BQU0sU0FBUyxHQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUMsQ0FBeUIsSUFBSSxFQUFFLENBQUM7UUFFdEcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQztnQkFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM3QixhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBd0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvRixDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxPQUFPLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDcEQsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDdkMsQ0FBQzt3QkFFRCxhQUFhLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUNsRCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQXdCLEVBQUUsT0FBaUI7UUFDN0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLFdBQVcsR0FBMkIsSUFBSSxDQUFDO1FBQy9DLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO1lBQy9CLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsV0FBVyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQThCLEVBQUU7UUFDdEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztZQUM3QyxDQUFDO1lBQ0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDZixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxJQUFJLEdBQUcsS0FBSztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDWCxDQUFDO1FBRUQsVUFBVSxDQUNOLEdBQUcsRUFBRTtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtxQkFDcEQsSUFBSSxDQUNELFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsb0JBQW9CLEVBQUU7Z0JBQ3RCLHlCQUF5QjtnQkFDekIsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDTCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO3dCQUMxRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDLENBQUMsRUFDRixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7cUJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0wsQ0FBQyxFQUNELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsMEVBQTBFO1NBQzVGLENBQUM7SUFDTixDQUFDO0lBRU8sNkJBQTZCO1FBQ2pDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztZQUM3SixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQW1DLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxFQUFDLENBQUMsQ0FBQztRQUNySyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOztPQUVHO0lBQ0ssNEJBQTRCO1FBQ2hDLE1BQU0sRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFtQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDeEosQ0FBQztJQUNMLENBQUM7OEdBOWZRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDRuQ0FIakIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGtLQzNEdkMsaS9FQWlEQSwyQ0RTYyxZQUFZLDZLQUFFLG1CQUFtQixvYkFBRSxjQUFjLDJSQUFhLFlBQVksa3JCQUFFLGVBQWUsdUZBQUUsUUFBUSw2Q0FBRSw2QkFBNkI7OzJGQUlySSxtQkFBbUI7a0JBUi9CLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGlCQUFpQixXQUVsQixDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixDQUFDLGFBQ3BJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxtQkFDbEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHVudHJhY2tlZCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge291dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0Zvcm1seUNvbmZpZywgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seU1vZHVsZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge01lc3NhZ2VzTW9kdWxlfSBmcm9tICdwcmltZW5nL21lc3NhZ2VzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlLCBDb21tb25zU3RvcmFnZVNlcnZpY2UsIElkVHlwZSwgTG9nZ2VyU2VydmljZSwgU3R5bGVMZXZlbEVudW0sIFN0eWxlU2l6ZUVudW0sIG9iamVjdERlZXBDb3B5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXIsIEJ1dHRvblN0eWxlUm91bmRlZEVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtcbiAgICBDb21tb25zRm9ybWx5Rm9ybU9wdGlvbnMsXG4gICAgRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgRm9ybUVkaXRvclBhdGNoRmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0Rm9ybU1vZGVsT3B0cyxcbiAgICBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclN1Ym1pdEV2ZW50LFxuICAgIEZvcm1FdmVudFR5cGVFbnVtLFxuICAgIEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZSxcbiAgICBJRm9ybUVkaXRvckNvbXBvbmVudCxcbiAgICBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2dlbmVyYXRlQXV0b3NhdmVFZGl0b3JLZXl9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWF1dG9zYXZlJztcbmltcG9ydCB7Y3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWZvcm1seSc7XG5pbXBvcnQge2dldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSwgZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlfSBmcm9tICcuLi8uLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlUHJldmlld01vZGVsLCBFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXRvci1hdXRvLXNhdmUtcHJldmlldy5tb2RlbCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JTZXJ2aWNlLCBwcm92aWRlRm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuL2F1dG8tc2F2ZS1zdGF0dXMvYXV0by1zYXZlLXN0YXR1cy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm0tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtGb3JtbHlNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1lc3NhZ2VzTW9kdWxlLCBBc3luY1BpcGUsIEJ1dHRvbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBEYXRlUGlwZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVGb3JtQ29tcG9uZW50KCldLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FZGl0b3JDb21wb25lbnQ8SXRlbSA9IGFueSwgUGFyZW50SXRlbSA9IGFueT4gaW1wbGVtZW50cyBJRm9ybUVkaXRvckNvbXBvbmVudDxJdGVtLCBQYXJlbnRJdGVtPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybWx5Q29uZmlnID0gaW5qZWN0KEZvcm1seUNvbmZpZyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9ucyA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNtcFR5cGVOYW1lID0gJ0Zvcm1FZGl0b3JDb21wb25lbnQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSh0aGlzLmNtcFR5cGVOYW1lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtU2VydmljZSA9IGluamVjdChGb3JtRWRpdG9yU2VydmljZTxJdGVtLCBQYXJlbnRJdGVtPik7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNTdG9yYWdlU2VydmljZSA9IGluamVjdChDb21tb25zU3RvcmFnZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICBwcml2YXRlIGF1dG9TYXZlU3RvcmFnZUtleUNvbXBJbml0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGF1dG9TYXZlU3RvcmFnZUtleSA9IGNvbXB1dGVkKCgpID0+IGdlbmVyYXRlQXV0b3NhdmVFZGl0b3JLZXkodGhpcy5kZXNjcmlwdG9yKCksIHRoaXMuaXRlbSgpLCB0aGlzLnJvdXRlci51cmwsIHtlZGl0b3JJZDogdGhpcy5lZGl0b3JJZCgpLCBpdGVtSWQ6IHRoaXMuaXRlbUlkKCl9KSk7XG5cbiAgICBwdWJsaWMgZGVzY3JpcHRvciA9IGlucHV0LnJlcXVpcmVkPEVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+PigpO1xuICAgIHB1YmxpYyBzdWJtaXRMb2FkaW5nID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgaXRlbSA9IG1vZGVsPEl0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGlzRm9ybURpc2FibGVkID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgZWRpdG9ySWQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGl0ZW1JZCA9IGlucHV0PElkVHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgc2hvd0F1dG9TYXZlU3RhdHVzID0gaW5wdXQodHJ1ZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIHB1YmxpYyBmb3JtU3VibWl0ID0gb3V0cHV0PEZvcm1FZGl0b3JTdWJtaXRFdmVudDxJdGVtPj4oKTtcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8SXRlbT4oKTtcbiAgICBwcml2YXRlIGF1dG9TYXZlU3RhdHVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWRpdG9yQXV0b1NhdmVTdGF0dXM+KHtzdGF0ZTogJ2luaXRpYWwnLCB0aW1lc3RhbXA6IG5ldyBEYXRlKCl9KTtcbiAgICBwdWJsaWMgYXV0b1NhdmVTdGF0dXMgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5hc09ic2VydmFibGUoKSk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBwdWJsaWMgc3VibWl0QnV0dG9uRWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmIHwgdW5kZWZpbmVkPignc3VibWl0QnV0dG9uJyk7XG5cbiAgICAvLyBmb3JtbHkgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtbHlTdGF0ZURpc2FibGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1seU9wdGlvbnM6IENvbW1vbnNGb3JtbHlGb3JtT3B0aW9uczxJdGVtPiA9IHtcbiAgICAgICAgZm9ybVN0YXRlOiB7XG4gICAgICAgICAgICBhZGQ6IGZhbHNlLFxuICAgICAgICAgICAgZWRpdDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlZCQ6IHRoaXMuX2Zvcm1seVN0YXRlRGlzYWJsZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgfVxuICAgIH07XG4gICAgcHJpdmF0ZSBfZm9ybWx5RmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107IC8vIGluaXRpYWxpemVkIGluIG5nT25Jbml0LCBzaG91bGQgbm90IGJlIGNoYW5nZWQgYWZ0ZXJcbiAgICBwcml2YXRlIF9mb3JtbHlJbml0aWFsSXRlbSA9IHt9OyAvLyBpbml0aWFsaXplZCBpbiBuZ09uSW5pdCwgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAgcHJpdmF0ZSBpbml0aWFsSXRlbUlucHV0OiBJdGVtIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJpdmF0ZSBzZXR0ZXJGaWVsZHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRlc2NyaXB0b3IoKS5maWVsZHMuZmlsdGVyKGYgPT4gdHlwZW9mIGYuc2V0dGVyID09PSAnZnVuY3Rpb24nKSk7XG5cbiAgICBwdWJsaWMgZm9ybU1lc3NhZ2VzID0gc2lnbmFsPE1lc3NhZ2VbXT4oW10pO1xuXG4gICAgLy8gYXV0b3NhdmVcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVzdG9yZUxvY2FsU3RhdGVCdXR0b25TdHlsZSA9IEJ1dHRvblN0eWxlQnVpbGRlci5jcmVhdGUoU3R5bGVMZXZlbEVudW0uU3VjY2VzcywgU3R5bGVTaXplRW51bS5TbWFsbCkuYnVpbGQoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJldmlld0xvY2FsU3RhdGVCdXR0b25TdHlsZSA9IEJ1dHRvblN0eWxlQnVpbGRlci5jcmVhdGUoU3R5bGVMZXZlbEVudW0uSW5mbywgU3R5bGVTaXplRW51bS5TbWFsbCkuYnVpbGQoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xlYXJMb2NhbFN0YXRlQnV0dG9uU3R5bGUgPSBCdXR0b25TdHlsZUJ1aWxkZXIuY3JlYXRlKFN0eWxlTGV2ZWxFbnVtLkRhbmdlciwgU3R5bGVTaXplRW51bS5TbWFsbClcbiAgICAgICAgLndpdGhSb3VuZGVkQnV0dG9uKEJ1dHRvblN0eWxlUm91bmRlZEVudW0uU1FVQVJFKVxuICAgICAgICAud2l0aFRleHRCdXR0b24oKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBwdWJsaWMgYXV0b1NhdmVSZXN0b3JlID0gc2lnbmFsPEVkaXRvckF1dG9TYXZlUHJldmlld01vZGVsPEl0ZW0+IHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIGF1dG9TYXZlID0gdG9TaWduYWwodGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QpO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVByZXZpZXdCdXR0b25MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmF1dG9TYXZlKCk/LnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdwcmV2aWV3JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnByZXZpZXdDdXJyZW50JztcbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpZXdDdXJyZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnByZXZpZXdBdXRvc2F2ZWQnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnByZXZpZXcnO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcHVibGljIGF1dG9TYXZlU2hvd1Jlc3RvcmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmF1dG9TYXZlUmVzdG9yZSgpPy5zYXZlZCAhPSBudWxsKTtcbiAgICBwcml2YXRlIGF1dG9TYXZlUHJldmlld0Rpc2FibGVkRm9ybSA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSBhdXRvU2F2ZUV2ZW50c1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLnBhcmVudDtcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpOiBGb3JtR3JvdXA8e1tLIGluIGtleW9mIEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8SXRlbVtLXT59PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICAgIH1cblxuICAgIGdldCBmb3JtVW5zYWZlKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybTtcbiAgICB9XG5cbiAgICBnZXQgZm9ybWx5T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1seUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seUZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHVzZWQgZm9yIGZvcm0gaW5pdGlhbGl6YXRpb24uIEZ1cnRoZXIgY2hhbmdlcyBzaG91bGQgYmUgZG9uZSB1c2luZyB7cmVzZXRGb3JtTW9kZWx9LlxuICAgICAqL1xuICAgIGdldCBmb3JtbHlJbml0aWFsSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seUluaXRpYWxJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmluaXQodGhpcyk7XG5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPT0gdGhpcy5pbml0aWFsSXRlbUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBpdGVtIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgdGhlIGZvcm0gd2FzIGluaXRpYWxpemVkIHdpdGguIE11c3QgdHJpZ2dlciByZXNldCBvZiBmb3JtIG1vZGVsLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyByZXNldE1vZGVsIHVzZXMgc2lnbmFsIGxpa2UgY29uY2VwdFxuICAgICAgICAgICAge2FsbG93U2lnbmFsV3JpdGVzOiB0cnVlfVxuICAgICAgICApO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCgpIHx8IHRoaXMuYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtKCkgfHwgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuZGVzY3JpcHRvcj8uZGlzYWJsZWQgPT09IHRydWUgfHwgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuZGV0YWlscztcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWx5U3RhdGVEaXNhYmxlZFN1YmplY3QubmV4dCh0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlTG9hZFNhdmVkRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhcnRFdmVudENoYW5nZUxpc3Rlbih0aGlzLmF1dG9TYXZlU3RvcmFnZUtleUNvbXBJbml0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RvcmFnZUtleUNvbXBJbml0ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBpbml0IGZvcm0gc3RhdGVcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuYWRkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5lZGl0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXRhaWxzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgLy8gaW5pdCBmaWVsZHMgZm9yIGZvcm1seVxuICAgICAgICB0aGlzLl9mb3JtbHlGaWVsZHMgPSBjcmVhdGVGb3JtbHlDb25maWdGcm9tRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IoKSwgdGhpcy5mb3JtbHlDb25maWcsIHRoaXMpO1xuXG4gICAgICAgIC8vIGludCBmb3JtIG1vZGVsIChvbmx5IGluaXRpYWwsIG5vIGZ1cnRoZXIgY2hhbmdlcyB0byBmb3JtTW9kZWwgc2hvdWxkIGJlIGFsbG93ZWQhKVxuICAgICAgICB0aGlzLmluaXRpYWxJdGVtSW5wdXQgPSB0aGlzLml0ZW0oKTtcbiAgICAgICAgdGhpcy5fZm9ybWx5SW5pdGlhbEl0ZW0gPSB0aGlzLmdldEZvcm1Nb2RlbEZyb21JdGVtKHRoaXMuaXRlbSgpKTtcblxuICAgICAgICAvLyBoYW5kbGUgbG9jYWxpemF0aW9ucyBlZGl0L2FkZCBtZXNzYWdlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLmlzTG9jYWxpemVkICYmXG4gICAgICAgICAgICAodGhpcy5kZXNjcmlwdG9yKCkudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkIHx8IHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMuc2V0KFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZvcm1NZXNzYWdlcygpLFxuICAgICAgICAgICAgICAgIGdldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UsICdtbmdFZGl0b3IubG9jYWxpemF0aW9ucy5hZGRJbkRlZmF1bHRMYW5ndWFnZVRpdGxlJywgJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLmFkZEluRGVmYXVsdExhbmd1YWdlRGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZTogdGhpcy5jb21tb25zLmdldERlZmF1bHRMb2NhbGUoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fSU5JVFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybS5nZXRSYXdWYWx1ZSgpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlPy5lbWl0KHYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5WYWx1ZUNoYW5nZSwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgICAgICBmb3JtVmFsdWU6ICgpID0+IHRoaXMuZ2V0Rm9ybVZhbHVlKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG1hcmsgZm9ybSBhcyBwcmlzdGluZSwgc2hvdWxkIGJlIGRvbmUgaW4gbmV4dCBldmVudCBob29rIHRvIGFsbG93IGZvcm1seSB0byBpbml0aWFsaXplIGZpcnN0XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fREVTVFJPWVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3VibWl0KCkge1xuICAgICAgICB0aGlzLnN1Ym1pdEJ1dHRvbkVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25TdWJtaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLnN1Ym1pdHRlZE9uID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMuc2V0KFtdKTtcblxuICAgICAgICBjb25zdCBmb3JtU3VibWl0SXRlbSA9IHRoaXMuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3JtSXRlbTogZm9ybVN1Ym1pdEl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLlN1Ym1pdCwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICAgICAgc3VibWl0VmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VibWl0VmFsdWU6IGZvcm1TdWJtaXRJdGVtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25BdXRvU2F2ZURpc21pc3MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYW5kIG1hcmsgaW52YWxpZCB0YWJzXG4gICAgICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5fZm9ybWx5RmllbGRzO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZHNbMF0udHlwZSA9PT0gJ3RhYnMnICYmIGZvcm1GaWVsZHNbMF0uZmllbGRHcm91cCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFiIG9mIGZvcm1GaWVsZHNbMF0uZmllbGRHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZVsndGFiXycgKyAodGFiLmlkID8gdGFiLmlkIDogdGFiLmtleSA/PyAnJykgKyAnX2ludmFsaWQnXSA9IHRoaXMuaXNBbnlGaWVsZEludmFsaWQodGFiLmZpZWxkR3JvdXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IEZvcm1FZGl0b3JTdWJtaXRFdmVudDxJdGVtPiA9IHtzdWNjZXNzOiBmYWxzZSwgZm9ybUl0ZW06IGZvcm1TdWJtaXRJdGVtfTtcbiAgICAgICAgICAgIGV2ZW50LnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybU1lc3NhZ2VzKCkucHVzaChnZXRGb3JtRWRpdG9yV2FybmluZ01lc3NhZ2UodGhpcy50cmFuc2xhdGVTZXJ2aWNlLCAnbW5nRWRpdG9yLmludmFsaWRGb3JtVG9hc3RUaXRsZScsICdtbmdFZGl0b3IuaW52YWxpZEZvcm1Ub2FzdE1lc3NhZ2UnKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5TdWJtaXQsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgICAgIHN1Ym1pdFZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWx1ZTogZm9ybVN1Ym1pdEl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1WYWx1ZShvcHRzPzoge29taXRTZXR0ZXJzPzogYm9vbGVhbn0pOiBJdGVtIHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gb2JqZWN0RGVlcENvcHkodGhpcy5fZm9ybS5nZXRSYXdWYWx1ZSgpLCB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pO1xuXG4gICAgICAgIGlmIChvcHRzPy5vbWl0U2V0dGVycyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0ZXJGaWVsZHMoKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhdGggPSBmaWVsZC5wcm9wZXJ0eS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3ViUGF0aCA9IHNwbGl0UGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlW2N1cnJlbnRTdWJQYXRoXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWVbY3VycmVudFN1YlBhdGhdID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGRWYWx1ZVtjdXJyZW50U3ViUGF0aF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWVbc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICAgICAgZmllbGQuc2V0dGVyPy4oZm9ybVZhbHVlLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGb3JtTW9kZWwoaXRlbT86IEl0ZW0sIG9wdHM/OiBGb3JtRWRpdG9yUmVzZXRGb3JtTW9kZWxPcHRzKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMucmVzZXRNb2RlbD8uKHRoaXMuZ2V0Rm9ybU1vZGVsRnJvbUl0ZW0oaXRlbSkpO1xuXG4gICAgICAgIGlmIChvcHRzPy5tYXJrQXNQcmlzdGluZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIG1hcmsgZm9ybSBhcyBwcmlzdGluZSwgc2hvdWxkIGJlIGRvbmUgaW4gbmV4dCBldmVudCBob29rIHRvIGFsbG93IGZvcm1seSB0byBpbml0aWFsaXplIGZpcnN0XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjogb3B0cz8ub25seVNlbGZ9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkKGtleToga2V5b2YgSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmllbGRVbnNhZmUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZvcm1GaWVsZCh0aGlzLl9mb3JtLCBrZXkuc3BsaXQoJy4nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpZWxkVmFsdWU8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBJdGVtPihrZXk6IFByb3BlcnR5LCB2YWx1ZTogSXRlbVtQcm9wZXJ0eV0sIG9wdHM/OiBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRWYWx1ZVVuc2FmZShrZXkgYXMgc3RyaW5nLCB2YWx1ZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpZWxkVmFsdWVVbnNhZmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdHM/OiBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0RmllbGRVbnNhZmUoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUsIG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaEZpZWxkVmFsdWU8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBJdGVtPihrZXk6IFByb3BlcnR5LCB2YWx1ZTogSXRlbVtQcm9wZXJ0eV0sIG9wdHM/OiBGb3JtRWRpdG9yUGF0Y2hGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRjaEZpZWxkVmFsdWVVbnNhZmUoa2V5IGFzIHN0cmluZywgdmFsdWUsIG9wdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaEZpZWxkVmFsdWVVbnNhZmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdHM/OiBGb3JtRWRpdG9yUGF0Y2hGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCBvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgVmFsdWUgd2FzIG5vdCBzZXQsIGJlY2F1c2UgZmllbGQgJHtrZXl9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGaWVsZFZhbHVlPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgSXRlbT4oa2V5OiBQcm9wZXJ0eSwgdmFsdWU/OiBJdGVtW1Byb3BlcnR5XSwgb3B0cz86IEZvcm1FZGl0b3JSZXNldEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0RmllbGRWYWx1ZVVuc2FmZShrZXkgYXMgc3RyaW5nLCB2YWx1ZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0RmllbGRWYWx1ZVVuc2FmZShrZXk6IHN0cmluZywgdmFsdWU/OiBhbnksIG9wdHM/OiBGb3JtRWRpdG9yUmVzZXRGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5yZXNldCh2YWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFZhbHVlIHdhcyBub3Qgc2V0LCBiZWNhdXNlIGZpZWxkICR7a2V5fSB3YXMgbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgdGhlIHNhdmVkIGxvY2FsIHN0YXRlLlxuICAgICAqIElmIGxvY2FsIHN0b3JhZ2Uga2V5cyBleGlzdCBmb3IgbG9jYWwgc3RhdGUgYW5kIGxvY2FsIHRpbWVzdGFtcCwgcmVzdG9yZSB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BdXRvU2F2ZVJlc3RvcmUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmUgPSB0aGlzLmF1dG9TYXZlUmVzdG9yZSgpO1xuICAgICAgICBpZiAocmVzdG9yZT8uc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwocmVzdG9yZS5zYXZlZCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUmVzdG9yZS5zZXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ3Jlc3RvcmVkJywgdGltZXN0YW1wOiByZXN0b3JlLnNhdmVkQXQgPz8gbmV3IERhdGUoKX0pO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0uc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGFydEV2ZW50Q2hhbmdlTGlzdGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmV2aWV3cyB0aGUgc2F2ZWQgbG9jYWwgc3RhdGUuXG4gICAgICogSWYgbG9jYWwgc3RvcmFnZSBrZXlzIGV4aXN0IGZvciBsb2NhbCBzdGF0ZSBhbmQgbG9jYWwgdGltZXN0YW1wLCByZXN0b3JlIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkF1dG9TYXZlUHJldmlldygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlUmVzdG9yZSgpPy5zYXZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0b3BWYWx1ZUNoYW5nZUxpc3RlbigpO1xuICAgICAgICB0aGlzLmF1dG9TYXZlUHJldmlld0Rpc2FibGVkRm9ybS5zZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ3ByZXZpZXcnICYmIHN0YXRlICE9PSAncHJldmlld0N1cnJlbnQnKSB7XG4gICAgICAgICAgICAvLyBtdXN0IHN0b3JlIG9yaWdpbmFsIHZhbHVlIGZyb20gY3VycmVudCB2YWx1ZSBmb3JtXG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUmVzdG9yZS51cGRhdGUoaSA9PiAoey4uLmksIG9yaWdpbmFsOiB0aGlzLmdldEZvcm1WYWx1ZSgpfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMuYXV0b1NhdmVSZXN0b3JlKCk7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ3ByZXZpZXcnICYmIHJlc3RvcmU/Lm9yaWdpbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKHJlc3RvcmUub3JpZ2luYWwpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdwcmV2aWV3Q3VycmVudCd9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSAhPT0gJ3ByZXZpZXcnICYmIHJlc3RvcmU/LnNhdmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKHJlc3RvcmUuc2F2ZWQpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdwcmV2aWV3JywgdGltZXN0YW1wOiByZXN0b3JlLnNhdmVkQXQgPz8gbmV3IERhdGUoKX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBsb2NhbCBzdGF0ZSBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogSWYgbG9jYWwgc3RvcmFnZSBrZXlzIGV4aXN0IGZvciBsb2NhbCBzdGF0ZSBhbmQgbG9jYWwgdGltZXN0YW1wLCByZW1vdmUgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICovXG4gICAgcHVibGljIG9uQXV0b1NhdmVEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXkoKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMuYXV0b1NhdmVSZXN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgPT09ICdwcmV2aWV3JyAmJiByZXN0b3JlPy5vcmlnaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwocmVzdG9yZS5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdpbml0aWFsJywgdGltZXN0YW1wOiBuZXcgRGF0ZSgpfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbW1vbnNTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKHRoaXMuY21wVHlwZU5hbWUsIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCkpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVJlc3RvcmUuc2V0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0uc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGFydEV2ZW50Q2hhbmdlTGlzdGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1Nb2RlbEZyb21JdGVtKGl0ZW06IEl0ZW0gfCB1bmRlZmluZWQpOiBhbnkge1xuICAgICAgICBjb25zdCBmb3JtTW9kZWwgPSAob2JqZWN0RGVlcENvcHkoaXRlbSwge21hcEdldHRlcnNUb1Byb3BlcnRpZXM6IHRydWV9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA/PyB7fTtcblxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGRlc2NyaXB0b3IuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmdldHRlciAmJiBpdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRQYXRoID0gZmllbGQucHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudE9iamVjdCA9IGZvcm1Nb2RlbDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRQYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdWJQYXRoID0gc3BsaXRQYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gc3BsaXRQYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdID0gZmllbGQuZ2V0dGVyKGl0ZW0/LltmaWVsZC5wcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZm9ybU1vZGVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEZvcm1GaWVsZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGtleVBhdGg6IHN0cmluZ1tdKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgICAgIGlmIChrZXlQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleVBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5nZXQoa2V5UGF0aFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHRDb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICAgIG5leHRDb250cm9sID0gY29udHJvbC5nZXQoa2V5UGF0aFswXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gK2tleVBhdGhbMF07XG4gICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q29udHJvbCA9IGNvbnRyb2wuYXQoaWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZvcm1GaWVsZChuZXh0Q29udHJvbCEsIGtleVBhdGguc2xpY2UoMSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBbnlGaWVsZEludmFsaWQoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGxldCBmaWVsZEludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgZmllbGRJbnZhbGlkID0gdGhpcy5pc0FueUZpZWxkSW52YWxpZChmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZmllbGRJbnZhbGlkID0gIWZpZWxkLmZvcm1Db250cm9sPy52YWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZEludmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVN0YXJ0RXZlbnRDaGFuZ2VMaXN0ZW4oaW5pdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5kZXNjcmlwdG9yKCkuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVFdmVudHNTdWJzY3JpcHRpb24gPSB0aGlzLl9mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIGZpcnN0IG9uZSBvbiBpbml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlICE9PSAnc2F2ZWQnICYmIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlICE9PSAncHJldmlldycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHsuLi50aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZSwgc3RhdGU6ICdzYXZpbmcnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDc1MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTYXZlVG9TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdCA/IDAgOiA1MDAgLy8gZGVsYXkgaW5pdGlhbCBldmVudCBsaXN0ZW5pbmcgZm9yIGFsbCB0aGUgaW5pdGlhbGl6YXRpb25zIHRvIHRha2UgcGxhY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF1dG9TYXZlU3RvcFZhbHVlQ2hhbmdlTGlzdGVuKCkge1xuICAgICAgICB0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBmb3JtIHZhbHVlIHRvIGxvY2FsU3RvcmFnZSBpZiBhdXRvU2F2ZSBpcyBlbmFibGVkIGFuZCB0aGUgcmVxdWlyZWQga2V5cyBhcmUgZGVmaW5lZC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBwcml2YXRlIGF1dG9TYXZlU2F2ZVRvU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLmF1dG9TYXZlICE9PSB0cnVlIHx8IHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlID09PSAncHJldmlldycgfHwgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgPT09ICdwcmV2aWV3Q3VycmVudCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tbW9uc1N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW08RWRpdG9yQXV0b1NhdmVQcmV2aWV3TW9kZWw8SXRlbT4+KHRoaXMuY21wVHlwZU5hbWUsIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCksIHtzYXZlZDogdGhpcy5nZXRGb3JtVmFsdWUoKSwgc2F2ZWRBdDogbmV3IERhdGUoKX0pO1xuICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ3NhdmVkJywgdGltZXN0YW1wOiBuZXcgRGF0ZSgpfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIHZhbHVlIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZUxvYWRTYXZlZEZyb21TdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7YXV0b1NhdmUsIG1vZGVsfSA9IHRoaXMuZGVzY3JpcHRvcigpO1xuICAgICAgICBpZiAoYXV0b1NhdmUgJiYgbW9kZWwuaTE4bkJhc2VLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVSZXN0b3JlLnNldCh0aGlzLmNvbW1vbnNTdG9yYWdlU2VydmljZS5nZXRJdGVtPEVkaXRvckF1dG9TYXZlUHJldmlld01vZGVsPEl0ZW0+Pih0aGlzLmNtcFR5cGVOYW1lLCB0aGlzLmF1dG9TYXZlU3RvcmFnZUtleSgpKSA/PyBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAoYXV0b1NhdmVTaG93UmVzdG9yZSgpKSB7XG4gICAgPHAtbWVzc2FnZXMgc2V2ZXJpdHk9XCJ3YXJuXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWdyb3ctMSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtLTAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cInBpIHBpLXNhdmUgbXItNFwiPjwvZW0+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUudGl0bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHtsYXN0Q2hhbmdlOiBhdXRvU2F2ZVJlc3RvcmUoKT8uc2F2ZWRBdCA/IChhdXRvU2F2ZVJlc3RvcmUoKT8uc2F2ZWRBdCEgfCBkYXRlOiAnZGQuIE1NLiBZWVlZIEhIOm1tOnNzJykgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2g2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUucmVzdG9yZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwicmVzdG9yZUxvY2FsU3RhdGVCdXR0b25TdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkF1dG9TYXZlUmVzdG9yZSgpXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvU2F2ZSgpPy5zdGF0ZSAhPT0gJ3ByZXZpZXcnIHx8IGF1dG9TYXZlKCk/LnN0YXRlICE9PSAncHJldmlld0N1cnJlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktZXllXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhdXRvU2F2ZVByZXZpZXdCdXR0b25MYWJlbCgpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCJwcmV2aWV3TG9jYWxTdGF0ZUJ1dHRvblN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BdXRvU2F2ZVByZXZpZXcoKVwiPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUuZGlzbWlzcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiY2xlYXJMb2NhbFN0YXRlQnV0dG9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXV0b1NhdmVEaXNtaXNzKClcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLW1lc3NhZ2VzPlxufVxuXG48Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgIDxmb3JtbHktZm9ybSBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCJmb3JtbHlGaWVsZHNcIiBbb3B0aW9uc109XCJmb3JtbHlPcHRpb25zXCIgW21vZGVsXT1cImZvcm1seUluaXRpYWxJdGVtXCI+PC9mb3JtbHktZm9ybT5cbiAgICA8YnV0dG9uICNzdWJtaXRCdXR0b24gcEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBbZGlzYWJsZWRdPVwiZm9ybS5kaXNhYmxlZFwiIFtsb2FkaW5nXT1cInN1Ym1pdExvYWRpbmcoKVwiIGxvYWRpbmdJY29uPVwicGkgcGktc3BpbiBwaS1zcGlubmVyXCI+PC9idXR0b24+XG48L2Zvcm0+XG48cC1tZXNzYWdlcyBbdmFsdWVdPVwiZm9ybU1lc3NhZ2VzKClcIiBbZW5hYmxlU2VydmljZV09XCJmYWxzZVwiPjwvcC1tZXNzYWdlcz5cblxuQGlmIChkZXNjcmlwdG9yKCkuYXV0b1NhdmUgJiYgc2hvd0F1dG9TYXZlU3RhdHVzKCkpIHtcbiAgICA8bW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzIFtzdGF0dXNdPVwiYXV0b1NhdmUoKVwiPjwvbW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzPlxufVxuIl19
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBSVYsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQWtCLFNBQVMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFdkMsT0FBTyxFQUFDLFlBQVksRUFBcUIsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0UsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBZ0IsWUFB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bEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHVudHJhY2tlZCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge291dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0Zvcm1seUNvbmZpZywgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seU1vZHVsZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge01lc3NhZ2VzTW9kdWxlfSBmcm9tICdwcmltZW5nL21lc3NhZ2VzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlLCBDb21tb25zU3RvcmFnZVNlcnZpY2UsIElkVHlwZSwgTG9nZ2VyU2VydmljZSwgU3R5bGVMZXZlbEVudW0sIFN0eWxlU2l6ZUVudW0sIG9iamVjdERlZXBDb3B5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXIsIEJ1dHRvblN0eWxlUm91bmRlZEVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtcbiAgICBDb21tb25zRm9ybWx5Rm9ybU9wdGlvbnMsXG4gICAgRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgRm9ybUVkaXRvclBhdGNoRmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0Rm9ybU1vZGVsT3B0cyxcbiAgICBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclN1Ym1pdEV2ZW50LFxuICAgIEZvcm1FdmVudFR5cGVFbnVtLFxuICAgIEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZSxcbiAgICBJRm9ybUVkaXRvckNvbXBvbmVudCxcbiAgICBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2dlbmVyYXRlQXV0b3NhdmVFZGl0b3JLZXl9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWF1dG9zYXZlJztcbmltcG9ydCB7Y3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWZvcm1seSc7XG5pbXBvcnQge2dldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSwgZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlfSBmcm9tICcuLi8uLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlUHJldmlld01vZGVsLCBFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXRvci1hdXRvLXNhdmUtcHJldmlldy5tb2RlbCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JTZXJ2aWNlLCBwcm92aWRlRm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuL2F1dG8tc2F2ZS1zdGF0dXMvYXV0by1zYXZlLXN0YXR1cy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm0tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtGb3JtbHlNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1lc3NhZ2VzTW9kdWxlLCBBc3luY1BpcGUsIEJ1dHRvbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBEYXRlUGlwZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVGb3JtQ29tcG9uZW50KCldLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FZGl0b3JDb21wb25lbnQ8SXRlbSA9IGFueSwgUGFyZW50SXRlbSA9IGFueT4gaW1wbGVtZW50cyBJRm9ybUVkaXRvckNvbXBvbmVudDxJdGVtLCBQYXJlbnRJdGVtPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybWx5Q29uZmlnID0gaW5qZWN0KEZvcm1seUNvbmZpZyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9ucyA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNtcFR5cGVOYW1lID0gJ0Zvcm1FZGl0b3JDb21wb25lbnQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSh0aGlzLmNtcFR5cGVOYW1lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtU2VydmljZSA9IGluamVjdChGb3JtRWRpdG9yU2VydmljZTxJdGVtLCBQYXJlbnRJdGVtPik7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNTdG9yYWdlU2VydmljZSA9IGluamVjdChDb21tb25zU3RvcmFnZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICBwcml2YXRlIGF1dG9TYXZlU3RvcmFnZUtleUNvbXBJbml0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGF1dG9TYXZlU3RvcmFnZUtleSA9IGNvbXB1dGVkKCgpID0+IGdlbmVyYXRlQXV0b3NhdmVFZGl0b3JLZXkodGhpcy5kZXNjcmlwdG9yKCksIHRoaXMuaXRlbSgpLCB0aGlzLnJvdXRlci51cmwsIHtlZGl0b3JJZDogdGhpcy5lZGl0b3JJZCgpLCBpdGVtSWQ6IHRoaXMuaXRlbUlkKCl9KSk7XG5cbiAgICBwdWJsaWMgZGVzY3JpcHRvciA9IGlucHV0LnJlcXVpcmVkPEVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+PigpO1xuICAgIHB1YmxpYyBzdWJtaXRMb2FkaW5nID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgaXRlbSA9IG1vZGVsPEl0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGlzRm9ybURpc2FibGVkID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgZWRpdG9ySWQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGl0ZW1JZCA9IGlucHV0PElkVHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgc2hvd0F1dG9TYXZlU3RhdHVzID0gaW5wdXQodHJ1ZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIHB1YmxpYyBmb3JtU3VibWl0ID0gb3V0cHV0PEZvcm1FZGl0b3JTdWJtaXRFdmVudDxJdGVtPj4oKTtcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8SXRlbT4oKTtcbiAgICBwcml2YXRlIGF1dG9TYXZlU3RhdHVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWRpdG9yQXV0b1NhdmVTdGF0dXM+KHtzdGF0ZTogJ2luaXRpYWwnLCB0aW1lc3RhbXA6IG5ldyBEYXRlKCl9KTtcbiAgICBwdWJsaWMgYXV0b1NhdmVTdGF0dXMgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5hc09ic2VydmFibGUoKSk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBwdWJsaWMgc3VibWl0QnV0dG9uRWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmIHwgdW5kZWZpbmVkPignc3VibWl0QnV0dG9uJyk7XG5cbiAgICAvLyBmb3JtbHkgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtbHlTdGF0ZURpc2FibGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1seU9wdGlvbnM6IENvbW1vbnNGb3JtbHlGb3JtT3B0aW9uczxJdGVtPiA9IHtcbiAgICAgICAgZm9ybVN0YXRlOiB7XG4gICAgICAgICAgICBhZGQ6IGZhbHNlLFxuICAgICAgICAgICAgZWRpdDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlZCQ6IHRoaXMuX2Zvcm1seVN0YXRlRGlzYWJsZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgfVxuICAgIH07XG4gICAgcHJpdmF0ZSBfZm9ybWx5RmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107IC8vIGluaXRpYWxpemVkIGluIG5nT25Jbml0LCBzaG91bGQgbm90IGJlIGNoYW5nZWQgYWZ0ZXJcbiAgICBwcml2YXRlIF9mb3JtbHlJbml0aWFsSXRlbSA9IHt9OyAvLyBpbml0aWFsaXplZCBpbiBuZ09uSW5pdCwgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAgcHJpdmF0ZSBpbml0aWFsSXRlbUlucHV0OiBJdGVtIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJpdmF0ZSBzZXR0ZXJGaWVsZHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRlc2NyaXB0b3IoKS5maWVsZHMuZmlsdGVyKGYgPT4gdHlwZW9mIGYuc2V0dGVyID09PSAnZnVuY3Rpb24nKSk7XG5cbiAgICBwdWJsaWMgZm9ybU1lc3NhZ2VzID0gc2lnbmFsPE1lc3NhZ2VbXT4oW10pO1xuXG4gICAgLy8gYXV0b3NhdmVcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVzdG9yZUxvY2FsU3RhdGVCdXR0b25TdHlsZSA9IEJ1dHRvblN0eWxlQnVpbGRlci5jcmVhdGUoU3R5bGVMZXZlbEVudW0uU3VjY2VzcywgU3R5bGVTaXplRW51bS5TbWFsbCkuYnVpbGQoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJldmlld0xvY2FsU3RhdGVCdXR0b25TdHlsZSA9IEJ1dHRvblN0eWxlQnVpbGRlci5jcmVhdGUoU3R5bGVMZXZlbEVudW0uSW5mbywgU3R5bGVTaXplRW51bS5TbWFsbCkuYnVpbGQoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xlYXJMb2NhbFN0YXRlQnV0dG9uU3R5bGUgPSBCdXR0b25TdHlsZUJ1aWxkZXIuY3JlYXRlKFN0eWxlTGV2ZWxFbnVtLkRhbmdlciwgU3R5bGVTaXplRW51bS5TbWFsbClcbiAgICAgICAgLndpdGhSb3VuZGVkQnV0dG9uKEJ1dHRvblN0eWxlUm91bmRlZEVudW0uU1FVQVJFKVxuICAgICAgICAud2l0aFRleHRCdXR0b24oKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBwdWJsaWMgYXV0b1NhdmVSZXN0b3JlID0gc2lnbmFsPEVkaXRvckF1dG9TYXZlUHJldmlld01vZGVsPEl0ZW0+IHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIGF1dG9TYXZlID0gdG9TaWduYWwodGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QpO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVByZXZpZXdCdXR0b25MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmF1dG9TYXZlKCk/LnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdwcmV2aWV3JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnByZXZpZXdDdXJyZW50JztcbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpZXdDdXJyZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnByZXZpZXdBdXRvc2F2ZWQnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnByZXZpZXcnO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcHVibGljIGF1dG9TYXZlU2hvd1Jlc3RvcmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmF1dG9TYXZlUmVzdG9yZSgpPy5zYXZlZCAhPSBudWxsKTtcbiAgICBwcml2YXRlIGF1dG9TYXZlUHJldmlld0Rpc2FibGVkRm9ybSA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSBhdXRvU2F2ZUV2ZW50c1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLnBhcmVudDtcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpOiBGb3JtR3JvdXA8e1tLIGluIGtleW9mIEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8SXRlbVtLXT59PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICAgIH1cblxuICAgIGdldCBmb3JtVW5zYWZlKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybTtcbiAgICB9XG5cbiAgICBnZXQgZm9ybWx5T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1seUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seUZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHVzZWQgZm9yIGZvcm0gaW5pdGlhbGl6YXRpb24uIEZ1cnRoZXIgY2hhbmdlcyBzaG91bGQgYmUgZG9uZSB1c2luZyB7cmVzZXRGb3JtTW9kZWx9LlxuICAgICAqL1xuICAgIGdldCBmb3JtbHlJbml0aWFsSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seUluaXRpYWxJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmluaXQodGhpcyk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICAgICAgICAgIGlmIChpdGVtICE9PSB0aGlzLmluaXRpYWxJdGVtSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBuZXcgaXRlbSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIHRoZSBmb3JtIHdhcyBpbml0aWFsaXplZCB3aXRoLiBNdXN0IHRyaWdnZXIgcmVzZXQgb2YgZm9ybSBtb2RlbC5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgZXhlY3V0ZWQgaW4gdW50cmFja2VkIG1vZGUsIGJlY2F1c2UgaXQgdXBkYXRlcyBtdWx0aXBsZSBjb21wb25lbnRzIHVuZGVybmVhdGhcbiAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5yZXNldEZvcm1Nb2RlbChpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCgpIHx8IHRoaXMuYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtKCkgfHwgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuZGVzY3JpcHRvcj8uZGlzYWJsZWQgPT09IHRydWUgfHwgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuZGV0YWlscztcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWx5U3RhdGVEaXNhYmxlZFN1YmplY3QubmV4dCh0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlTG9hZFNhdmVkRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhcnRFdmVudENoYW5nZUxpc3Rlbih0aGlzLmF1dG9TYXZlU3RvcmFnZUtleUNvbXBJbml0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RvcmFnZUtleUNvbXBJbml0ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBpbml0IGZvcm0gc3RhdGVcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuYWRkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5lZGl0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXRhaWxzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgLy8gaW5pdCBmaWVsZHMgZm9yIGZvcm1seVxuICAgICAgICB0aGlzLl9mb3JtbHlGaWVsZHMgPSBjcmVhdGVGb3JtbHlDb25maWdGcm9tRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IoKSwgdGhpcy5mb3JtbHlDb25maWcsIHRoaXMpO1xuXG4gICAgICAgIC8vIGludCBmb3JtIG1vZGVsIChvbmx5IGluaXRpYWwsIG5vIGZ1cnRoZXIgY2hhbmdlcyB0byBmb3JtTW9kZWwgc2hvdWxkIGJlIGFsbG93ZWQhKVxuICAgICAgICB0aGlzLmluaXRpYWxJdGVtSW5wdXQgPSB0aGlzLml0ZW0oKTtcbiAgICAgICAgdGhpcy5fZm9ybWx5SW5pdGlhbEl0ZW0gPSB0aGlzLmdldEZvcm1Nb2RlbEZyb21JdGVtKHRoaXMuaXRlbSgpKTtcblxuICAgICAgICAvLyBoYW5kbGUgbG9jYWxpemF0aW9ucyBlZGl0L2FkZCBtZXNzYWdlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLmlzTG9jYWxpemVkICYmXG4gICAgICAgICAgICAodGhpcy5kZXNjcmlwdG9yKCkudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkIHx8IHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMuc2V0KFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZvcm1NZXNzYWdlcygpLFxuICAgICAgICAgICAgICAgIGdldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UsICdtbmdFZGl0b3IubG9jYWxpemF0aW9ucy5hZGRJbkRlZmF1bHRMYW5ndWFnZVRpdGxlJywgJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLmFkZEluRGVmYXVsdExhbmd1YWdlRGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZTogdGhpcy5jb21tb25zLmdldERlZmF1bHRMb2NhbGUoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fSU5JVFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybS5nZXRSYXdWYWx1ZSgpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlPy5lbWl0KHYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5WYWx1ZUNoYW5nZSwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgICAgICBmb3JtVmFsdWU6ICgpID0+IHRoaXMuZ2V0Rm9ybVZhbHVlKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG1hcmsgZm9ybSBhcyBwcmlzdGluZSwgc2hvdWxkIGJlIGRvbmUgaW4gbmV4dCBldmVudCBob29rIHRvIGFsbG93IGZvcm1seSB0byBpbml0aWFsaXplIGZpcnN0XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fREVTVFJPWVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3VibWl0KCkge1xuICAgICAgICB0aGlzLnN1Ym1pdEJ1dHRvbkVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25TdWJtaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLnN1Ym1pdHRlZE9uID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMuc2V0KFtdKTtcblxuICAgICAgICBjb25zdCBmb3JtU3VibWl0SXRlbSA9IHRoaXMuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3JtSXRlbTogZm9ybVN1Ym1pdEl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLlN1Ym1pdCwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICAgICAgc3VibWl0VmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VibWl0VmFsdWU6IGZvcm1TdWJtaXRJdGVtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25BdXRvU2F2ZURpc21pc3MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYW5kIG1hcmsgaW52YWxpZCB0YWJzXG4gICAgICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5fZm9ybWx5RmllbGRzO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZHNbMF0udHlwZSA9PT0gJ3RhYnMnICYmIGZvcm1GaWVsZHNbMF0uZmllbGRHcm91cCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFiIG9mIGZvcm1GaWVsZHNbMF0uZmllbGRHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZVsndGFiXycgKyAodGFiLmlkID8gdGFiLmlkIDogdGFiLmtleSA/PyAnJykgKyAnX2ludmFsaWQnXSA9IHRoaXMuaXNBbnlGaWVsZEludmFsaWQodGFiLmZpZWxkR3JvdXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IEZvcm1FZGl0b3JTdWJtaXRFdmVudDxJdGVtPiA9IHtzdWNjZXNzOiBmYWxzZSwgZm9ybUl0ZW06IGZvcm1TdWJtaXRJdGVtfTtcbiAgICAgICAgICAgIGV2ZW50LnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybU1lc3NhZ2VzKCkucHVzaChnZXRGb3JtRWRpdG9yV2FybmluZ01lc3NhZ2UodGhpcy50cmFuc2xhdGVTZXJ2aWNlLCAnbW5nRWRpdG9yLmludmFsaWRGb3JtVG9hc3RUaXRsZScsICdtbmdFZGl0b3IuaW52YWxpZEZvcm1Ub2FzdE1lc3NhZ2UnKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5TdWJtaXQsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgICAgIHN1Ym1pdFZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWx1ZTogZm9ybVN1Ym1pdEl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1WYWx1ZShvcHRzPzoge29taXRTZXR0ZXJzPzogYm9vbGVhbn0pOiBJdGVtIHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gb2JqZWN0RGVlcENvcHkodGhpcy5fZm9ybS5nZXRSYXdWYWx1ZSgpLCB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pO1xuXG4gICAgICAgIGlmIChvcHRzPy5vbWl0U2V0dGVycyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0ZXJGaWVsZHMoKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhdGggPSBmaWVsZC5wcm9wZXJ0eS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3ViUGF0aCA9IHNwbGl0UGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlW2N1cnJlbnRTdWJQYXRoXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWVbY3VycmVudFN1YlBhdGhdID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGRWYWx1ZVtjdXJyZW50U3ViUGF0aF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWVbc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICAgICAgZmllbGQuc2V0dGVyPy4oZm9ybVZhbHVlLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGb3JtTW9kZWwoaXRlbT86IEl0ZW0sIG9wdHM/OiBGb3JtRWRpdG9yUmVzZXRGb3JtTW9kZWxPcHRzKSB7XG4gICAgICAgIC8vIGhhdmUgdG8gdXNlIGZvcm1seSdzIHJlc2V0IG1vZGVsLCBiZWNhdXNlIF9mb3JtLnJlc2V0KCkgZG9lcyBub3QgcmVzZXQgdGhlIHZhbHVlcyBjb3JyZWN0bHlcbiAgICAgICAgdGhpcy5fZm9ybWx5T3B0aW9ucy5yZXNldE1vZGVsPy4odGhpcy5nZXRGb3JtTW9kZWxGcm9tSXRlbShpdGVtKSk7XG5cbiAgICAgICAgaWYgKG9wdHM/Lm1hcmtBc1ByaXN0aW5lICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gbWFyayBmb3JtIGFzIHByaXN0aW5lLCBzaG91bGQgYmUgZG9uZSBpbiBuZXh0IGV2ZW50IGhvb2sgdG8gYWxsb3cgZm9ybWx5IHRvIGluaXRpYWxpemUgZmlyc3RcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm0ubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiBvcHRzPy5vbmx5U2VsZn0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmllbGQoa2V5OiBrZXlvZiBJdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVW5zYWZlKGtleSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZFVuc2FmZShrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kRm9ybUZpZWxkKHRoaXMuX2Zvcm0sIGtleS5zcGxpdCgnLicpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RmllbGRWYWx1ZTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEl0ZW0+KGtleTogUHJvcGVydHksIHZhbHVlOiBJdGVtW1Byb3BlcnR5XSwgb3B0cz86IEZvcm1FZGl0b3JTZXRGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRGaWVsZFZhbHVlVW5zYWZlKGtleSBhcyBzdHJpbmcsIHZhbHVlLCBvcHRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RmllbGRWYWx1ZVVuc2FmZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0cz86IEZvcm1FZGl0b3JTZXRGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFZhbHVlIHdhcyBub3Qgc2V0LCBiZWNhdXNlIGZpZWxkICR7a2V5fSB3YXMgbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoRmllbGRWYWx1ZTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEl0ZW0+KGtleTogUHJvcGVydHksIHZhbHVlOiBJdGVtW1Byb3BlcnR5XSwgb3B0cz86IEZvcm1FZGl0b3JQYXRjaEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGNoRmllbGRWYWx1ZVVuc2FmZShrZXkgYXMgc3RyaW5nLCB2YWx1ZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoRmllbGRWYWx1ZVVuc2FmZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0cz86IEZvcm1FZGl0b3JQYXRjaEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZpZWxkVW5zYWZlKGtleSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUsIG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZpZWxkVmFsdWU8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBJdGVtPihrZXk6IFByb3BlcnR5LCB2YWx1ZT86IEl0ZW1bUHJvcGVydHldLCBvcHRzPzogRm9ybUVkaXRvclJlc2V0RmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzZXRGaWVsZFZhbHVlVW5zYWZlKGtleSBhcyBzdHJpbmcsIHZhbHVlLCBvcHRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGaWVsZFZhbHVlVW5zYWZlKGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSwgb3B0cz86IEZvcm1FZGl0b3JSZXNldEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZpZWxkVW5zYWZlKGtleSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBjb250cm9sLnJlc2V0KHZhbHVlLCBvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgVmFsdWUgd2FzIG5vdCBzZXQsIGJlY2F1c2UgZmllbGQgJHtrZXl9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyB0aGUgc2F2ZWQgbG9jYWwgc3RhdGUuXG4gICAgICogSWYgbG9jYWwgc3RvcmFnZSBrZXlzIGV4aXN0IGZvciBsb2NhbCBzdGF0ZSBhbmQgbG9jYWwgdGltZXN0YW1wLCByZXN0b3JlIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkF1dG9TYXZlUmVzdG9yZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMuYXV0b1NhdmVSZXN0b3JlKCk7XG4gICAgICAgIGlmIChyZXN0b3JlPy5zYXZlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0b3BWYWx1ZUNoYW5nZUxpc3RlbigpO1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1Nb2RlbChyZXN0b3JlLnNhdmVkKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVSZXN0b3JlLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0Lm5leHQoe3N0YXRlOiAncmVzdG9yZWQnLCB0aW1lc3RhbXA6IHJlc3RvcmUuc2F2ZWRBdCA/PyBuZXcgRGF0ZSgpfSk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUHJldmlld0Rpc2FibGVkRm9ybS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXJ0RXZlbnRDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXZpZXdzIHRoZSBzYXZlZCBsb2NhbCBzdGF0ZS5cbiAgICAgKiBJZiBsb2NhbCBzdG9yYWdlIGtleXMgZXhpc3QgZm9yIGxvY2FsIHN0YXRlIGFuZCBsb2NhbCB0aW1lc3RhbXAsIHJlc3RvcmUgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICovXG4gICAgcHVibGljIG9uQXV0b1NhdmVQcmV2aWV3KCkge1xuICAgICAgICBpZiAoIXRoaXMuYXV0b1NhdmVSZXN0b3JlKCk/LnNhdmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF1dG9TYXZlU3RvcFZhbHVlQ2hhbmdlTGlzdGVuKCk7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtLnNldCh0cnVlKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZS5zdGF0ZTtcbiAgICAgICAgaWYgKHN0YXRlICE9PSAncHJldmlldycgJiYgc3RhdGUgIT09ICdwcmV2aWV3Q3VycmVudCcpIHtcbiAgICAgICAgICAgIC8vIG11c3Qgc3RvcmUgb3JpZ2luYWwgdmFsdWUgZnJvbSBjdXJyZW50IHZhbHVlIGZvcm1cbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVSZXN0b3JlLnVwZGF0ZShpID0+ICh7Li4uaSwgb3JpZ2luYWw6IHRoaXMuZ2V0Rm9ybVZhbHVlKCl9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN0b3JlID0gdGhpcy5hdXRvU2F2ZVJlc3RvcmUoKTtcbiAgICAgICAgaWYgKHN0YXRlID09PSAncHJldmlldycgJiYgcmVzdG9yZT8ub3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwocmVzdG9yZS5vcmlnaW5hbCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ3ByZXZpZXdDdXJyZW50J30pO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlICE9PSAncHJldmlldycgJiYgcmVzdG9yZT8uc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwocmVzdG9yZS5zYXZlZCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ3ByZXZpZXcnLCB0aW1lc3RhbXA6IHJlc3RvcmUuc2F2ZWRBdCA/PyBuZXcgRGF0ZSgpfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxvY2FsIHN0YXRlIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBJZiBsb2NhbCBzdG9yYWdlIGtleXMgZXhpc3QgZm9yIGxvY2FsIHN0YXRlIGFuZCBsb2NhbCB0aW1lc3RhbXAsIHJlbW92ZSB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BdXRvU2F2ZURpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9TYXZlU3RvcmFnZUtleSgpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN0b3JlID0gdGhpcy5hdXRvU2F2ZVJlc3RvcmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZS5zdGF0ZSA9PT0gJ3ByZXZpZXcnICYmIHJlc3RvcmU/Lm9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1Nb2RlbChyZXN0b3JlLm9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ2luaXRpYWwnLCB0aW1lc3RhbXA6IG5ldyBEYXRlKCl9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tbW9uc1N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0odGhpcy5jbXBUeXBlTmFtZSwgdGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXkoKSk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUmVzdG9yZS5zZXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUHJldmlld0Rpc2FibGVkRm9ybS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXJ0RXZlbnRDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybU1vZGVsRnJvbUl0ZW0oaXRlbTogSXRlbSB8IHVuZGVmaW5lZCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IChvYmplY3REZWVwQ29weShpdGVtLCB7bWFwR2V0dGVyc1RvUHJvcGVydGllczogdHJ1ZX0pIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pID8/IHt9O1xuXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgZGVzY3JpcHRvci5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQuZ2V0dGVyICYmIGZvcm1Nb2RlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0UGF0aCA9IGZpZWxkLnByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRPYmplY3QgPSBmb3JtTW9kZWw7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0UGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3ViUGF0aCA9IHNwbGl0UGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHNwbGl0UGF0aC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0W2N1cnJlbnRTdWJQYXRoXSA9IGZpZWxkLmdldHRlcihmb3JtTW9kZWw/LltmaWVsZC5wcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLCBmb3JtTW9kZWwgYXMgSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3QgPSBjdXJyZW50T2JqZWN0W2N1cnJlbnRTdWJQYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1Nb2RlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRGb3JtRmllbGQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBrZXlQYXRoOiBzdHJpbmdbXSk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xuICAgICAgICBpZiAoa2V5UGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlQYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZ2V0KGtleVBhdGhbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0Q29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgICAgICBuZXh0Q29udHJvbCA9IGNvbnRyb2wuZ2V0KGtleVBhdGhbMF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9ICtrZXlQYXRoWzBdO1xuICAgICAgICAgICAgaWYgKCFpc05hTihpZHgpKSB7XG4gICAgICAgICAgICAgICAgbmV4dENvbnRyb2wgPSBjb250cm9sLmF0KGlkeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRGb3JtRmllbGQobmV4dENvbnRyb2whLCBrZXlQYXRoLnNsaWNlKDEpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQW55RmllbGRJbnZhbGlkKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICBsZXQgZmllbGRJbnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkSW52YWxpZCA9IHRoaXMuaXNBbnlGaWVsZEludmFsaWQoZmllbGQuZmllbGRHcm91cCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWVsZC50eXBlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZpZWxkSW52YWxpZCA9ICFmaWVsZC5mb3JtQ29udHJvbD8udmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGRJbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXV0b1NhdmVTdGFydEV2ZW50Q2hhbmdlTGlzdGVuKGluaXQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGVzY3JpcHRvcigpLmF1dG9TYXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hdXRvU2F2ZUV2ZW50c1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uID0gdGhpcy5fZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBmaXJzdCBvbmUgb24gaW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZS5zdGF0ZSAhPT0gJ3NhdmVkJyAmJiB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZS5zdGF0ZSAhPT0gJ3ByZXZpZXcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7Li4udGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUsIHN0YXRlOiAnc2F2aW5nJ30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg3NTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU2F2ZVRvU3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXQgPyAwIDogNTAwIC8vIGRlbGF5IGluaXRpYWwgZXZlbnQgbGlzdGVuaW5nIGZvciBhbGwgdGhlIGluaXRpYWxpemF0aW9ucyB0byB0YWtlIHBsYWNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVN0b3BWYWx1ZUNoYW5nZUxpc3RlbigpIHtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZUV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZUV2ZW50c1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgZm9ybSB2YWx1ZSB0byBsb2NhbFN0b3JhZ2UgaWYgYXV0b1NhdmUgaXMgZW5hYmxlZCBhbmQgdGhlIHJlcXVpcmVkIGtleXMgYXJlIGRlZmluZWQuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVNhdmVUb1N0b3JhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IoKS5hdXRvU2F2ZSAhPT0gdHJ1ZSB8fCB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZS5zdGF0ZSA9PT0gJ3ByZXZpZXcnIHx8IHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlID09PSAncHJldmlld0N1cnJlbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbW1vbnNTdG9yYWdlU2VydmljZS5zZXRJdGVtPEVkaXRvckF1dG9TYXZlUHJldmlld01vZGVsPEl0ZW0+Pih0aGlzLmNtcFR5cGVOYW1lLCB0aGlzLmF1dG9TYXZlU3RvcmFnZUtleSgpLCB7c2F2ZWQ6IHRoaXMuZ2V0Rm9ybVZhbHVlKCksIHNhdmVkQXQ6IG5ldyBEYXRlKCl9KTtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdzYXZlZCcsIHRpbWVzdGFtcDogbmV3IERhdGUoKX0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBsb2NhbCBzdG9yYWdlIGlmIGF2YWlsYWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgYXV0b1NhdmVMb2FkU2F2ZWRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge2F1dG9TYXZlLCBtb2RlbH0gPSB0aGlzLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgaWYgKGF1dG9TYXZlICYmIG1vZGVsLmkxOG5CYXNlS2V5KSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUmVzdG9yZS5zZXQodGhpcy5jb21tb25zU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbTxFZGl0b3JBdXRvU2F2ZVByZXZpZXdNb2RlbDxJdGVtPj4odGhpcy5jbXBUeXBlTmFtZSwgdGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXkoKSkgPz8gbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKGF1dG9TYXZlU2hvd1Jlc3RvcmUoKSkge1xuICAgIDxwLW1lc3NhZ2VzIHNldmVyaXR5PVwid2FyblwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ncm93LTEganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibS0wIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJwaSBwaS1zYXZlIG1yLTRcIj48L2VtPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7bGFzdENoYW5nZTogYXV0b1NhdmVSZXN0b3JlKCk/LnNhdmVkQXQgPyAoYXV0b1NhdmVSZXN0b3JlKCk/LnNhdmVkQXQhIHwgZGF0ZTogJ2RkLiBNTS4gWVlZWSBISDptbTpzcycpIDogJyd9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1zeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLnJlc3RvcmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cInJlc3RvcmVMb2NhbFN0YXRlQnV0dG9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BdXRvU2F2ZVJlc3RvcmUoKVwiPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYXV0b1NhdmUoKT8uc3RhdGUgIT09ICdwcmV2aWV3JyB8fCBhdXRvU2F2ZSgpPy5zdGF0ZSAhPT0gJ3ByZXZpZXdDdXJyZW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWV5ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYXV0b1NhdmVQcmV2aWV3QnV0dG9uTGFiZWwoKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwicHJldmlld0xvY2FsU3RhdGVCdXR0b25TdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXV0b1NhdmVQcmV2aWV3KClcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21uZ0VkaXRvci5hdXRvU2F2ZS5yZXN0b3JlLmRpc21pc3MnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImNsZWFyTG9jYWxTdGF0ZUJ1dHRvblN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkF1dG9TYXZlRGlzbWlzcygpXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC1tZXNzYWdlcz5cbn1cblxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICA8Zm9ybWx5LWZvcm0gW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZm9ybWx5RmllbGRzXCIgW29wdGlvbnNdPVwiZm9ybWx5T3B0aW9uc1wiIFttb2RlbF09XCJmb3JtbHlJbml0aWFsSXRlbVwiPjwvZm9ybWx5LWZvcm0+XG4gICAgPGJ1dHRvbiAjc3VibWl0QnV0dG9uIHBCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgW2Rpc2FibGVkXT1cImZvcm0uZGlzYWJsZWRcIiBbbG9hZGluZ109XCJzdWJtaXRMb2FkaW5nKClcIiBsb2FkaW5nSWNvbj1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvYnV0dG9uPlxuPC9mb3JtPlxuPHAtbWVzc2FnZXMgW3ZhbHVlXT1cImZvcm1NZXNzYWdlcygpXCIgW2VuYWJsZVNlcnZpY2VdPVwiZmFsc2VcIj48L3AtbWVzc2FnZXM+XG5cbkBpZiAoZGVzY3JpcHRvcigpLmF1dG9TYXZlICYmIHNob3dBdXRvU2F2ZVN0YXR1cygpKSB7XG4gICAgPG1uZy1lZGl0b3ItYXV0by1zYXZlLXN0YXR1cyBbc3RhdHVzXT1cImF1dG9TYXZlKClcIj48L21uZy1lZGl0b3ItYXV0by1zYXZlLXN0YXR1cz5cbn1cbiJdfQ==
|
|
@@ -302,7 +302,16 @@ class AutocompleteComponent {
|
|
|
302
302
|
if (value && this.optionsLabelTranslate()) {
|
|
303
303
|
value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];
|
|
304
304
|
}
|
|
305
|
-
this.ngModelValue
|
|
305
|
+
if (this.ngModelValue() == null && this._rawValue != null) {
|
|
306
|
+
// value must first be set to synchronise states, then in next async cycle set to wanted null value
|
|
307
|
+
this.ngModelValue.set(this._rawValue);
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
this.ngModelValue.set(value);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
this.ngModelValue.set(value);
|
|
314
|
+
}
|
|
306
315
|
}
|
|
307
316
|
getLookup(params, query) {
|
|
308
317
|
return toObservable(this.dataProvider().lookup(params, this.dataProviderService, query)).pipe(switchMap(items => {
|