@bryntum/taskboard-angular 7.1.1
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/README.md +44 -0
- package/bryntum-taskboard-angular.d.ts +5 -0
- package/bundles/bryntum-taskboard-angular.umd.js +56826 -0
- package/bundles/bryntum-taskboard-angular.umd.js.map +1 -0
- package/esm2015/bryntum-taskboard-angular.js +5 -0
- package/esm2015/lib/bryntum-button-group.component.js +725 -0
- package/esm2015/lib/bryntum-button.component.js +715 -0
- package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
- package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
- package/esm2015/lib/bryntum-checkbox.component.js +805 -0
- package/esm2015/lib/bryntum-chip-view.component.js +727 -0
- package/esm2015/lib/bryntum-code-editor.component.js +818 -0
- package/esm2015/lib/bryntum-color-field.component.js +794 -0
- package/esm2015/lib/bryntum-column-combo.component.js +936 -0
- package/esm2015/lib/bryntum-column-filter-field.component.js +799 -0
- package/esm2015/lib/bryntum-column-picker-button.component.js +719 -0
- package/esm2015/lib/bryntum-column-scroll-button.component.js +719 -0
- package/esm2015/lib/bryntum-combo.component.js +932 -0
- package/esm2015/lib/bryntum-container.component.js +681 -0
- package/esm2015/lib/bryntum-date-field.component.js +831 -0
- package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
- package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
- package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
- package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
- package/esm2015/lib/bryntum-demo-header.component.js +171 -0
- package/esm2015/lib/bryntum-display-field.component.js +772 -0
- package/esm2015/lib/bryntum-duration-field.component.js +815 -0
- package/esm2015/lib/bryntum-editor.component.js +823 -0
- package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
- package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
- package/esm2015/lib/bryntum-field-set.component.js +810 -0
- package/esm2015/lib/bryntum-file-field.component.js +776 -0
- package/esm2015/lib/bryntum-file-picker.component.js +709 -0
- package/esm2015/lib/bryntum-filter-field.component.js +803 -0
- package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
- package/esm2015/lib/bryntum-hint.component.js +856 -0
- package/esm2015/lib/bryntum-label.component.js +584 -0
- package/esm2015/lib/bryntum-list.component.js +715 -0
- package/esm2015/lib/bryntum-menu.component.js +883 -0
- package/esm2015/lib/bryntum-month-picker.component.js +818 -0
- package/esm2015/lib/bryntum-number-field.component.js +800 -0
- package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
- package/esm2015/lib/bryntum-panel.component.js +794 -0
- package/esm2015/lib/bryntum-password-field.component.js +768 -0
- package/esm2015/lib/bryntum-project-combo.component.js +940 -0
- package/esm2015/lib/bryntum-radio-group.component.js +826 -0
- package/esm2015/lib/bryntum-radio.component.js +805 -0
- package/esm2015/lib/bryntum-resources-combo.component.js +936 -0
- package/esm2015/lib/bryntum-scheduler-project-combo.component.js +936 -0
- package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
- package/esm2015/lib/bryntum-slider.component.js +661 -0
- package/esm2015/lib/bryntum-splitter.component.js +618 -0
- package/esm2015/lib/bryntum-swimlane-combo.component.js +936 -0
- package/esm2015/lib/bryntum-swimlane-filter-field.component.js +807 -0
- package/esm2015/lib/bryntum-swimlane-picker-button.component.js +719 -0
- package/esm2015/lib/bryntum-swimlane-scroll-button.component.js +719 -0
- package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
- package/esm2015/lib/bryntum-tag-combo.component.js +940 -0
- package/esm2015/lib/bryntum-task-board-base.component.js +1678 -0
- package/esm2015/lib/bryntum-task-board-field-filter-picker-group.component.js +762 -0
- package/esm2015/lib/bryntum-task-board-field-filter-picker.component.js +732 -0
- package/esm2015/lib/bryntum-task-board-project-model.component.js +690 -0
- package/esm2015/lib/bryntum-task-board.component.js +1682 -0
- package/esm2015/lib/bryntum-task-color-combo.component.js +794 -0
- package/esm2015/lib/bryntum-task-filter-field.component.js +807 -0
- package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
- package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
- package/esm2015/lib/bryntum-text-field.component.js +783 -0
- package/esm2015/lib/bryntum-time-field.component.js +819 -0
- package/esm2015/lib/bryntum-time-picker.component.js +709 -0
- package/esm2015/lib/bryntum-todo-list-field.component.js +780 -0
- package/esm2015/lib/bryntum-toolbar.component.js +732 -0
- package/esm2015/lib/bryntum-undo-redo.component.js +689 -0
- package/esm2015/lib/bryntum-widget.component.js +580 -0
- package/esm2015/lib/bryntum-year-picker.component.js +827 -0
- package/esm2015/lib/bryntum-zoom-slider.component.js +665 -0
- package/esm2015/lib/taskboard.module.js +374 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +76 -0
- package/fesm2015/bryntum-taskboard-angular.js +56188 -0
- package/fesm2015/bryntum-taskboard-angular.js.map +1 -0
- package/lib/bryntum-button-group.component.d.ts +860 -0
- package/lib/bryntum-button.component.d.ts +845 -0
- package/lib/bryntum-chat-panel.component.d.ts +1060 -0
- package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
- package/lib/bryntum-checkbox.component.d.ts +968 -0
- package/lib/bryntum-chip-view.component.d.ts +872 -0
- package/lib/bryntum-code-editor.component.d.ts +1045 -0
- package/lib/bryntum-color-field.component.d.ts +965 -0
- package/lib/bryntum-column-combo.component.d.ts +1208 -0
- package/lib/bryntum-column-filter-field.component.d.ts +988 -0
- package/lib/bryntum-column-picker-button.component.d.ts +853 -0
- package/lib/bryntum-column-scroll-button.component.d.ts +853 -0
- package/lib/bryntum-combo.component.d.ts +1199 -0
- package/lib/bryntum-container.component.d.ts +822 -0
- package/lib/bryntum-date-field.component.d.ts +1025 -0
- package/lib/bryntum-date-picker.component.d.ts +1338 -0
- package/lib/bryntum-date-range-field.component.d.ts +1027 -0
- package/lib/bryntum-date-time-field.component.d.ts +912 -0
- package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
- package/lib/bryntum-demo-header.component.d.ts +29 -0
- package/lib/bryntum-display-field.component.d.ts +949 -0
- package/lib/bryntum-duration-field.component.d.ts +1008 -0
- package/lib/bryntum-editor.component.d.ts +969 -0
- package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
- package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
- package/lib/bryntum-field-set.component.d.ts +1038 -0
- package/lib/bryntum-file-field.component.d.ts +952 -0
- package/lib/bryntum-file-picker.component.d.ts +847 -0
- package/lib/bryntum-filter-field.component.d.ts +993 -0
- package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
- package/lib/bryntum-hint.component.d.ts +1117 -0
- package/lib/bryntum-label.component.d.ts +683 -0
- package/lib/bryntum-list.component.d.ts +849 -0
- package/lib/bryntum-menu.component.d.ts +1129 -0
- package/lib/bryntum-month-picker.component.d.ts +1034 -0
- package/lib/bryntum-number-field.component.d.ts +995 -0
- package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
- package/lib/bryntum-panel.component.d.ts +1015 -0
- package/lib/bryntum-password-field.component.d.ts +939 -0
- package/lib/bryntum-project-combo.component.d.ts +1209 -0
- package/lib/bryntum-radio-group.component.d.ts +1068 -0
- package/lib/bryntum-radio.component.d.ts +968 -0
- package/lib/bryntum-resources-combo.component.d.ts +1207 -0
- package/lib/bryntum-scheduler-project-combo.component.d.ts +1201 -0
- package/lib/bryntum-slide-toggle.component.d.ts +968 -0
- package/lib/bryntum-slider.component.d.ts +776 -0
- package/lib/bryntum-splitter.component.d.ts +714 -0
- package/lib/bryntum-swimlane-combo.component.d.ts +1207 -0
- package/lib/bryntum-swimlane-filter-field.component.d.ts +1001 -0
- package/lib/bryntum-swimlane-picker-button.component.d.ts +853 -0
- package/lib/bryntum-swimlane-scroll-button.component.d.ts +853 -0
- package/lib/bryntum-tab-panel.component.d.ts +1065 -0
- package/lib/bryntum-tag-combo.component.d.ts +1212 -0
- package/lib/bryntum-task-board-base.component.d.ts +1921 -0
- package/lib/bryntum-task-board-field-filter-picker-group.component.d.ts +941 -0
- package/lib/bryntum-task-board-field-filter-picker.component.d.ts +889 -0
- package/lib/bryntum-task-board-project-model.component.d.ts +732 -0
- package/lib/bryntum-task-board.component.d.ts +1923 -0
- package/lib/bryntum-task-color-combo.component.d.ts +965 -0
- package/lib/bryntum-task-filter-field.component.d.ts +1001 -0
- package/lib/bryntum-text-area-field.component.d.ts +951 -0
- package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
- package/lib/bryntum-text-field.component.d.ts +957 -0
- package/lib/bryntum-time-field.component.d.ts +1006 -0
- package/lib/bryntum-time-picker.component.d.ts +853 -0
- package/lib/bryntum-todo-list-field.component.d.ts +955 -0
- package/lib/bryntum-toolbar.component.d.ts +879 -0
- package/lib/bryntum-undo-redo.component.d.ts +831 -0
- package/lib/bryntum-widget.component.d.ts +678 -0
- package/lib/bryntum-year-picker.component.d.ts +1049 -0
- package/lib/bryntum-zoom-slider.component.d.ts +784 -0
- package/lib/taskboard.module.d.ts +77 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +72 -0
|
@@ -0,0 +1,732 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum TaskBoardFieldFilterPicker
|
|
4
|
+
*/
|
|
5
|
+
import { Component, EventEmitter, Output, Input } from '@angular/core';
|
|
6
|
+
import WrapperHelper from './wrapper.helper';
|
|
7
|
+
import { TaskBoardFieldFilterPicker, Widget } from '@bryntum/taskboard';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class BryntumTaskBoardFieldFilterPickerComponent {
|
|
10
|
+
constructor(element) {
|
|
11
|
+
this.bryntumConfig = {
|
|
12
|
+
adopt: undefined,
|
|
13
|
+
appendTo: undefined,
|
|
14
|
+
href: undefined,
|
|
15
|
+
angularComponent: this,
|
|
16
|
+
features: {},
|
|
17
|
+
listeners: {}
|
|
18
|
+
};
|
|
19
|
+
// Events emitters
|
|
20
|
+
/**
|
|
21
|
+
* Fires before an object is destroyed.
|
|
22
|
+
* @param {object} event Event object
|
|
23
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
24
|
+
*/
|
|
25
|
+
this.onBeforeDestroy = new EventEmitter();
|
|
26
|
+
/**
|
|
27
|
+
* Triggered before a widget is hidden. Return `false` to prevent the action.
|
|
28
|
+
* @param {object} event Event object
|
|
29
|
+
* @param {Core.widget.Widget} event.source The widget being hidden.
|
|
30
|
+
*/
|
|
31
|
+
this.onBeforeHide = new EventEmitter();
|
|
32
|
+
/**
|
|
33
|
+
* Fired before this container will load record values into its child fields. This is useful if you
|
|
34
|
+
* want to modify the UI before data is loaded (e.g. set some input field to be readonly)
|
|
35
|
+
* @param {object} event Event object
|
|
36
|
+
* @param {Core.widget.Container} event.source The container
|
|
37
|
+
* @param {Core.data.Model} event.record The record
|
|
38
|
+
*/
|
|
39
|
+
this.onBeforeSetRecord = new EventEmitter();
|
|
40
|
+
/**
|
|
41
|
+
* Triggered before a widget is shown. Return `false` to prevent the action.
|
|
42
|
+
* @param {object} event Event object
|
|
43
|
+
* @param {Core.widget.Widget,any} event.source The widget being shown
|
|
44
|
+
*/
|
|
45
|
+
this.onBeforeShow = new EventEmitter();
|
|
46
|
+
/**
|
|
47
|
+
* Fires when any other event is fired from the object.
|
|
48
|
+
* ...
|
|
49
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/TaskBoardFieldFilterPicker#event-catchAll)
|
|
50
|
+
* @param {object} event Event object
|
|
51
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
52
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
53
|
+
*/
|
|
54
|
+
this.onCatchAll = new EventEmitter();
|
|
55
|
+
/**
|
|
56
|
+
* Fires when the filter is modified.
|
|
57
|
+
* @param {object} event Event object
|
|
58
|
+
* @param {Core.widget.FieldFilterPicker} event.source The FieldFilterPicker instance that fired the event.
|
|
59
|
+
* @param {any[]} event.filter The [CollectionFilter](https://bryntum.com/products/taskboard/docs/api/Core/util/CollectionFilter) configuration object for the filter represented by this [FieldFilterPicker](https://bryntum.com/products/taskboard/docs/api/Core/widget/FieldFilterPicker).
|
|
60
|
+
* @param {boolean} event.isValid Whether the current configuration object represents a complete and valid filter
|
|
61
|
+
*/
|
|
62
|
+
this.onChange = new EventEmitter();
|
|
63
|
+
/**
|
|
64
|
+
* Fires when an object is destroyed.
|
|
65
|
+
* @param {object} event Event object
|
|
66
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
67
|
+
*/
|
|
68
|
+
this.onDestroy = new EventEmitter();
|
|
69
|
+
/**
|
|
70
|
+
* Fires when a field is mutated and the state of the [hasChanges](https://bryntum.com/products/taskboard/docs/api/Core/widget/Container#property-hasChanges) property changes
|
|
71
|
+
* @param {object} event Event object
|
|
72
|
+
* @param {Core.widget.Container} event.source The container.
|
|
73
|
+
* @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
|
|
74
|
+
*/
|
|
75
|
+
this.onDirtyStateChange = new EventEmitter();
|
|
76
|
+
/**
|
|
77
|
+
* Triggered when a widget's [element](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#property-element) is available.
|
|
78
|
+
* @param {object} event Event object
|
|
79
|
+
* @param {HTMLElement} event.element The Widget's element.
|
|
80
|
+
*/
|
|
81
|
+
this.onElementCreated = new EventEmitter();
|
|
82
|
+
/**
|
|
83
|
+
* Fired when focus enters this Widget.
|
|
84
|
+
* @param {object} event Event object
|
|
85
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
86
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
87
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
88
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
89
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
90
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
91
|
+
*/
|
|
92
|
+
this.onFocusIn = new EventEmitter();
|
|
93
|
+
/**
|
|
94
|
+
* Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
|
|
95
|
+
* focus moving from within this Widget's ownership tree, even if there are floating widgets
|
|
96
|
+
* will not trigger this event. This is when focus exits this widget completely.
|
|
97
|
+
* @param {object} event Event object
|
|
98
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
99
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
100
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
101
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
102
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
103
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
104
|
+
*/
|
|
105
|
+
this.onFocusOut = new EventEmitter();
|
|
106
|
+
/**
|
|
107
|
+
* Triggered after a widget was hidden
|
|
108
|
+
* @param {object} event Event object
|
|
109
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
110
|
+
*/
|
|
111
|
+
this.onHide = new EventEmitter();
|
|
112
|
+
/**
|
|
113
|
+
* Triggered when a widget which had been in a non-visible state for any reason
|
|
114
|
+
* achieves visibility.
|
|
115
|
+
* ...
|
|
116
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/TaskBoardFieldFilterPicker#event-paint)
|
|
117
|
+
* @param {object} event Event object
|
|
118
|
+
* @param {Core.widget.Widget} event.source The widget being painted.
|
|
119
|
+
* @param {boolean} event.firstPaint `true` if this is the first paint.
|
|
120
|
+
*/
|
|
121
|
+
this.onPaint = new EventEmitter();
|
|
122
|
+
/**
|
|
123
|
+
* Fired when a Widget's read only state is toggled
|
|
124
|
+
* @param {object} event Event object
|
|
125
|
+
* @param {boolean} event.readOnly Read only or not
|
|
126
|
+
*/
|
|
127
|
+
this.onReadOnly = new EventEmitter();
|
|
128
|
+
/**
|
|
129
|
+
* This event is fired after a widget's elements have been synchronized due to a direct or indirect call
|
|
130
|
+
* to [recompose](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
|
|
131
|
+
*/
|
|
132
|
+
this.onRecompose = new EventEmitter();
|
|
133
|
+
/**
|
|
134
|
+
* Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
|
|
135
|
+
* @param {object} event Event object
|
|
136
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
137
|
+
* @param {number} event.width The new width
|
|
138
|
+
* @param {number} event.height The new height
|
|
139
|
+
* @param {number} event.oldWidth The old width
|
|
140
|
+
* @param {number} event.oldHeight The old height
|
|
141
|
+
*/
|
|
142
|
+
this.onResize = new EventEmitter();
|
|
143
|
+
/**
|
|
144
|
+
* Triggered after a widget is shown.
|
|
145
|
+
* @param {object} event Event object
|
|
146
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
147
|
+
*/
|
|
148
|
+
this.onShow = new EventEmitter();
|
|
149
|
+
this.elementRef = element;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Create and append the underlying widget
|
|
153
|
+
*/
|
|
154
|
+
ngOnInit() {
|
|
155
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumTaskBoardFieldFilterPickerComponent;
|
|
156
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
157
|
+
// @ts-ignore
|
|
158
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
159
|
+
if (['features', 'config'].includes(prop)) {
|
|
160
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// @ts-ignore
|
|
164
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
165
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
166
|
+
// @ts-ignore
|
|
167
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
168
|
+
// @ts-ignore
|
|
169
|
+
me[event].emit(e);
|
|
170
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
171
|
+
// in Angular listeners
|
|
172
|
+
return e.returnValue;
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
176
|
+
const containerParam = [
|
|
177
|
+
'adopt',
|
|
178
|
+
'appendTo',
|
|
179
|
+
'insertAfter',
|
|
180
|
+
'insertBefore'
|
|
181
|
+
// @ts-ignore
|
|
182
|
+
].find(prop => bryntumConfig[prop]);
|
|
183
|
+
if (!containerParam) {
|
|
184
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
185
|
+
// Button should always be <a> or <button> inside owner element
|
|
186
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
194
|
+
}
|
|
195
|
+
// @ts-ignore
|
|
196
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Watch for changes
|
|
200
|
+
* @param changes
|
|
201
|
+
*/
|
|
202
|
+
ngOnChanges(changes) {
|
|
203
|
+
const { instance } = this, { instanceName } = BryntumTaskBoardFieldFilterPickerComponent;
|
|
204
|
+
if (!instance) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// Iterate over all changes
|
|
208
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
209
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumTaskBoardFieldFilterPickerComponent;
|
|
210
|
+
if (bryntumProps.includes(prop)) {
|
|
211
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
212
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
213
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Destroy the component
|
|
220
|
+
*/
|
|
221
|
+
ngOnDestroy() {
|
|
222
|
+
// @ts-ignore
|
|
223
|
+
if (this.instance && this.instance.destroy) {
|
|
224
|
+
this.instance.destroy();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
BryntumTaskBoardFieldFilterPickerComponent.instanceClass = TaskBoardFieldFilterPicker;
|
|
229
|
+
BryntumTaskBoardFieldFilterPickerComponent.instanceName = 'TaskBoardFieldFilterPicker';
|
|
230
|
+
BryntumTaskBoardFieldFilterPickerComponent.bryntumEvents = [
|
|
231
|
+
'onBeforeDestroy',
|
|
232
|
+
'onBeforeHide',
|
|
233
|
+
'onBeforeSetRecord',
|
|
234
|
+
'onBeforeShow',
|
|
235
|
+
'onCatchAll',
|
|
236
|
+
'onChange',
|
|
237
|
+
'onDestroy',
|
|
238
|
+
'onDirtyStateChange',
|
|
239
|
+
'onElementCreated',
|
|
240
|
+
'onFocusIn',
|
|
241
|
+
'onFocusOut',
|
|
242
|
+
'onHide',
|
|
243
|
+
'onPaint',
|
|
244
|
+
'onReadOnly',
|
|
245
|
+
'onRecompose',
|
|
246
|
+
'onResize',
|
|
247
|
+
'onShow'
|
|
248
|
+
];
|
|
249
|
+
BryntumTaskBoardFieldFilterPickerComponent.bryntumFeatureNames = [];
|
|
250
|
+
BryntumTaskBoardFieldFilterPickerComponent.bryntumConfigs = BryntumTaskBoardFieldFilterPickerComponent.bryntumFeatureNames.concat([
|
|
251
|
+
'adopt',
|
|
252
|
+
'align',
|
|
253
|
+
'alignSelf',
|
|
254
|
+
'anchor',
|
|
255
|
+
'appendTo',
|
|
256
|
+
'ariaDescription',
|
|
257
|
+
'ariaLabel',
|
|
258
|
+
'autoUpdateRecord',
|
|
259
|
+
'bubbleEvents',
|
|
260
|
+
'callOnFunctions',
|
|
261
|
+
'catchEventHandlerExceptions',
|
|
262
|
+
'centered',
|
|
263
|
+
'cls',
|
|
264
|
+
'color',
|
|
265
|
+
'column',
|
|
266
|
+
'config',
|
|
267
|
+
'constrainTo',
|
|
268
|
+
'content',
|
|
269
|
+
'contentElementCls',
|
|
270
|
+
'dataField',
|
|
271
|
+
'dataset',
|
|
272
|
+
'dateFormat',
|
|
273
|
+
'defaultBindProperty',
|
|
274
|
+
'defaultFocus',
|
|
275
|
+
'defaults',
|
|
276
|
+
'detectCSSCompatibilityIssues',
|
|
277
|
+
'disabled',
|
|
278
|
+
'dock',
|
|
279
|
+
'draggable',
|
|
280
|
+
'elementAttributes',
|
|
281
|
+
'extraData',
|
|
282
|
+
'filter',
|
|
283
|
+
'flex',
|
|
284
|
+
'floating',
|
|
285
|
+
'getValueFieldConfig',
|
|
286
|
+
'height',
|
|
287
|
+
'hidden',
|
|
288
|
+
'hideAnimation',
|
|
289
|
+
'hideWhenEmpty',
|
|
290
|
+
'html',
|
|
291
|
+
'htmlCls',
|
|
292
|
+
'id',
|
|
293
|
+
'ignoreParentReadOnly',
|
|
294
|
+
'inputFieldAlign',
|
|
295
|
+
'insertBefore',
|
|
296
|
+
'insertFirst',
|
|
297
|
+
'itemCls',
|
|
298
|
+
'items',
|
|
299
|
+
'keyMap',
|
|
300
|
+
'labelPosition',
|
|
301
|
+
'layout',
|
|
302
|
+
'layoutStyle',
|
|
303
|
+
'lazyItems',
|
|
304
|
+
'listeners',
|
|
305
|
+
'localeClass',
|
|
306
|
+
'localizable',
|
|
307
|
+
'localizableProperties',
|
|
308
|
+
'margin',
|
|
309
|
+
'maskDefaults',
|
|
310
|
+
'masked',
|
|
311
|
+
'maxHeight',
|
|
312
|
+
'maximizeOnMobile',
|
|
313
|
+
'maxWidth',
|
|
314
|
+
'minHeight',
|
|
315
|
+
'minWidth',
|
|
316
|
+
'monitorResize',
|
|
317
|
+
'namedItems',
|
|
318
|
+
'operatorLocked',
|
|
319
|
+
'operators',
|
|
320
|
+
'owner',
|
|
321
|
+
'positioned',
|
|
322
|
+
'preventTooltipOnTouch',
|
|
323
|
+
'propertyFieldConfig',
|
|
324
|
+
'propertyLocked',
|
|
325
|
+
'readOnly',
|
|
326
|
+
'record',
|
|
327
|
+
'relayStoreEvents',
|
|
328
|
+
'rendition',
|
|
329
|
+
'ripple',
|
|
330
|
+
'rootElement',
|
|
331
|
+
'rtl',
|
|
332
|
+
'scrollable',
|
|
333
|
+
'scrollAction',
|
|
334
|
+
'showAnimation',
|
|
335
|
+
'showTooltipWhenDisabled',
|
|
336
|
+
'span',
|
|
337
|
+
'strictRecordMapping',
|
|
338
|
+
'tab',
|
|
339
|
+
'tabBarItems',
|
|
340
|
+
'tag',
|
|
341
|
+
'textAlign',
|
|
342
|
+
'textContent',
|
|
343
|
+
'title',
|
|
344
|
+
'tooltip',
|
|
345
|
+
'triggerChangeOnInput',
|
|
346
|
+
'type',
|
|
347
|
+
'ui',
|
|
348
|
+
'valueFieldPlaceholders',
|
|
349
|
+
'valueLocked',
|
|
350
|
+
'weight',
|
|
351
|
+
'width',
|
|
352
|
+
'x',
|
|
353
|
+
'y'
|
|
354
|
+
]);
|
|
355
|
+
BryntumTaskBoardFieldFilterPickerComponent.bryntumConfigsOnly = [
|
|
356
|
+
'adopt',
|
|
357
|
+
'align',
|
|
358
|
+
'anchor',
|
|
359
|
+
'ariaDescription',
|
|
360
|
+
'ariaLabel',
|
|
361
|
+
'autoUpdateRecord',
|
|
362
|
+
'bubbleEvents',
|
|
363
|
+
'centered',
|
|
364
|
+
'color',
|
|
365
|
+
'config',
|
|
366
|
+
'constrainTo',
|
|
367
|
+
'contentElementCls',
|
|
368
|
+
'dataField',
|
|
369
|
+
'dateFormat',
|
|
370
|
+
'defaultBindProperty',
|
|
371
|
+
'defaultFocus',
|
|
372
|
+
'defaults',
|
|
373
|
+
'detectCSSCompatibilityIssues',
|
|
374
|
+
'dock',
|
|
375
|
+
'draggable',
|
|
376
|
+
'elementAttributes',
|
|
377
|
+
'filter',
|
|
378
|
+
'floating',
|
|
379
|
+
'getValueFieldConfig',
|
|
380
|
+
'hideAnimation',
|
|
381
|
+
'hideWhenEmpty',
|
|
382
|
+
'htmlCls',
|
|
383
|
+
'ignoreParentReadOnly',
|
|
384
|
+
'itemCls',
|
|
385
|
+
'lazyItems',
|
|
386
|
+
'listeners',
|
|
387
|
+
'localeClass',
|
|
388
|
+
'localizable',
|
|
389
|
+
'localizableProperties',
|
|
390
|
+
'maskDefaults',
|
|
391
|
+
'masked',
|
|
392
|
+
'monitorResize',
|
|
393
|
+
'namedItems',
|
|
394
|
+
'operatorLocked',
|
|
395
|
+
'operators',
|
|
396
|
+
'owner',
|
|
397
|
+
'positioned',
|
|
398
|
+
'preventTooltipOnTouch',
|
|
399
|
+
'propertyFieldConfig',
|
|
400
|
+
'propertyLocked',
|
|
401
|
+
'relayStoreEvents',
|
|
402
|
+
'ripple',
|
|
403
|
+
'rootElement',
|
|
404
|
+
'scrollAction',
|
|
405
|
+
'showAnimation',
|
|
406
|
+
'showTooltipWhenDisabled',
|
|
407
|
+
'tab',
|
|
408
|
+
'tabBarItems',
|
|
409
|
+
'tag',
|
|
410
|
+
'textAlign',
|
|
411
|
+
'textContent',
|
|
412
|
+
'title',
|
|
413
|
+
'triggerChangeOnInput',
|
|
414
|
+
'type',
|
|
415
|
+
'ui',
|
|
416
|
+
'valueFieldPlaceholders',
|
|
417
|
+
'valueLocked',
|
|
418
|
+
'weight'
|
|
419
|
+
];
|
|
420
|
+
BryntumTaskBoardFieldFilterPickerComponent.bryntumProps = BryntumTaskBoardFieldFilterPickerComponent.bryntumFeatureNames.concat([
|
|
421
|
+
'alignSelf',
|
|
422
|
+
'anchorSize',
|
|
423
|
+
'appendTo',
|
|
424
|
+
'callOnFunctions',
|
|
425
|
+
'catchEventHandlerExceptions',
|
|
426
|
+
'cls',
|
|
427
|
+
'column',
|
|
428
|
+
'content',
|
|
429
|
+
'dataset',
|
|
430
|
+
'disabled',
|
|
431
|
+
'extraData',
|
|
432
|
+
'flex',
|
|
433
|
+
'focusVisible',
|
|
434
|
+
'hasChanges',
|
|
435
|
+
'height',
|
|
436
|
+
'hidden',
|
|
437
|
+
'html',
|
|
438
|
+
'id',
|
|
439
|
+
'inputFieldAlign',
|
|
440
|
+
'insertBefore',
|
|
441
|
+
'insertFirst',
|
|
442
|
+
'isSettingValues',
|
|
443
|
+
'isValid',
|
|
444
|
+
'items',
|
|
445
|
+
'keyMap',
|
|
446
|
+
'labelPosition',
|
|
447
|
+
'layout',
|
|
448
|
+
'layoutStyle',
|
|
449
|
+
'margin',
|
|
450
|
+
'maxHeight',
|
|
451
|
+
'maximizeOnMobile',
|
|
452
|
+
'maxWidth',
|
|
453
|
+
'minHeight',
|
|
454
|
+
'minWidth',
|
|
455
|
+
'parent',
|
|
456
|
+
'readOnly',
|
|
457
|
+
'record',
|
|
458
|
+
'rendition',
|
|
459
|
+
'rtl',
|
|
460
|
+
'scrollable',
|
|
461
|
+
'span',
|
|
462
|
+
'strictRecordMapping',
|
|
463
|
+
'tooltip',
|
|
464
|
+
'values',
|
|
465
|
+
'width',
|
|
466
|
+
'x',
|
|
467
|
+
'y'
|
|
468
|
+
]);
|
|
469
|
+
BryntumTaskBoardFieldFilterPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumTaskBoardFieldFilterPickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
470
|
+
BryntumTaskBoardFieldFilterPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumTaskBoardFieldFilterPickerComponent, selector: "bryntum-task-board-field-filter-picker", inputs: { adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoUpdateRecord: "autoUpdateRecord", bubbleEvents: "bubbleEvents", centered: "centered", color: "color", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", dateFormat: "dateFormat", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", elementAttributes: "elementAttributes", filter: "filter", floating: "floating", getValueFieldConfig: "getValueFieldConfig", hideAnimation: "hideAnimation", hideWhenEmpty: "hideWhenEmpty", htmlCls: "htmlCls", ignoreParentReadOnly: "ignoreParentReadOnly", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", namedItems: "namedItems", operatorLocked: "operatorLocked", operators: "operators", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", propertyFieldConfig: "propertyFieldConfig", propertyLocked: "propertyLocked", relayStoreEvents: "relayStoreEvents", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", textAlign: "textAlign", textContent: "textContent", title: "title", triggerChangeOnInput: "triggerChangeOnInput", type: "type", ui: "ui", valueFieldPlaceholders: "valueFieldPlaceholders", valueLocked: "valueLocked", weight: "weight", alignSelf: "alignSelf", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", column: "column", content: "content", dataset: "dataset", disabled: "disabled", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", html: "html", id: "id", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", readOnly: "readOnly", record: "record", rendition: "rendition", rtl: "rtl", scrollable: "scrollable", span: "span", strictRecordMapping: "strictRecordMapping", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", focusVisible: "focusVisible", hasChanges: "hasChanges", isSettingValues: "isSettingValues", isValid: "isValid", parent: "parent", values: "values" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onCatchAll: "onCatchAll", onChange: "onChange", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onShow: "onShow" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumTaskBoardFieldFilterPickerComponent, decorators: [{
|
|
472
|
+
type: Component,
|
|
473
|
+
args: [{
|
|
474
|
+
selector: 'bryntum-task-board-field-filter-picker',
|
|
475
|
+
template: ''
|
|
476
|
+
}]
|
|
477
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adopt: [{
|
|
478
|
+
type: Input
|
|
479
|
+
}], align: [{
|
|
480
|
+
type: Input
|
|
481
|
+
}], anchor: [{
|
|
482
|
+
type: Input
|
|
483
|
+
}], ariaDescription: [{
|
|
484
|
+
type: Input
|
|
485
|
+
}], ariaLabel: [{
|
|
486
|
+
type: Input
|
|
487
|
+
}], autoUpdateRecord: [{
|
|
488
|
+
type: Input
|
|
489
|
+
}], bubbleEvents: [{
|
|
490
|
+
type: Input
|
|
491
|
+
}], centered: [{
|
|
492
|
+
type: Input
|
|
493
|
+
}], color: [{
|
|
494
|
+
type: Input
|
|
495
|
+
}], config: [{
|
|
496
|
+
type: Input
|
|
497
|
+
}], constrainTo: [{
|
|
498
|
+
type: Input
|
|
499
|
+
}], contentElementCls: [{
|
|
500
|
+
type: Input
|
|
501
|
+
}], dataField: [{
|
|
502
|
+
type: Input
|
|
503
|
+
}], dateFormat: [{
|
|
504
|
+
type: Input
|
|
505
|
+
}], defaultBindProperty: [{
|
|
506
|
+
type: Input
|
|
507
|
+
}], defaultFocus: [{
|
|
508
|
+
type: Input
|
|
509
|
+
}], defaults: [{
|
|
510
|
+
type: Input
|
|
511
|
+
}], detectCSSCompatibilityIssues: [{
|
|
512
|
+
type: Input
|
|
513
|
+
}], dock: [{
|
|
514
|
+
type: Input
|
|
515
|
+
}], draggable: [{
|
|
516
|
+
type: Input
|
|
517
|
+
}], elementAttributes: [{
|
|
518
|
+
type: Input
|
|
519
|
+
}], filter: [{
|
|
520
|
+
type: Input
|
|
521
|
+
}], floating: [{
|
|
522
|
+
type: Input
|
|
523
|
+
}], getValueFieldConfig: [{
|
|
524
|
+
type: Input
|
|
525
|
+
}], hideAnimation: [{
|
|
526
|
+
type: Input
|
|
527
|
+
}], hideWhenEmpty: [{
|
|
528
|
+
type: Input
|
|
529
|
+
}], htmlCls: [{
|
|
530
|
+
type: Input
|
|
531
|
+
}], ignoreParentReadOnly: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], itemCls: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}], lazyItems: [{
|
|
536
|
+
type: Input
|
|
537
|
+
}], listeners: [{
|
|
538
|
+
type: Input
|
|
539
|
+
}], localeClass: [{
|
|
540
|
+
type: Input
|
|
541
|
+
}], localizable: [{
|
|
542
|
+
type: Input
|
|
543
|
+
}], localizableProperties: [{
|
|
544
|
+
type: Input
|
|
545
|
+
}], maskDefaults: [{
|
|
546
|
+
type: Input
|
|
547
|
+
}], masked: [{
|
|
548
|
+
type: Input
|
|
549
|
+
}], monitorResize: [{
|
|
550
|
+
type: Input
|
|
551
|
+
}], namedItems: [{
|
|
552
|
+
type: Input
|
|
553
|
+
}], operatorLocked: [{
|
|
554
|
+
type: Input
|
|
555
|
+
}], operators: [{
|
|
556
|
+
type: Input
|
|
557
|
+
}], owner: [{
|
|
558
|
+
type: Input
|
|
559
|
+
}], positioned: [{
|
|
560
|
+
type: Input
|
|
561
|
+
}], preventTooltipOnTouch: [{
|
|
562
|
+
type: Input
|
|
563
|
+
}], propertyFieldConfig: [{
|
|
564
|
+
type: Input
|
|
565
|
+
}], propertyLocked: [{
|
|
566
|
+
type: Input
|
|
567
|
+
}], relayStoreEvents: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], ripple: [{
|
|
570
|
+
type: Input
|
|
571
|
+
}], rootElement: [{
|
|
572
|
+
type: Input
|
|
573
|
+
}], scrollAction: [{
|
|
574
|
+
type: Input
|
|
575
|
+
}], showAnimation: [{
|
|
576
|
+
type: Input
|
|
577
|
+
}], showTooltipWhenDisabled: [{
|
|
578
|
+
type: Input
|
|
579
|
+
}], tab: [{
|
|
580
|
+
type: Input
|
|
581
|
+
}], tabBarItems: [{
|
|
582
|
+
type: Input
|
|
583
|
+
}], tag: [{
|
|
584
|
+
type: Input
|
|
585
|
+
}], textAlign: [{
|
|
586
|
+
type: Input
|
|
587
|
+
}], textContent: [{
|
|
588
|
+
type: Input
|
|
589
|
+
}], title: [{
|
|
590
|
+
type: Input
|
|
591
|
+
}], triggerChangeOnInput: [{
|
|
592
|
+
type: Input
|
|
593
|
+
}], type: [{
|
|
594
|
+
type: Input
|
|
595
|
+
}], ui: [{
|
|
596
|
+
type: Input
|
|
597
|
+
}], valueFieldPlaceholders: [{
|
|
598
|
+
type: Input
|
|
599
|
+
}], valueLocked: [{
|
|
600
|
+
type: Input
|
|
601
|
+
}], weight: [{
|
|
602
|
+
type: Input
|
|
603
|
+
}], alignSelf: [{
|
|
604
|
+
type: Input
|
|
605
|
+
}], appendTo: [{
|
|
606
|
+
type: Input
|
|
607
|
+
}], callOnFunctions: [{
|
|
608
|
+
type: Input
|
|
609
|
+
}], catchEventHandlerExceptions: [{
|
|
610
|
+
type: Input
|
|
611
|
+
}], cls: [{
|
|
612
|
+
type: Input
|
|
613
|
+
}], column: [{
|
|
614
|
+
type: Input
|
|
615
|
+
}], content: [{
|
|
616
|
+
type: Input
|
|
617
|
+
}], dataset: [{
|
|
618
|
+
type: Input
|
|
619
|
+
}], disabled: [{
|
|
620
|
+
type: Input
|
|
621
|
+
}], extraData: [{
|
|
622
|
+
type: Input
|
|
623
|
+
}], flex: [{
|
|
624
|
+
type: Input
|
|
625
|
+
}], height: [{
|
|
626
|
+
type: Input
|
|
627
|
+
}], hidden: [{
|
|
628
|
+
type: Input
|
|
629
|
+
}], html: [{
|
|
630
|
+
type: Input
|
|
631
|
+
}], id: [{
|
|
632
|
+
type: Input
|
|
633
|
+
}], inputFieldAlign: [{
|
|
634
|
+
type: Input
|
|
635
|
+
}], insertBefore: [{
|
|
636
|
+
type: Input
|
|
637
|
+
}], insertFirst: [{
|
|
638
|
+
type: Input
|
|
639
|
+
}], items: [{
|
|
640
|
+
type: Input
|
|
641
|
+
}], keyMap: [{
|
|
642
|
+
type: Input
|
|
643
|
+
}], labelPosition: [{
|
|
644
|
+
type: Input
|
|
645
|
+
}], layout: [{
|
|
646
|
+
type: Input
|
|
647
|
+
}], layoutStyle: [{
|
|
648
|
+
type: Input
|
|
649
|
+
}], margin: [{
|
|
650
|
+
type: Input
|
|
651
|
+
}], maxHeight: [{
|
|
652
|
+
type: Input
|
|
653
|
+
}], maximizeOnMobile: [{
|
|
654
|
+
type: Input
|
|
655
|
+
}], maxWidth: [{
|
|
656
|
+
type: Input
|
|
657
|
+
}], minHeight: [{
|
|
658
|
+
type: Input
|
|
659
|
+
}], minWidth: [{
|
|
660
|
+
type: Input
|
|
661
|
+
}], readOnly: [{
|
|
662
|
+
type: Input
|
|
663
|
+
}], record: [{
|
|
664
|
+
type: Input
|
|
665
|
+
}], rendition: [{
|
|
666
|
+
type: Input
|
|
667
|
+
}], rtl: [{
|
|
668
|
+
type: Input
|
|
669
|
+
}], scrollable: [{
|
|
670
|
+
type: Input
|
|
671
|
+
}], span: [{
|
|
672
|
+
type: Input
|
|
673
|
+
}], strictRecordMapping: [{
|
|
674
|
+
type: Input
|
|
675
|
+
}], tooltip: [{
|
|
676
|
+
type: Input
|
|
677
|
+
}], width: [{
|
|
678
|
+
type: Input
|
|
679
|
+
}], x: [{
|
|
680
|
+
type: Input
|
|
681
|
+
}], y: [{
|
|
682
|
+
type: Input
|
|
683
|
+
}], anchorSize: [{
|
|
684
|
+
type: Input
|
|
685
|
+
}], focusVisible: [{
|
|
686
|
+
type: Input
|
|
687
|
+
}], hasChanges: [{
|
|
688
|
+
type: Input
|
|
689
|
+
}], isSettingValues: [{
|
|
690
|
+
type: Input
|
|
691
|
+
}], isValid: [{
|
|
692
|
+
type: Input
|
|
693
|
+
}], parent: [{
|
|
694
|
+
type: Input
|
|
695
|
+
}], values: [{
|
|
696
|
+
type: Input
|
|
697
|
+
}], onBeforeDestroy: [{
|
|
698
|
+
type: Output
|
|
699
|
+
}], onBeforeHide: [{
|
|
700
|
+
type: Output
|
|
701
|
+
}], onBeforeSetRecord: [{
|
|
702
|
+
type: Output
|
|
703
|
+
}], onBeforeShow: [{
|
|
704
|
+
type: Output
|
|
705
|
+
}], onCatchAll: [{
|
|
706
|
+
type: Output
|
|
707
|
+
}], onChange: [{
|
|
708
|
+
type: Output
|
|
709
|
+
}], onDestroy: [{
|
|
710
|
+
type: Output
|
|
711
|
+
}], onDirtyStateChange: [{
|
|
712
|
+
type: Output
|
|
713
|
+
}], onElementCreated: [{
|
|
714
|
+
type: Output
|
|
715
|
+
}], onFocusIn: [{
|
|
716
|
+
type: Output
|
|
717
|
+
}], onFocusOut: [{
|
|
718
|
+
type: Output
|
|
719
|
+
}], onHide: [{
|
|
720
|
+
type: Output
|
|
721
|
+
}], onPaint: [{
|
|
722
|
+
type: Output
|
|
723
|
+
}], onReadOnly: [{
|
|
724
|
+
type: Output
|
|
725
|
+
}], onRecompose: [{
|
|
726
|
+
type: Output
|
|
727
|
+
}], onResize: [{
|
|
728
|
+
type: Output
|
|
729
|
+
}], onShow: [{
|
|
730
|
+
type: Output
|
|
731
|
+
}] } });
|
|
732
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS10YXNrLWJvYXJkLWZpZWxkLWZpbHRlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS10YXNrLWJvYXJkLWZpZWxkLWZpbHRlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBdVIsMEJBQTBCLEVBQXVHLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQTBtQmxjLE1BQU0sT0FBTywwQ0FBMEM7SUF3UW5ELFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFtSUYsa0JBQWtCO1FBQ2xCOzs7O1dBSUc7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBQ2hHOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUF5RSxDQUFDO1FBQ3hIOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUFrRSxDQUFDO1FBQ3RIOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUE2RSxDQUFDO1FBQzVIOzs7Ozs7O1dBT0c7UUFDTyxlQUFVLEdBQVEsSUFBSSxZQUFZLEVBQWdFLENBQUM7UUFDN0c7Ozs7OztXQU1HO1FBQ08sYUFBUSxHQUFRLElBQUks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LFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLENBQUM7c0JBQVQsS0FBSztnQkFDRyxDQUFDO3NCQUFULEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFRSSxlQUFlO3NCQUF4QixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBU0csVUFBVTtzQkFBbkIsTUFBTTtnQkFRRyxRQUFRO3NCQUFqQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU1HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVVHLE9BQU87c0JBQWhCLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKipcbiAqIEFuZ3VsYXIgd3JhcHBlciBmb3IgQnJ5bnR1bSBUYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlclxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBXcmFwcGVySGVscGVyIGZyb20gJy4vd3JhcHBlci5oZWxwZXInO1xuXG5pbXBvcnQgeyBBbGlnblNwZWMsIEJhc2UsIENvbGxlY3Rpb25GaWx0ZXIsIENvbGxlY3Rpb25GaWx0ZXJDb25maWcsIENvbWJvQ29uZmlnLCBDb250YWluZXIsIENvbnRhaW5lckl0ZW1Db25maWcsIENvbnRhaW5lckxheW91dENvbmZpZywgRG9tQ29uZmlnLCBGaWVsZEZpbHRlclBpY2tlciwgS2V5TWFwQ29uZmlnLCBMYXlvdXQsIE1hc2tDb25maWcsIE1lbnVJdGVtQ29uZmlnLCBNZW51SXRlbUVudHJ5LCBNb2RlbCwgUmVjdGFuZ2xlLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFRhYkNvbmZpZywgVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIsIFRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyTGlzdGVuZXJzLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFZhbHVlRmllbGRQbGFjZWhvbGRlcnMsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vdGFza2JvYXJkJztcblxuaW1wb3J0IHsgU3RyaW5nSGVscGVyIH0gZnJvbSAnQGJyeW50dW0vdGFza2JvYXJkJztcblxuZXhwb3J0IHR5cGUgQnJ5bnR1bVRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyUHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctYWxpZ24pXG4gICAgICovXG4gICAgYWxpZ24gPyA6IEFsaWduU3BlY3xzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbYWxpZ24tc2VsZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FsaWduLXNlbGYpIHN0eWxlLlxuICAgICAqL1xuICAgIGFsaWduU2VsZiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBhbmQgYmVpbmcgc2hvd24gdGhyb3VnaCBbc2hvd0J5XSgjQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXNob3dCeSkuKlxuICAgICAqIGB0cnVlYCB0byBzaG93IGEgY29ubmVjdG9yIGFycm93IHBvaW50aW5nIHRvIHRoZSBhbGlnbiB0YXJnZXQuXG4gICAgICovXG4gICAgYW5jaG9yID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgdGhlIGlkIG9mIGFuIGVsZW1lbnQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgdG8uIENhbiBiZSBjb25maWd1cmVkLCBvciBzZXQgb25jZSBhdFxuICAgICAqIHJ1bnRpbWUuIFRvIGFjY2VzcyB0aGUgZWxlbWVudCBvZiBhIHJlbmRlcmVkIHdpZGdldCwgc2VlIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICovXG4gICAgYXBwZW5kVG8gPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0XG4gICAgICogaW50byBhbiBlbGVtZW50IHdoaWNoIHdpbGwgYmUgbGlua2VkIHVzaW5nIHRoZSBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYXNzaWduZWQgW3JlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1yZWNvcmQpIGF1dG9tYXRpY2FsbHkgb24gZmllbGQgY2hhbmdlc1xuICAgICAqL1xuICAgIGF1dG9VcGRhdGVSZWNvcmQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgb3IgW3Bvc2l0aW9uZWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXBvc2l0aW9uZWQpLipcbiAgICAgKiBFbGVtZW50LCBXaWRnZXQgb3IgUmVjdGFuZ2xlIHRvIHdoaWNoIHRoaXMgV2lkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICAgICAqL1xuICAgIGNvbnN0cmFpblRvID8gOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlXG4gICAgLyoqXG4gICAgICogVGhlIEhUTUwgY29udGVudCB0aGF0IGNvZXhpc3RzIHdpdGggc2libGluZyBlbGVtZW50cyB3aGljaCBtYXkgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZVxuICAgICAqIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KSBieSBwbHVnaW5zIGFuZCBmZWF0dXJlcy5cbiAgICAgKiBXaGVuIHNwZWNpZnlpbmcgaHRtbCwgdGhpcyB3aWRnZXQncyBlbGVtZW50IHdpbGwgYWxzbyBoYXZlIHRoZSBbaHRtbENsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1odG1sQ2xzKVxuICAgICAqIGNsYXNzIGFkZGVkIHRvIGl0cyBjbGFzc0xpc3QsIHRvIGFsbG93IHRhcmdldGVkIHN0eWxpbmcuXG4gICAgICovXG4gICAgY29udGVudCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBXaWRnZXQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGluIHRoZSBHcmlkJ3MgUm93RXhwYW5kZXIgZmVhdHVyZSdzIGB3aWRnZXRgIGNvbmZpZywgcHJvdmlkZSB0aGVcbiAgICAgKiBmaWVsZCBvbiB0aGUgZXhwYW5kZWQgcmVjb3JkIHRvIHVzZSBmb3IgcG9wdWxhdGluZyB0aGlzIHdpZGdldCdzIHN0b3JlIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIGRhdGFGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGFwcGx5IHRvIGVsZW1lbnRzIGRhdGFzZXQgKGVhY2gga2V5IHdpbGwgYmUgdXNlZCBhcyBhIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50KVxuICAgICAqL1xuICAgIGRhdGFzZXQgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gZGlzcGxheSBkYXRlcyBpbiB2YWx1ZSBpbnB1dCBmaWVsZHMuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGxvY2FsZSdzXG4gICAgICogYEZpZWxkRmlsdGVyUGlja2VyLmRhdGVGb3JtYXRgIHZhbHVlLlxuICAgICAqL1xuICAgIGRhdGVGb3JtYXQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBbcXVlcnldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNmdW5jdGlvbi1xdWVyeSkgc2VsZWN0b3IgZnVuY3Rpb24gd2hpY2ggY2FuIGlkZW50aWZ5IHRoZSBkZXNjZW5kYW50IHdpZGdldCB0byB3aGljaFxuICAgICAqIGZvY3VzIHNob3VsZCBiZSBkaXJlY3RlZCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1kZWZhdWx0Rm9jdXMpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBXaWRnZXQgcGFzc2VkIHRvIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnV0aHkgdmFsdWUgaWYgd2lkZ2V0IGlzIHRoZSBkZWZhdWx0IG9uZVxuICAgICAqL1xuICAgIGRlZmF1bHRGb2N1cyA/IDogKCh3aWRnZXQ6IFdpZGdldCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBzZXR0aW5ncyB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKi9cbiAgICBkZWZhdWx0cyA/IDogQ29udGFpbmVySXRlbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1kZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzKVxuICAgICAqL1xuICAgIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBNYWtlIHRoZSBlbnRpcmUgcGlja2VyIGRpc2FibGVkLlxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBkcmFnIGEgd2lkZ2V0IGZyZWVseSBvbiB0aGUgcGFnZS4gT3Igc2V0IHRvIGFuIG9iamVjdCB3aXRoIGEgwrRoYW5kbGVTZWxlY3RvcsK0XG4gICAgICogcHJvcGVydHkgd2hpY2ggY29udHJvbHMgd2hlbiBhIGRyYWcgc2hvdWxkIHN0YXJ0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICovXG4gICAgZHJhZ2dhYmxlID8gOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgW0NvbGxlY3Rpb25GaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvdXRpbC9Db2xsZWN0aW9uRmlsdGVyKSBkaXNwbGF5ZWRcbiAgICAgKiBhbmQgZWRpdGFibGUgaW4gdGhpcyBwaWNrZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWZpbHRlcilcbiAgICAgKi9cbiAgICBmaWx0ZXIgPyA6IENvbGxlY3Rpb25GaWx0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbZmxleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXgpIHN0eWxlLlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYCZsdDtmbGV4LWdyb3cmZ3Q7ICZsdDtmbGV4LXNocmluayZndDsgJmx0O2ZsZXgtYmFzaXMmZ3Q7YCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHRoZSBgZmxleC1ncm93YCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmbGV4ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtb3ZlIHRoZSB3aWRnZXQgb3V0IG9mIHRoZSBkb2N1bWVudCBmbG93IGFuZCBwb3NpdGlvbiBpdFxuICAgICAqIGFic29sdXRlbHkgaW4gYnJvd3NlciB2aWV3cG9ydCBzcGFjZS5cbiAgICAgKi9cbiAgICBmbG9hdGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdmFsdWUgZmllbGRzIHNob3duIGZvciBhIGZpbHRlci4gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgICAqIGlzIHJlY2VpdmVkIGFzIGFuIGFyZ3VtZW50IGFuZCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctZ2V0VmFsdWVGaWVsZENvbmZpZylcbiAgICAgKiBAcGFyYW0ge0NvcmUudXRpbC5Db2xsZWN0aW9uRmlsdGVyfSBmaWx0ZXIgVGhlIGZpbHRlciBiZWluZyBkaXNwbGF5ZWRcbiAgICAgKiBAcGFyYW0ge0NvbnRhaW5lckl0ZW1Db25maWd9IGZpZWxkQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgdmFsdWUgZmllbGRcbiAgICAgKiBAcmV0dXJucyB7Q29udGFpbmVySXRlbUNvbmZpZ30gdGhlIHJlc3VsdGluZyBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgZ2V0VmFsdWVGaWVsZENvbmZpZyA/IDogKGZpbHRlcjogQ29sbGVjdGlvbkZpbHRlciwgZmllbGRDb25maWc6IENvbnRhaW5lckl0ZW1Db25maWcpID0+IENvbnRhaW5lckl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIG1ha2UgdGhpcyBjb250YWluZXIgaGlkZSB3aGVuIGl0IGhhcyBubyB2aXNpYmxlIGNoaWxkcmVuIChFaXRoZXIgZW1wdHlcbiAgICAgKiBvciBhbGwgY2hpbGRyZW4gaGlkZGVuKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctaGlkZVdoZW5FbXB0eSlcbiAgICAgKi9cbiAgICBoaWRlV2hlbkVtcHR5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIEhUTUwgdG8gZGlzcGxheSBpbml0aWFsbHkgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIG1hcmt1cCAoY2FsbGVkIGF0IHdpZGdldCBjb25zdHJ1Y3Rpb24gdGltZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWh0bWwpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBUaGUgY2FsbGluZyBXaWRnZXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGh0bWwgPyA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiBzdHJpbmcpfERvbUNvbmZpZ3xEb21Db25maWdbXXxWdWVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNsYXNzKGVzKSB0byBhZGQgd2hlbiBIVE1MIGNvbnRlbnQgaXMgYmVpbmcgYXBwbGllZCB0byB0aGlzIHdpZGdldC5cbiAgICAgKi9cbiAgICBodG1sQ2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctaWdub3JlUGFyZW50UmVhZE9ubHkpXG4gICAgICovXG4gICAgaWdub3JlUGFyZW50UmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIGFsaWduIGlucHV0IGZpZWxkcyBvZiBjaGlsZCB3aWRnZXRzLiBCeSBkZWZhdWx0LCB0aGUgRmllbGQgaW5wdXQgZWxlbWVudCBpc1xuICAgICAqIHBsYWNlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGBsYWJlbGAuIElmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgaW5wdXQgZmllbGRzIGFsaWduZWQgdG8gdGhlXG4gICAgICogcmlnaHQsIHNldCB0aGlzIGNvbmZpZyB0byBgJ2VuZCdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1pbnB1dEZpZWxkQWxpZ24pXG4gICAgICovXG4gICAgaW5wdXRGaWVsZEFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0QmVmb3JlID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhcHBlbmQgdGhpcyB3aWRnZXQgZWxlbWVudCB0bywgYXMgYSBmaXJzdCBjaGlsZC4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIENTUyBjbGFzcyB0byBhZGQgdG8gY2hpbGQgaXRlbXMgb2YgdGhpcyBjb250YWluZXIuXG4gICAgICovXG4gICAgaXRlbUNscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdHlwZWQgY2hpbGQgd2lkZ2V0IGNvbmZpZyBvYmplY3RzIG9yIFdpZGdldHMuIE1heSBhbHNvIGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGFuIGFycmF5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1pdGVtcylcbiAgICAgKi9cbiAgICBpdGVtcyA/IDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5PnwoQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5fFdpZGdldClbXVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgW2tleV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5KSBuYW1lXG4gICAgICogYW5kIG9wdGlvbmFsIG1vZGlmaWVyIHByZWZpeGVzOiBgJ0N0cmwrJ2AsIGAnQWx0KydgLCBgJ01ldGErJ2AsIGFuZCBgJ1NoaWZ0KydgIChjYXNlLWluc2Vuc2l0aXZlKS4gVGhlIHZhbHVlc1xuICAgICAqIGFyZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUga2V5c3Ryb2tlIGlzIHJlY2VpdmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1rZXlNYXApXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWxhYmVsUG9zaXRpb24pXG4gICAgICovXG4gICAgbGFiZWxQb3NpdGlvbiA/IDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBzaG9ydCBuYW1lIG9mIGEgaGVscGVyIGNsYXNzIHdoaWNoIG1hbmFnZXMgcmVuZGVyaW5nIGFuZCBzdHlsaW5nIG9mIGNoaWxkIGl0ZW1zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1sYXlvdXQpXG4gICAgICovXG4gICAgbGF5b3V0ID8gOiBzdHJpbmd8Q29udGFpbmVyTGF5b3V0Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIENTUyBzdHlsZSBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWxheW91dFN0eWxlKVxuICAgICAqL1xuICAgIGxheW91dFN0eWxlID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBbY2hpbGQgaXRlbV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykgKmNvbmZpZyBvYmplY3RzKiB3aGljaCBpcyB0byBiZSBjb252ZXJ0ZWQgaW50b1xuICAgICAqIGluc3RhbmNlcyBvbmx5IHdoZW4gdGhpcyBDb250YWluZXIgaXMgcmVuZGVyZWQsIHJhdGhlciB0aGFuIGVhZ2VybHkgYXQgY29uc3RydWN0IHRpbWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLWxhenlJdGVtcylcbiAgICAgKi9cbiAgICBsYXp5SXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+fENvbnRhaW5lckl0ZW1Db25maWdbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBUYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlckxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1sb2NhbGVDbGFzcylcbiAgICAgKi9cbiAgICBsb2NhbGVDbGFzcyA/IDogdHlwZW9mIEJhc2VcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGxvY2FsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHJvcGVydGllcyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgYXV0b21hdGljYWxseSB1cG9uIGEgbG9jYWxlIGFwcGx5aW5nLlxuICAgICAqIEluIGNhc2UgdGhlcmUgaXMgYSBuZWVkIHRvIGxvY2FsaXplIG5vdCB0eXBpY2FsIHZhbHVlIChub3QgYSBTdHJpbmcgdmFsdWUgb3IgYSBmaWVsZCB3aXRoIHJlLWRlZmluZWQgc2V0dGVyL2dldHRlciksXG4gICAgICogeW91IGNvdWxkIHVzZSAnbG9jYWxlS2V5JyBtZXRhIGNvbmZpZ3VyYXRpb24uXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctbG9jYWxpemFibGVQcm9wZXJ0aWVzKVxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlUHJvcGVydGllcyA/IDogc3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIG9iamVjdCBjb250YWlucyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY3JlYXRlZCBmb3IgdGhlXG4gICAgICogW21hc2tlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrZWQpIGNvbmZpZy4gQW55IHByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHRoZSBgbWFza2VkYCBjb25maWcgd2lsbCBvdmVycmlkZSB0aGVzZVxuICAgICAqIHZhbHVlcy5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heEhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1tYXhpbWl6ZU9uTW9iaWxlKVxuICAgICAqL1xuICAgIG1heGltaXplT25Nb2JpbGUgPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5IZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWluV2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBpcyBjb25maWd1cmVkIGFzIGB0cnVlYCBhIFtSZXNpemVPYnNlcnZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyKVxuICAgICAqIGlzIHVzZWQgdG8gbW9uaXRvciB0aGlzIGVsZW1lbnQgZm9yIHNpemUgY2hhbmdlcyBjYXVzZWQgYnkgZWl0aGVyIHN0eWxlIG1hbmlwdWxhdGlvbiwgb3IgYnkgQ1NTXG4gICAgICogbGF5b3V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1tb25pdG9yUmVzaXplKVxuICAgICAqL1xuICAgIG1vbml0b3JSZXNpemUgPyA6IGJvb2xlYW58e1xuICAgICAgICBpbW1lZGlhdGU/OiBib29sZWFuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgY29uZmlnIG9iamVjdHMgd2hpY2ggbWF5IGJlIHJlZmVyZW5jZWQgYnkgbmFtZSBpbiB0aGUgW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKVxuICAgICAqIGNvbmZpZy4gRm9yIGV4YW1wbGUsIGEgc3BlY2lhbGl6ZWQgW01lbnVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01lbnUpIHN1YmNsYXNzIG1heSBoYXZlIGEgYG5hbWVkSXRlbXNgIGRlZmF1bHRcbiAgICAgKiB2YWx1ZSBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctbmFtZWRJdGVtcylcbiAgICAgKi9cbiAgICBuYW1lZEl0ZW1zID8gOiBSZWNvcmQ8c3RyaW5nLCBDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIE1ha2Ugb25seSB0aGUgb3BlcmF0b3Igc2VsZWN0b3IgcmVhZE9ubHkuXG4gICAgICovXG4gICAgb3BlcmF0b3JMb2NrZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgdGhlIGJ1aWx0LWluIGxpc3Qgb2Ygb3BlcmF0b3JzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLiBTcGVjaWZ5IG9wZXJhdG9ycyBhc1xuICAgICAqIGFuIG9iamVjdCB3aXRoIGRhdGEgdHlwZXMgYXMga2V5cyBhbmQgbGlzdHMgb2Ygb3BlcmF0b3JzIGFzIHZhbHVlcywgbGlrZSB0aGlzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1vcGVyYXRvcnMpXG4gICAgICovXG4gICAgb3BlcmF0b3JzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaXRlbXMpIG9mIGEgQ29udGFpbmVyKSwgdGhpcyBjb25maWcgd2lsbCBiZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2VcbiAgICAgKiB0aGUgb3duZXIgaXMgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGhlIGVuY2Fwc3VsYXRpbmcgQ29udGFpbmVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgd2hlbiBhIHdpZGdldCBpcyByZW5kZXJlZCBpbnRvIGFub3RoZXIgd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctcG9zaXRpb25lZClcbiAgICAgKi9cbiAgICBwb3NpdGlvbmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJldmVudCB0b29sdGlwIGZyb20gYmVpbmcgZGlzcGxheWVkIG9uIHRvdWNoIGRldmljZXMuIFVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgYnV0dG9ucyB0aGF0IGRpc3BsYXkgYVxuICAgICAqIG1lbnUgb24gY2xpY2sgZXRjLCBzaW5jZSB0aGUgdG9vbHRpcCB3b3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgKi9cbiAgICBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgcHJvcGVydHkgc2VsZWN0b3IgW0NvbWJvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibykuXG4gICAgICovXG4gICAgcHJvcGVydHlGaWVsZENvbmZpZyA/IDogQ29tYm9Db25maWdcbiAgICAvKipcbiAgICAgKiBNYWtlIG9ubHkgdGhlIHByb3BlcnR5IHNlbGVjdG9yIHJlYWRPbmx5LlxuICAgICAqL1xuICAgIHByb3BlcnR5TG9ja2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTWFrZSB0aGUgZW50aXJlIHBpY2tlciByZWFkLW9ubHkuXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBbUmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL2RhdGEvTW9kZWwpIHdob3NlIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgZmllbGRzIGluIHRoZSBjb250YWluZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLXJlY29yZClcbiAgICAgKi9cbiAgICByZWNvcmQgPyA6IE1vZGVsXG4gICAgcmVsYXlTdG9yZUV2ZW50cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVpdGhlciBhIGRlZmF1bHQgYHJlbmRpdGlvbmAgdG8gYXBwbHkgdG8gYWxsIGNoaWxkIHdpZGdldHMsIG9yIGEgbWFwIG9mIHJlbmRpdGlvbnMga2V5ZWQgYnkgY2hpbGQgd2lkZ2V0XG4gICAgICogYHR5cGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1yZW5kaXRpb24pXG4gICAgICovXG4gICAgcmVuZGl0aW9uID8gOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctcnRsKVxuICAgICAqL1xuICAgIHJ0bCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIChhbmQgb3B0aW9uYWxseSBpbiB3aGljaCBheGVzKSBhIFdpZGdldCBtYXkgc2Nyb2xsLiBgdHJ1ZWAgbWVhbnMgdGhpcyB3aWRnZXQgbWF5IHNjcm9sbFxuICAgICAqIGluIGJvdGggYXhlcy4gTWF5IGJlIGFuIG9iamVjdCBjb250YWluaW5nIGJvb2xlYW4gYG92ZXJmbG93WGAgYW5kIGBvdmVyZmxvd1lgIHByb3BlcnRpZXMgd2hpY2ggYXJlXG4gICAgICogYXBwbGllZCB0byBDU1Mgc3R5bGUgcHJvcGVydGllcyBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAuIElmIHRoZXkgYXJlIGJvb2xlYW4sIHRoZXkgYXJlIHRyYW5zbGF0ZWQgdG9cbiAgICAgKiBDU1Mgb3ZlcmZsb3cgcHJvcGVydGllcyB0aHVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy1zY3JvbGxhYmxlKVxuICAgICAqL1xuICAgIHNjcm9sbGFibGUgPyA6IGJvb2xlYW58U2Nyb2xsZXJDb25maWd8U2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoYXQgdG8gZG8gaWYgZG9jdW1lbnQgaXMgc2Nyb2xsZWQgd2hpbGUgV2lkZ2V0IGlzIHZpc2libGUgKG9ubHkgcmVsZXZhbnQgd2hlbiBmbG9hdGluZyBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICAgKiBWYWxpZCB2YWx1ZXM6IMK0bnVsbMK0OiBkbyBub3RoaW5nLCDCtGhpZGXCtDogaGlkZSB0aGUgd2lkZ2V0IG9yIMK0cmVhbGlnbsK0OiByZWFsaWduIHRvIHRoZSB0YXJnZXQgaWYgcG9zc2libGUuXG4gICAgICovXG4gICAgc2Nyb2xsQWN0aW9uID8gOiAnaGlkZSd8J3JlYWxpZ24nfG51bGxcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IHRoZSB0b29sdGlwIHdoZW4gdGhpcyB3aWRnZXQgaXMgW2Rpc2FibGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZGlzYWJsZWQpXG4gICAgICovXG4gICAgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBtYXRjaCBmaWVsZHMgYnkgdGhlaXIgYG5hbWVgIHByb3BlcnR5IG9ubHkgd2hlbiBhc3NpZ25pbmcgYSBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLXJlY29yZCksXG4gICAgICogd2l0aG91dCBmYWxsaW5nIGJhY2sgdG8gYHJlZmAuXG4gICAgICovXG4gICAgc3RyaWN0UmVjb3JkTWFwcGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGNvbnRhaW5lciBpcyB1c2VkIGFzIGEgdGFiIGluIGEgVGFiUGFuZWwsIHRoZXNlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgKiBbVGFiQmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJCYXIpIHdoZW4gdGhpcyBjb250YWluZXIgaXMgdGhlIGFjdGl2ZSB0YWIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgZm9yIGEgY29udGFpbmVyIHVzZWQgdG8gc2hvdyB0ZXh0IG1hcmt1cC4gSXQgd2lsbCBhcHBseSB0aGUgQ1NTIGNsYXNzIGBiLXRleHQtY29udGVudGBcbiAgICAgKiB3aGljaCBzcGVjaWZpZXMgYSBkZWZhdWx0IG1heC13aWR0aCB0aGF0IG1ha2VzIGxvbmcgdGV4dCBtb3JlIHJlYWRhYmxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy10ZXh0Q29udGVudClcbiAgICAgKi9cbiAgICB0ZXh0Q29udGVudCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBmb3IgdGhlIHdpZGdldC4gT25seSBpbiBlZmZlY3Qgd2hlbiBpbnNpZGUgYSBjb250YWluZXIgdGhhdCB1c2VzIGl0IChzdWNoIGFzIFRhYlBhbmVsKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUb29sdGlwIGZvciB0aGUgd2lkZ2V0LCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYXMgYSBUb29sdGlwIGNvbmZpZyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXIjY29uZmlnLXRvb2x0aXApXG4gICAgICovXG4gICAgdG9vbHRpcCA/IDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmFpc2UgW2NoYW5nZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGRGaWx0ZXJQaWNrZXIjZXZlbnQtY2hhbmdlKSBldmVudHMgYXMgdGhlIHVzZXIgdHlwZXMgaW50byBhIHZhbHVlIGZpZWxkLiBJZiBgZmFsc2VgLFxuICAgICAqIFtjaGFuZ2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkRmlsdGVyUGlja2VyI2V2ZW50LWNoYW5nZSkgZXZlbnRzIHdpbGwgYmUgcmFpc2VkIG9ubHkgd2hlbiB0aGUgdmFsdWUgaW5wdXQgZmllbGQncyBvd24gYGNoYW5nZWAgZXZlbnRcbiAgICAgKiBvY2N1cnMsIGZvciBleGFtcGxlIG9uIGZpZWxkIGJsdXIuXG4gICAgICovXG4gICAgdHJpZ2dlckNoYW5nZU9uSW5wdXQgPyA6IGJvb2xlYW5cbiAgICB0eXBlID8gOiAndGFza2JvYXJkZmllbGRmaWx0ZXJwaWNrZXInXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzcyBuYW1lIHN1ZmZpeGVzIHRvIGFwcGx5IHRvIHRoZSBlbGVtZW50cyByZW5kZXJlZCBieSB0aGlzIHdpZGdldC4gVGhpcyBtYXkgYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBhbiBhcnJheSBvZiBzdHJpbmdzLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXMgd2l0aCB0cnV0aHlcbiAgICAgKiB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIFtWYWx1ZUZpZWxkUGxhY2Vob2xkZXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZEZpbHRlclBpY2tlciN0eXBlZGVmLVZhbHVlRmllbGRQbGFjZWhvbGRlcnMpIG9iamVjdCBzcGVjaWZ5aW5nIGN1c3RvbSBwbGFjZWhvbGRlciB0ZXh0IGZvciB2YWx1ZSBpbnB1dCBmaWVsZHMuXG4gICAgICovXG4gICAgdmFsdWVGaWVsZFBsYWNlaG9sZGVycyA/IDogVmFsdWVGaWVsZFBsYWNlaG9sZGVyc1xuICAgIC8qKlxuICAgICAqIE1ha2Ugb25seSB0aGUgdmFsdWUgaW5wdXQocykgcmVhZE9ubHkuXG4gICAgICovXG4gICAgdmFsdWVMb2NrZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy14KVxuICAgICAqL1xuICAgIHggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB5IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2NvbmZpZy15KVxuICAgICAqL1xuICAgIHkgPyA6IG51bWJlclxuXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0tdGFzay1ib2FyZC1maWVsZC1maWx0ZXItcGlja2VyJyxcbiAgICB0ZW1wbGF0ZSA6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEJyeW50dW1UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXInO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUV2ZW50czogc3RyaW5nW10gPSBbXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2hhbmdlJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkRpcnR5U3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkZvY3VzSW4nLFxuICAgICAgICAnb25Gb2N1c091dCcsXG4gICAgICAgICdvbkhpZGUnLFxuICAgICAgICAnb25QYWludCcsXG4gICAgICAgICdvblJlYWRPbmx5JyxcbiAgICAgICAgJ29uUmVjb21wb3NlJyxcbiAgICAgICAgJ29uUmVzaXplJyxcbiAgICAgICAgJ29uU2hvdydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUZlYXR1cmVOYW1lczogc3RyaW5nW10gPSBbXG5cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3M6IHN0cmluZ1tdID0gQnJ5bnR1bVRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvVXBkYXRlUmVjb3JkJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRlbnQnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGF0ZUZvcm1hdCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWx0ZXInLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdnZXRWYWx1ZUZpZWxkQ29uZmlnJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWRlV2hlbkVtcHR5JyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaHRtbENscycsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnaXRlbXMnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ2xhenlJdGVtcycsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25hbWVkSXRlbXMnLFxuICAgICAgICAnb3BlcmF0b3JMb2NrZWQnLFxuICAgICAgICAnb3BlcmF0b3JzJyxcbiAgICAgICAgJ293bmVyJyxcbiAgICAgICAgJ3Bvc2l0aW9uZWQnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3Byb3BlcnR5RmllbGRDb25maWcnLFxuICAgICAgICAncHJvcGVydHlMb2NrZWQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0cmljdFJlY29yZE1hcHBpbmcnLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3RhZycsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGV4dENvbnRlbnQnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmlnZ2VyQ2hhbmdlT25JbnB1dCcsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3ZhbHVlRmllbGRQbGFjZWhvbGRlcnMnLFxuICAgICAgICAndmFsdWVMb2NrZWQnLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3gnLFxuICAgICAgICAneSdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzT25seTogc3RyaW5nW10gPSBbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvVXBkYXRlUmVjb3JkJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RhdGVGb3JtYXQnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZWZhdWx0Rm9jdXMnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdmaWx0ZXInLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnZ2V0VmFsdWVGaWVsZENvbmZpZycsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2hpZGVXaGVuRW1wdHknLFxuICAgICAgICAnaHRtbENscycsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpdGVtQ2xzJyxcbiAgICAgICAgJ2xhenlJdGVtcycsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ29wZXJhdG9yTG9ja2VkJyxcbiAgICAgICAgJ29wZXJhdG9ycycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdwcm9wZXJ0eUZpZWxkQ29uZmlnJyxcbiAgICAgICAgJ3Byb3BlcnR5TG9ja2VkJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Njcm9sbEFjdGlvbicsXG4gICAgICAgICdzaG93QW5pbWF0aW9uJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RleHRDb250ZW50JyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3RyaWdnZXJDaGFuZ2VPbklucHV0JyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAndmFsdWVGaWVsZFBsYWNlaG9sZGVycycsXG4gICAgICAgICd2YWx1ZUxvY2tlZCcsXG4gICAgICAgICd3ZWlnaHQnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Qcm9wczogc3RyaW5nW10gPSBCcnludHVtVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXJDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuY2hvclNpemUnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbnRlbnQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnaGFzQ2hhbmdlcycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdpc1NldHRpbmdWYWx1ZXMnLFxuICAgICAgICAnaXNWYWxpZCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYXlvdXQnLFxuICAgICAgICAnbGF5b3V0U3R5bGUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0cmljdFJlY29yZE1hcHBpbmcnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd2YWx1ZXMnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IFRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyO1xuXG4gICAgcHJpdmF0ZSBicnludHVtQ29uZmlnID0ge1xuICAgICAgICBhZG9wdCAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBocmVmICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhbmd1bGFyQ29tcG9uZW50IDogdGhpcyxcbiAgICAgICAgZmVhdHVyZXMgICAgICAgICA6IHt9LFxuICAgICAgICBsaXN0ZW5lcnMgICAgICAgIDoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3Mgb25seVxuICAgIEBJbnB1dCgpIGFkb3B0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbGlnbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBBbGlnblNwZWN8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuY2hvciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXJpYURlc2NyaXB0aW9uICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvVXBkYXRlUmVjb3JkICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjZW50ZXJlZCAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbG9yICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29uc3RyYWluVG8gICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZTtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkYXRlRm9ybWF0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRGb2N1cyAgICAgICAgICAgICAgICAgISA6ICgod2lkZ2V0OiBXaWRnZXQpID0+IGJvb2xlYW4pfHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICEgOiBDb250YWluZXJJdGVtQ29uZmlnO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgISA6IENvbGxlY3Rpb25GaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBnZXRWYWx1ZUZpZWxkQ29uZmlnICAgICAgICAgICEgOiAoZmlsdGVyOiBDb2xsZWN0aW9uRmlsdGVyLCBmaWVsZENvbmZpZzogQ29udGFpbmVySXRlbUNvbmZpZykgPT4gQ29udGFpbmVySXRlbUNvbmZpZztcbiAgICBASW5wdXQoKSBoaWRlQW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBoaWRlV2hlbkVtcHR5ICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGh0bWxDbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgaWdub3JlUGFyZW50UmVhZE9ubHkgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpdGVtQ2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbGF6eUl0ZW1zICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz58Q29udGFpbmVySXRlbUNvbmZpZ1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyTGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvY2FsZUNsYXNzICAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBCYXNlO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGVQcm9wZXJ0aWVzICAgICAgICAhIDogc3RyaW5nW107XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1vbml0b3JSZXNpemUgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBpbW1lZGlhdGU/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSBuYW1lZEl0ZW1zICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBvcGVyYXRvckxvY2tlZCAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcm9wZXJ0eUZpZWxkQ29uZmlnICAgICAgICAgICEgOiBDb21ib0NvbmZpZztcbiAgICBASW5wdXQoKSBwcm9wZXJ0eUxvY2tlZCAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmlwcGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfTtcbiAgICBASW5wdXQoKSByb290RWxlbWVudCAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjcm9sbEFjdGlvbiAgICAgICAgICAgICAgICAgISA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbDtcbiAgICBASW5wdXQoKSBzaG93QW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgISA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0ZXh0QWxpZ24gICAgICAgICAgICAgICAgICAgICEgOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIHRleHRDb250ZW50ICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGl0bGUgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRyaWdnZXJDaGFuZ2VPbklucHV0ICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3Rhc2tib2FyZGZpZWxkZmlsdGVycGlja2VyJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHZhbHVlRmllbGRQbGFjZWhvbGRlcnMgICAgICAgISA6IFZhbHVlRmllbGRQbGFjZWhvbGRlcnM7XG4gICAgQElucHV0KCkgdmFsdWVMb2NrZWQgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBDb25maWdzIGFuZCBwcm9wZXJ0aWVzXG4gICAgQElucHV0KCkgYWxpZ25TZWxmICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgY2FsbE9uRnVuY3Rpb25zICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgY29udGVudCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YXNldCAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmbGV4ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBodG1sICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiBzdHJpbmcpfERvbUNvbmZpZ3xEb21Db25maWdbXXxWdWVDb25maWc7XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRGaWVsZEFsaWduICAgICAgICAgICAgICEgOiAnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAhIDogKENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWd8V2lkZ2V0KVtdfFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWc+fFdpZGdldFtdfFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KENvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW107XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAhIDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbDtcbiAgICBASW5wdXQoKSBsYXlvdXQgICAgICAgICAgICAgICAgICAgICAgISA6IExheW91dHxzdHJpbmd8Q29udGFpbmVyTGF5b3V0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxheW91dFN0eWxlICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4aW1pemVPbk1vYmlsZSAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluV2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWNvcmQgICAgICAgICAgICAgICAgICAgICAgISA6IE1vZGVsO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbDtcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxlcnxib29sZWFufFNjcm9sbGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNwYW4gICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHN0cmljdFJlY29yZE1hcHBpbmcgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHggICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgYW5jaG9yU2l6ZSAgICAgICEgOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBmb2N1c1Zpc2libGUgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGFzQ2hhbmdlcyAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzU2V0dGluZ1ZhbHVlcyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc1ZhbGlkICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcGFyZW50ICAgICAgICAgICEgOiBXaWRnZXQ7XG4gICAgQElucHV0KCkgdmFsdWVzICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGlzIGNvbnRhaW5lciB3aWxsIGxvYWQgcmVjb3JkIHZhbHVlcyBpbnRvIGl0cyBjaGlsZCBmaWVsZHMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gbW9kaWZ5IHRoZSBVSSBiZWZvcmUgZGF0YSBpcyBsb2FkZWQgKGUuZy4gc2V0IHNvbWUgaW5wdXQgZmllbGQgdG8gYmUgcmVhZG9ubHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNldFJlY29yZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Rhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyI2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZmlsdGVyIGlzIG1vZGlmaWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkRmlsdGVyUGlja2VyfSBldmVudC5zb3VyY2UgVGhlIEZpZWxkRmlsdGVyUGlja2VyIGluc3RhbmNlIHRoYXQgZmlyZWQgdGhlIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7YW55W119IGV2ZW50LmZpbHRlciBUaGUgW0NvbGxlY3Rpb25GaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvdXRpbC9Db2xsZWN0aW9uRmlsdGVyKSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGZpbHRlciByZXByZXNlbnRlZCBieSB0aGlzIFtGaWVsZEZpbHRlclBpY2tlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGRGaWx0ZXJQaWNrZXIpLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNWYWxpZCBXaGV0aGVyIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBjb21wbGV0ZSBhbmQgdmFsaWQgZmlsdGVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZEZpbHRlclBpY2tlciwgZmlsdGVyOiBhbnlbXSwgaXNWYWxpZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIGZpZWxkIGlzIG11dGF0ZWQgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgW2hhc0NoYW5nZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50IFRoZSBXaWRnZXQncyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVsZW1lbnRDcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlciNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1UYXNrQm9hcmRGaWVsZEZpbHRlclBpY2tlckNvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtVGFza0JvYXJkRmllbGRGaWx0ZXJQaWNrZXJDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bVRhc2tCb2FyZEZpZWxkRmlsdGVyUGlja2VyQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|