@fundamental-ngx/platform 0.44.0-rc.2 → 0.44.0-rc.4
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/button/button.component.d.ts +8 -2
- package/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.d.ts +1 -1
- package/esm2022/action-bar/action-bar.component.mjs +9 -3
- package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow.component.mjs +14 -4
- package/esm2022/button/button.component.mjs +21 -1
- package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -2
- package/esm2022/feed-input/feed-input.component.mjs +12 -1
- package/esm2022/form/checkbox/checkbox.component.mjs +11 -1
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +1 -1
- package/esm2022/form/date-picker/date-picker.component.mjs +34 -1
- package/esm2022/form/datetime-picker/datetime-picker.component.mjs +45 -1
- package/esm2022/form/form-group/form-field/form-field.component.mjs +13 -3
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +1 -1
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
- package/esm2022/form/select/commons/base-select.mjs +9 -3
- package/esm2022/form/select/select/select.component.mjs +1 -1
- package/esm2022/form/time-picker/time-picker.component.mjs +17 -1
- package/esm2022/list/base-list-item.mjs +4 -1
- package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +31 -29
- package/esm2022/message-popover/components/message-view/message-view.component.mjs +12 -11
- package/esm2022/message-popover/message-popover.component.mjs +21 -22
- package/esm2022/page-footer/page-footer.component.mjs +11 -3
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +1 -1
- package/esm2022/search-field/search-field.component.mjs +34 -11
- package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +3 -3
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +8 -8
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +18 -17
- package/esm2022/settings-generator/settings-generator.component.mjs +14 -17
- package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +1 -1
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
- package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +1 -1
- package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +75 -21
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +14 -13
- package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +14 -11
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +7 -9
- package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +1 -1
- package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +5 -7
- package/esm2022/table/components/table-row/table-row.component.mjs +31 -32
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +1 -1
- package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +5 -4
- package/esm2022/table-helpers/directives/table-data-source.directive.mjs +8 -12
- package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +10 -11
- package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +9 -15
- package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +5 -8
- package/esm2022/thumbnail/thumbnail-details/thumbnail-details.component.mjs +10 -4
- package/esm2022/thumbnail/thumbnail-image/thumbnail-image.component.mjs +12 -4
- package/esm2022/thumbnail/thumbnail.component.mjs +13 -4
- package/esm2022/upload-collection/dialogs/move-to/move-to.component.mjs +1 -1
- package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +36 -3
- package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +23 -6
- package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +14 -2
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +36 -3
- package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +13 -16
- package/esm2022/variant-management/variant-management.component.mjs +1 -1
- package/feed-input/feed-input.component.d.ts +4 -1
- package/fesm2022/fundamental-ngx-platform-action-bar.mjs +10 -4
- package/fesm2022/fundamental-ngx-platform-action-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +17 -7
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-button.mjs +20 -0
- package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +11 -0
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-form.mjs +127 -8
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +3 -0
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +54 -50
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs +11 -3
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +34 -11
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +31 -33
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +82 -26
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +23 -35
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +64 -67
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-thumbnail.mjs +27 -8
- package/fesm2022/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +38 -5
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +70 -8
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +15 -16
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/form/checkbox/checkbox.component.d.ts +4 -2
- package/form/date-picker/date-picker.component.d.ts +16 -7
- package/form/datetime-picker/datetime-picker.component.d.ts +20 -8
- package/form/form-group/form-field/form-field.component.d.ts +4 -1
- package/form/time-picker/time-picker.component.d.ts +4 -1
- package/fundamental-ngx-platform-v0.44.0-rc.4.tgz +0 -0
- package/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.d.ts +22 -21
- package/message-popover/components/message-view/message-view.component.d.ts +4 -5
- package/message-popover/message-popover.component.d.ts +7 -6
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/search-field/search-field.component.d.ts +25 -19
- package/settings-generator/layouts/base-settings-generator-layout.d.ts +16 -17
- package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.d.ts +3 -3
- package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.d.ts +6 -7
- package/settings-generator/settings-generator.component.d.ts +8 -8
- package/smart-filter-bar/smart-filter-bar.class.d.ts +5 -5
- package/smart-filter-bar/smart-filter-bar.component.d.ts +31 -17
- package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +3 -3
- package/table/components/table-column-resizer/table-column-resizer.component.d.ts +1 -1
- package/table/components/table-row/table-row.component.d.ts +10 -10
- package/table-helpers/directives/table-data-source.directive.d.ts +11 -13
- package/table-helpers/directives/table-header-resizer.directive.d.ts +3 -3
- package/table-helpers/directives/table-scrollable.directive.d.ts +1 -1
- package/table-helpers/directives/table-virtual-scroll.directive.d.ts +1 -1
- package/thumbnail/thumbnail-details/thumbnail-details.component.d.ts +2 -2
- package/thumbnail/thumbnail-image/thumbnail-image.component.d.ts +1 -1
- package/upload-collection/upload-collection/upload-collection.component.d.ts +11 -5
- package/value-help-dialog/components/define-tab/define-tab.component.d.ts +8 -2
- package/value-help-dialog/components/select-tab/select-tab.component.d.ts +6 -3
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +12 -3
- package/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.d.ts +1 -3
- package/fundamental-ngx-platform-v0.44.0-rc.2.tgz +0 -0
|
@@ -20,6 +20,28 @@ export class PlatformDatetimePickerComponent extends BaseInput {
|
|
|
20
20
|
get value() {
|
|
21
21
|
return super.getValue();
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated use i18n capabilities instead (being translated in core datetime picker)
|
|
25
|
+
* Aria label for the datetime picker input.
|
|
26
|
+
*/
|
|
27
|
+
set datetimeInputLabel(value) {
|
|
28
|
+
console.warn('Property datetimeInputLabel is deprecated. Use i18n capabilities (being translated in core datetime picker) instead.');
|
|
29
|
+
this._datetimeInputLabel = value;
|
|
30
|
+
}
|
|
31
|
+
get datetimeInputLabel() {
|
|
32
|
+
return this._datetimeInputLabel;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated use i18n capabilities instead (being translated in core datetime picker)
|
|
36
|
+
* Aria label for the button to show/hide the calendar.
|
|
37
|
+
*/
|
|
38
|
+
set displayDatetimeToggleLabel(value) {
|
|
39
|
+
console.warn('Property displayDatetimeToggleLabel is deprecated. Use i18n capabilities (being translated in core datetime picker) instead.');
|
|
40
|
+
this._displayDatetimeToggleLabel = value;
|
|
41
|
+
}
|
|
42
|
+
get displayDatetimeToggleLabel() {
|
|
43
|
+
return this._displayDatetimeToggleLabel;
|
|
44
|
+
}
|
|
23
45
|
/**
|
|
24
46
|
* The state of the form control - applies css classes.
|
|
25
47
|
* Can be `success`, `error`, `warning`, `information` or blank for default.
|
|
@@ -34,6 +56,28 @@ export class PlatformDatetimePickerComponent extends BaseInput {
|
|
|
34
56
|
}
|
|
35
57
|
return super.state;
|
|
36
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* @deprecated use i18n capabilities instead
|
|
61
|
+
* Text and aria-label of the DateTimePicker 'OK' button.
|
|
62
|
+
*/
|
|
63
|
+
set okLabel(value) {
|
|
64
|
+
console.warn('Property okLabel is deprecated. Use i18n capabilities instead.');
|
|
65
|
+
this._okLabel = value;
|
|
66
|
+
}
|
|
67
|
+
get okLabel() {
|
|
68
|
+
return this._okLabel;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated use i18n capabilities instead
|
|
72
|
+
* Text and aria-label of the DateTimePicker 'Cancel' button.
|
|
73
|
+
*/
|
|
74
|
+
set cancelLabel(value) {
|
|
75
|
+
console.warn('Property cancelLabel is deprecated. Use i18n capabilities instead.');
|
|
76
|
+
this._cancelLabel = value;
|
|
77
|
+
}
|
|
78
|
+
get cancelLabel() {
|
|
79
|
+
return this._cancelLabel;
|
|
80
|
+
}
|
|
37
81
|
/** @hidden */
|
|
38
82
|
get _isRequired() {
|
|
39
83
|
return !!this.formField?.required;
|
|
@@ -335,4 +379,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
335
379
|
}], disableFunction: [{
|
|
336
380
|
type: Input
|
|
337
381
|
}] } });
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2RhdGV0aW1lLXBpY2tlci9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBYyxNQUFNLDRCQUE0QixDQUFDO0FBRzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDckcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7O0FBUWhFLE1BQU0sT0FBTywrQkFBbUMsU0FBUSxTQUFTO0lBQzdEOztPQUVHO0lBQ0gsSUFDSSxLQUFLLENBQUMsS0FBUTtRQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7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O2dCQVNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFPRixLQUFLO3NCQURSLEtBQUs7Z0JBa0JOLGVBQWU7c0JBRGQsS0FBSztnQkFXTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFRTixRQUFRO3NCQURQLEtBQUs7Z0JBV04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVVOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFTTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT04sb0JBQW9CO3NCQURuQixLQUFLO2dCQVFOLE9BQU87c0JBRE4sS0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTTtnQkFLRSxnQkFBZ0I7c0JBRHhCLE1BQU07Z0JBS0UsY0FBYztzQkFEdEIsTUFBTTtnQkFNRSxPQUFPO3NCQUZmLE1BQU07Z0JBTVAsdUJBQXVCO3NCQUR0QixTQUFTO3VCQUFDLHVCQUF1QjtnQkFLeEIsTUFBTTtzQkFEZixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUs1RCxRQUFRO3NCQURqQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQVFyRSxlQUFlO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MLCBGb3JtU3RhdGVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuXG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkLCBEYXlzT2ZXZWVrLCBGZENhbGVuZGFyVmlldyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYWxlbmRhcic7XG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZXRpbWVBZGFwdGVyLCBEYXRlVGltZUZvcm1hdHMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUtcGlja2VyJztcbmltcG9ydCB7IFBsYWNlbWVudCwgU3BlY2lhbERheVJ1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IEJhc2VJbnB1dCwgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLCBQbGF0Zm9ybUZvcm1GaWVsZCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgdXNlRXhpc3Rpbmc6IFBsYXRmb3JtRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1dXG59KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD4gZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiB2YWx1ZSBmb3IgZGF0ZXRpbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRCkge1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBEIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcG92ZXIuIEl0IGNhbiBiZSBvbmUgb2Y6IHRvcCwgdG9wLXN0YXJ0LCB0b3AtZW5kLCBib3R0b20sXG4gICAgICogIGJvdHRvbS1zdGFydCwgYm90dG9tLWVuZCwgcmlnaHQsIHJpZ2h0LXN0YXJ0LCByaWdodC1lbmQsIGxlZnQsIGxlZnQtc3RhcnQsIGxlZnQtZW5kLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcblxuICAgIC8qKiBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgcG9wb3ZlciBzaG91bGQgYmUgYXBwZW5kZWQuICovXG4gICAgQElucHV0KClcbiAgICBhcHBlbmRUbzogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3VsZCBiZSBtZXJpZGlhbiAoYW0vcG0pLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWVyaWRpYW46IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBzZWNvbmRzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVNlY29uZHM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBtaW51dGVzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheU1pbnV0ZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG93cyBob3Vycy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlIb3VyczogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHBlcmZvcm0gdmlzdWFsIHZhbGlkYXRpb24gb24gdGhlIHBpY2tlciBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZVZhbGlkYXRpb24gPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgb3Blbi4gVHdvLXdheSBiaW5kaW5nIGlzIHN1cHBvcnRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRoZSBzdGFydGluZyBkYXkgb2Ygd2VlayBmb3IgdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWs7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkIChiZWluZyB0cmFuc2xhdGVkIGluIGNvcmUgZGF0ZXRpbWUgcGlja2VyKVxuICAgICAqIEFyaWEgbGFiZWwgZm9yIHRoZSBkYXRldGltZSBwaWNrZXIgaW5wdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkYXRldGltZUlucHV0TGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkIChiZWluZyB0cmFuc2xhdGVkIGluIGNvcmUgZGF0ZXRpbWUgcGlja2VyKVxuICAgICAqIEFyaWEgbGFiZWwgZm9yIHRoZSBidXR0b24gdG8gc2hvdy9oaWRlIHRoZSBjYWxlbmRhci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgd2hlbiBzZXQgdG8gdHJ1ZSB0aW1lIGNvbXBvbmVudCB3aWxsIHVzZSAyIGRpZ2l0cyBmb3IgZWFjaCBudW1iZXIuXG4gICAgICogRm9yIGV4YW1wbGUgOSB3aWxsIGJlY29tZSAwOVxuICAgICAqIGJ1dCAxMiB3aWxsIGJlIGtlcHQgYXMgMTIuXG4gICAgICogT25seSB1c2VzIGJ5IHRpbWUgY29tcG9uZW50IGFuZCBkb2VzIG5vdCBjaGFuZ2UgaW5wdXQgZm9ybWF0XG4gICAgICovXG4gICAgQElucHV0KCkga2VlcFR3b0RpZ2l0c1RpbWUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGF0ZShzdGF0ZTogRm9ybVN0YXRlcyB8IHVuZGVmaW5lZCkge1xuICAgICAgICBzdXBlci5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQ/LmlzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgLy8gaWYgYW55IG90aGVyIGVycm9yIGZyb20gY29yZSBkdHBcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5zdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9fc3BlY2lhbC1kYXktLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggRmREYXRlIG9iamVjdCBhcyBhIHBhcmFtZXRlci4gZXg6XG4gICAgICogYHJ1bGU6IChmZERhdGU6IEZkRGF0ZSkgPT4gZmREYXRlLmdldERheSgpID09PSAxYCwgd2hpY2ggd2lsbCBtYXJrIGFsbCBzdW5kYXlzIGFzIHNwZWNpYWwgZGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3BlY2lhbERheXNSdWxlczogU3BlY2lhbERheVJ1bGU8RD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDVcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZ2dyZWdhdGVkWWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDNcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgV2hldGhlciB0byBzaG93IHNwaW5uZXIgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lckJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBkYXRldGltZSBwaWNrZXIgZm9vdGVyIHdpdGggc3VibWl0L2NhbmNlbCBidXR0b25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Zvb3RlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHZhbHVlIGZyb20gdGhlIGlucHV0IGFzIHVzZXIgdHlwZXMgb3Igb24gYmx1ci5cbiAgICAgKiBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoZSB2YWx1ZSBhcyB1c2VyIHR5cGVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldmVudCBwYWdlIHNjcm9sbGluZyB3aGVuIGZvY3VzaW5nIGRhdGUgcGlja2VyIGlucHV0IGZpZWxkIGFmdGVyIGNhbGVuZGFyIGhhcyBiZWVuIGNsb3NlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFRleHQgYW5kIGFyaWEtbGFiZWwgb2YgdGhlIERhdGVUaW1lUGlja2VyICdPSycgYnV0dG9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgb2tMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBUZXh0IGFuZCBhcmlhLWxhYmVsIG9mIHRoZSBEYXRlVGltZVBpY2tlciAnQ2FuY2VsJyBidXR0b24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjYW5jZWxMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkYXRlIGNoYW5nZXMuIFRoaXMgY2FuIGJlIGEgdGltZSBvciBkYXkgY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRhdGV0aW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBvcG92ZXIgY2xvc2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIHJlYWRvbmx5IG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEYXRldGltZVBpY2tlckNvbXBvbmVudClcbiAgICBkYXRlVGltZVBpY2tlckNvbXBvbmVudDogRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIF9lbFJlZjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEYXRldGltZVBpY2tlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IE5nQ29udHJvbCB9KVxuICAgIHByb3RlY3RlZCBfY29udHJvbDogTmdDb250cm9sO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLlxuICAgICAqIEBwYXJhbSBmZERhdGUgRmREYXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2lzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZm9ybUZpZWxkPy5yZXF1aXJlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIC8vIFVzZSBoZXJlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jZCwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZhdWx0IG1vZGVsIHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBfZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHVzZWQgd2l0aCBwbGF0Zm9ybSBmb3JtcywgYWRqdXN0IHdpZHRoIG9mIGRhdGV0aW1lcGlja2VyIHRvIHRha2UgMTAwJSBjb250YWluZXIgc3BhY2VcbiAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGp1c3RQaWNrZXJXaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBEKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb3ZlcnJpZGUgYmFzZSBmdW5jdGlvbmFsaXR5IHRvIGNhdGNoIG5ldyBkaXNhYmxlZCBzdGF0ZVxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZCk7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQ/LnNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBsb2dpYyB0byBoYW5kbGUgdmFsaWRhdGlvbiBmcm9tIGJvdGggcGxhdGZvcm0gZm9ybXMgYW5kIGNvcmUgZGF0ZXRpaW1lcGlja2VyXG4gICAgICogQHBhcmFtIGRhdGV0aW1lIGlucHV0dGVkXG4gICAgICovXG4gICAgaGFuZGxlRGF0ZXRpbWVJbnB1dENoYW5nZShkYXRldGltZTogRCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVBpY2tlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX2NvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5zZXRFcnJvcnModGhpcy5fY29udHJvbC5lcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGVUaW1lUGlja2VyQ29tcG9uZW50Ll9pbnB1dEZpZWxkRGF0ZSAmJiAhdGhpcy5hbGxvd051bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdlcnJvcic7IC8vIG51bGwgdmFsdWUgaW4gbm90IGFsbG93TnVsbCBzaG91bGQgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gdW5kZWZpbmVkOyAvLyByZXNldHRpbmcgdG8gZGVmYXVsdCBzdGF0ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIHZhbGlkIGRhdGV0aW1lIG9iamVjdFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQuX2lucHV0RmllbGREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGV0aW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdkYXRldGltZSBwaWNrZXI6IGhhbmRsZURhdGV0aW1lSW5wdXRDaGFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0ZXRpbWVDaGFuZ2UuZW1pdChkYXRldGltZSk7XG5cbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGNoYW5nZXMgd2hlbiBwb3BvdmVyIGlzIG9wZW5lZCBvciBjbG9zZWQuXG4gICAgICovXG4gICAgaGFuZGxlT3BlbkNoYW5nZSA9IChvcGVuOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGUgY2FsZW5kYXIgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICovXG4gICAgaGFuZGxlQWN0aXZlVmlld0NoYW5nZSA9IChmZENhbGVuZGFyVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoZmRDYWxlbmRhclZpZXcpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbWV0aG9kIHRoYXQgYWRqdXN0cyB3aWR0aCBvZiBkYXRldGltZXBpY2tlciB0byB0YWtlIDEwMCUgY29udGFpbmVyIHNwYWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWRqdXN0UGlja2VyV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVBvcG92ZXJFbCA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmZkLWRhdGV0aW1lIC5mZC1wb3BvdmVyLWN1c3RvbScpO1xuICAgICAgICBpZiAoIWN1c3RvbVBvcG92ZXJFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1c3RvbVBvcG92ZXJFbC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgfVxufVxuIiwiPGZkLWRhdGV0aW1lLXBpY2tlclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cIl9pc1JlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhTGFiZWxsZWRCeV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgW2F0dHIuYXJpYURlc2NyaWJlZEJ5XT1cImFyaWFEZXNjcmliZWRCeVwiXG4gICAgW2lucHV0SWRdPVwiaWRcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICBbbWVyaWRpYW5dPVwibWVyaWRpYW5cIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2Rpc3BsYXlTZWNvbmRzXT1cImRpc3BsYXlTZWNvbmRzXCJcbiAgICBbZGlzcGxheU1pbnV0ZXNdPVwiZGlzcGxheU1pbnV0ZXNcIlxuICAgIFtkaXNwbGF5SG91cnNdPVwiZGlzcGxheUhvdXJzXCJcbiAgICBbdXNlVmFsaWRhdGlvbl09XCJ1c2VWYWxpZGF0aW9uXCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICBbZGF0ZXRpbWVJbnB1dExhYmVsXT1cImRhdGV0aW1lSW5wdXRMYWJlbFwiXG4gICAgW2Rpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsXT1cImRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsXCJcbiAgICBbYWxsb3dOdWxsXT1cImFsbG93TnVsbCAmJiAhX2lzUmVxdWlyZWRcIlxuICAgIFtrZWVwVHdvRGlnaXRzVGltZV09XCJrZWVwVHdvRGlnaXRzVGltZVwiXG4gICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImJ1dHRvbkZvY3VzYWJsZVwiXG4gICAgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiXG4gICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgIFtzcGlubmVyQnV0dG9uc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgIFtzaG93Rm9vdGVyXT1cInNob3dGb290ZXJcIlxuICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uXCJcbiAgICBbcHJvY2Vzc0lucHV0T25CbHVyXT1cInByb2Nlc3NJbnB1dE9uQmx1clwiXG4gICAgW3ByZXZlbnRTY3JvbGxPbkZvY3VzXT1cInByZXZlbnRTY3JvbGxPbkZvY3VzXCJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVEYXRldGltZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJoYW5kbGVPcGVuQ2hhbmdlKCRldmVudClcIlxuICAgICh0b3VjaGVkKT1cIm9uVG91Y2hlZCgpXCJcbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2ZkLWRhdGV0aW1lLXBpY2tlcj5cbiJdfQ==
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2RhdGV0aW1lLXBpY2tlci9kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBYyxNQUFNLDRCQUE0QixDQUFDO0FBRzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDckcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7O0FBUWhFLE1BQU0sT0FBTywrQkFBbUMsU0FBUSxTQUFTO0lBQzdEOztPQUVHO0lBQ0gsSUFDSSxLQUFLLENBQUMsS0FBUTtRQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7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LFlBQVk7c0JBRFgsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFTTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT04sb0JBQW9CO3NCQURuQixLQUFLO2dCQVFGLE9BQU87c0JBRFYsS0FBSztnQkFlRixXQUFXO3NCQURkLEtBQUs7Z0JBWUcsWUFBWTtzQkFEcEIsTUFBTTtnQkFLRSxnQkFBZ0I7c0JBRHhCLE1BQU07Z0JBS0UsY0FBYztzQkFEdEIsTUFBTTtnQkFNRSxPQUFPO3NCQUZmLE1BQU07Z0JBTVAsdUJBQXVCO3NCQUR0QixTQUFTO3VCQUFDLHVCQUF1QjtnQkFLeEIsTUFBTTtzQkFEZixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUs1RCxRQUFRO3NCQURqQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQW1EckUsZUFBZTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcblxuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyR3JpZCwgRGF5c09mV2VlaywgRmRDYWxlbmRhclZpZXcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2FsZW5kYXInO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7IERhdGV0aW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lLXBpY2tlcic7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlSW5wdXQsIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCwgUGxhdGZvcm1Gb3JtRmllbGQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWRhdGV0aW1lLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIHVzZUV4aXN0aW5nOiBQbGF0Zm9ybURhdGV0aW1lUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9XVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybURhdGV0aW1lUGlja2VyQ29tcG9uZW50PEQ+IGV4dGVuZHMgQmFzZUlucHV0IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICogdmFsdWUgZm9yIGRhdGV0aW1lXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IEQpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogRCB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG91bGQgYmUgbWVyaWRpYW4gKGFtL3BtKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1lcmlkaWFuOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3Mgc2Vjb25kcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3MgbWludXRlcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlNaW51dGVzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3MgaG91cnMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5SG91cnM6IGJvb2xlYW47XG5cbiAgICAvKiogV2hldGhlciB0byBwZXJmb3JtIHZpc3VhbCB2YWxpZGF0aW9uIG9uIHRoZSBwaWNrZXIgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICB1c2VWYWxpZGF0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBwb3BvdmVyIGlzIG9wZW4uIFR3by13YXkgYmluZGluZyBpcyBzdXBwb3J0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBpc09wZW4gPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgc3RhcnRpbmcgZGF5IG9mIHdlZWsgZm9yIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgaW4gY2FsZW5kYXIgY29tcG9uZW50Ki9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZCAoYmVpbmcgdHJhbnNsYXRlZCBpbiBjb3JlIGRhdGV0aW1lIHBpY2tlcilcbiAgICAgKiBBcmlhIGxhYmVsIGZvciB0aGUgZGF0ZXRpbWUgcGlja2VyIGlucHV0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGV0aW1lSW5wdXRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdQcm9wZXJ0eSBkYXRldGltZUlucHV0TGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIChiZWluZyB0cmFuc2xhdGVkIGluIGNvcmUgZGF0ZXRpbWUgcGlja2VyKSBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZGF0ZXRpbWVJbnB1dExhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGV0aW1lSW5wdXRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZXRpbWVJbnB1dExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkIChiZWluZyB0cmFuc2xhdGVkIGluIGNvcmUgZGF0ZXRpbWUgcGlja2VyKVxuICAgICAqIEFyaWEgbGFiZWwgZm9yIHRoZSBidXR0b24gdG8gc2hvdy9oaWRlIHRoZSBjYWxlbmRhci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdQcm9wZXJ0eSBkaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgKGJlaW5nIHRyYW5zbGF0ZWQgaW4gY29yZSBkYXRldGltZSBwaWNrZXIpIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9kaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGV0aW1lVG9nZ2xlTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgYSBudWxsIGlucHV0IGlzIGNvbnNpZGVyZWQgdmFsaWQuICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd051bGwgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQElucHV0IHdoZW4gc2V0IHRvIHRydWUgdGltZSBjb21wb25lbnQgd2lsbCB1c2UgMiBkaWdpdHMgZm9yIGVhY2ggbnVtYmVyLlxuICAgICAqIEZvciBleGFtcGxlIDkgd2lsbCBiZWNvbWUgMDlcbiAgICAgKiBidXQgMTIgd2lsbCBiZSBrZXB0IGFzIDEyLlxuICAgICAqIE9ubHkgdXNlcyBieSB0aW1lIGNvbXBvbmVudCBhbmQgZG9lcyBub3QgY2hhbmdlIGlucHV0IGZvcm1hdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGtlZXBUd29EaWdpdHNUaW1lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IEZvcm1TdGF0ZXMgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgc3VwZXIuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUGlja2VyQ29tcG9uZW50Py5pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBvdGhlciBlcnJvciBmcm9tIGNvcmUgZHRwXG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX3NwZWNpYWwtZGF5LS17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKiogQElucHV0IFdoZXRoZXIgdG8gc2hvdyBzcGlubmVyIGJ1dHRvbnMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwaW5uZXJCdXR0b25zID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBzaG93IHdlZWsgbnVtYmVycyBuZXh0IHRvIGRheXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dXZWVrTnVtYmVycyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgZGF0ZXRpbWUgcGlja2VyIGZvb3RlciB3aXRoIHN1Ym1pdC9jYW5jZWwgYnV0dG9ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dGb290ZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZWNhbGN1bGF0ZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBhcyB1c2VyIHR5cGVzIG9yIG9uIGJsdXIuXG4gICAgICogQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGUgdmFsdWUgYXMgdXNlciB0eXBlcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0lucHV0T25CbHVyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHByZXZlbnQgcGFnZSBzY3JvbGxpbmcgd2hlbiBmb2N1c2luZyBkYXRlIHBpY2tlciBpbnB1dCBmaWVsZCBhZnRlciBjYWxlbmRhciBoYXMgYmVlbiBjbG9zZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBUZXh0IGFuZCBhcmlhLWxhYmVsIG9mIHRoZSBEYXRlVGltZVBpY2tlciAnT0snIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBva0xhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBva0xhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkLicpO1xuICAgICAgICB0aGlzLl9va0xhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IG9rTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29rTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBUZXh0IGFuZCBhcmlhLWxhYmVsIG9mIHRoZSBEYXRlVGltZVBpY2tlciAnQ2FuY2VsJyBidXR0b24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FuY2VsTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGNhbmNlbExhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkLicpO1xuICAgICAgICB0aGlzLl9jYW5jZWxMYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBjYW5jZWxMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuY2VsTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkYXRlIGNoYW5nZXMuIFRoaXMgY2FuIGJlIGEgdGltZSBvciBkYXkgY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGRhdGV0aW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBvcG92ZXIgY2xvc2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIHJlYWRvbmx5IG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEYXRldGltZVBpY2tlckNvbXBvbmVudClcbiAgICBkYXRlVGltZVBpY2tlckNvbXBvbmVudDogRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIF9lbFJlZjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEYXRldGltZVBpY2tlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IE5nQ29udHJvbCB9KVxuICAgIHByb3RlY3RlZCBfY29udHJvbDogTmdDb250cm9sO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2lzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZm9ybUZpZWxkPy5yZXF1aXJlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGV0aW1lSW5wdXRMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9va0xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbmNlbExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIC8vIFVzZSBoZXJlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jZCwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZhdWx0IG1vZGVsIHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBfZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhci5cbiAgICAgKiBAcGFyYW0gZmREYXRlIEZkRGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZUZ1bmN0aW9uOiAodmFsdWU6IEQpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHVzZWQgd2l0aCBwbGF0Zm9ybSBmb3JtcywgYWRqdXN0IHdpZHRoIG9mIGRhdGV0aW1lcGlja2VyIHRvIHRha2UgMTAwJSBjb250YWluZXIgc3BhY2VcbiAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGp1c3RQaWNrZXJXaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBEKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb3ZlcnJpZGUgYmFzZSBmdW5jdGlvbmFsaXR5IHRvIGNhdGNoIG5ldyBkaXNhYmxlZCBzdGF0ZVxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZCk7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQ/LnNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBsb2dpYyB0byBoYW5kbGUgdmFsaWRhdGlvbiBmcm9tIGJvdGggcGxhdGZvcm0gZm9ybXMgYW5kIGNvcmUgZGF0ZXRpaW1lcGlja2VyXG4gICAgICogQHBhcmFtIGRhdGV0aW1lIGlucHV0dGVkXG4gICAgICovXG4gICAgaGFuZGxlRGF0ZXRpbWVJbnB1dENoYW5nZShkYXRldGltZTogRCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVBpY2tlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX2NvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5zZXRFcnJvcnModGhpcy5fY29udHJvbC5lcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGVUaW1lUGlja2VyQ29tcG9uZW50Ll9pbnB1dEZpZWxkRGF0ZSAmJiAhdGhpcy5hbGxvd051bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdlcnJvcic7IC8vIG51bGwgdmFsdWUgaW4gbm90IGFsbG93TnVsbCBzaG91bGQgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gdW5kZWZpbmVkOyAvLyByZXNldHRpbmcgdG8gZGVmYXVsdCBzdGF0ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIHZhbGlkIGRhdGV0aW1lIG9iamVjdFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVQaWNrZXJDb21wb25lbnQuX2lucHV0RmllbGREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGV0aW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdkYXRldGltZSBwaWNrZXI6IGhhbmRsZURhdGV0aW1lSW5wdXRDaGFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0ZXRpbWVDaGFuZ2UuZW1pdChkYXRldGltZSk7XG5cbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGNoYW5nZXMgd2hlbiBwb3BvdmVyIGlzIG9wZW5lZCBvciBjbG9zZWQuXG4gICAgICovXG4gICAgaGFuZGxlT3BlbkNoYW5nZSA9IChvcGVuOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGUgY2FsZW5kYXIgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICovXG4gICAgaGFuZGxlQWN0aXZlVmlld0NoYW5nZSA9IChmZENhbGVuZGFyVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoZmRDYWxlbmRhclZpZXcpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbWV0aG9kIHRoYXQgYWRqdXN0cyB3aWR0aCBvZiBkYXRldGltZXBpY2tlciB0byB0YWtlIDEwMCUgY29udGFpbmVyIHNwYWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWRqdXN0UGlja2VyV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVBvcG92ZXJFbCA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmZkLWRhdGV0aW1lIC5mZC1wb3BvdmVyLWN1c3RvbScpO1xuICAgICAgICBpZiAoIWN1c3RvbVBvcG92ZXJFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1c3RvbVBvcG92ZXJFbC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgfVxufVxuIiwiPGZkLWRhdGV0aW1lLXBpY2tlclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cIl9pc1JlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhTGFiZWxsZWRCeV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgW2F0dHIuYXJpYURlc2NyaWJlZEJ5XT1cImFyaWFEZXNjcmliZWRCeVwiXG4gICAgW2lucHV0SWRdPVwiaWRcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICBbbWVyaWRpYW5dPVwibWVyaWRpYW5cIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2Rpc3BsYXlTZWNvbmRzXT1cImRpc3BsYXlTZWNvbmRzXCJcbiAgICBbZGlzcGxheU1pbnV0ZXNdPVwiZGlzcGxheU1pbnV0ZXNcIlxuICAgIFtkaXNwbGF5SG91cnNdPVwiZGlzcGxheUhvdXJzXCJcbiAgICBbdXNlVmFsaWRhdGlvbl09XCJ1c2VWYWxpZGF0aW9uXCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICBbZGF0ZXRpbWVJbnB1dExhYmVsXT1cImRhdGV0aW1lSW5wdXRMYWJlbFwiXG4gICAgW2Rpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsXT1cImRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsXCJcbiAgICBbYWxsb3dOdWxsXT1cImFsbG93TnVsbCAmJiAhX2lzUmVxdWlyZWRcIlxuICAgIFtrZWVwVHdvRGlnaXRzVGltZV09XCJrZWVwVHdvRGlnaXRzVGltZVwiXG4gICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImJ1dHRvbkZvY3VzYWJsZVwiXG4gICAgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiXG4gICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgIFtzcGlubmVyQnV0dG9uc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgIFtzaG93Rm9vdGVyXT1cInNob3dGb290ZXJcIlxuICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uXCJcbiAgICBbcHJvY2Vzc0lucHV0T25CbHVyXT1cInByb2Nlc3NJbnB1dE9uQmx1clwiXG4gICAgW3ByZXZlbnRTY3JvbGxPbkZvY3VzXT1cInByZXZlbnRTY3JvbGxPbkZvY3VzXCJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVEYXRldGltZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJoYW5kbGVPcGVuQ2hhbmdlKCRldmVudClcIlxuICAgICh0b3VjaGVkKT1cIm9uVG91Y2hlZCgpXCJcbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2ZkLWRhdGV0aW1lLXBpY2tlcj5cbiJdfQ==
|
|
@@ -41,6 +41,17 @@ const formGroupChildProvider = {
|
|
|
41
41
|
*
|
|
42
42
|
*/
|
|
43
43
|
export class FormFieldComponent {
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated use `hint.placement` input instead
|
|
46
|
+
* Defines hint placement
|
|
47
|
+
*/
|
|
48
|
+
set hintPlacement(value) {
|
|
49
|
+
console.warn('Property hintPlacement is deprecated. Use `hint.placement` instead.');
|
|
50
|
+
this._hintPlacement = value;
|
|
51
|
+
}
|
|
52
|
+
get hintPlacement() {
|
|
53
|
+
return this._hintPlacement;
|
|
54
|
+
}
|
|
44
55
|
/**
|
|
45
56
|
* @deprecated
|
|
46
57
|
* Use labelColumnLayout, fieldColumnLayout and gapColumnLayout properties.
|
|
@@ -336,8 +347,7 @@ export class FormFieldComponent {
|
|
|
336
347
|
}
|
|
337
348
|
/** @hidden */
|
|
338
349
|
hasErrors() {
|
|
339
|
-
|
|
340
|
-
return result;
|
|
350
|
+
return this._editable && !!this.control?.controlInvalid;
|
|
341
351
|
}
|
|
342
352
|
/**
|
|
343
353
|
* Register underlying form control
|
|
@@ -690,4 +700,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
690
700
|
type: ViewChild,
|
|
691
701
|
args: [InputMessageGroupWithTemplate, { read: ElementRef }]
|
|
692
702
|
}] } });
|
|
693
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFJVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFDVCxJQUFJLEVBRUosUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixXQUFXLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFnQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBT0gsY0FBYyxFQUNkLGtCQUFr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dGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBQcm92aWRlcixcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRm9ybUZpZWxkQ29udHJvbCwgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uTGF5b3V0LFxuICAgIEZpZWxkSGludE9wdGlvbnMsXG4gICAgRm9ybUVycm9yLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBGb3JtRmllbGRFcnJvckRpcmVjdGl2ZUNvbnRleHQsXG4gICAgRm9ybUZpZWxkR3JvdXAsXG4gICAgRm9ybUdyb3VwQ29udGFpbmVyLFxuICAgIEhpbnRQbGFjZW1lbnQsXG4gICAgTGFiZWxMYXlvdXQsXG4gICAgUkVTUE9OU0lWRV9CUkVBS1BPSU5UU19DT05GSUcsXG4gICAgUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcsXG4gICAgUmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZSxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBGaWVsZEhpbnRJbnB1dCxcbiAgICBIaW50Q29udGVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGdldEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgICBEZWZhdWx0SG9yaXpvbnRhbEZpZWxkTGF5b3V0LFxuICAgIERlZmF1bHRIb3Jpem9udGFsTGFiZWxMYXlvdXQsXG4gICAgRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQsXG4gICAgRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQsXG4gICAgRk9STV9HUk9VUF9DSElMRF9GSUVMRF9UT0tFTlxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29sdW1uQ2xhc3MsIG5vcm1hbGl6ZUNvbHVtbkxheW91dCB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29udHJvbEV4dHJhc0NvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQtZXh0cmFzL2Zvcm0tZmllbGQtZXh0cmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS9pbnB1dC1tZXNzYWdlLWdyb3VwLXdpdGgtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRkRQX0ZPUk1fRklFTERfSElOVF9MQVlPVVRfQ09ORklHLFxuICAgIEZEUF9GT1JNX0ZJRUxEX0hJTlRfT1BUSU9OU19ERUZBVUxULFxuICAgIEhpbnRMYXlvdXRDb25maWdcbn0gZnJvbSAnLi4vZmRwLWZvcm0udG9rZW5zJztcbmltcG9ydCB7IEZvcm1GaWVsZExheW91dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWZpZWxkLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZmllbGQtaGludC1vcHRpb25zJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG5cbmNvbnN0IGZvcm1GaWVsZFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGRF9GT1JNX0ZJRUxELFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudClcbn07XG5cbmNvbnN0IGZvcm1Hcm91cENoaWxkUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU4sXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUZpZWxkQ29tcG9uZW50KVxufTtcblxuLyoqXG4gKiBGb3JtIEZpZWxkIHJlcHJlc2VudCBhY3R1YWwgcm93IGFuZCBhZ2dyZWdhdGVzIGNvbW1vbiBiZWhhdmlvciBmb3IgdGhlIGlucHV0IGZpZWxkIHN1Y2ggYXNcbiAqIGVycm9yLCBsYWJlbCBvciBoaW50LlxuICogSGludCBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBsaXN0ZW5pbmcgZm9yIEZpZWxkQ29udHJvbCBjaGFuZ2VzIGFuZCB0cmlnZ2VyIG5lY2Vzc2FyeVxuICogY2hhbmdlIGRldGVjdGlvblxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZm9ybS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdmb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbZm9ybUZpZWxkUHJvdmlkZXIsIGZvcm1Hcm91cENoaWxkUHJvdmlkZXIsIEZvcm1GaWVsZExheW91dFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgUGxhdGZvcm1Gb3JtRmllbGQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogRm9ybSBmaWVsZCBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFN1ZmZpeCBmb3IgaWRzIG9mIGNvbnRyb2wgZWxlbWVudHMgaW5zaWRlIHRoaXMgZm9ybSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICgrK2RlZmF1bHRJZCkudG9TdHJpbmcoKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgaGludC5wbGFjZW1lbnRgIGlucHV0IGluc3RlYWRcbiAgICAgKiBEZWZpbmVzIGhpbnQgcGxhY2VtZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaW50UGxhY2VtZW50OiBIaW50UGxhY2VtZW50O1xuXG4gICAgLyoqIEhpbnQgdG8gYmUgcGxhY2VkIG5leHQgdG8gbGFiZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpbnQ6IE51bGxhYmxlPEZpZWxkSGludElucHV0PjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGxhYmVsQ29sdW1uTGF5b3V0LCBmaWVsZENvbHVtbkxheW91dCBhbmQgZ2FwQ29sdW1uTGF5b3V0IHByb3BlcnRpZXMuXG4gICAgICogRGVmaW5lIGZvcm0gZmllbGQgbGFiZWwgcGxhY2VtZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbGFiZWxMYXlvdXQodmFsdWU6IExhYmVsTGF5b3V0KSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdMYWJlbExheW91dCBpbnB1dCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGxhYmVsQ29sdW1uTGF5b3V0LCBmaWVsZENvbHVtbkxheW91dCBhbmQgZ2FwQ29sdW1uTGF5b3V0IHByb3BlcnRpZXMgaW5zdGVhZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFiZWxMYXlvdXQgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID1cbiAgICAgICAgICAgIHRoaXMuX2xhYmVsTGF5b3V0ID09PSAnaG9yaXpvbnRhbCcgPyBEZWZhdWx0SG9yaXpvbnRhbExhYmVsTGF5b3V0IDogRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQ7XG4gICAgICAgIHRoaXMuZmllbGRDb2x1bW5MYXlvdXQgPVxuICAgICAgICAgICAgdGhpcy5fbGFiZWxMYXlvdXQgPT09ICdob3Jpem9udGFsJyA/IERlZmF1bHRIb3Jpem9udGFsRmllbGRMYXlvdXQgOiBEZWZhdWx0VmVydGljYWxGaWVsZExheW91dDtcbiAgICB9XG5cbiAgICBnZXQgbGFiZWxMYXlvdXQoKTogTGFiZWxMYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxMYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZW4gZm9ybSBmaWVsZCBsYWJlbCBzaG91bGQgbm90IGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9MYWJlbExheW91dCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgdmFsaWRhdG9ycyBhcHBsaWVkIHRvIHRoZSBmb3JtIGZpZWxkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW1ZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcl07XG5cbiAgICAvKipcbiAgICAgKiBSYW5rIGlzIHVzZWQgZm9yIG9yZGVyaW5nLlxuICAgICAqIEZpcnN0IGxvd2VyIG51bWJlciwgdGhlbiAtIGhpZ2hlclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuazogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIC8qKiBGb3JtIENvbnRhaW5lciBjb2x1bW4gaXQgYmVsb25ncyB0byAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uOiBudW1iZXI7XG5cbiAgICAvKiogb2JqZWN0IGZvciBwbGFjaW5nIGZpZWxkIGluIGNvbHVtbiBpbiBlYWNoIHNjcmVlbiBsYXlvdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2x1bW5MYXlvdXQobGF5b3V0OiBDb2x1bW5MYXlvdXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb2x1bW5MYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldExheW91dCgpO1xuICAgIH1cblxuICAgIGdldCBjb2x1bW5MYXlvdXQoKTogQ29sdW1uTGF5b3V0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGxhYmVsJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsYWJlbENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3MgPSBnZW5lcmF0ZUNvbHVtbkNsYXNzKHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgIH1cblxuICAgIGdldCBsYWJlbENvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBmaWVsZCdzIGNvbHVtbiBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZmllbGRDb2x1bW5MYXlvdXQodmFsdWU6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3MgPSBnZW5lcmF0ZUNvbHVtbkNsYXNzKHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgIH1cblxuICAgIGdldCBmaWVsZENvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBnYXAgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBnYXBDb2x1bW5MYXlvdXQodmFsdWU6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQgPSBub3JtYWxpemVDb2x1bW5MYXlvdXQodmFsdWUpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZ2FwQ29sdW1uTGF5b3V0JC5uZXh0KHRoaXMuX2dhcENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGdhcENvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2FwQ29sdW1uTGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0aW9ucyB0ZW1wbGF0ZSByZWZlcmVuY2UuXG4gICAgICogVGhpcyBpcyBpbiBtb3N0IG9mIHRoZSBjYXNlcyBzZXQgZnJvbSBwYXJlbnQgY29udGFpbmVyIChmb3JtLWdyb3VwKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaTE4U3RyaW5nczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBTZXQgd2hlbiBmb3JtIGZpZWxkIGlzIGEgbWFuZGF0b3J5IG9uZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgZmllbGQgaXMgZWRpdGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBlZGl0YWJsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLl9lZGl0YWJsZSAhPT0gbmV3VmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0YWJsZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIGZpZWxkIGN1c3RvbSB3aWR0aCBpbiBjb2x1bW5zIG11c3QgYmUgYmV0d2VlbiAxIC0gMTJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2x1bW5zKHZhbHVlOiBDb2x1bW4pIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IDxDb2x1bW4+Y29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBjb2x1bW5zKCk6IENvbHVtbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1hcmtzIGZpZWxkIGFzIGRpc2FibGVkLiB1c2VkIGluIHJlYWN0aXZlIGZvcm0gYXBwcm9hY2guXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGFiZWwgdGV4dCBzaG91bGQgYmUgYXBwZW5kZWQgd2l0aCBjb2xvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIEdyb3VwIENvbnRhaW5lciB0byBiaW5kIHRoZSBGb3JtLUZpZWxkIHRvLlxuICAgICAqIFRoaXMgd2lsbCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlIGluamVjdGVkIGJ5IGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JtR3JvdXBDb250YWluZXI6IEZvcm1Hcm91cENvbnRhaW5lcjtcblxuICAgIC8qKiBFbWl0cyB3aGVuZXZlciBmb3JtRmllbGRDb250cm9sJ3Mgc3RhdGUgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW5ldmVyIGNvbHVtbiBsYXlvdXQgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uQ29sdW1uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9ybSBmaWVsZCB0ZW1wbGF0ZSByZWZlcmVuY2VcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdyZW5kZXJlcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcmVuZGVyZXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoRm9ybUZpZWxkQ29udHJvbEV4dHJhc0NvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgZm9ybUZpZWxkRXh0cmFzPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBfZXJyb3JEaXJlY3RpdmVRdWVyeTogUXVlcnlMaXN0PEZvcm1FcnJvcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xhYmVsQ29sJykgbGFiZWxDb2w/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5wdXRNZXNzYWdlR3JvdXA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIENvbWJpbmVkIEVycm9yIGRpcmVjdGl2ZXMgZnJvbSBmaWVsZCBpdHNlbGYgYW5kIHBhcmVudCBmb3JtIGNvbnRhaW5lci4gKi9cbiAgICBnZXQgZXJyb3JEaXJlY3RpdmVzKCk6IEZvcm1FcnJvcltdIHtcbiAgICAgICAgcmV0dXJuIHVuaXFCeShbLi4udGhpcy5fZXJyb3JEaXJlY3RpdmVzLCAuLi50aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNdLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzSG9yaXpvbnRhbCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBDaGlsZCBGb3JtRmllbGRDb250cm9sXG4gICAgICovXG4gICAgY29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dhcENvbHVtbkxheW91dENsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBoaW50IGFuZCBoaW50IHBsYWNlbWVudCBjb2VyY2VkIHRvIHRoZSBGaWVsZEhpbnRPcHRpb25zXG4gICAgICovXG4gICAgaGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnMgPSBkZWZhdWx0Rm9ybUZpZWxkSGludE9wdGlvbnMgYXMgdW5rbm93biBhcyBGaWVsZEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JEaXJlY3RpdmVzOiBGb3JtRXJyb3JbXSA9IFtdO1xuXG4gICAgLyoqIEdyb3VwZWQgZXJyb3JzLiAqL1xuICAgIGdyb3VwZWRFcnJvcnM6IEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dFtdID0gW107XG5cbiAgICAvKiogRXZlbnQgZW1pdGVkIHdoZW4gZXJyb3JzIG9iamVjdCBiZWluZyBjaGFuZ2VkLiAqL1xuICAgIGVycm9yc0NoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9wdGlvbmFsIEZvcm1Db250cm9sXG4gICAgICovXG4gICAgcHVibGljIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9jb2x1bW5zOiBDb2x1bW4gPSA2O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2VkaXRhYmxlID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9mb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0NvbHVtbkxheW91dEVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIGNvbHVtbiBudW1iZXIgZm9yIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMgKi9cbiAgICBwcml2YXRlIF94bENvbHVtbk51bWJlcjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sZ0NvbHVtbk51bWJlcjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tZENvbHVtbk51bWJlcjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zQ29sdW1uTnVtYmVyID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnOiBSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFiZWxMYXlvdXQ6IExhYmVsTGF5b3V0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maWVsZENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2FwQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlczogRm9ybUVycm9yW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlc0NkcjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hldGhlciBsYWJlbCBhbmQgY29udHJvbCBhcmUgdmVydGljYWxseSBhbGlnbmVkICovXG4gICAgcHJpdmF0ZSBnZXQgX2lzSG9yaXpvbnRhbEFsaWdubWVudCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0TWVzc2FnZUdyb3VwIHx8ICF0aGlzLmxhYmVsQ29sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlR3JvdXBZID0gdGhpcy5pbnB1dE1lc3NhZ2VHcm91cC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAgIGNvbnN0IGxhYmVsQ29sUmVjdCA9IHRoaXMubGFiZWxDb2wubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xCb3R0b21ZID0gbGFiZWxDb2xSZWN0LnkgKyBsYWJlbENvbFJlY3QuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gbGFiZWxDb2xCb3R0b21ZID4gaW5wdXRNZXNzYWdlR3JvdXBZO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdW0gb2YgZXh0cmEgaGVpZ2h0cyBpbnNpZGUgZm9ybSBjb250cm9sIGFuZCBmb3JtRmllbGRFeHRyYXMuXG4gICAgICogTGFiZWwgd2lsbCBiZSBzaGlmdGVkIGJ5IHRoaXMgbnVtYmVyIGluIG9yZGVyIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgd2l0aCB0aGUgY29udHJvbFxuICAgICAqL1xuICAgIGdldCBfY29udHJvbEV4dHJhc0hlaWdodFB4KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5ub0xhYmVsTGF5b3V0IHx8ICF0aGlzLl9pc0hvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIC8vIHByb2NlZWQgb25seSBpZiAxLiB0aGVyZSdzIGEgbGFiZWw7IDIuIGNvbnRyb2wgaGFzIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLmZvcm1GaWVsZEV4dHJhcz8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMCkgKyAodGhpcy5jb250cm9sPy5leHRyYUNvbnRlbnRIZWlnaHRQeCA/PyAwKSB8fCBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmllbGRDb2x1bW5MYXlvdXQkOiBCZWhhdmlvclN1YmplY3Q8Q29sdW1uTGF5b3V0PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dhcENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfZ3JvdXBIb3N0KCk6IEZvcm1Hcm91cENvbnRhaW5lciB8IEZvcm1GaWVsZEdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkR3JvdXAgPyB0aGlzLmZvcm1GaWVsZEdyb3VwIDogdGhpcy5mb3JtR3JvdXBDb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCBiZSB1cGRhdGVkIGR1cmluZyBvbkNoYW5nZXMgYW5kIHJlc2l6ZSwgcmVzdWx0aW5nIGNvcnJlY3QgcGxhY2VtZW50IG9mIHRoZVxuICAgICAqIGhpbnQgcmVzcGVjdGluZyBwYXNzZWQgY29uZmlncyBhbmQgZ2l2ZW4gYnJlYWtwb2ludCBvZiBzY3JlZW4uXG4gICAgICovXG4gICAgaGludFRhcmdldD86IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYnJlYWtQb2ludE9ic2VydmVyOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1GaWVsZExheW91dFNlcnZpY2U6IEZvcm1GaWVsZExheW91dFNlcnZpY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0SGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIGZvcm1Hcm91cENvbnRhaW5lcjogRm9ybUdyb3VwQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSByZWFkb25seSBmb3JtRmllbGRHcm91cDogRm9ybUZpZWxkR3JvdXAsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoUkVTUE9OU0lWRV9CUkVBS1BPSU5UU19DT05GSUcpXG4gICAgICAgIHJlYWRvbmx5IF9kZWZhdWx0UmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWc6IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnLFxuICAgICAgICByZWFkb25seSBfcmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZTogUmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZSxcbiAgICAgICAgQEluamVjdChGRFBfRk9STV9GSUVMRF9ISU5UX09QVElPTlNfREVGQVVMVCkgX3Byb3ZpZGVkSGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnMsXG4gICAgICAgIEBJbmplY3QoRkRQX0ZPUk1fRklFTERfSElOVF9MQVlPVVRfQ09ORklHKSBwcml2YXRlIF9oaW50TGF5b3V0Q29uZmlnOiBIaW50TGF5b3V0Q29uZmlnLFxuICAgICAgICBAU2VsZigpIF9zZWxmRm9ybUZpZWxkTGF5b3V0U2VydmljZTogRm9ybUZpZWxkTGF5b3V0U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgX3BhcmVudEZvcm1GaWVsZExheW91dFNlcnZpY2U6IEZvcm1GaWVsZExheW91dFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZvcm1GaWVsZEhpbnRPcHRpb25zLFxuICAgICAgICAgICAgLi4uX3Byb3ZpZGVkSGludE9wdGlvbnNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZSA9IF9wYXJlbnRGb3JtRmllbGRMYXlvdXRTZXJ2aWNlIHx8IF9zZWxmRm9ybUZpZWxkTGF5b3V0U2VydmljZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9sYWJlbENvbHVtbkxheW91dCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9nYXBDb2x1bW5MYXlvdXQpO1xuICAgICAgICAvLyBmb3JtR3JvdXBDb250YWluZXIgY2FuIGJlIGluamVjdGVkIG9ubHkgaWYgY3VycmVudCBmb3JtLWZpZWxkIGlzIGxvY2F0ZWRcbiAgICAgICAgLy8gaW5zaWdodCBmb3JtR3JvdXBDb250YWluZXIgY29udGVudC5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UgdGhlIGZvcm1Hcm91cENvbnRhaW5lclxuICAgICAgICAvLyB3aWxsIGJlIHVuZGVmaW5lZCAoa25vd24gYW5ndWxhciBpc3N1ZSksXG4gICAgICAgIC8vIGluIHN1Y2ggY2FzZSBmb3JtR3JvdXBDb250YWluZXIgY2FuIGJlIHBvaW50ZWQgZXhwbGljaXRseSB1c2luZ1xuICAgICAgICAvLyBjb21wb25lbnQgaW5wdXQgYW5ub3RhdGlvblxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lciA9IGZvcm1Hcm91cENvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcgPSBfZGVmYXVsdFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnIHx8IG5ldyBSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZygpO1xuICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXIgPSB0aGlzLl9yZXNwb25zaXZlQnJlYWtwb2ludHNTZXJ2aWNlLm9ic2VydmVCcmVha3BvaW50QnlDb25maWcoXG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaW5pdGlhbCB2YWx1ZXMgZm9yIGxhYmVsLCBmaWVsZCBhbmQgZ2FwIGNvbHVtbnNcbiAgICAgKi9cbiAgICBzZXREZWZhdWx0Q29sdW1uTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBsYXlvdXQgYWxyZWFkeSBkZWZpbmVkLCBubyBuZWVkIHRvIHNldCBkZWZhdWx0IG9uZS5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxDb2x1bW5MYXlvdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlblRvSW5saW5lSGVscFBsYWNlUmVxdWlyZW1lbnRDaGFuZ2VzKCgpID0+ICh0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID8gdGhpcyA6IHRoaXMuX2dyb3VwSG9zdCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoZ2V0U291cmNlOiAoKSA9PiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24gPSB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2V0TGF5b3V0cyA9IChzb3VyY2U6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYWJlbENvbHVtbkxheW91dCA9IHNvdXJjZS5sYWJlbENvbHVtbkxheW91dDtcbiAgICAgICAgICAgIHRoaXMuZmllbGRDb2x1bW5MYXlvdXQgPSBzb3VyY2UuZmllbGRDb2x1bW5MYXlvdXQ7XG4gICAgICAgICAgICB0aGlzLmdhcENvbHVtbkxheW91dCA9IHNvdXJjZS5nYXBDb2x1bW5MYXlvdXQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uID0gdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5uZWVkc0lubGluZUhlbHBQbGFjZVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2UuZ2V0Rml4ZWRMYXlvdXRzKGdldFNvdXJjZSgpKSksXG4gICAgICAgICAgICAgICAgdGFwKHNldExheW91dHMpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIHByb3ZpZGVzIGNhcGFiaWxpdHkgdG8gbWFrZSBhIGZpZWxkIGRpc2FibGVkLiB1c2VmdWwgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaC5cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICAgICAgICAodGhpcy5mb3JtR3JvdXBDb250YWluZXI/LmZvcm1Hcm91cD8uZ2V0KHRoaXMuaWQpIGFzIEZvcm1Db250cm9sKSA/P1xuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgKHRoaXMuY29sdW1ucyA8IDEgfHwgdGhpcy5jb2x1bW5zID4gMTIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tjb2x1bW5zXSBhY2NlcHRzIG51bWJlcnMgYmV0d2VlbiAxIC0gMTInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc0NvbHVtbkxheW91dEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2JyZWFrUG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChicmVha1BvaW50TmFtZSkgPT4gdGhpcy5fdXBkYXRlTGF5b3V0KGJyZWFrUG9pbnROYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hZGRUb0Zvcm1Hcm91cCgpO1xuXG4gICAgICAgIHRoaXMuaXNIb3Jpem9udGFsJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCBtYXAobm9ybWFsaXplQ29sdW1uTGF5b3V0KSksXG4gICAgICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIG1hcChub3JtYWxpemVDb2x1bW5MYXlvdXQpKSxcbiAgICAgICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCQucGlwZShtYXAoKGcpID0+IG5vcm1hbGl6ZUNvbHVtbkxheW91dChnIHx8IHsgUzogMCB9KSkpXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFtsYWJlbCwgZmllbGQsIGdhcF0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoYnJlYWtwb2ludE5hbWUpID0+IGxhYmVsW2JyZWFrcG9pbnROYW1lXSArIGZpZWxkW2JyZWFrcG9pbnROYW1lXSArIGdhcFticmVha3BvaW50TmFtZV0gPD0gMTIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxpc3RlblRvSW5saW5lSGVscFBsYWNlUmVxdWlyZW1lbnRDaGFuZ2VzKCgpID0+IHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5oaW50IHx8IGNoYW5nZXMuaGludFBsYWNlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGludE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2Uuc2V0TmVlZHNJbmxpbmVIZWxwKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgKHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnaW5wdXQnIHx8IHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnYXV0bycpICYmICEhdGhpcy5oaW50XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhpbnQgJiYgY2hhbmdlcy5oaW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKChzaXplTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnRUYXJnZXQgPSB0aGlzLl9oaW50TGF5b3V0Q29uZmlnLmhpbnRPbklucHV0QnJlYWtwb2ludHMuaW5jbHVkZXMoc2l6ZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2lucHV0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludFRhcmdldCA9IHRoaXMuaGludE9wdGlvbnMudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk7XG5cbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVRdWVyeS5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl91cGRhdGVDb250cm9sUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUVycm9ySGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5yZW1vdmVFbnRyeSh0aGlzKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbUZvcm1Hcm91cCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZWRpdGFibGUgJiYgISF0aGlzLmNvbnRyb2w/LmNvbnRyb2xJbnZhbGlkO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gICAgICogQHBhcmFtIGZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICByZWdpc3RlckZvcm1GaWVsZENvbnRyb2woZm9ybUZpZWxkQ29udHJvbDogRm9ybUZpZWxkQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRm9ybSBmaWVsZCBjYW4gY29udGFpbiBvbmx5IG9uZSBGb3JtRmllbGRDb250cm9sJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSBmb3JtRmllbGRDb250cm9sIGFzIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbDtcblxuICAgICAgICBmb3JtRmllbGRDb250cm9sLnN0YXRlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY2FsbCBleHBsaWNpdGx5IGRldGVjdENoYW5nZXMoKSBpbnN0ZWFkIG9mIG1hcmtGb3JDaGVjayBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyBtb2RpZmllZCB2YWxpZGF0aW9uIHN0YXRlIG9mIHRoZSBjb250cm9sIHBhc3NlcyBvdmVyIGNoZWNrZWQgcGhhc2VcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgnc3RhdGVDaGFuZ2VzJyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRXJyb3JzKCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggVUkgd2hlbiB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGlmIChmb3JtRmllbGRDb250cm9sPy5uZ0NvbnRyb2w/LnZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgndmFsdWVDaGFuZ2VzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgaGFzUmVxdWlyZWRWYWxpZGF0b3IgPVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9ycy5pbmNsdWRlcyhWYWxpZGF0b3JzLnJlcXVpcmVkKSB8fCB0aGlzLnZhbGlkYXRvcnMuaW5jbHVkZXMoVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhaGFzUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1JlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGZvcm0gY29udHJvbCBpcyBkaXNhYmxlZCwgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaFxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGVyZSBpcyBhIGNhc2Ugd2hlbiBhIFwiZm9ybS1ncm91cFwiIGluaXRpYWwgc3RhdGUgaXMgVkFMSUQsXG4gICAgICAgICAgICAgKiBhbmQgb24gdGhlIG5leHQgbG9vcCBhIGNoaWxkIGZvcm0tZmlsZWQgZXh0ZW5kcyBpdCBhbmQgbWFrZVxuICAgICAgICAgICAgICogdGhlIGZvcm0tZ3JvdXAgSU5WQUxJRC5cbiAgICAgICAgICAgICAqIEluIHN1Y2ggY2FzZSB3ZSBnZXQgdGhlIGVycm9yXG4gICAgICAgICAgICAgKiBcIkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuIFByZXZpb3VzIHZhbHVlIGlzIG5nLXZhbGlkLCBjdXJyZW50IHZhbHVlIGlzIG5nLWludmFsaWRcIi5cbiAgICAgICAgICAgICAqIFRvIGZpeCBpdCB3ZSBoYXZlIHRvIHBvc3Rwb25lIGFkZGluZyBmb3JtLWZpZWxkIHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy52YWxpZGF0b3JzKSk7XG4gICAgICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtR3JvdXAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVucmVnaXN0ZXIgdW5kZXJseWluZyBmb3JtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkQ29udHJvbFxuICAgICAqL1xuICAgIHVucmVnaXN0ZXJGb3JtRmllbGRDb250cm9sKGZvcm1GaWVsZENvbnRyb2w6IEZvcm1GaWVsZENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZENvbnRyb2wgIT09IHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBRdWV1ZSB0YXNrIGJlY2F1c2UgZmlyaW5nIGl0IHJpZ2h0IGF3YXkgbWF5IGNhdXNlIGVycm9yIHdpdGggc2hvd2luZyBlbXB0eSBtZXNzYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZEVycm9ycyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5jb250cm9sPy5uZ0NvbnRyb2w/LmVycm9ycztcbiAgICAgICAgICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVycm9yRGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yc1tkaXJlY3RpdmUuZXJyb3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRFcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yc1tkaXJlY3RpdmUuZXJyb3JdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBwcmlvcml0aXplZCBjb250cm9sIHN0YXRlIGJhc2VkIG9uIHRoZSBlcnJvciB0eXBlcyBpdCBoYXMuXG4gICAgICovXG4gICAgZ2V0UHJpb3JpdHlTdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0Vycm9ycygpID8gJ2Vycm9yJyA6ICdkZWZhdWx0JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRGb3JtU3RhdGUodGhpcy5ncm91cGVkRXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLmRpcmVjdGl2ZS50eXBlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBlcnJvciBkaXJlY3RpdmVzLlxuICAgICAqL1xuICAgIHNldEVycm9yRGlyZWN0aXZlcyhkaXJlY3RpdmVzOiBRdWVyeUxpc3Q8Rm9ybUVycm9yPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKCFkaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPSBkaXJlY3RpdmVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGNvbnRlbnQgb2YgdGhlIHByb3ZpZGVkIGhpbnQgaXMgYSBzdHJpbmcuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzU3RyaW5nSGludChoaW50T3B0aW9uczogSGludENvbnRlbnQpOiBoaW50T3B0aW9ucyBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGhpbnRPcHRpb25zID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlRXJyb3JIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9lZGl0YWJsZSAmJlxuICAgICAgICAgICAgdGhpcy5jb250cm9sICYmXG4gICAgICAgICAgICB0aGlzLl9oYXNWYWxpZGF0b3JzKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmkxOFN0cmluZ3MgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBzdHJpbmdzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGFueSBwcm92aWRlZCB2YWxpZGF0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFzVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycyAmJiB0aGlzLnZhbGlkYXRvcnMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQWRkIEZvcm1GaWVsZCB0byBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRUb0Zvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lciB8fCB0aGlzLmZvcm1GaWVsZEdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5hZGRGb3JtRmllbGQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlbW92ZSBGb3JtRmllbGQgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVGcm9tRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIucmVtb3ZlRm9ybUZpZWxkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBZGQgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRDb250cm9sVG9Gb3JtR3JvdXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIgfHwgISF0aGlzLmZvcm1GaWVsZEdyb3VwPy5mb3JtTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLmFkZEZvcm1Db250cm9sKHRoaXMuaWQsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZW1vdmUgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLnJlbW92ZUZvcm1Db250cm9sKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZXNlIHByb3BlcnRpZXMgb24gZXZlcnkgbGV2ZWwuXG4gICAgICogIC0gR2xvYmFsIEZvcm1Hcm91cCBMZXZlbCBhcyB3ZWxsIGVhY2ggZmllbGRcbiAgICAgKlxuICAgICAqICBUb2RvOiB1c2UgbW9yZSBlbGVnYW50IHdheSB0byBzZXQgdGhlc2UgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVDb250cm9sUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLl9lZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmlkID0gdGhpcy5pZDtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh0aGlzLmNvbHVtbkxheW91dCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxheW91dCA9IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgICB0aGlzLl9zQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnUyddO1xuICAgICAgICAgICAgdGhpcy5fbWRDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydNJ107XG4gICAgICAgICAgICB0aGlzLl9sZ0NvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ0wnXTtcbiAgICAgICAgICAgIHRoaXMuX3hsQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnWEwnXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVMYXlvdXQoY3VycmVudEJyZWFraW5nUG9pbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50QnJlYWtpbmdQb2ludE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9zQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9tZENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5fbGdDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1hMJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgY29sdW1uIGNoYW5nZSwgc28gZm9ybS1ncm91cCBrbm93cyBpdCBhbmQgcmUtYXJyYW5nZXMgdGhlIGZpZWxkc1xuICAgICAgICB0aGlzLm9uQ29sdW1uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVIaW50T3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gcGxhY2VtZW50IGlzIGhlcmUgc2V0IHVwIGJlY2F1c2UgaGludFBsYWNlbWVudCBpcyBkZXByZWNhdGVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnc3RyaW5nJyB8fCB0aGlzLmhpbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmhpbnRQbGFjZW1lbnQgPyB0aGlzLmhpbnRQbGFjZW1lbnQgOiB0aGlzLl9kZWZhdWx0SGludE9wdGlvbnMucGxhY2VtZW50LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuaGludFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmhpbnRQbGFjZW1lbnQgPyB0aGlzLmhpbnRQbGFjZW1lbnQgOiB0aGlzLl9kZWZhdWx0SGludE9wdGlvbnMucGxhY2VtZW50LFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGludFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlcyA9IHRoaXMuX2Vycm9yRGlyZWN0aXZlUXVlcnkudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyLmFkZChcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUuZGV0ZWN0Q2hhbmdlcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjcmVuZGVyZXI+XG4gICAgPGRpdiBbaG9yaXpvbnRhbF09XCJ0cnVlXCIgZmQtZm9ybS1pdGVtIGNsYXNzPVwiZmQtcm93XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtY29sXCJcbiAgICAgICAgICAgICNsYWJlbENvbFxuICAgICAgICAgICAgW2NsYXNzXT1cIl9sYWJlbENvbHVtbkxheW91dENsYXNzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vTGFiZWxMYXlvdXRcIlxuICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiX2NvbnRyb2xFeHRyYXNIZWlnaHRQeFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3aXRoRm9ybU1lc3NhZ2VcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdhcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgW2lkXT1cIidmZHAtZm9ybS1oaW50LScgKyBpZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdHJpbmdIaW50KGhpbnRPcHRpb25zLmNvbnRlbnQpOyBlbHNlIGhpbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAge3sgaGludE9wdGlvbnMuY29udGVudCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNoaW50VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShoaW50T3B0aW9ucy5jb250ZW50KVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN3aXRoRm9ybU1lc3NhZ2U+XG4gICAgPGZkcC1pbnB1dC1tZXNzYWdlLWdyb3VwXG4gICAgICAgIGNsYXNzPVwiZmQtY29sXCJcbiAgICAgICAgW2NsYXNzXT1cIl9maWVsZENvbHVtbkxheW91dENsYXNzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgID5cbiAgICAgICAgPCEtLVxuICAgICAgICAgVG9kbzogd2Ugc2hvdWxkIGV4dGVuZCB0aGlzIG9uIEZvcm1Hcm91cCBMZXZlbCBhbmQgaGF2ZSBlcnJvciB0cmlnZ2VyIHN0cmF0ZWd5IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvXG4gICAgICAgICBhbGwgdGhlIGZpZWxkIGUuZy46IFt0cmlnZ2Vyc109XCJbJ21vdXNlZW50ZXInLCAnbW91c2VsZWF2ZSddXCJcbiAgICAgICAgIC0tPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdHJpZ2dlckl0ZW0+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0Vycm9ycygpICYmIGdyb3VwZWRFcnJvcnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZ3JvdXBlZEVycm9yc1wiIFt0eXBlXT1cImVycm9yLmRpcmVjdGl2ZS50eXBlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0lmXT1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGVycm9yLmVycm9yLCBsYWJlbDogbGFiZWwgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmICYmIGVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nSWZdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mZC1mb3JtLW1lc3NhZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgKm5nSWY9XCJncm91cGVkRXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBoYXNFcnJvcnMoKSAmJiBpMThTdHJpbmdzXCIgdHlwZT1cImVycm9yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaTE4U3RyaW5nczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbnRyb2w/Lm5nQ29udHJvbD8uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICA8L2ZkcC1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoaW50VGFyZ2V0ID09PSAnbGFiZWwnOyBlbHNlIHdpdGhvdXRIaW50XCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgW2lkXT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImVkaXRhYmxlICYmIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGZkLWZvcm0tbGFiZWxcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwQ29udGVudF09XCJoaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwQm9keVBsYWNlbWVudF09XCJoaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgJ3RvcCdcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBQbGFjZW1lbnRdPVwiaGludE9wdGlvbnMucG9zaXRpb24gfHwgJ2FmdGVyJ1wiXG4gICAgICAgICAgICBbaW5saW5lSGVscEdseXBoXT1cImhpbnRPcHRpb25zLmdseXBoIHx8ICcnXCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwVHJpZ2dlcnNdPVwiaGludE9wdGlvbnMudHJpZ2dlciB8fCBbXVwiXG4gICAgICAgICAgICBbYWxpZ25MYWJlbEVuZF09XCIhIShpc0hvcml6b250YWwkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtjb2xvbl09XCJjb2xvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtY29udGVudC0nICsgaWRcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3dpdGhvdXRIaW50PlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtJyArIGlkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJlZGl0YWJsZSAmJiByZXF1aXJlZFwiXG4gICAgICAgICAgICBmZC1mb3JtLWxhYmVsXG4gICAgICAgICAgICBbY29sb25dPVwiY29sb25cIlxuICAgICAgICAgICAgW2FsaWduTGFiZWxFbmRdPVwiISEoaXNIb3Jpem9udGFsJCB8IGFzeW5jKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtY29udGVudC0nICsgaWRcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNnYXBUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGludFRhcmdldCA9PT0gJ2lucHV0JyAmJiBoaW50T3B0aW9ucy5jb250ZW50OyBlbHNlIHdpdGhvdXRIaW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2wgZmQtZm9ybS1maWVsZC1pbmxpbmUtaGVscC1jb250YWluZXJcIiBbY2xhc3NdPVwiX2dhcENvbHVtbkxheW91dENsYXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBmZC1saW5rIFt1bmRlY29yYXRlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cImhpbnRPcHRpb25zLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiaGludE9wdGlvbnMuZ2x5cGhcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBsYWNlbWVudCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cImhpbnRPcHRpb25zLnRyaWdnZXIgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjd2l0aG91dEhpbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2xcIiBbY2xhc3NdPVwiX2dhcENvbHVtbkxheW91dENsYXNzXCI+PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
703
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvZm9ybS9mb3JtLWdyb3VwL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFJVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFDVCxJQUFJLEVBRUosUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixXQUFXLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFnQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBT0gsY0FBYyxFQUNkLGtCQUFr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UTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUlyQixpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBQcm92aWRlcixcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRm9ybUZpZWxkQ29udHJvbCwgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uTGF5b3V0LFxuICAgIEZpZWxkSGludE9wdGlvbnMsXG4gICAgRm9ybUVycm9yLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBGb3JtRmllbGRFcnJvckRpcmVjdGl2ZUNvbnRleHQsXG4gICAgRm9ybUZpZWxkR3JvdXAsXG4gICAgRm9ybUdyb3VwQ29udGFpbmVyLFxuICAgIEhpbnRQbGFjZW1lbnQsXG4gICAgTGFiZWxMYXlvdXQsXG4gICAgUkVTUE9OU0lWRV9CUkVBS1BPSU5UU19DT05GSUcsXG4gICAgUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcsXG4gICAgUmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZSxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBGaWVsZEhpbnRJbnB1dCxcbiAgICBIaW50Q29udGVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGdldEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgICBEZWZhdWx0SG9yaXpvbnRhbEZpZWxkTGF5b3V0LFxuICAgIERlZmF1bHRIb3Jpem9udGFsTGFiZWxMYXlvdXQsXG4gICAgRGVmYXVsdFZlcnRpY2FsRmllbGRMYXlvdXQsXG4gICAgRGVmYXVsdFZlcnRpY2FsTGFiZWxMYXlvdXQsXG4gICAgRk9STV9HUk9VUF9DSElMRF9GSUVMRF9UT0tFTlxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29sdW1uQ2xhc3MsIG5vcm1hbGl6ZUNvbHVtbkxheW91dCB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29udHJvbEV4dHJhc0NvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQtZXh0cmFzL2Zvcm0tZmllbGQtZXh0cmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS9pbnB1dC1tZXNzYWdlLWdyb3VwLXdpdGgtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRkRQX0ZPUk1fRklFTERfSElOVF9MQVlPVVRfQ09ORklHLFxuICAgIEZEUF9GT1JNX0ZJRUxEX0hJTlRfT1BUSU9OU19ERUZBVUxULFxuICAgIEhpbnRMYXlvdXRDb25maWdcbn0gZnJvbSAnLi4vZmRwLWZvcm0udG9rZW5zJztcbmltcG9ydCB7IEZvcm1GaWVsZExheW91dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWZpZWxkLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZmllbGQtaGludC1vcHRpb25zJztcblxubGV0IGRlZmF1bHRJZCA9IDA7XG5cbmNvbnN0IGZvcm1GaWVsZFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGRF9GT1JNX0ZJRUxELFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudClcbn07XG5cbmNvbnN0IGZvcm1Hcm91cENoaWxkUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU4sXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUZpZWxkQ29tcG9uZW50KVxufTtcblxuLyoqXG4gKiBGb3JtIEZpZWxkIHJlcHJlc2VudCBhY3R1YWwgcm93IGFuZCBhZ2dyZWdhdGVzIGNvbW1vbiBiZWhhdmlvciBmb3IgdGhlIGlucHV0IGZpZWxkIHN1Y2ggYXNcbiAqIGVycm9yLCBsYWJlbCBvciBoaW50LlxuICogSGludCBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBsaXN0ZW5pbmcgZm9yIEZpZWxkQ29udHJvbCBjaGFuZ2VzIGFuZCB0cmlnZ2VyIG5lY2Vzc2FyeVxuICogY2hhbmdlIGRldGVjdGlvblxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtZm9ybS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdmb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbZm9ybUZpZWxkUHJvdmlkZXIsIGZvcm1Hcm91cENoaWxkUHJvdmlkZXIsIEZvcm1GaWVsZExheW91dFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgUGxhdGZvcm1Gb3JtRmllbGQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogRm9ybSBmaWVsZCBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFN1ZmZpeCBmb3IgaWRzIG9mIGNvbnRyb2wgZWxlbWVudHMgaW5zaWRlIHRoaXMgZm9ybSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICgrK2RlZmF1bHRJZCkudG9TdHJpbmcoKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgaGludC5wbGFjZW1lbnRgIGlucHV0IGluc3RlYWRcbiAgICAgKiBEZWZpbmVzIGhpbnQgcGxhY2VtZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGludFBsYWNlbWVudCh2YWx1ZTogSGludFBsYWNlbWVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGhpbnRQbGFjZW1lbnQgaXMgZGVwcmVjYXRlZC4gVXNlIGBoaW50LnBsYWNlbWVudGAgaW5zdGVhZC4nKTtcbiAgICAgICAgdGhpcy5faGludFBsYWNlbWVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBoaW50UGxhY2VtZW50KCk6IEhpbnRQbGFjZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5faGludFBsYWNlbWVudDtcbiAgICB9XG5cbiAgICAvKiogSGludCB0byBiZSBwbGFjZWQgbmV4dCB0byBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGludDogTnVsbGFibGU8RmllbGRIaW50SW5wdXQ+O1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiBVc2UgbGFiZWxDb2x1bW5MYXlvdXQsIGZpZWxkQ29sdW1uTGF5b3V0IGFuZCBnYXBDb2x1bW5MYXlvdXQgcHJvcGVydGllcy5cbiAgICAgKiBEZWZpbmUgZm9ybSBmaWVsZCBsYWJlbCBwbGFjZW1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsYWJlbExheW91dCh2YWx1ZTogTGFiZWxMYXlvdXQpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ0xhYmVsTGF5b3V0IGlucHV0IHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbGFiZWxDb2x1bW5MYXlvdXQsIGZpZWxkQ29sdW1uTGF5b3V0IGFuZCBnYXBDb2x1bW5MYXlvdXQgcHJvcGVydGllcyBpbnN0ZWFkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYWJlbExheW91dCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMubGFiZWxDb2x1bW5MYXlvdXQgPVxuICAgICAgICAgICAgdGhpcy5fbGFiZWxMYXlvdXQgPT09ICdob3Jpem9udGFsJyA/IERlZmF1bHRIb3Jpem9udGFsTGFiZWxMYXlvdXQgOiBEZWZhdWx0VmVydGljYWxMYWJlbExheW91dDtcbiAgICAgICAgdGhpcy5maWVsZENvbHVtbkxheW91dCA9XG4gICAgICAgICAgICB0aGlzLl9sYWJlbExheW91dCA9PT0gJ2hvcml6b250YWwnID8gRGVmYXVsdEhvcml6b250YWxGaWVsZExheW91dCA6IERlZmF1bHRWZXJ0aWNhbEZpZWxkTGF5b3V0O1xuICAgIH1cblxuICAgIGdldCBsYWJlbExheW91dCgpOiBMYWJlbExheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbExheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBmb3JtIGZpZWxkIGxhYmVsIHNob3VsZCBub3QgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub0xhYmVsTGF5b3V0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiB2YWxpZGF0b3JzIGFwcGxpZWQgdG8gdGhlIGZvcm0gZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yXTtcblxuICAgIC8qKlxuICAgICAqIFJhbmsgaXMgdXNlZCBmb3Igb3JkZXJpbmcuXG4gICAgICogRmlyc3QgbG93ZXIgbnVtYmVyLCB0aGVuIC0gaGlnaGVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5rOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGZpZWxkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIEZvcm0gQ29udGFpbmVyIGNvbHVtbiBpdCBiZWxvbmdzIHRvICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW46IG51bWJlcjtcblxuICAgIC8qKiBvYmplY3QgZm9yIHBsYWNpbmcgZmllbGQgaW4gY29sdW1uIGluIGVhY2ggc2NyZWVuIGxheW91dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbHVtbkxheW91dChsYXlvdXQ6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIWxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbHVtbkxheW91dCA9IGxheW91dDtcbiAgICAgICAgdGhpcy5faXNDb2x1bW5MYXlvdXRFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uTGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgbGFiZWwncyBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsQ29sdW1uTGF5b3V0KHZhbHVlOiBDb2x1bW5MYXlvdXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9sYWJlbENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmaWVsZENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9maWVsZENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGdhcCBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGdhcENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dENsYXNzID0gZ2VuZXJhdGVDb2x1bW5DbGFzcyh0aGlzLl9nYXBDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICB9XG5cbiAgICBnZXQgZ2FwQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nYXBDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRpb25zIHRlbXBsYXRlIHJlZmVyZW5jZS5cbiAgICAgKiBUaGlzIGlzIGluIG1vc3Qgb2YgdGhlIGNhc2VzIHNldCBmcm9tIHBhcmVudCBjb250YWluZXIgKGZvcm0tZ3JvdXApXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpMThTdHJpbmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFNldCB3aGVuIGZvcm0gZmllbGQgaXMgYSBtYW5kYXRvcnkgb25lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJlcXVpcmVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiBmaWVsZCBpcyBlZGl0YWJsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVkaXRhYmxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRhYmxlICE9PSBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRhYmxlID0gbmV3VmFsO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm0gZmllbGQgY3VzdG9tIHdpZHRoIGluIGNvbHVtbnMgbXVzdCBiZSBiZXR3ZWVuIDEgLSAxMlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbHVtbnModmFsdWU6IENvbHVtbikge1xuICAgICAgICB0aGlzLl9jb2x1bW5zID0gPENvbHVtbj5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbHVtbnMoKTogQ29sdW1uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWFya3MgZmllbGQgYXMgZGlzYWJsZWQuIHVzZWQgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBsYWJlbCB0ZXh0IHNob3VsZCBiZSBhcHBlbmRlZCB3aXRoIGNvbG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZvcm0gR3JvdXAgQ29udGFpbmVyIHRvIGJpbmQgdGhlIEZvcm0tRmllbGQgdG8uXG4gICAgICogVGhpcyB3aWxsIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgaW5qZWN0ZWQgYnkgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1Hcm91cENvbnRhaW5lcjogRm9ybUdyb3VwQ29udGFpbmVyO1xuXG4gICAgLyoqIEVtaXRzIHdoZW5ldmVyIGZvcm1GaWVsZENvbnRyb2wncyBzdGF0ZSBjaGFuZ2VzICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbmV2ZXIgY29sdW1uIGxheW91dCBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25Db2x1bW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGb3JtIGZpZWxkIHRlbXBsYXRlIHJlZmVyZW5jZVxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICByZW5kZXJlcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChGb3JtRmllbGRDb250cm9sRXh0cmFzQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBmb3JtRmllbGRFeHRyYXM/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGb3JtRmllbGRFcnJvckRpcmVjdGl2ZSlcbiAgICBwcml2YXRlIF9lcnJvckRpcmVjdGl2ZVF1ZXJ5OiBRdWVyeUxpc3Q8Rm9ybUVycm9yPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGFiZWxDb2wnKSBsYWJlbENvbD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbnB1dE1lc3NhZ2VHcm91cDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQ29tYmluZWQgRXJyb3IgZGlyZWN0aXZlcyBmcm9tIGZpZWxkIGl0c2VsZiBhbmQgcGFyZW50IGZvcm0gY29udGFpbmVyLiAqL1xuICAgIGdldCBlcnJvckRpcmVjdGl2ZXMoKTogRm9ybUVycm9yW10ge1xuICAgICAgICByZXR1cm4gdW5pcUJ5KFsuLi50aGlzLl9lcnJvckRpcmVjdGl2ZXMsIC4uLnRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlc10sICdlcnJvcicpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNIb3Jpem9udGFsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIENoaWxkIEZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICBjb250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbGFiZWxDb2x1bW5MYXlvdXRDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZmllbGRDb2x1bW5MYXlvdXRDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2FwQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIGhpbnQgYW5kIGhpbnQgcGxhY2VtZW50IGNvZXJjZWQgdG8gdGhlIEZpZWxkSGludE9wdGlvbnNcbiAgICAgKi9cbiAgICBoaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucyA9IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyBhcyB1bmtub3duIGFzIEZpZWxkSGludE9wdGlvbnM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lcnJvckRpcmVjdGl2ZXM6IEZvcm1FcnJvcltdID0gW107XG5cbiAgICAvKiogR3JvdXBlZCBlcnJvcnMuICovXG4gICAgZ3JvdXBlZEVycm9yczogRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmVDb250ZXh0W10gPSBbXTtcblxuICAgIC8qKiBFdmVudCBlbWl0ZWQgd2hlbiBlcnJvcnMgb2JqZWN0IGJlaW5nIGNoYW5nZWQuICovXG4gICAgZXJyb3JzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT3B0aW9uYWwgRm9ybUNvbnRyb2xcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2NvbHVtbnM6IENvbHVtbiA9IDY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZWRpdGFibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gY29sdW1uIG51bWJlciBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcyAqL1xuICAgIHByaXZhdGUgX3hsQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xnQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21kQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NDb2x1bW5OdW1iZXIgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWc6IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbExheW91dDogTGFiZWxMYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhYmVsQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpZWxkQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nYXBDb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzOiBGb3JtRXJyb3JbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZXJyb3JEaXJlY3RpdmVzQ2RyOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hpbnRQbGFjZW1lbnQ6IEhpbnRQbGFjZW1lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiB3aGV0aGVyIGxhYmVsIGFuZCBjb250cm9sIGFyZSB2ZXJ0aWNhbGx5IGFsaWduZWQgKi9cbiAgICBwcml2YXRlIGdldCBfaXNIb3Jpem9udGFsQWxpZ25tZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRNZXNzYWdlR3JvdXAgfHwgIXRoaXMubGFiZWxDb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dE1lc3NhZ2VHcm91cFkgPSB0aGlzLmlucHV0TWVzc2FnZUdyb3VwLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xSZWN0ID0gdGhpcy5sYWJlbENvbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBsYWJlbENvbEJvdHRvbVkgPSBsYWJlbENvbFJlY3QueSArIGxhYmVsQ29sUmVjdC5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBsYWJlbENvbEJvdHRvbVkgPiBpbnB1dE1lc3NhZ2VHcm91cFk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFN1bSBvZiBleHRyYSBoZWlnaHRzIGluc2lkZSBmb3JtIGNvbnRyb2wgYW5kIGZvcm1GaWVsZEV4dHJhcy5cbiAgICAgKiBMYWJlbCB3aWxsIGJlIHNoaWZ0ZWQgYnkgdGhpcyBudW1iZXIgaW4gb3JkZXIgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCB3aXRoIHRoZSBjb250cm9sXG4gICAgICovXG4gICAgZ2V0IF9jb250cm9sRXh0cmFzSGVpZ2h0UHgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLm5vTGFiZWxMYXlvdXQgfHwgIXRoaXMuX2lzSG9yaXpvbnRhbEFsaWdubWVudCkge1xuICAgICAgICAgICAgLy8gcHJvY2VlZCBvbmx5IGlmIDEuIHRoZXJlJ3MgYSBsYWJlbDsgMi4gY29udHJvbCBoYXMgdmVydGljYWwgYWxpZ25tZW50XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMuZm9ybUZpZWxkRXh0cmFzPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwKSArICh0aGlzLmNvbnRyb2w/LmV4dHJhQ29udGVudEhlaWdodFB4ID8/IDApIHx8IG51bGxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhYmVsQ29sdW1uTGF5b3V0JDogQmVoYXZpb3JTdWJqZWN0PENvbHVtbkxheW91dD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maWVsZENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2FwQ29sdW1uTGF5b3V0JDogQmVoYXZpb3JTdWJqZWN0PENvbHVtbkxheW91dD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9ncm91cEhvc3QoKTogRm9ybUdyb3VwQ29udGFpbmVyIHwgRm9ybUZpZWxkR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRmllbGRHcm91cCA/IHRoaXMuZm9ybUZpZWxkR3JvdXAgOiB0aGlzLmZvcm1Hcm91cENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIGJlIHVwZGF0ZWQgZHVyaW5nIG9uQ2hhbmdlcyBhbmQgcmVzaXplLCByZXN1bHRpbmcgY29ycmVjdCBwbGFjZW1lbnQgb2YgdGhlXG4gICAgICogaGludCByZXNwZWN0aW5nIHBhc3NlZCBjb25maWdzIGFuZCBnaXZlbiBicmVha3BvaW50IG9mIHNjcmVlbi5cbiAgICAgKi9cbiAgICBoaW50VGFyZ2V0Pzogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9icmVha1BvaW50T2JzZXJ2ZXI6IE9ic2VydmFibGU8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUZpZWxkTGF5b3V0U2VydmljZTogRm9ybUZpZWxkTGF5b3V0U2VydmljZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgZm9ybUdyb3VwQ29udGFpbmVyOiBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHJlYWRvbmx5IGZvcm1GaWVsZEdyb3VwOiBGb3JtRmllbGRHcm91cCxcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChSRVNQT05TSVZFX0JSRUFLUE9JTlRTX0NPTkZJRylcbiAgICAgICAgcmVhZG9ubHkgX2RlZmF1bHRSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZzogUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcsXG4gICAgICAgIHJlYWRvbmx5IF9yZXNwb25zaXZlQnJlYWtwb2ludHNTZXJ2aWNlOiBSZXNwb25zaXZlQnJlYWtwb2ludHNTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0ZJRUxEX0hJTlRfT1BUSU9OU19ERUZBVUxUKSBfcHJvdmlkZWRIaW50T3B0aW9uczogRmllbGRIaW50T3B0aW9ucyxcbiAgICAgICAgQEluamVjdChGRFBfRk9STV9GSUVMRF9ISU5UX0xBWU9VVF9DT05GSUcpIHByaXZhdGUgX2hpbnRMYXlvdXRDb25maWc6IEhpbnRMYXlvdXRDb25maWcsXG4gICAgICAgIEBTZWxmKCkgX3NlbGZGb3JtRmllbGRMYXlvdXRTZXJ2aWNlOiBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBfcGFyZW50Rm9ybUZpZWxkTGF5b3V0U2VydmljZTogRm9ybUZpZWxkTGF5b3V0U2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0SGludE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0Rm9ybUZpZWxkSGludE9wdGlvbnMsXG4gICAgICAgICAgICAuLi5fcHJvdmlkZWRIaW50T3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlID0gX3BhcmVudEZvcm1GaWVsZExheW91dFNlcnZpY2UgfHwgX3NlbGZGb3JtRmllbGRMYXlvdXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9maWVsZENvbHVtbkxheW91dCk7XG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2dhcENvbHVtbkxheW91dCk7XG4gICAgICAgIC8vIGZvcm1Hcm91cENvbnRhaW5lciBjYW4gYmUgaW5qZWN0ZWQgb25seSBpZiBjdXJyZW50IGZvcm0tZmllbGQgaXMgbG9jYXRlZFxuICAgICAgICAvLyBpbnNpZ2h0IGZvcm1Hcm91cENvbnRhaW5lciBjb250ZW50LlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSB0aGUgZm9ybUdyb3VwQ29udGFpbmVyXG4gICAgICAgIC8vIHdpbGwgYmUgdW5kZWZpbmVkIChrbm93biBhbmd1bGFyIGlzc3VlKSxcbiAgICAgICAgLy8gaW4gc3VjaCBjYXNlIGZvcm1Hcm91cENvbnRhaW5lciBjYW4gYmUgcG9pbnRlZCBleHBsaWNpdGx5IHVzaW5nXG4gICAgICAgIC8vIGNvbXBvbmVudCBpbnB1dCBhbm5vdGF0aW9uXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyID0gZm9ybUdyb3VwQ29udGFpbmVyO1xuICAgICAgICB0aGlzLl9yZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZyA9IF9kZWZhdWx0UmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcgfHwgbmV3IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuX2JyZWFrUG9pbnRPYnNlcnZlciA9IHRoaXMuX3Jlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2Uub2JzZXJ2ZUJyZWFrcG9pbnRCeUNvbmZpZyhcbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBpbml0aWFsIHZhbHVlcyBmb3IgbGFiZWwsIGZpZWxkIGFuZCBnYXAgY29sdW1uc1xuICAgICAqL1xuICAgIHNldERlZmF1bHRDb2x1bW5MYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIC8vIElmIGxheW91dCBhbHJlYWR5IGRlZmluZWQsIG5vIG5lZWQgdG8gc2V0IGRlZmF1bHQgb25lLlxuICAgICAgICBpZiAodGhpcy5sYWJlbENvbHVtbkxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoKCkgPT4gKHRoaXMubGFiZWxDb2x1bW5MYXlvdXQgPyB0aGlzIDogdGhpcy5fZ3JvdXBIb3N0KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsaXN0ZW5Ub0lubGluZUhlbHBQbGFjZVJlcXVpcmVtZW50Q2hhbmdlcyhnZXRTb3VyY2U6ICgpID0+IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXRMYXlvdXRzID0gKHNvdXJjZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID0gc291cmNlLmxhYmVsQ29sdW1uTGF5b3V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZENvbHVtbkxheW91dCA9IHNvdXJjZS5maWVsZENvbHVtbkxheW91dDtcbiAgICAgICAgICAgIHRoaXMuZ2FwQ29sdW1uTGF5b3V0ID0gc291cmNlLmdhcENvbHVtbkxheW91dDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24gPSB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLm5lZWRzSW5saW5lSGVscFBsYWNlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5nZXRGaXhlZExheW91dHMoZ2V0U291cmNlKCkpKSxcbiAgICAgICAgICAgICAgICB0YXAoc2V0TGF5b3V0cyksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcHJvdmlkZXMgY2FwYWJpbGl0eSB0byBtYWtlIGEgZmllbGQgZGlzYWJsZWQuIHVzZWZ1bCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoLlxuICAgICAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgICAgICAgICh0aGlzLmZvcm1Hcm91cENvbnRhaW5lcj8uZm9ybUdyb3VwPy5nZXQodGhpcy5pZCkgYXMgRm9ybUNvbnRyb2wpID8/XG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiAodGhpcy5jb2x1bW5zIDwgMSB8fCB0aGlzLmNvbHVtbnMgPiAxMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW2NvbHVtbnNdIGFjY2VwdHMgbnVtYmVycyBiZXR3ZWVuIDEgLSAxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJyZWFrUG9pbnROYW1lKSA9PiB0aGlzLl91cGRhdGVMYXlvdXQoYnJlYWtQb2ludE5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FkZFRvRm9ybUdyb3VwKCk7XG5cbiAgICAgICAgdGhpcy5pc0hvcml6b250YWwkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIG1hcChub3JtYWxpemVDb2x1bW5MYXlvdXQpKSxcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0JC5waXBlKGZpbHRlcihCb29sZWFuKSwgbWFwKG5vcm1hbGl6ZUNvbHVtbkxheW91dCkpLFxuICAgICAgICAgICAgdGhpcy5fZ2FwQ29sdW1uTGF5b3V0JC5waXBlKG1hcCgoZykgPT4gbm9ybWFsaXplQ29sdW1uTGF5b3V0KGcgfHwgeyBTOiAwIH0pKSlcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2xhYmVsLCBmaWVsZCwgZ2FwXSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXIucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChicmVha3BvaW50TmFtZSkgPT4gbGFiZWxbYnJlYWtwb2ludE5hbWVdICsgZmllbGRbYnJlYWtwb2ludE5hbWVdICsgZ2FwW2JyZWFrcG9pbnROYW1lXSA8PSAxMilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoKCkgPT4gdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmhpbnQgfHwgY2hhbmdlcy5oaW50UGxhY2VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50T3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5zZXROZWVkc0lubGluZUhlbHAoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAodGhpcy5oaW50T3B0aW9ucy50YXJnZXQgPT09ICdpbnB1dCcgfHwgdGhpcy5oaW50T3B0aW9ucy50YXJnZXQgPT09ICdhdXRvJykgJiYgISF0aGlzLmhpbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCAmJiBjaGFuZ2VzLmhpbnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2JyZWFrUG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKHNpemVOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaW50T3B0aW9ucy50YXJnZXQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludFRhcmdldCA9IHRoaXMuX2hpbnRMYXlvdXRDb25maWcuaGludE9uSW5wdXRCcmVha3BvaW50cy5pbmNsdWRlcyhzaXplTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnaW5wdXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50VGFyZ2V0ID0gdGhpcy5oaW50T3B0aW9ucy50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hc3NpZ25FcnJvckRpcmVjdGl2ZXMoKTtcblxuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZVF1ZXJ5LmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25FcnJvckRpcmVjdGl2ZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlRXJyb3JIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLnJlbW92ZUVudHJ5KHRoaXMpO1xuICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRm9ybUdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0Nkcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGFibGUgJiYgISF0aGlzLmNvbnRyb2w/LmNvbnRyb2xJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gICAgICogQHBhcmFtIGZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICByZWdpc3RlckZvcm1GaWVsZENvbnRyb2woZm9ybUZpZWxkQ29udHJvbDogRm9ybUZpZWxkQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRm9ybSBmaWVsZCBjYW4gY29udGFpbiBvbmx5IG9uZSBGb3JtRmllbGRDb250cm9sJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSBmb3JtRmllbGRDb250cm9sIGFzIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbDtcblxuICAgICAgICBmb3JtRmllbGRDb250cm9sLnN0YXRlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY2FsbCBleHBsaWNpdGx5IGRldGVjdENoYW5nZXMoKSBpbnN0ZWFkIG9mIG1hcmtGb3JDaGVjayBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyBtb2RpZmllZCB2YWxpZGF0aW9uIHN0YXRlIG9mIHRoZSBjb250cm9sIHBhc3NlcyBvdmVyIGNoZWNrZWQgcGhhc2VcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgnc3RhdGVDaGFuZ2VzJyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRXJyb3JzKCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggVUkgd2hlbiB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGlmIChmb3JtRmllbGRDb250cm9sPy5uZ0NvbnRyb2w/LnZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgndmFsdWVDaGFuZ2VzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgaGFzUmVxdWlyZWRWYWxpZGF0b3IgPVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9ycy5pbmNsdWRlcyhWYWxpZGF0b3JzLnJlcXVpcmVkKSB8fCB0aGlzLnZhbGlkYXRvcnMuaW5jbHVkZXMoVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhaGFzUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1JlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGZvcm0gY29udHJvbCBpcyBkaXNhYmxlZCwgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaFxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGVyZSBpcyBhIGNhc2Ugd2hlbiBhIFwiZm9ybS1ncm91cFwiIGluaXRpYWwgc3RhdGUgaXMgVkFMSUQsXG4gICAgICAgICAgICAgKiBhbmQgb24gdGhlIG5leHQgbG9vcCBhIGNoaWxkIGZvcm0tZmlsZWQgZXh0ZW5kcyBpdCBhbmQgbWFrZVxuICAgICAgICAgICAgICogdGhlIGZvcm0tZ3JvdXAgSU5WQUxJRC5cbiAgICAgICAgICAgICAqIEluIHN1Y2ggY2FzZSB3ZSBnZXQgdGhlIGVycm9yXG4gICAgICAgICAgICAgKiBcIkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuIFByZXZpb3VzIHZhbHVlIGlzIG5nLXZhbGlkLCBjdXJyZW50IHZhbHVlIGlzIG5nLWludmFsaWRcIi5cbiAgICAgICAgICAgICAqIFRvIGZpeCBpdCB3ZSBoYXZlIHRvIHBvc3Rwb25lIGFkZGluZyBmb3JtLWZpZWxkIHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy52YWxpZGF0b3JzKSk7XG4gICAgICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtR3JvdXAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVucmVnaXN0ZXIgdW5kZXJseWluZyBmb3JtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkQ29udHJvbFxuICAgICAqL1xuICAgIHVucmVnaXN0ZXJGb3JtRmllbGRDb250cm9sKGZvcm1GaWVsZENvbnRyb2w6IEZvcm1GaWVsZENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZENvbnRyb2wgIT09IHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBRdWV1ZSB0YXNrIGJlY2F1c2UgZmlyaW5nIGl0IHJpZ2h0IGF3YXkgbWF5IGNhdXNlIGVycm9yIHdpdGggc2hvd2luZyBlbXB0eSBtZXNzYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZEVycm9ycyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5jb250cm9sPy5uZ0NvbnRyb2w/LmVycm9ycztcbiAgICAgICAgICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVycm9yRGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yc1tkaXJlY3RpdmUuZXJyb3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRFcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yc1tkaXJlY3RpdmUuZXJyb3JdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBwcmlvcml0aXplZCBjb250cm9sIHN0YXRlIGJhc2VkIG9uIHRoZSBlcnJvciB0eXBlcyBpdCBoYXMuXG4gICAgICovXG4gICAgZ2V0UHJpb3JpdHlTdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0Vycm9ycygpID8gJ2Vycm9yJyA6ICdkZWZhdWx0JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRGb3JtU3RhdGUodGhpcy5ncm91cGVkRXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLmRpcmVjdGl2ZS50eXBlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBlcnJvciBkaXJlY3RpdmVzLlxuICAgICAqL1xuICAgIHNldEVycm9yRGlyZWN0aXZlcyhkaXJlY3RpdmVzOiBRdWVyeUxpc3Q8Rm9ybUVycm9yPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKCFkaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPSBkaXJlY3RpdmVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGNvbnRlbnQgb2YgdGhlIHByb3ZpZGVkIGhpbnQgaXMgYSBzdHJpbmcuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzU3RyaW5nSGludChoaW50T3B0aW9uczogSGludENvbnRlbnQpOiBoaW50T3B0aW9ucyBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGhpbnRPcHRpb25zID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlRXJyb3JIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9lZGl0YWJsZSAmJlxuICAgICAgICAgICAgdGhpcy5jb250cm9sICYmXG4gICAgICAgICAgICB0aGlzLl9oYXNWYWxpZGF0b3JzKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmkxOFN0cmluZ3MgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBzdHJpbmdzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGFueSBwcm92aWRlZCB2YWxpZGF0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFzVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycyAmJiB0aGlzLnZhbGlkYXRvcnMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQWRkIEZvcm1GaWVsZCB0byBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRUb0Zvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lciB8fCB0aGlzLmZvcm1GaWVsZEdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5hZGRGb3JtRmllbGQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlbW92ZSBGb3JtRmllbGQgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVGcm9tRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIucmVtb3ZlRm9ybUZpZWxkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBZGQgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRDb250cm9sVG9Gb3JtR3JvdXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIgfHwgISF0aGlzLmZvcm1GaWVsZEdyb3VwPy5mb3JtTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLmFkZEZvcm1Db250cm9sKHRoaXMuaWQsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZW1vdmUgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLnJlbW92ZUZvcm1Db250cm9sKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZXNlIHByb3BlcnRpZXMgb24gZXZlcnkgbGV2ZWwuXG4gICAgICogIC0gR2xvYmFsIEZvcm1Hcm91cCBMZXZlbCBhcyB3ZWxsIGVhY2ggZmllbGRcbiAgICAgKlxuICAgICAqICBUb2RvOiB1c2UgbW9yZSBlbGVnYW50IHdheSB0byBzZXQgdGhlc2UgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVDb250cm9sUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLl9lZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmlkID0gdGhpcy5pZDtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh0aGlzLmNvbHVtbkxheW91dCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxheW91dCA9IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgICB0aGlzLl9zQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnUyddO1xuICAgICAgICAgICAgdGhpcy5fbWRDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydNJ107XG4gICAgICAgICAgICB0aGlzLl9sZ0NvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ0wnXTtcbiAgICAgICAgICAgIHRoaXMuX3hsQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnWEwnXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVMYXlvdXQoY3VycmVudEJyZWFraW5nUG9pbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50QnJlYWtpbmdQb2ludE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9zQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9tZENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5fbGdDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1hMJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgY29sdW1uIGNoYW5nZSwgc28gZm9ybS1ncm91cCBrbm93cyBpdCBhbmQgcmUtYXJyYW5nZXMgdGhlIGZpZWxkc1xuICAgICAgICB0aGlzLm9uQ29sdW1uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVIaW50T3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gcGxhY2VtZW50IGlzIGhlcmUgc2V0IHVwIGJlY2F1c2UgaGludFBsYWNlbWVudCBpcyBkZXByZWNhdGVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnc3RyaW5nJyB8fCB0aGlzLmhpbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmhpbnRQbGFjZW1lbnQgPyB0aGlzLmhpbnRQbGFjZW1lbnQgOiB0aGlzLl9kZWZhdWx0SGludE9wdGlvbnMucGxhY2VtZW50LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuaGludFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmhpbnRQbGFjZW1lbnQgPyB0aGlzLmhpbnRQbGFjZW1lbnQgOiB0aGlzLl9kZWZhdWx0SGludE9wdGlvbnMucGxhY2VtZW50LFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGludFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlcyA9IHRoaXMuX2Vycm9yRGlyZWN0aXZlUXVlcnkudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXNDZHIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyLmFkZChcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUuZGV0ZWN0Q2hhbmdlcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjcmVuZGVyZXI+XG4gICAgPGRpdiBbaG9yaXpvbnRhbF09XCJ0cnVlXCIgZmQtZm9ybS1pdGVtIGNsYXNzPVwiZmQtcm93XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtY29sXCJcbiAgICAgICAgICAgICNsYWJlbENvbFxuICAgICAgICAgICAgW2NsYXNzXT1cIl9sYWJlbENvbHVtbkxheW91dENsYXNzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vTGFiZWxMYXlvdXRcIlxuICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiX2NvbnRyb2xFeHRyYXNIZWlnaHRQeFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3aXRoRm9ybU1lc3NhZ2VcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdhcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgW2lkXT1cIidmZHAtZm9ybS1oaW50LScgKyBpZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdHJpbmdIaW50KGhpbnRPcHRpb25zLmNvbnRlbnQpOyBlbHNlIGhpbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAge3sgaGludE9wdGlvbnMuY29udGVudCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNoaW50VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShoaW50T3B0aW9ucy5jb250ZW50KVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN3aXRoRm9ybU1lc3NhZ2U+XG4gICAgPGZkcC1pbnB1dC1tZXNzYWdlLWdyb3VwXG4gICAgICAgIGNsYXNzPVwiZmQtY29sXCJcbiAgICAgICAgW2NsYXNzXT1cIl9maWVsZENvbHVtbkxheW91dENsYXNzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgID5cbiAgICAgICAgPCEtLVxuICAgICAgICAgVG9kbzogd2Ugc2hvdWxkIGV4dGVuZCB0aGlzIG9uIEZvcm1Hcm91cCBMZXZlbCBhbmQgaGF2ZSBlcnJvciB0cmlnZ2VyIHN0cmF0ZWd5IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvXG4gICAgICAgICBhbGwgdGhlIGZpZWxkIGUuZy46IFt0cmlnZ2Vyc109XCJbJ21vdXNlZW50ZXInLCAnbW91c2VsZWF2ZSddXCJcbiAgICAgICAgIC0tPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdHJpZ2dlckl0ZW0+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0Vycm9ycygpICYmIGdyb3VwZWRFcnJvcnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZ3JvdXBlZEVycm9yc1wiIFt0eXBlXT1cImVycm9yLmRpcmVjdGl2ZS50eXBlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0lmXT1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGVycm9yLmVycm9yLCBsYWJlbDogbGFiZWwgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmICYmIGVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nSWZdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mZC1mb3JtLW1lc3NhZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgKm5nSWY9XCJncm91cGVkRXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBoYXNFcnJvcnMoKSAmJiBpMThTdHJpbmdzXCIgdHlwZT1cImVycm9yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaTE4U3RyaW5nczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbnRyb2w/Lm5nQ29udHJvbD8uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICA8L2ZkcC1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoaW50VGFyZ2V0ID09PSAnbGFiZWwnOyBlbHNlIHdpdGhvdXRIaW50XCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgW2lkXT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImVkaXRhYmxlICYmIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGZkLWZvcm0tbGFiZWxcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwQ29udGVudF09XCJoaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwQm9keVBsYWNlbWVudF09XCJoaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgJ3RvcCdcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBQbGFjZW1lbnRdPVwiaGludE9wdGlvbnMucG9zaXRpb24gfHwgJ2FmdGVyJ1wiXG4gICAgICAgICAgICBbaW5saW5lSGVscEdseXBoXT1cImhpbnRPcHRpb25zLmdseXBoIHx8ICcnXCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwVHJpZ2dlcnNdPVwiaGludE9wdGlvbnMudHJpZ2dlciB8fCBbXVwiXG4gICAgICAgICAgICBbYWxpZ25MYWJlbEVuZF09XCIhIShpc0hvcml6b250YWwkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtjb2xvbl09XCJjb2xvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtY29udGVudC0nICsgaWRcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3dpdGhvdXRIaW50PlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtJyArIGlkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJlZGl0YWJsZSAmJiByZXF1aXJlZFwiXG4gICAgICAgICAgICBmZC1mb3JtLWxhYmVsXG4gICAgICAgICAgICBbY29sb25dPVwiY29sb25cIlxuICAgICAgICAgICAgW2FsaWduTGFiZWxFbmRdPVwiISEoaXNIb3Jpem9udGFsJCB8IGFzeW5jKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtY29udGVudC0nICsgaWRcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNnYXBUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGludFRhcmdldCA9PT0gJ2lucHV0JyAmJiBoaW50T3B0aW9ucy5jb250ZW50OyBlbHNlIHdpdGhvdXRIaW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2wgZmQtZm9ybS1maWVsZC1pbmxpbmUtaGVscC1jb250YWluZXJcIiBbY2xhc3NdPVwiX2dhcENvbHVtbkxheW91dENsYXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBmZC1saW5rIFt1bmRlY29yYXRlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cImhpbnRPcHRpb25zLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiaGludE9wdGlvbnMuZ2x5cGhcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBsYWNlbWVudCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cImhpbnRPcHRpb25zLnRyaWdnZXIgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjd2l0aG91dEhpbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2xcIiBbY2xhc3NdPVwiX2dhcENvbHVtbkxheW91dENsYXNzXCI+PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -80,7 +80,7 @@ export class MultiComboboxMobileComponent extends MobileModeBase {
|
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MultiComboboxMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: MULTICOMBOBOX_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
83
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: MultiComboboxMobileComponent, selector: "fdp-multi-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title fd-dialog-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n\n <button\n *ngIf=\"selectedShown$ | async\"\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"emphasized\"\n [title]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n\n <button\n *ngIf=\"(selectedShown$ | async) === false\"\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"transparent\"\n [title]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig?.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2.BarElementDirective, selector: "fd-bar-element", inputs: ["
|
|
83
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: MultiComboboxMobileComponent, selector: "fdp-multi-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title fd-dialog-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n\n <button\n *ngIf=\"selectedShown$ | async\"\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"emphasized\"\n [title]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n\n <button\n *ngIf=\"(selectedShown$ | async) === false\"\n fd-button\n glyph=\"multiselect-all\"\n fdType=\"transparent\"\n [title]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n [attr.aria-label]=\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\"\n class=\"fd-margin-begin--tiny\"\n (click)=\"showSelected()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig?.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2.BarElementDirective, selector: "fd-bar-element", inputs: ["isTitle", "fullWidth"] }, { kind: "component", type: i2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "directive", type: i1.DialogTitleDirective, selector: "[fd-dialog-title]", inputs: ["id"] }, { kind: "component", type: i3.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i4.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
84
84
|
}
|
|
85
85
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MultiComboboxMobileComponent, decorators: [{
|
|
86
86
|
type: Component,
|