@bryntum/grid-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.
Files changed (132) hide show
  1. package/README.md +44 -0
  2. package/bryntum-grid-angular.d.ts +5 -0
  3. package/bundles/bryntum-grid-angular.umd.js +49212 -0
  4. package/bundles/bryntum-grid-angular.umd.js.map +1 -0
  5. package/esm2015/bryntum-grid-angular.js +5 -0
  6. package/esm2015/lib/bryntum-a-i-filter-field.component.js +791 -0
  7. package/esm2015/lib/bryntum-button-group.component.js +725 -0
  8. package/esm2015/lib/bryntum-button.component.js +715 -0
  9. package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
  10. package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
  11. package/esm2015/lib/bryntum-checkbox.component.js +805 -0
  12. package/esm2015/lib/bryntum-checklist-filter-combo.component.js +943 -0
  13. package/esm2015/lib/bryntum-chip-view.component.js +727 -0
  14. package/esm2015/lib/bryntum-code-editor.component.js +818 -0
  15. package/esm2015/lib/bryntum-color-field.component.js +794 -0
  16. package/esm2015/lib/bryntum-combo.component.js +932 -0
  17. package/esm2015/lib/bryntum-container.component.js +681 -0
  18. package/esm2015/lib/bryntum-date-field.component.js +831 -0
  19. package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
  20. package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
  21. package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
  22. package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
  23. package/esm2015/lib/bryntum-demo-header.component.js +171 -0
  24. package/esm2015/lib/bryntum-display-field.component.js +772 -0
  25. package/esm2015/lib/bryntum-duration-field.component.js +815 -0
  26. package/esm2015/lib/bryntum-editor.component.js +823 -0
  27. package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
  28. package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
  29. package/esm2015/lib/bryntum-field-set.component.js +810 -0
  30. package/esm2015/lib/bryntum-file-field.component.js +776 -0
  31. package/esm2015/lib/bryntum-file-picker.component.js +709 -0
  32. package/esm2015/lib/bryntum-filter-field.component.js +803 -0
  33. package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
  34. package/esm2015/lib/bryntum-grid-base.component.js +2099 -0
  35. package/esm2015/lib/bryntum-grid-chart-designer.component.js +588 -0
  36. package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +754 -0
  37. package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +744 -0
  38. package/esm2015/lib/bryntum-grid.component.js +2103 -0
  39. package/esm2015/lib/bryntum-group-bar.component.js +727 -0
  40. package/esm2015/lib/bryntum-hint.component.js +856 -0
  41. package/esm2015/lib/bryntum-label.component.js +584 -0
  42. package/esm2015/lib/bryntum-list.component.js +715 -0
  43. package/esm2015/lib/bryntum-menu.component.js +883 -0
  44. package/esm2015/lib/bryntum-month-picker.component.js +818 -0
  45. package/esm2015/lib/bryntum-number-field.component.js +800 -0
  46. package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
  47. package/esm2015/lib/bryntum-panel.component.js +794 -0
  48. package/esm2015/lib/bryntum-password-field.component.js +768 -0
  49. package/esm2015/lib/bryntum-radio-group.component.js +826 -0
  50. package/esm2015/lib/bryntum-radio.component.js +805 -0
  51. package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
  52. package/esm2015/lib/bryntum-slider.component.js +661 -0
  53. package/esm2015/lib/bryntum-splitter.component.js +618 -0
  54. package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
  55. package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
  56. package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
  57. package/esm2015/lib/bryntum-text-field.component.js +783 -0
  58. package/esm2015/lib/bryntum-time-field.component.js +819 -0
  59. package/esm2015/lib/bryntum-time-picker.component.js +709 -0
  60. package/esm2015/lib/bryntum-toolbar.component.js +732 -0
  61. package/esm2015/lib/bryntum-tree-combo.component.js +932 -0
  62. package/esm2015/lib/bryntum-tree-grid.component.js +2103 -0
  63. package/esm2015/lib/bryntum-widget.component.js +580 -0
  64. package/esm2015/lib/bryntum-year-picker.component.js +827 -0
  65. package/esm2015/lib/grid.module.js +314 -0
  66. package/esm2015/lib/wrapper.helper.js +74 -0
  67. package/esm2015/public-api.js +64 -0
  68. package/fesm2015/bryntum-grid-angular.js +48622 -0
  69. package/fesm2015/bryntum-grid-angular.js.map +1 -0
  70. package/lib/bryntum-a-i-filter-field.component.d.ts +968 -0
  71. package/lib/bryntum-button-group.component.d.ts +860 -0
  72. package/lib/bryntum-button.component.d.ts +845 -0
  73. package/lib/bryntum-chat-panel.component.d.ts +1060 -0
  74. package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
  75. package/lib/bryntum-checkbox.component.d.ts +968 -0
  76. package/lib/bryntum-checklist-filter-combo.component.d.ts +1210 -0
  77. package/lib/bryntum-chip-view.component.d.ts +872 -0
  78. package/lib/bryntum-code-editor.component.d.ts +1045 -0
  79. package/lib/bryntum-color-field.component.d.ts +965 -0
  80. package/lib/bryntum-combo.component.d.ts +1199 -0
  81. package/lib/bryntum-container.component.d.ts +822 -0
  82. package/lib/bryntum-date-field.component.d.ts +1025 -0
  83. package/lib/bryntum-date-picker.component.d.ts +1338 -0
  84. package/lib/bryntum-date-range-field.component.d.ts +1027 -0
  85. package/lib/bryntum-date-time-field.component.d.ts +912 -0
  86. package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
  87. package/lib/bryntum-demo-header.component.d.ts +29 -0
  88. package/lib/bryntum-display-field.component.d.ts +949 -0
  89. package/lib/bryntum-duration-field.component.d.ts +1008 -0
  90. package/lib/bryntum-editor.component.d.ts +969 -0
  91. package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
  92. package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
  93. package/lib/bryntum-field-set.component.d.ts +1038 -0
  94. package/lib/bryntum-file-field.component.d.ts +952 -0
  95. package/lib/bryntum-file-picker.component.d.ts +847 -0
  96. package/lib/bryntum-filter-field.component.d.ts +993 -0
  97. package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
  98. package/lib/bryntum-grid-base.component.d.ts +2271 -0
  99. package/lib/bryntum-grid-chart-designer.component.d.ts +691 -0
  100. package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +929 -0
  101. package/lib/bryntum-grid-field-filter-picker.component.d.ts +916 -0
  102. package/lib/bryntum-grid.component.d.ts +2273 -0
  103. package/lib/bryntum-group-bar.component.d.ts +872 -0
  104. package/lib/bryntum-hint.component.d.ts +1117 -0
  105. package/lib/bryntum-label.component.d.ts +683 -0
  106. package/lib/bryntum-list.component.d.ts +849 -0
  107. package/lib/bryntum-menu.component.d.ts +1129 -0
  108. package/lib/bryntum-month-picker.component.d.ts +1034 -0
  109. package/lib/bryntum-number-field.component.d.ts +995 -0
  110. package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
  111. package/lib/bryntum-panel.component.d.ts +1015 -0
  112. package/lib/bryntum-password-field.component.d.ts +939 -0
  113. package/lib/bryntum-radio-group.component.d.ts +1068 -0
  114. package/lib/bryntum-radio.component.d.ts +968 -0
  115. package/lib/bryntum-slide-toggle.component.d.ts +968 -0
  116. package/lib/bryntum-slider.component.d.ts +776 -0
  117. package/lib/bryntum-splitter.component.d.ts +714 -0
  118. package/lib/bryntum-tab-panel.component.d.ts +1065 -0
  119. package/lib/bryntum-text-area-field.component.d.ts +951 -0
  120. package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
  121. package/lib/bryntum-text-field.component.d.ts +957 -0
  122. package/lib/bryntum-time-field.component.d.ts +1006 -0
  123. package/lib/bryntum-time-picker.component.d.ts +853 -0
  124. package/lib/bryntum-toolbar.component.d.ts +879 -0
  125. package/lib/bryntum-tree-combo.component.d.ts +1199 -0
  126. package/lib/bryntum-tree-grid.component.d.ts +2273 -0
  127. package/lib/bryntum-widget.component.d.ts +678 -0
  128. package/lib/bryntum-year-picker.component.d.ts +1049 -0
  129. package/lib/grid.module.d.ts +65 -0
  130. package/lib/wrapper.helper.d.ts +26 -0
  131. package/package.json +33 -0
  132. package/public-api.d.ts +60 -0
@@ -0,0 +1,815 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum DurationField
4
+ */
5
+ import { Component, EventEmitter, Output, Input } from '@angular/core';
6
+ import WrapperHelper from './wrapper.helper';
7
+ import { DurationField, Widget } from '@bryntum/grid';
8
+ import * as i0 from "@angular/core";
9
+ export class BryntumDurationFieldComponent {
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
+ * User performed the default action (typed into this field or hit the triggers).
22
+ * @param {object} event Event object
23
+ * @param {Core.data.Duration} event.value This field's value
24
+ * @param {Core.data.Duration} event.oldValue This field's previous value
25
+ * @param {boolean} event.valid True if this field is in a valid state.
26
+ * @param {Event} event.event The triggering DOM event if any.
27
+ * @param {boolean} event.userAction Triggered by user taking an action (`true`) or by setting a value (`false`)
28
+ * @param {Core.widget.DurationField} event.source This field
29
+ */
30
+ this.onAction = new EventEmitter();
31
+ /**
32
+ * Fires before an object is destroyed.
33
+ * @param {object} event Event object
34
+ * @param {Core.Base} event.source The Object that is being destroyed.
35
+ */
36
+ this.onBeforeDestroy = new EventEmitter();
37
+ /**
38
+ * Triggered before a widget is hidden. Return `false` to prevent the action.
39
+ * @param {object} event Event object
40
+ * @param {Core.widget.Widget} event.source The widget being hidden.
41
+ */
42
+ this.onBeforeHide = new EventEmitter();
43
+ /**
44
+ * Triggered before a widget is shown. Return `false` to prevent the action.
45
+ * @param {object} event Event object
46
+ * @param {Core.widget.Widget,any} event.source The widget being shown
47
+ */
48
+ this.onBeforeShow = new EventEmitter();
49
+ /**
50
+ * Fires when any other event is fired from the object.
51
+ * ...
52
+ * [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/DurationField#event-catchAll)
53
+ * @param {object} event Event object
54
+ * @param {{[key: string]: any, type: string}} event.event The Object that contains event details
55
+ * @param {string} event.event.type The type of the event which is caught by the listener
56
+ */
57
+ this.onCatchAll = new EventEmitter();
58
+ /**
59
+ * Fired when this field's value changes.
60
+ * @param {object} event Event object
61
+ * @param {Core.data.Duration} event.value This field's value
62
+ * @param {Core.data.Duration} event.oldValue This field's previous value
63
+ * @param {boolean} event.valid True if this field is in a valid state.
64
+ * @param {Event} event.event The triggering DOM event if any.
65
+ * @param {boolean} event.userAction Triggered by user taking an action (`true`) or by setting a value (`false`)
66
+ * @param {Core.widget.DurationField} event.source This field
67
+ */
68
+ this.onChange = new EventEmitter();
69
+ /**
70
+ * Fired when this field is [cleared](https://bryntum.com/products/grid/docs/api/Core/widget/Field#function-clear).
71
+ * ...
72
+ * [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/DurationField#event-clear)
73
+ * @param {object} event Event object
74
+ * @param {Core.widget.Field,any} event.source This Field
75
+ */
76
+ this.onClear = new EventEmitter();
77
+ /**
78
+ * Fires when an object is destroyed.
79
+ * @param {object} event Event object
80
+ * @param {Core.Base} event.source The Object that is being destroyed.
81
+ */
82
+ this.onDestroy = new EventEmitter();
83
+ /**
84
+ * Triggered when a widget's [element](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#property-element) is available.
85
+ * @param {object} event Event object
86
+ * @param {HTMLElement} event.element The Widget's element.
87
+ */
88
+ this.onElementCreated = new EventEmitter();
89
+ /**
90
+ * Fired when focus enters this Widget.
91
+ * @param {object} event Event object
92
+ * @param {Core.widget.Widget} event.source This Widget
93
+ * @param {HTMLElement} event.fromElement The element which lost focus.
94
+ * @param {HTMLElement} event.toElement The element which gained focus.
95
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
96
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
97
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
98
+ */
99
+ this.onFocusIn = new EventEmitter();
100
+ /**
101
+ * Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
102
+ * focus moving from within this Widget's ownership tree, even if there are floating widgets
103
+ * will not trigger this event. This is when focus exits this widget completely.
104
+ * @param {object} event Event object
105
+ * @param {Core.widget.Widget} event.source This Widget
106
+ * @param {HTMLElement} event.fromElement The element which lost focus.
107
+ * @param {HTMLElement} event.toElement The element which gained focus.
108
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
109
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
110
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
111
+ */
112
+ this.onFocusOut = new EventEmitter();
113
+ /**
114
+ * Triggered after a widget was hidden
115
+ * @param {object} event Event object
116
+ * @param {Core.widget.Widget} event.source The widget
117
+ */
118
+ this.onHide = new EventEmitter();
119
+ /**
120
+ * Fired when the user types into this field.
121
+ * @param {object} event Event object
122
+ * @param {Core.widget.Field,any} event.source This field
123
+ * @param {string,number,boolean,any} event.value This field's value
124
+ * @param {Event} event.event The triggering DOM event
125
+ */
126
+ this.onInput = new EventEmitter();
127
+ /**
128
+ * Triggered when a widget which had been in a non-visible state for any reason
129
+ * achieves visibility.
130
+ * ...
131
+ * [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/DurationField#event-paint)
132
+ * @param {object} event Event object
133
+ * @param {Core.widget.Widget} event.source The widget being painted.
134
+ * @param {boolean} event.firstPaint `true` if this is the first paint.
135
+ */
136
+ this.onPaint = new EventEmitter();
137
+ /**
138
+ * Fired when a Widget's read only state is toggled
139
+ * @param {object} event Event object
140
+ * @param {boolean} event.readOnly Read only or not
141
+ */
142
+ this.onReadOnly = new EventEmitter();
143
+ /**
144
+ * This event is fired after a widget's elements have been synchronized due to a direct or indirect call
145
+ * to [recompose](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
146
+ */
147
+ this.onRecompose = new EventEmitter();
148
+ /**
149
+ * Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
150
+ * @param {object} event Event object
151
+ * @param {Core.widget.Widget} event.source This Widget
152
+ * @param {number} event.width The new width
153
+ * @param {number} event.height The new height
154
+ * @param {number} event.oldWidth The old width
155
+ * @param {number} event.oldHeight The old height
156
+ */
157
+ this.onResize = new EventEmitter();
158
+ /**
159
+ * Triggered after a widget is shown.
160
+ * @param {object} event Event object
161
+ * @param {Core.widget.Widget} event.source The widget
162
+ */
163
+ this.onShow = new EventEmitter();
164
+ /**
165
+ * User clicked one of this field's [triggers](https://bryntum.com/products/grid/docs/api/Core/widget/Field#property-triggers)
166
+ * @param {object} event Event object
167
+ * @param {Core.widget.Field,any} event.source This field
168
+ * @param {Core.widget.Widget} event.trigger The trigger activated by click or touch tap.
169
+ */
170
+ this.onTrigger = new EventEmitter();
171
+ this.elementRef = element;
172
+ }
173
+ /**
174
+ * Create and append the underlying widget
175
+ */
176
+ ngOnInit() {
177
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumDurationFieldComponent;
178
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
179
+ // @ts-ignore
180
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
181
+ if (['features', 'config'].includes(prop)) {
182
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
183
+ }
184
+ });
185
+ // @ts-ignore
186
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
187
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
188
+ // @ts-ignore
189
+ bryntumConfig.listeners[eventName(event)] = e => {
190
+ // @ts-ignore
191
+ me[event].emit(e);
192
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
193
+ // in Angular listeners
194
+ return e.returnValue;
195
+ };
196
+ });
197
+ // If component has no container specified in config then use adopt to Wrapper's element
198
+ const containerParam = [
199
+ 'adopt',
200
+ 'appendTo',
201
+ 'insertAfter',
202
+ 'insertBefore'
203
+ // @ts-ignore
204
+ ].find(prop => bryntumConfig[prop]);
205
+ if (!containerParam) {
206
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
207
+ // Button should always be <a> or <button> inside owner element
208
+ bryntumConfig.appendTo = elementRef.nativeElement;
209
+ }
210
+ else {
211
+ bryntumConfig.adopt = elementRef.nativeElement;
212
+ }
213
+ }
214
+ else {
215
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
216
+ }
217
+ // @ts-ignore
218
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
219
+ }
220
+ /**
221
+ * Watch for changes
222
+ * @param changes
223
+ */
224
+ ngOnChanges(changes) {
225
+ const { instance } = this, { instanceName } = BryntumDurationFieldComponent;
226
+ if (!instance) {
227
+ return;
228
+ }
229
+ // Iterate over all changes
230
+ Object.entries(changes).forEach(([prop, change]) => {
231
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumDurationFieldComponent;
232
+ if (bryntumProps.includes(prop)) {
233
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
234
+ if (bryntumConfigsOnly.includes(prop)) {
235
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
236
+ }
237
+ }
238
+ });
239
+ }
240
+ /**
241
+ * Destroy the component
242
+ */
243
+ ngOnDestroy() {
244
+ // @ts-ignore
245
+ if (this.instance && this.instance.destroy) {
246
+ this.instance.destroy();
247
+ }
248
+ }
249
+ }
250
+ BryntumDurationFieldComponent.instanceClass = DurationField;
251
+ BryntumDurationFieldComponent.instanceName = 'DurationField';
252
+ BryntumDurationFieldComponent.bryntumEvents = [
253
+ 'onAction',
254
+ 'onBeforeDestroy',
255
+ 'onBeforeHide',
256
+ 'onBeforeShow',
257
+ 'onCatchAll',
258
+ 'onChange',
259
+ 'onClear',
260
+ 'onDestroy',
261
+ 'onElementCreated',
262
+ 'onFocusIn',
263
+ 'onFocusOut',
264
+ 'onHide',
265
+ 'onInput',
266
+ 'onPaint',
267
+ 'onReadOnly',
268
+ 'onRecompose',
269
+ 'onResize',
270
+ 'onShow',
271
+ 'onTrigger'
272
+ ];
273
+ BryntumDurationFieldComponent.bryntumFeatureNames = [];
274
+ BryntumDurationFieldComponent.bryntumConfigs = BryntumDurationFieldComponent.bryntumFeatureNames.concat([
275
+ 'adopt',
276
+ 'align',
277
+ 'alignSelf',
278
+ 'allowedUnits',
279
+ 'allowNegative',
280
+ 'anchor',
281
+ 'appendTo',
282
+ 'ariaDescription',
283
+ 'ariaLabel',
284
+ 'autoComplete',
285
+ 'autoSelect',
286
+ 'badge',
287
+ 'bubbleEvents',
288
+ 'callOnFunctions',
289
+ 'catchEventHandlerExceptions',
290
+ 'centered',
291
+ 'clearable',
292
+ 'cls',
293
+ 'color',
294
+ 'column',
295
+ 'config',
296
+ 'constrainTo',
297
+ 'container',
298
+ 'containValues',
299
+ 'contentElementCls',
300
+ 'dataField',
301
+ 'dataset',
302
+ 'decimalPrecision',
303
+ 'defaultBindProperty',
304
+ 'detectCSSCompatibilityIssues',
305
+ 'disabled',
306
+ 'dock',
307
+ 'draggable',
308
+ 'editable',
309
+ 'elementAttributes',
310
+ 'extraData',
311
+ 'flex',
312
+ 'floating',
313
+ 'height',
314
+ 'hidden',
315
+ 'hideAnimation',
316
+ 'highlightExternalChange',
317
+ 'hint',
318
+ 'hintHtml',
319
+ 'id',
320
+ 'ignoreParentReadOnly',
321
+ 'inline',
322
+ 'inputAlign',
323
+ 'inputAttributes',
324
+ 'inputTag',
325
+ 'inputType',
326
+ 'inputWidth',
327
+ 'insertBefore',
328
+ 'insertFirst',
329
+ 'keyMap',
330
+ 'keyStrokeChangeDelay',
331
+ 'label',
332
+ 'labelCls',
333
+ 'labelPosition',
334
+ 'labels',
335
+ 'labelWidth',
336
+ 'listeners',
337
+ 'localeClass',
338
+ 'localizable',
339
+ 'localizableProperties',
340
+ 'magnitude',
341
+ 'margin',
342
+ 'maskDefaults',
343
+ 'masked',
344
+ 'max',
345
+ 'maxHeight',
346
+ 'maximizeOnMobile',
347
+ 'maxLength',
348
+ 'maxWidth',
349
+ 'min',
350
+ 'minHeight',
351
+ 'minLength',
352
+ 'minWidth',
353
+ 'monitorResize',
354
+ 'name',
355
+ 'owner',
356
+ 'placeholder',
357
+ 'positioned',
358
+ 'preventTooltipOnTouch',
359
+ 'readOnly',
360
+ 'relayStoreEvents',
361
+ 'rendition',
362
+ 'required',
363
+ 'revertOnEscape',
364
+ 'ripple',
365
+ 'rootElement',
366
+ 'rtl',
367
+ 'scrollAction',
368
+ 'showAnimation',
369
+ 'showRequiredIndicator',
370
+ 'showTooltipWhenDisabled',
371
+ 'skipValidation',
372
+ 'span',
373
+ 'spellCheck',
374
+ 'step',
375
+ 'tab',
376
+ 'tabIndex',
377
+ 'textAlign',
378
+ 'title',
379
+ 'tooltip',
380
+ 'triggers',
381
+ 'type',
382
+ 'ui',
383
+ 'unit',
384
+ 'useAbbreviation',
385
+ 'validateOnInput',
386
+ 'value',
387
+ 'weight',
388
+ 'width',
389
+ 'x',
390
+ 'y'
391
+ ]);
392
+ BryntumDurationFieldComponent.bryntumConfigsOnly = [
393
+ 'adopt',
394
+ 'align',
395
+ 'allowNegative',
396
+ 'anchor',
397
+ 'ariaDescription',
398
+ 'ariaLabel',
399
+ 'autoComplete',
400
+ 'autoSelect',
401
+ 'bubbleEvents',
402
+ 'centered',
403
+ 'clearable',
404
+ 'color',
405
+ 'config',
406
+ 'constrainTo',
407
+ 'container',
408
+ 'containValues',
409
+ 'contentElementCls',
410
+ 'dataField',
411
+ 'decimalPrecision',
412
+ 'defaultBindProperty',
413
+ 'detectCSSCompatibilityIssues',
414
+ 'dock',
415
+ 'draggable',
416
+ 'elementAttributes',
417
+ 'floating',
418
+ 'hideAnimation',
419
+ 'highlightExternalChange',
420
+ 'hint',
421
+ 'hintHtml',
422
+ 'ignoreParentReadOnly',
423
+ 'inline',
424
+ 'inputAlign',
425
+ 'inputAttributes',
426
+ 'inputTag',
427
+ 'inputType',
428
+ 'inputWidth',
429
+ 'keyStrokeChangeDelay',
430
+ 'labelCls',
431
+ 'labelPosition',
432
+ 'labels',
433
+ 'labelWidth',
434
+ 'listeners',
435
+ 'localeClass',
436
+ 'localizable',
437
+ 'localizableProperties',
438
+ 'maskDefaults',
439
+ 'masked',
440
+ 'maxLength',
441
+ 'minLength',
442
+ 'monitorResize',
443
+ 'name',
444
+ 'owner',
445
+ 'positioned',
446
+ 'preventTooltipOnTouch',
447
+ 'relayStoreEvents',
448
+ 'revertOnEscape',
449
+ 'ripple',
450
+ 'rootElement',
451
+ 'scrollAction',
452
+ 'showAnimation',
453
+ 'showTooltipWhenDisabled',
454
+ 'skipValidation',
455
+ 'spellCheck',
456
+ 'step',
457
+ 'tab',
458
+ 'tabIndex',
459
+ 'textAlign',
460
+ 'title',
461
+ 'type',
462
+ 'ui',
463
+ 'useAbbreviation',
464
+ 'validateOnInput',
465
+ 'weight'
466
+ ];
467
+ BryntumDurationFieldComponent.bryntumProps = BryntumDurationFieldComponent.bryntumFeatureNames.concat([
468
+ 'alignSelf',
469
+ 'allowedUnits',
470
+ 'anchorSize',
471
+ 'appendTo',
472
+ 'badge',
473
+ 'callOnFunctions',
474
+ 'catchEventHandlerExceptions',
475
+ 'cls',
476
+ 'column',
477
+ 'content',
478
+ 'dataset',
479
+ 'disabled',
480
+ 'editable',
481
+ 'extraData',
482
+ 'flex',
483
+ 'focusVisible',
484
+ 'formula',
485
+ 'height',
486
+ 'hidden',
487
+ 'html',
488
+ 'id',
489
+ 'input',
490
+ 'insertBefore',
491
+ 'insertFirst',
492
+ 'keyMap',
493
+ 'label',
494
+ 'magnitude',
495
+ 'margin',
496
+ 'max',
497
+ 'maxHeight',
498
+ 'maximizeOnMobile',
499
+ 'maxWidth',
500
+ 'min',
501
+ 'minHeight',
502
+ 'minWidth',
503
+ 'parent',
504
+ 'placeholder',
505
+ 'readOnly',
506
+ 'rendition',
507
+ 'required',
508
+ 'rtl',
509
+ 'scrollable',
510
+ 'showRequiredIndicator',
511
+ 'span',
512
+ 'tooltip',
513
+ 'triggers',
514
+ 'unit',
515
+ 'value',
516
+ 'width',
517
+ 'x',
518
+ 'y'
519
+ ]);
520
+ BryntumDurationFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDurationFieldComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
521
+ BryntumDurationFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumDurationFieldComponent, selector: "bryntum-duration-field", inputs: { adopt: "adopt", align: "align", allowNegative: "allowNegative", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoComplete: "autoComplete", autoSelect: "autoSelect", bubbleEvents: "bubbleEvents", centered: "centered", clearable: "clearable", color: "color", config: "config", constrainTo: "constrainTo", container: "container", containValues: "containValues", contentElementCls: "contentElementCls", dataField: "dataField", decimalPrecision: "decimalPrecision", defaultBindProperty: "defaultBindProperty", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", elementAttributes: "elementAttributes", floating: "floating", hideAnimation: "hideAnimation", highlightExternalChange: "highlightExternalChange", hint: "hint", hintHtml: "hintHtml", ignoreParentReadOnly: "ignoreParentReadOnly", inline: "inline", inputAlign: "inputAlign", inputAttributes: "inputAttributes", inputTag: "inputTag", inputType: "inputType", inputWidth: "inputWidth", keyStrokeChangeDelay: "keyStrokeChangeDelay", labelCls: "labelCls", labelPosition: "labelPosition", labels: "labels", labelWidth: "labelWidth", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", maxLength: "maxLength", minLength: "minLength", monitorResize: "monitorResize", name: "name", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", revertOnEscape: "revertOnEscape", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", skipValidation: "skipValidation", spellCheck: "spellCheck", step: "step", tab: "tab", tabIndex: "tabIndex", textAlign: "textAlign", title: "title", type: "type", ui: "ui", useAbbreviation: "useAbbreviation", validateOnInput: "validateOnInput", weight: "weight", alignSelf: "alignSelf", allowedUnits: "allowedUnits", appendTo: "appendTo", badge: "badge", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", column: "column", dataset: "dataset", disabled: "disabled", editable: "editable", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", id: "id", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", label: "label", magnitude: "magnitude", margin: "margin", max: "max", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", min: "min", minHeight: "minHeight", minWidth: "minWidth", placeholder: "placeholder", readOnly: "readOnly", rendition: "rendition", required: "required", rtl: "rtl", showRequiredIndicator: "showRequiredIndicator", span: "span", tooltip: "tooltip", triggers: "triggers", unit: "unit", value: "value", width: "width", x: "x", y: "y", anchorSize: "anchorSize", content: "content", focusVisible: "focusVisible", formula: "formula", html: "html", input: "input", parent: "parent", scrollable: "scrollable" }, outputs: { onAction: "onAction", onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeShow: "onBeforeShow", onCatchAll: "onCatchAll", onChange: "onChange", onClear: "onClear", onDestroy: "onDestroy", onElementCreated: "onElementCreated", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onInput: "onInput", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onShow: "onShow", onTrigger: "onTrigger" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDurationFieldComponent, decorators: [{
523
+ type: Component,
524
+ args: [{
525
+ selector: 'bryntum-duration-field',
526
+ template: ''
527
+ }]
528
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adopt: [{
529
+ type: Input
530
+ }], align: [{
531
+ type: Input
532
+ }], allowNegative: [{
533
+ type: Input
534
+ }], anchor: [{
535
+ type: Input
536
+ }], ariaDescription: [{
537
+ type: Input
538
+ }], ariaLabel: [{
539
+ type: Input
540
+ }], autoComplete: [{
541
+ type: Input
542
+ }], autoSelect: [{
543
+ type: Input
544
+ }], bubbleEvents: [{
545
+ type: Input
546
+ }], centered: [{
547
+ type: Input
548
+ }], clearable: [{
549
+ type: Input
550
+ }], color: [{
551
+ type: Input
552
+ }], config: [{
553
+ type: Input
554
+ }], constrainTo: [{
555
+ type: Input
556
+ }], container: [{
557
+ type: Input
558
+ }], containValues: [{
559
+ type: Input
560
+ }], contentElementCls: [{
561
+ type: Input
562
+ }], dataField: [{
563
+ type: Input
564
+ }], decimalPrecision: [{
565
+ type: Input
566
+ }], defaultBindProperty: [{
567
+ type: Input
568
+ }], detectCSSCompatibilityIssues: [{
569
+ type: Input
570
+ }], dock: [{
571
+ type: Input
572
+ }], draggable: [{
573
+ type: Input
574
+ }], elementAttributes: [{
575
+ type: Input
576
+ }], floating: [{
577
+ type: Input
578
+ }], hideAnimation: [{
579
+ type: Input
580
+ }], highlightExternalChange: [{
581
+ type: Input
582
+ }], hint: [{
583
+ type: Input
584
+ }], hintHtml: [{
585
+ type: Input
586
+ }], ignoreParentReadOnly: [{
587
+ type: Input
588
+ }], inline: [{
589
+ type: Input
590
+ }], inputAlign: [{
591
+ type: Input
592
+ }], inputAttributes: [{
593
+ type: Input
594
+ }], inputTag: [{
595
+ type: Input
596
+ }], inputType: [{
597
+ type: Input
598
+ }], inputWidth: [{
599
+ type: Input
600
+ }], keyStrokeChangeDelay: [{
601
+ type: Input
602
+ }], labelCls: [{
603
+ type: Input
604
+ }], labelPosition: [{
605
+ type: Input
606
+ }], labels: [{
607
+ type: Input
608
+ }], labelWidth: [{
609
+ type: Input
610
+ }], listeners: [{
611
+ type: Input
612
+ }], localeClass: [{
613
+ type: Input
614
+ }], localizable: [{
615
+ type: Input
616
+ }], localizableProperties: [{
617
+ type: Input
618
+ }], maskDefaults: [{
619
+ type: Input
620
+ }], masked: [{
621
+ type: Input
622
+ }], maxLength: [{
623
+ type: Input
624
+ }], minLength: [{
625
+ type: Input
626
+ }], monitorResize: [{
627
+ type: Input
628
+ }], name: [{
629
+ type: Input
630
+ }], owner: [{
631
+ type: Input
632
+ }], positioned: [{
633
+ type: Input
634
+ }], preventTooltipOnTouch: [{
635
+ type: Input
636
+ }], relayStoreEvents: [{
637
+ type: Input
638
+ }], revertOnEscape: [{
639
+ type: Input
640
+ }], ripple: [{
641
+ type: Input
642
+ }], rootElement: [{
643
+ type: Input
644
+ }], scrollAction: [{
645
+ type: Input
646
+ }], showAnimation: [{
647
+ type: Input
648
+ }], showTooltipWhenDisabled: [{
649
+ type: Input
650
+ }], skipValidation: [{
651
+ type: Input
652
+ }], spellCheck: [{
653
+ type: Input
654
+ }], step: [{
655
+ type: Input
656
+ }], tab: [{
657
+ type: Input
658
+ }], tabIndex: [{
659
+ type: Input
660
+ }], textAlign: [{
661
+ type: Input
662
+ }], title: [{
663
+ type: Input
664
+ }], type: [{
665
+ type: Input
666
+ }], ui: [{
667
+ type: Input
668
+ }], useAbbreviation: [{
669
+ type: Input
670
+ }], validateOnInput: [{
671
+ type: Input
672
+ }], weight: [{
673
+ type: Input
674
+ }], alignSelf: [{
675
+ type: Input
676
+ }], allowedUnits: [{
677
+ type: Input
678
+ }], appendTo: [{
679
+ type: Input
680
+ }], badge: [{
681
+ type: Input
682
+ }], callOnFunctions: [{
683
+ type: Input
684
+ }], catchEventHandlerExceptions: [{
685
+ type: Input
686
+ }], cls: [{
687
+ type: Input
688
+ }], column: [{
689
+ type: Input
690
+ }], dataset: [{
691
+ type: Input
692
+ }], disabled: [{
693
+ type: Input
694
+ }], editable: [{
695
+ type: Input
696
+ }], extraData: [{
697
+ type: Input
698
+ }], flex: [{
699
+ type: Input
700
+ }], height: [{
701
+ type: Input
702
+ }], hidden: [{
703
+ type: Input
704
+ }], id: [{
705
+ type: Input
706
+ }], insertBefore: [{
707
+ type: Input
708
+ }], insertFirst: [{
709
+ type: Input
710
+ }], keyMap: [{
711
+ type: Input
712
+ }], label: [{
713
+ type: Input
714
+ }], magnitude: [{
715
+ type: Input
716
+ }], margin: [{
717
+ type: Input
718
+ }], max: [{
719
+ type: Input
720
+ }], maxHeight: [{
721
+ type: Input
722
+ }], maximizeOnMobile: [{
723
+ type: Input
724
+ }], maxWidth: [{
725
+ type: Input
726
+ }], min: [{
727
+ type: Input
728
+ }], minHeight: [{
729
+ type: Input
730
+ }], minWidth: [{
731
+ type: Input
732
+ }], placeholder: [{
733
+ type: Input
734
+ }], readOnly: [{
735
+ type: Input
736
+ }], rendition: [{
737
+ type: Input
738
+ }], required: [{
739
+ type: Input
740
+ }], rtl: [{
741
+ type: Input
742
+ }], showRequiredIndicator: [{
743
+ type: Input
744
+ }], span: [{
745
+ type: Input
746
+ }], tooltip: [{
747
+ type: Input
748
+ }], triggers: [{
749
+ type: Input
750
+ }], unit: [{
751
+ type: Input
752
+ }], value: [{
753
+ type: Input
754
+ }], width: [{
755
+ type: Input
756
+ }], x: [{
757
+ type: Input
758
+ }], y: [{
759
+ type: Input
760
+ }], anchorSize: [{
761
+ type: Input
762
+ }], content: [{
763
+ type: Input
764
+ }], focusVisible: [{
765
+ type: Input
766
+ }], formula: [{
767
+ type: Input
768
+ }], html: [{
769
+ type: Input
770
+ }], input: [{
771
+ type: Input
772
+ }], parent: [{
773
+ type: Input
774
+ }], scrollable: [{
775
+ type: Input
776
+ }], onAction: [{
777
+ type: Output
778
+ }], onBeforeDestroy: [{
779
+ type: Output
780
+ }], onBeforeHide: [{
781
+ type: Output
782
+ }], onBeforeShow: [{
783
+ type: Output
784
+ }], onCatchAll: [{
785
+ type: Output
786
+ }], onChange: [{
787
+ type: Output
788
+ }], onClear: [{
789
+ type: Output
790
+ }], onDestroy: [{
791
+ type: Output
792
+ }], onElementCreated: [{
793
+ type: Output
794
+ }], onFocusIn: [{
795
+ type: Output
796
+ }], onFocusOut: [{
797
+ type: Output
798
+ }], onHide: [{
799
+ type: Output
800
+ }], onInput: [{
801
+ type: Output
802
+ }], onPaint: [{
803
+ type: Output
804
+ }], onReadOnly: [{
805
+ type: Output
806
+ }], onRecompose: [{
807
+ type: Output
808
+ }], onResize: [{
809
+ type: Output
810
+ }], onShow: [{
811
+ type: Output
812
+ }], onTrigger: [{
813
+ type: Output
814
+ }] } });
815
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1kdXJhdGlvbi1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLWR1cmF0aW9uLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQ7O0dBRUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUVuSSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQTZFLGFBQWEsRUFBNkwsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWlyQjVULE1BQU0sT0FBTyw2QkFBNkI7SUFxU3RDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFpSkYsa0JBQWtCO1FBQ2xCOzs7Ozs7Ozs7V0FTRztRQUNPLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBZ0osQ0FBQztRQUMzTDs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBNkUsQ0FBQztRQUM1SDs7Ozs7OztXQU9HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUFnRSxDQUFDO1FBQzdHOzs7Ozs7Ozs7V0FTRztRQUNPLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBZ0osQ0FBQztRQUMzTDs7Ozs7O1dBTUc7UUFDTyxZQUFPLEdBQVEsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDN0Y7Ozs7V0FJRztRQUNPLGNBQVMsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUMxRjs7OztXQUlHO1FBQ08scUJBQWdCLEdBQVEsSUFBSSxZQUFZLEVBQXNELENBQUM7UUFDekc7Ozs7Ozs7OztXQVNHO1FBQ08sY0FBUyxHQUFRLElBQUksWUFBWSxFQUE0SixDQUFDO1FBQ3hNOzs7Ozs7Ozs7OztXQVdHO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUE0SixDQUFDO1FBQ3pNOzs7O1dBSUc7UUFDTyxXQUFNLEdBQVEsSUFBSSxZQUFZLEVBQWdELENBQUM7UUFDekY7Ozs7OztXQU1HO1FBQ08sWUFBTyxHQUFRLElBQUksWUFBWSxFQUFtRyxDQUFDO1FBQzdJOzs7Ozs7OztXQVFHO1FBQ08sWUFBTyxHQUFRLElBQUksWUFBWSxFQUFxRSxDQUFDO1FBQy9HOzs7O1dBSUc7UUFDTyxlQUFVLEdBQVEsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDaEc7OztXQUdHO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUNyRTs7Ozs7Ozs7V0FRRztRQUNPLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBb0gsQ0FBQztRQUMvSjs7OztXQUlHO1FBQ08sV0FBTSxHQUFRLElBQUksWUFBWSxFQUFnRCxDQUFDO1FBQ3pGOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFRLElBQUksWUFBWSxFQUFvRSxDQUFDO1FBclM1RyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBc1NEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLE1BQ0ksRUFBRSxHQUFHLElBQUksRUFDVCxFQUNJLFVBQVUsRUFDVixhQUFhLEVBQ2hCLEdBQUcsRUFBRSxFQUNOLEVBQ0ksYUFBYSxFQUNiLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNoQixHQUFHLDZCQUE2QixDQUFDO1FBRXRDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELGFBQWE7WUFDYixhQUFhLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDMUQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILGFBQWE7UUFDYixhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzRixNQUNJLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUMxRSxTQUFTLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFNUQsYUFBYTtZQUNiLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLGFBQWE7Z0JBQ2IsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEIsc0dBQXNHO2dCQUN0Ryx1QkFBdUI7Z0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUN6QixDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILHdGQUF3RjtRQUN4RixNQUNJLGNBQWMsR0FBRztZQUNiLE9BQU87WUFDUCxVQUFVO1lBQ1YsYUFBYTtZQUNiLGNBQWM7WUFDZCxhQUFhO1NBQ2hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNqQixJQUFJLFlBQVksS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxVQUFVLEVBQUU7Z0JBQzNGLCtEQUErRDtnQkFDL0QsYUFBYSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2FBQ3JEO2lCQUNJO2dCQUNELGFBQWEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQzthQUNsRDtTQUNKO2FBQ0k7WUFDRCxhQUFhLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsYUFBYTtRQUNiLEVBQUUsQ0FBQyxRQUFRLEdBQUcsWUFBWSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFOUcsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixNQUNJLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUNuQixFQUFFLFlBQVksRUFBRSxHQUFHLDZCQUE2QixDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFDRCwyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQy9DLE1BQ0ksUUFBUSxHQUFJLE1BQXVCLENBQUMsWUFBWSxFQUNoRCxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFDbkIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsR0FBRyw2QkFBNkIsQ0FBQztZQUN6RSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlELElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUMxRDthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1AsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQzs7QUFockJhLDJDQUFhLEdBQUcsYUFBYSxDQUFDO0FBRTlCLDBDQUFZLEdBQUcsZUFBZSxDQUFDO0FBRTlCLDJDQUFhLEdBQWE7SUFDckMsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsY0FBYztJQUNkLFlBQVk7SUFDWixVQUFVO0lBQ1YsU0FBUztJQUNULFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFlBQVk7SUFDWixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxZQUFZO0lBQ1osYUFBYTtJQUNiLFVBQVU7SUFDVixRQUFRO0lBQ1IsV0FBVztDQUNkLENBQUM7QUFFYSxpREFBbUIsR0FBYSxFQUU5QyxDQUFDO0FBRWEsNENBQWMsR0FBYSw2QkFBNkIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7SUFDL0YsT0FBTztJQUNQLE9BQU87SUFDUCxXQUFXO0lBQ1gsY0FBYztJQUNkLGVBQWU7SUFDZixRQUFRO0lBQ1IsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLFlBQVk7SUFDWixPQUFPO0lBQ1AsY0FBYztJQUNkLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsVUFBVTtJQUNWLFdBQVc7SUFDWCxLQUFLO0lBQ0wsT0FBTztJQUNQLFFBQVE7SUFDUixRQUFRO0lBQ1IsYUFBYTtJQUNiLFdBQVc7SUFDWCxlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxTQUFTO0lBQ1Qsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQiw4QkFBOEI7SUFDOUIsVUFBVTtJQUNWLE1BQU07SUFDTixXQUFXO0lBQ1gsVUFBVTtJQUNWLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsTUFBTTtJQUNOLFVBQVU7SUFDVixRQUFRO0lBQ1IsUUFBUTtJQUNSLGVBQWU7SUFDZix5QkFBeUI7SUFDekIsTUFBTTtJQUNOLFVBQVU7SUFDVixJQUFJO0lBQ0osc0JBQXNCO0lBQ3RCLFFBQVE7SUFDUixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixXQUFXO0lBQ1gsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsUUFBUTtJQUNSLHNCQUFzQjtJQUN0QixPQUFPO0lBQ1AsVUFBVTtJQUNWLGVBQWU7SUFDZixRQUFRO0lBQ1IsWUFBWTtJQUNaLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixXQUFXO0lBQ1gsUUFBUTtJQUNSLGNBQWM7SUFDZCxRQUFRO0lBQ1IsS0FBSztJQUNMLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFVBQVU7SUFDVixLQUFLO0lBQ0wsV0FBVztJQUNYLFdBQVc7SUFDWCxVQUFVO0lBQ1YsZUFBZTtJQUNmLE1BQU07SUFDTixPQUFPO0lBQ1AsYUFBYTtJQUNiLFlBQVk7SUFDWix1QkFBdUI7SUFDdkIsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsYUFBYTtJQUNiLEtBQUs7SUFDTCxjQUFjO0lBQ2QsZUFBZTtJQUNmLHVCQUF1QjtJQUN2Qix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLE1BQU07SUFDTixZQUFZO0lBQ1osTUFBTTtJQUNOLEtBQUs7SUFDTCxVQUFVO0lBQ1YsV0FBVztJQUNYLE9BQU87SUFDUCxTQUFTO0lBQ1QsVUFBVTtJQUNWLE1BQU07SUFDTixJQUFJO0lBQ0osTUFBTTtJQUNOLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsT0FBTztJQUNQLFFBQVE7SUFDUixPQUFPO0lBQ1AsR0FBRztJQUNILEdBQUc7Q0FDTixDQUFDLENBQUM7QUFFWSxnREFBa0IsR0FBYTtJQUMxQyxPQUFPO0lBQ1AsT0FBTztJQUNQLGVBQWU7SUFDZixRQUFRO0lBQ1IsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxjQUFjO0lBQ2QsWUFBWTtJQUNaLGNBQWM7SUFDZCxVQUFVO0lBQ1YsV0FBVztJQUNYLE9BQU87SUFDUCxRQUFRO0lBQ1IsYUFBYTtJQUNiLFdBQVc7SUFDWCxlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLDhCQUE4QjtJQUM5QixNQUFNO0lBQ04sV0FBVztJQUNYLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsZUFBZTtJQUNmLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sVUFBVTtJQUNWLHNCQUFzQjtJQUN0QixRQUFRO0lBQ1IsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsV0FBVztJQUNYLFlBQVk7SUFDWixzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLGVBQWU7SUFDZixRQUFRO0lBQ1IsWUFBWTtJQUNaLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixjQUFjO0lBQ2QsUUFBUTtJQUNSLFdBQVc7SUFDWCxXQUFXO0lBQ1gsZUFBZTtJQUNmLE1BQU07SUFDTixPQUFPO0lBQ1AsWUFBWTtJQUNaLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixhQUFhO0lBQ2IsY0FBYztJQUNkLGVBQWU7SUFDZix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixNQUFNO0lBQ04sS0FBSztJQUNMLFVBQVU7SUFDVixXQUFXO0lBQ1gsT0FBTztJQUNQLE1BQU07SUFDTixJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixRQUFRO0NBQ1gsQ0FBQztBQUVhLDBDQUFZLEdBQWEsNkJBQTZCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO0lBQzdGLFdBQVc7SUFDWCxjQUFjO0lBQ2QsWUFBWTtJQUNaLFVBQVU7SUFDVixPQUFPO0lBQ1AsaUJBQWlCO0lBQ2pCLDZCQUE2QjtJQUM3QixLQUFLO0lBQ0wsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFVBQVU7SUFDVixXQUFXO0lBQ1gsTUFBTTtJQUNOLGNBQWM7SUFDZCxTQUFTO0lBQ1QsUUFBUTtJQUNSLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUNKLE9BQU87SUFDUCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFFBQVE7SUFDUixPQUFPO0lBQ1AsV0FBVztJQUNYLFFBQVE7SUFDUixLQUFLO0lBQ0wsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsS0FBSztJQUNMLFdBQVc7SUFDWCxVQUFVO0lBQ1YsUUFBUTtJQUNSLGFBQWE7SUFDYixVQUFVO0lBQ1YsV0FBVztJQUNYLFVBQVU7SUFDVixLQUFLO0lBQ0wsWUFBWTtJQUNaLHVCQUF1QjtJQUN2QixNQUFNO0lBQ04sU0FBUztJQUNULFVBQVU7SUFDVixNQUFNO0lBQ04sT0FBTztJQUNQLE9BQU87SUFDUCxHQUFHO0lBQ0gsR0FBRztDQUNOLENBQUMsQ0FBQzswSEF2Uk0sNkJBQTZCOzhHQUE3Qiw2QkFBNkIsZ25IQUYzQixFQUFFOzJGQUVKLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUcsd0JBQXdCO29CQUNuQyxRQUFRLEVBQUcsRUFBRTtpQkFDaEI7aUdBMlNZLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxDQUFDO3NCQUFULEtBQUs7Z0JBQ0csQ0FBQztzQkFBVCxLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBYUksUUFBUTtzQkFBakIsTUFBTTtnQkFNRyxlQUFlO3NCQUF4QixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFTRyxVQUFVO3NCQUFuQixNQUFNO2dCQVdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBUUcsT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQU1HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLE9BQU87c0JBQWhCLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gRHVyYXRpb25GaWVsZFxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBXcmFwcGVySGVscGVyIGZyb20gJy4vd3JhcHBlci5oZWxwZXInO1xuXG5pbXBvcnQgeyBBbGlnblNwZWMsIEJhc2UsIENvbnRhaW5lckl0ZW1Db25maWcsIERvbUNvbmZpZywgRHVyYXRpb24sIER1cmF0aW9uQ29uZmlnLCBEdXJhdGlvbkZpZWxkLCBEdXJhdGlvbkZpZWxkTGlzdGVuZXJzLCBEdXJhdGlvblVuaXQsIEZpZWxkLCBGaWVsZENvbnRhaW5lciwgRmllbGRDb250YWluZXJDb25maWcsIEZpZWxkVHJpZ2dlckNvbmZpZywgS2V5TWFwQ29uZmlnLCBNYXNrQ29uZmlnLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBUYWJDb25maWcsIFRvb2x0aXBDb25maWcsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2dyaWQnO1xuXG5leHBvcnQgdHlwZSBCcnludHVtRHVyYXRpb25GaWVsZFByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1bml0cyB0byBhbGxvdyBpbiB0aGlzIGZpZWxkLCBlLmcuIFwiZGF5LGhvdXIseWVhclwiLiBMZWF2ZSBibGFuayB0byBhbGxvdyBhbGxcbiAgICAgKiB2YWxpZCB1bml0cyAodGhlIGRlZmF1bHQpXG4gICAgICovXG4gICAgYWxsb3dlZFVuaXRzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IG5lZ2F0aXZlIGR1cmF0aW9uXG4gICAgICovXG4gICAgYWxsb3dOZWdhdGl2ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIGFuZCBiZWluZyBzaG93biB0aHJvdWdoIFtzaG93QnldKCNDb3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tc2hvd0J5KS4qXG4gICAgICogYHRydWVgIHRvIHNob3cgYSBjb25uZWN0b3IgYXJyb3cgcG9pbnRpbmcgdG8gdGhlIGFsaWduIHRhcmdldC5cbiAgICAgKi9cbiAgICBhbmNob3IgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICovXG4gICAgYXBwZW5kVG8gPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0XG4gICAgICogaW50byBhbiBlbGVtZW50IHdoaWNoIHdpbGwgYmUgbGlua2VkIHVzaW5nIHRoZSBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG5hdGl2ZSBgYXV0b2NvbXBsZXRlYCBwcm9wZXJ0eSBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2F1dG9jb21wbGV0ZSlcbiAgICAgKi9cbiAgICBhdXRvQ29tcGxldGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIGF1dG8gc2VsZWN0IGZpZWxkIGNvbnRlbnRzIG9uIGZvY3VzXG4gICAgICovXG4gICAgYXV0b1NlbGVjdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgdGV4dCB0byBzaG93IGluIGJhZGdlLlxuICAgICAqL1xuICAgIGJhZGdlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBjZW50cmUgdGhlIFdpZGdldCBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGNlbnRlcmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2hvdyBhIHRyaWdnZXIgdG8gY2xlYXIgZmllbGQsIGlmIHRoaXMgZmllbGQgaXMgbm90IFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1yZWFkT25seSkuIFRoZSB0cmlnZ2VyIGlzIGF2YWlsYWJsZVxuICAgICAqIGluIHRoZSBbdHJpZ2dlcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS10cmlnZ2Vycykgb2JqZWN0IHVuZGVyIHRoZSBuYW1lIGBjbGVhcmAuIE1heSBhbHNvIGJlIGFuIG9iamVjdCB3aGljaFxuICAgICAqIGNvbmZpZ3VyZXMgdGhlIGBjbGVhcmAgW3RyaWdnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS10cmlnZ2VycykuXG4gICAgICovXG4gICAgY2xlYXJhYmxlID8gOiBib29sZWFufEZpZWxkVHJpZ2dlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gZWxlbWVudC5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctY29sb3IpXG4gICAgICovXG4gICAgY29sb3IgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgd2hpY2ggY29sdW1uIHRvIHN0YXJ0IGluIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIGNvbHVtbiA/IDogbnVtYmVyXG4gICAgY29uZmlnID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBvciBbcG9zaXRpb25lZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcG9zaXRpb25lZCkuKlxuICAgICAqIEVsZW1lbnQsIFdpZGdldCBvciBSZWN0YW5nbGUgdG8gd2hpY2ggdGhpcyBXaWRnZXQgaXMgY29uc3RyYWluZWQuXG4gICAgICovXG4gICAgY29uc3RyYWluVG8gPyA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGVcbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYWRkaXRpb25hbCBpdGVtcyBhc3NvY2lhdGVkIHRvIHRoaXMgZmllbGQuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gYWRkIGNvbnRleHR1YWxcbiAgICAgKiBmaWVsZHMgcmVsYXRlZCB0byBhIFtjaGVja2JveF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NoZWNrYm94KSBvciBbcmFkaW8gYnV0dG9uXSgjQ29yZS93aWRnZXQvUmFkaW8pLiBTZWVcbiAgICAgKiB0aGVzZSBjbGFzc2VzIGZvciBleGFtcGxlcyBvZiBuZXN0ZWQgZmllbGRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctY29udGFpbmVyKVxuICAgICAqL1xuICAgIGNvbnRhaW5lciA/IDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz58Q29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnfEZpZWxkQ29udGFpbmVyXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZyBjb250cm9scyBob3cgdGhlIHZhbHVlIG9mIG5lc3RlZCBpdGVtcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFyZW50IGNvbnRhaW5lciBnZXRzIG9yIHNldHMgaXRzXG4gICAgICogW3ZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctY29udGFpblZhbHVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkfSBmaWVsZCBGaWVsZCBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGNvbnRhaW5WYWx1ZXMgPyA6IGJvb2xlYW58c3RyaW5nfCgoZmllbGQ6IEZpZWxkKSA9PiBib29sZWFuKVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBXaWRnZXQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGluIHRoZSBHcmlkJ3MgUm93RXhwYW5kZXIgZmVhdHVyZSdzIGB3aWRnZXRgIGNvbmZpZywgcHJvdmlkZSB0aGVcbiAgICAgKiBmaWVsZCBvbiB0aGUgZXhwYW5kZWQgcmVjb3JkIHRvIHVzZSBmb3IgcG9wdWxhdGluZyB0aGlzIHdpZGdldCdzIHN0b3JlIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIGRhdGFGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGFwcGx5IHRvIGVsZW1lbnRzIGRhdGFzZXQgKGVhY2gga2V5IHdpbGwgYmUgdXNlZCBhcyBhIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50KVxuICAgICAqL1xuICAgIGRhdGFzZXQgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIGFsbG93LiBEZWZhdWx0cyB0byBubyBjb25zdHJhaW50LlxuICAgICAqL1xuICAgIGRlY2ltYWxQcmVjaXNpb24gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aGVuIHVwZ3JhZGluZyB0byB2Ny4gUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3M6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1kZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzKVxuICAgICAqL1xuICAgIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgd2lkZ2V0LiBJdCBpcyBzaW1pbGFyIHRvIFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVhZE9ubHkpIGV4Y2VwdCBhIGRpc2FibGVkIHdpZGdldFxuICAgICAqIGNhbm5vdCBiZSBmb2N1c2VkLCB1c2VzIGEgZGlmZmVyZW50IHJlbmRpdGlvbiAodXN1YWxseSBncmV5aXNoKSBhbmQgZG9lcyBub3QgYWxsb3cgc2VsZWN0aW5nIGl0cyB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgYWRkZWQgdG8gYSBbcGFuZWwncyBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBkcmFnIGEgd2lkZ2V0IGZyZWVseSBvbiB0aGUgcGFnZS4gT3Igc2V0IHRvIGFuIG9iamVjdCB3aXRoIGEgwrRoYW5kbGVTZWxlY3RvcsK0XG4gICAgICogcHJvcGVydHkgd2hpY2ggY29udHJvbHMgd2hlbiBhIGRyYWcgc2hvdWxkIHN0YXJ0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctZHJhZ2dhYmxlKVxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgdXNlciBmcm9tIGVkaXRpbmcgdGhlIGZpZWxkLiBGb3IgVGV4dEZpZWxkcyBpdCBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgc2V0dGluZ1xuICAgICAqIFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1yZWFkT25seSksIGJ1dCBmb3IgUGlja2VyRmllbGRzIHRoZXJlIGlzIGEgZGlzdGluY3Rpb24gd2hlcmUgaXQgYWxsb3dzIHlvdSB0byBwaWNrIGEgdmFsdWVcbiAgICAgKiBidXQgbm90IHRvIHR5cGUgb25lIGluIHRoZSBmaWVsZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWVkaXRhYmxlKVxuICAgICAqL1xuICAgIGVkaXRhYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1oaWRlQW5pbWF0aW9uKVxuICAgICAqL1xuICAgIGhpZGVBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gaGlnaGxpZ2h0IGZpZWxkIGFmdGVyIGV4dGVybmFsIHZhbHVlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBoaWdobGlnaHRFeHRlcm5hbENoYW5nZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHN0cmluZyB0byBkaXNwbGF5IGluc2lkZSB0aGUgaW5wdXQgZmllbGQgYXMgYW4gb3ZlcmxheS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBkaXNwbGF5aW5nXG4gICAgICogYSBmaWVsZCdzIHVuaXRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctaGludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBBIGRhdGEgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZH0gZGF0YS5zb3VyY2UgQSByZWZlcmVuY2UgdG8gdGhlIGZpZWxkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHthbnl9IGRhdGEudmFsdWUgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBoaW50ID8gOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIGlzIHNpbWlsYXIgdG8gW2hpbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNjb25maWctaGludCkgZXhjZXB0IHRoYXQgdGhpcyBjb25maWcgaXMgdXNlZCB0byBkaXNwbGF5IEhUTUwgY29udGVudC5cbiAgICAgKiBTaW5jZSB0aGlzIGNhbiBhbGxvdyBtYWxpY2lvdXMgY29udGVudCB0byBiZSBleGVjdXRlZCwgYmUgc3VyZSBub3QgdG8gaW5jbHVkZSB1c2VyLWVudGVyZWQgZGF0YSBvciB0b1xuICAgICAqIGVuY29kZSBzdWNoIGRhdGEgKHNlZSBbZW5jb2RlSHRtbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvaGVscGVyL1N0cmluZ0hlbHBlciNmdW5jdGlvbi1lbmNvZGVIdG1sLXN0YXRpYykpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctaGludEh0bWwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgQSBkYXRhIG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRmllbGR9IGRhdGEuc291cmNlIEEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhLnZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgaGludEh0bWwgPyA6IHN0cmluZ3woKGRhdGE6IHsgc291cmNlOiBGaWVsZCwgdmFsdWU6IGFueSB9KSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgY29uZmlnIHRvIGB0cnVlYCB0byBhbHdheXMgZGlzcGxheSBpdGVtcyBob3Jpem9udGFsbHkgYWxvbmcgd2l0aCB0aGlzIGZpZWxkLiBUaGlzIGFzc2lnbnMgYW5cbiAgICAgKiBbaGJveF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L2xheW91dC9Cb3gpIGFzIHRoZSBbbGF5b3V0XSgjQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1sYXlvdXQpIHRvIHRoZVxuICAgICAqIFtjb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNjb25maWctY29udGFpbmVyKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWlubGluZSlcbiAgICAgKi9cbiAgICBpbmxpbmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUZXh0IGFsaWdubWVudCBmb3IgdGhlIGlucHV0IGZpZWxkLlxuICAgICAqL1xuICAgIGlucHV0QWxpZ24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldHMgY3VzdG9tIGF0dHJpYnV0ZXMgb2YgdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0b1xuICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBpbnB1dEF0dHJpYnV0ZXMgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgbmVlZCB0byB1c2Ugc29tZXRoaW5nIGVsc2UgdGhhbiBhIGRlZmF1bHQgYGlucHV0YCBlbGVtZW50LCBhcyB0aGUgaW5wdXQgZWxlbWVudCwgcHJvdmlkZSB0aGUgdGFnXG4gICAgICogbmFtZSBoZXJlLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgdXNlZCBmb3IgYWR2YW5jZWQgdXNhZ2Ugb25seSwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyBXZWJDb21wb25lbnRzXG4gICAgICogKGN1c3RvbSBlbGVtZW50cyksIGFuZCB0aGF0IHRoZSBjb25maWd1cmVkIGVsZW1lbnQgbXVzdCBmdWxmaWwgdGhlIHNhbWUgY29udHJhY3QgYXMgYSByZWd1bGFyIGlucHV0XG4gICAgICogZWxlbWVudC5cbiAgICAgKi9cbiAgICBpbnB1dFRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHR5cGVgIGF0dHJpYnV0ZSBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50IChwYXNzd29yZCwgaGlkZGVuLCBkYXRlLCBjb2xvciwgZXRjLikuXG4gICAgICovXG4gICAgaW5wdXRUeXBlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggdG8gYXBwbHkgdG8gdGhlIGAuYi1maWVsZC1pbm5lcmAgZWxlbWVudCwgd2hpY2ggZW5jb21wYXNzZXMgdGhlIGBpbnB1dGAgZWxlbWVudCBhbmQgYW55XG4gICAgICogdHJpZ2dlcnMuIElmIGEgbnVtYmVyIGlzIHNwZWNpZmllZCwgYHB4YCB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgaW5wdXRXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgW2tleV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5KSBuYW1lXG4gICAgICogYW5kIG9wdGlvbmFsIG1vZGlmaWVyIHByZWZpeGVzOiBgJ0N0cmwrJ2AsIGAnQWx0KydgLCBgJ01ldGErJ2AsIGFuZCBgJ1NoaWZ0KydgIChjYXNlLWluc2Vuc2l0aXZlKS4gVGhlIHZhbHVlc1xuICAgICAqIGFyZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUga2V5c3Ryb2tlIGlzIHJlY2VpdmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWcta2V5TWFwKVxuICAgICAqL1xuICAgIGtleU1hcCA/IDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBhZnRlciB0aGUgbGFzdCBrZXlzdHJva2UgYmVmb3JlIHRyaWdnZXJpbmcgYSBjaGFuZ2UgZXZlbnQuXG4gICAgICogU2V0IHRvIDAgdG8gbm90IHRyaWdnZXIgY2hhbmdlIGV2ZW50cyBmcm9tIGtleXN0cm9rZXMgKGxpc3RlbiBmb3IgaW5wdXQgZXZlbnQgaW5zdGVhZCB0byBoYXZlXG4gICAgICogaW1tZWRpYXRlIGZlZWRiYWNrLCBjaGFuZ2Ugd2lsbCBzdGlsbCBiZSB0cmlnZ2VyZWQgb24gYmx1cikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1rZXlTdHJva2VDaGFuZ2VEZWxheSlcbiAgICAgKi9cbiAgICBrZXlTdHJva2VDaGFuZ2VEZWxheSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogTGFiZWwsIHByZXBlbmRlZCB0byBmaWVsZFxuICAgICAqL1xuICAgIGxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDU1MgY2xhc3MgbmFtZSBvciBjbGFzcyBuYW1lcyB0byBhZGQgdG8gYW55IGNvbmZpZ3VyZWQgW2xhYmVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vTGFiZWxhYmxlI2NvbmZpZy1sYWJlbClcbiAgICAgKi9cbiAgICBsYWJlbENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIExhYmVsIHBvc2l0aW9uLCBlaXRoZXIgJ2JlZm9yZScgdGhlIGZpZWxkIG9yICdhYm92ZScgdGhlIGZpZWxkXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1sYWJlbFBvc2l0aW9uKVxuICAgICAqL1xuICAgIGxhYmVsUG9zaXRpb24gPyA6ICdiZWZvcmUnfCdhYm92ZSd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBsYWJlbHMgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGlucHV0IGZpZWxkLlxuICAgICAqIEVhY2ggbGFiZWwgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctbGFiZWxzKVxuICAgICAqL1xuICAgIGxhYmVscyA/IDogb2JqZWN0W11cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggdG8gYXBwbHkgdG8gdGhlIGAmbHQ7bGFiZWwmZ3Q7YCBlbGVtZW50LiBJZiBhIG51bWJlciBpcyBzcGVjaWZpZWQsIGBweGAgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIGxhYmVsV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IER1cmF0aW9uRmllbGRMaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBBIGNsYXNzIHRyYW5zbGF0aW9ucyBvZiB3aGljaCBhcmUgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhpcyBlbnRpdHkuXG4gICAgICogVGhpcyBpcyBvZnRlbiB1c2VkIHdoZW4gdHJhbnNsYXRpb25zIG9mIGFuIGl0ZW0gYXJlIGRlZmluZWQgb24gaXRzIGNvbnRhaW5lciBjbGFzcy5cbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctbG9jYWxpemFibGVQcm9wZXJ0aWVzKVxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlUHJvcGVydGllcyA/IDogc3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUgZHVyYXRpb24gbWFnbml0dWRlIHRvIHVzZSB3aXRoIHRoZSBjdXJyZW50IHVuaXQgdmFsdWUuIENhbiBiZSBlaXRoZXIgYW4gaW50ZWdlciBvciBhIGZsb2F0IHZhbHVlLlxuICAgICAqIEJvdGggXCIsXCIgYW5kIFwiLlwiIGFyZSB2YWxpZCBkZWNpbWFsIHNlcGFyYXRvcnMuXG4gICAgICovXG4gICAgbWFnbml0dWRlID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIG9iamVjdCBjb250YWlucyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNyZWF0ZWQgZm9yIHRoZVxuICAgICAqIFttYXNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tlZCkgY29uZmlnLiBBbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgaW4gdGhlIGBtYXNrZWRgIGNvbmZpZyB3aWxsIG92ZXJyaWRlIHRoZXNlXG4gICAgICogdmFsdWVzLlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogTWF4IGR1cmF0aW9uIHZhbHVlIChlLmcuIDEwZClcbiAgICAgKi9cbiAgICBtYXggPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctbWF4aW1pemVPbk1vYmlsZSlcbiAgICAgKi9cbiAgICBtYXhpbWl6ZU9uTW9iaWxlID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBudW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGlucHV0IGZpZWxkXG4gICAgICovXG4gICAgbWF4TGVuZ3RoID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBNaW5pbXVtIGR1cmF0aW9uIHZhbHVlIChlLmcuIDFkKVxuICAgICAqL1xuICAgIG1pbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtaW5IZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5IZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbWluIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZvciB0aGUgaW5wdXQgZmllbGRcbiAgICAgKi9cbiAgICBtaW5MZW5ndGggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBpcyBjb25maWd1cmVkIGFzIGB0cnVlYCBhIFtSZXNpemVPYnNlcnZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyKVxuICAgICAqIGlzIHVzZWQgdG8gbW9uaXRvciB0aGlzIGVsZW1lbnQgZm9yIHNpemUgY2hhbmdlcyBjYXVzZWQgYnkgZWl0aGVyIHN0eWxlIG1hbmlwdWxhdGlvbiwgb3IgYnkgQ1NTXG4gICAgICogbGF5b3V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBmaWVsZCB3aGljaCBpcyB1c2VkIGFzIGEga2V5IHRvIGdldC9zZXQgdmFsdWVzIGZyb20vdG8gdGhlIGZpZWxkLlxuICAgICAqIFVzZWQgcHJpb3IgdG8gW3JlZl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVmKSBhbmQgW2lkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1pZCkgaW5cbiAgICAgKiBbQ29udGFpbmVyLnZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctbmFtZSlcbiAgICAgKi9cbiAgICBuYW1lID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWl0ZW1zKSBvZiBhIENvbnRhaW5lciksIHRoaXMgY29uZmlnIHdpbGwgYmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlXG4gICAgICogdGhlIG93bmVyIGlzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRoZSBlbmNhcHN1bGF0aW5nIENvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLW93bmVyKVxuICAgICAqL1xuICAgIG93bmVyID8gOiBXaWRnZXR8YW55XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IGluIGVtcHR5IGZpZWxkLlxuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCksIGJ1dCBtdXN0XG4gICAgICogbm90IHBhcnRpY2lwYXRlIGluIHRoZSBzdGFuZGFyZCBsYXlvdXQgb2YgdGhhdCB3aWRnZXQsIGFuZCBtdXN0IGJlIHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGF0XG4gICAgICogd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXBvc2l0aW9uZWQpXG4gICAgICovXG4gICAgcG9zaXRpb25lZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGZpZWxkIHVubW9kaWZpYWJsZSBieSB1c2VyIGFjdGlvbi4gVGhlIGlucHV0IGFyZWEgaXMgbm90IGVkaXRhYmxlLCBhbmQgdHJpZ2dlcnNcbiAgICAgKiBhcmUgdW5yZXNwb25zaXZlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJlZGVmaW5lZCBzdHlsZSB0byB1c2UgZm9yIHRoZSBmaWVsZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6ICdvdXRsaW5lZCd8J2ZpbGxlZCd8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBpbmRpY2F0ZSB0aGF0IGEgYG51bGxgIGZpZWxkIHZhbHVlIGlzIHRvIGJlIG1hcmtlZCBhcyBpbnZhbGlkLiBUaGlzIHdpbGxcbiAgICAgKiBvcHRpb25hbGx5IGFwcGVuZCBhICogdG8gdGhlIGZpZWxkIGxhYmVsIGlmIFtzaG93UmVxdWlyZWRJbmRpY2F0b3JdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS1zaG93UmVxdWlyZWRJbmRpY2F0b3IpIGlzIHNldC5cbiAgICAgKi9cbiAgICByZXF1aXJlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgZmllbGQgaXMgbm90IFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1yZWFkT25seSksIHRoZW4gc2V0dGluZyB0aGlzIG9wdGlvbiBtZWFucyB0aGF0IHByZXNzaW5nXG4gICAgICogdGhlIGBFU0NBUEVgIGtleSBhZnRlciBlZGl0aW5nIHRoZSBmaWVsZCB3aWxsIHJldmVydCB0aGUgZmllbGQgdG8gdGhlIHZhbHVlIGl0IGhhZCB3aGVuXG4gICAgICogdGhlIHVzZXIgZm9jdXNlZCB0aGUgZmllbGQuIElmIHRoZSBmaWVsZCBpcyAqbm90KiBjaGFuZ2VkIGZyb20gd2hlbiBmb2N1c2VkLCB0aGUgW2NsZWFyYWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1jbGVhcmFibGUpXG4gICAgICogYmVoYXZpb3VyIHdpbGwgYmUgYWN0aXZhdGVkLlxuICAgICAqL1xuICAgIHJldmVydE9uRXNjYXBlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy1yaXBwbGUpXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctcnRsKVxuICAgICAqL1xuICAgIHJ0bCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hhdCB0byBkbyBpZiBkb2N1bWVudCBpcyBzY3JvbGxlZCB3aGlsZSBXaWRnZXQgaXMgdmlzaWJsZSAob25seSByZWxldmFudCB3aGVuIGZsb2F0aW5nIGlzIHNldCB0byBgdHJ1ZWApLlxuICAgICAqIFZhbGlkIHZhbHVlczogwrRudWxswrQ6IGRvIG5vdGhpbmcsIMK0aGlkZcK0OiBoaWRlIHRoZSB3aWRnZXQgb3IgwrRyZWFsaWduwrQ6IHJlYWxpZ24gdG8gdGhlIHRhcmdldCBpZiBwb3NzaWJsZS5cbiAgICAgKi9cbiAgICBzY3JvbGxBY3Rpb24gPyA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXNob3dBbmltYXRpb24pXG4gICAgICovXG4gICAgc2hvd0FuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgdG8gYXV0b21hdGljYWxseSBkaXNwbGF5IGEgKiBhZnRlciB0aGUgbGFiZWwgZm9yIHRoaXMgZmllbGQgd2hlbiBpdCBpcyBbcmVxdWlyZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS1yZXF1aXJlZCkuXG4gICAgICovXG4gICAgc2hvd1JlcXVpcmVkSW5kaWNhdG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyB0aGUgdG9vbHRpcCB3aGVuIHRoaXMgd2lkZ2V0IGlzIFtkaXNhYmxlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAsIGNvbXBsZXRlbHkgYnlwYXNzZXMgdmFsaWRhdGlvbiBsb2dpYyAoY291bGQgYmUgdXNlcmZ1bCBpZiB5b3VyIGZpZWxkIGlzIG5vdCBgZWRpdGFibGVgXG4gICAgICogdG8gdGhlIHVzZXIpLlxuICAgICAqL1xuICAgIHNraXBWYWxpZGF0aW9uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmF0aXZlIGBzcGVsbGNoZWNrYCBwcm9wZXJ0eSBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9zcGVsbGNoZWNrKVxuICAgICAqL1xuICAgIHNwZWxsQ2hlY2sgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTdGVwIHNpemUgZm9yIHNwaW4gYnV0dG9uIGNsaWNrcy4gVGhlIGBzdGVwYCBwcm9wZXJ0eSBtYXkgYmUgc2V0IGluIG9iamVjdCBmb3JtIHNwZWNpZnlpbmcgdHdvIHByb3BlcnRpZXMsXG4gICAgICogYG1hZ25pdHVkZWAsIGEgTnVtYmVyLCBhbmQgYHVuaXRgLCBhIFN0cmluZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXN0ZXApXG4gICAgICovXG4gICAgc3RlcCA/IDogRHVyYXRpb25Db25maWd8bnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIHRhYiBpbmRleCBvZiB0aGUgaW5wdXQgZmllbGQgb3IgZmllbGRzLCBvciBgbnVsbGAgZm9yIG5hdHVyYWwgdGFiIG9yZGVyIChyZWNvbW1lbmRlZCkuIFNldHRpbmcgdG8gYDBgXG4gICAgICogaXMgZXF1aXZhbGVudCB0byBuYXR1cmFsIHRhYiBvcmRlciwgYnV0IGlzIHVubmVjZXNzYXJ5IGZvciBmaWVsZHMgc2luY2UgdGhleSBhcmUgbmF0dXJhbGx5IHRhYmJhYmxlXG4gICAgICogKGkuZS4sIGFjY2Vzc2libGUgdmlhIHRoZSBUQUIga2V5KS4gU2V0dGluZyB0byBgLTFgIGRpc2FibGVzIHRhYmJhYmlsaXR5IGJ1dCBhbGxvd3MgZm9yIGZvY3VzIHRvIGJlIHNldFxuICAgICAqIHRvIHRoZSBlbGVtZW50IHByb2dyYW1tYXRpY2FsbHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy10YWJJbmRleClcbiAgICAgKi9cbiAgICB0YWJJbmRleCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWctdGV4dEFsaWduKVxuICAgICAqL1xuICAgIHRleHRBbGlnbiA/IDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBmb3IgdGhlIHdpZGdldC4gT25seSBpbiBlZmZlY3Qgd2hlbiBpbnNpZGUgYSBjb250YWluZXIgdGhhdCB1c2VzIGl0IChzdWNoIGFzIFRhYlBhbmVsKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUb29sdGlwIGZvciB0aGUgd2lkZ2V0LCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYXMgYSBUb29sdGlwIGNvbmZpZyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBXaWRnZXRzIHRoYXQgdHJpZ2dlciBmdW5jdGlvbmFsaXR5IHVwb24gY2xpY2suIEVhY2ggdHJpZ2dlciBpY29uIGlzIGEgW1dpZGdldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCkgaW5zdGFuY2VcbiAgICAgKiB3aGljaCBtYXkgYmUgaGlkZGVuLCBzaG93biBhbmQgb2JzZXJ2ZWQgYW5kIHN0eWxlZCBqdXN0IGxpa2UgYW55IG90aGVyIHdpZGdldC5cbiAgICAgKi9cbiAgICB0cmlnZ2VycyA/IDogUmVjb3JkPHN0cmluZywgRmllbGRUcmlnZ2VyQ29uZmlnPnxSZWNvcmQ8c3RyaW5nLCBXaWRnZXQ+XG4gICAgdHlwZSA/IDogJ2R1cmF0aW9uZmllbGQnfCdkdXJhdGlvbidcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBkdXJhdGlvbiB1bml0IHRvIHVzZSB3aXRoIHRoZSBjdXJyZW50IG1hZ25pdHVkZSB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXVuaXQpXG4gICAgICovXG4gICAgdW5pdCA/IDogRHVyYXRpb25Vbml0XG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgdG8gYHRydWVgIHRoZSBmaWVsZCB3aWxsIHVzZSBzaG9ydCBuYW1lcyBvZiB1bml0IGR1cmF0aW9uc1xuICAgICAqIChhcyByZXR1cm5lZCBieSBbZ2V0U2hvcnROYW1lT2ZVbml0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNmdW5jdGlvbi1nZXRTaG9ydE5hbWVPZlVuaXQtc3RhdGljKSkgd2hlbiBjcmVhdGluZyB0aGVcbiAgICAgKiBpbnB1dCBmaWVsZCdzIGRpc3BsYXkgdmFsdWUuXG4gICAgICovXG4gICAgdXNlQWJicmV2aWF0aW9uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGhpZ2hsaWdodCBhIGZpZWxkIGFzIGludmFsaWQgd2hpbGUgdHlwaW5nLCB0byBpbnN0ZWFkIHNob3cgaXQgb24gRU5URVIga2V5IHByZXNzXG4gICAgICogb3Igc2ltaWxhci5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZU9uSW5wdXQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgYHZhbHVlYCBtYXkgYmUgc2V0IGVpdGhlciBpbiBvYmplY3QgZm9ybSBzcGVjaWZ5aW5nIHR3byBwcm9wZXJ0aWVzLCBhIG51bWVyaWNhbCBgbWFnbml0dWRlYCBhbmQgYVxuICAgICAqIHN0cmluZyBgdW5pdGA6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2NvbmZpZy12YWx1ZSlcbiAgICAgKi9cbiAgICB2YWx1ZSA/IDogc3RyaW5nfG51bWJlcnxEdXJhdGlvbkNvbmZpZ3xEdXJhdGlvblxuICAgIC8qKlxuICAgICAqIEEgd2lkZ2V0cyB3ZWlnaHQgZGV0ZXJtaW5lcyBpdHMgcG9zaXRpb24gYW1vbmcgc2libGluZ3Mgd2hlbiBhZGRlZCB0byBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNjb25maWcteClcbiAgICAgKi9cbiAgICB4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0R1cmF0aW9uRmllbGQjY29uZmlnLXkpXG4gICAgICovXG4gICAgeSA/IDogbnVtYmVyXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS1kdXJhdGlvbi1maWVsZCcsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtRHVyYXRpb25GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IER1cmF0aW9uRmllbGQ7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdEdXJhdGlvbkZpZWxkJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25BY3Rpb24nLFxuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlSGlkZScsXG4gICAgICAgICdvbkJlZm9yZVNob3cnLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNoYW5nZScsXG4gICAgICAgICdvbkNsZWFyJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkVsZW1lbnRDcmVhdGVkJyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvbklucHV0JyxcbiAgICAgICAgJ29uUGFpbnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlc2l6ZScsXG4gICAgICAgICdvblNob3cnLFxuICAgICAgICAnb25UcmlnZ2VyJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcblxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtRHVyYXRpb25GaWVsZENvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYWxsb3dlZFVuaXRzJyxcbiAgICAgICAgJ2FsbG93TmVnYXRpdmUnLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0NvbXBsZXRlJyxcbiAgICAgICAgJ2F1dG9TZWxlY3QnLFxuICAgICAgICAnYmFkZ2UnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xlYXJhYmxlJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRhaW5lcicsXG4gICAgICAgICdjb250YWluVmFsdWVzJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RlY2ltYWxQcmVjaXNpb24nLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICAgJ2VkaXRhYmxlJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWdobGlnaHRFeHRlcm5hbENoYW5nZScsXG4gICAgICAgICdoaW50JyxcbiAgICAgICAgJ2hpbnRIdG1sJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2lubGluZScsXG4gICAgICAgICdpbnB1dEFsaWduJyxcbiAgICAgICAgJ2lucHV0QXR0cmlidXRlcycsXG4gICAgICAgICdpbnB1dFRhZycsXG4gICAgICAgICdpbnB1dFR5cGUnLFxuICAgICAgICAnaW5wdXRXaWR0aCcsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2tleVN0cm9rZUNoYW5nZURlbGF5JyxcbiAgICAgICAgJ2xhYmVsJyxcbiAgICAgICAgJ2xhYmVsQ2xzJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGFiZWxzJyxcbiAgICAgICAgJ2xhYmVsV2lkdGgnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYWduaXR1ZGUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbWF4JyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heExlbmd0aCcsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW4nLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbkxlbmd0aCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVxdWlyZWQnLFxuICAgICAgICAncmV2ZXJ0T25Fc2NhcGUnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93UmVxdWlyZWRJbmRpY2F0b3InLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzcGVsbENoZWNrJyxcbiAgICAgICAgJ3N0ZXAnLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkluZGV4JyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3RyaWdnZXJzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAndW5pdCcsXG4gICAgICAgICd1c2VBYmJyZXZpYXRpb24nLFxuICAgICAgICAndmFsaWRhdGVPbklucHV0JyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYWxsb3dOZWdhdGl2ZScsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvQ29tcGxldGUnLFxuICAgICAgICAnYXV0b1NlbGVjdCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xlYXJhYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250YWluZXInLFxuICAgICAgICAnY29udGFpblZhbHVlcycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGVjaW1hbFByZWNpc2lvbicsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWdobGlnaHRFeHRlcm5hbENoYW5nZScsXG4gICAgICAgICdoaW50JyxcbiAgICAgICAgJ2hpbnRIdG1sJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2lubGluZScsXG4gICAgICAgICdpbnB1dEFsaWduJyxcbiAgICAgICAgJ2lucHV0QXR0cmlidXRlcycsXG4gICAgICAgICdpbnB1dFRhZycsXG4gICAgICAgICdpbnB1dFR5cGUnLFxuICAgICAgICAnaW5wdXRXaWR0aCcsXG4gICAgICAgICdrZXlTdHJva2VDaGFuZ2VEZWxheScsXG4gICAgICAgICdsYWJlbENscycsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhYmVscycsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhMZW5ndGgnLFxuICAgICAgICAnbWluTGVuZ3RoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JldmVydE9uRXNjYXBlJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICdzcGVsbENoZWNrJyxcbiAgICAgICAgJ3N0ZXAnLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkluZGV4JyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3VzZUFiYnJldmlhdGlvbicsXG4gICAgICAgICd2YWxpZGF0ZU9uSW5wdXQnLFxuICAgICAgICAnd2VpZ2h0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bUR1cmF0aW9uRmllbGRDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FsbG93ZWRVbml0cycsXG4gICAgICAgICdhbmNob3JTaXplJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2JhZGdlJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb250ZW50JyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZWRpdGFibGUnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9jdXNWaXNpYmxlJyxcbiAgICAgICAgJ2Zvcm11bGEnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnbWFnbml0dWRlJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXgnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Nob3dSZXF1aXJlZEluZGljYXRvcicsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJpZ2dlcnMnLFxuICAgICAgICAndW5pdCcsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogRHVyYXRpb25GaWVsZDtcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYWxpZ24gICAgICAgICAgICAgICAgICAgICAgICAhIDogQWxpZ25TcGVjfHN0cmluZztcbiAgICBASW5wdXQoKSBhbGxvd05lZ2F0aXZlICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFuY2hvciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXJpYURlc2NyaXB0aW9uICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvQ29tcGxldGUgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b1NlbGVjdCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBidWJibGVFdmVudHMgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY2VudGVyZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbGVhcmFibGUgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufEZpZWxkVHJpZ2dlckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2xvciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnN0cmFpblRvICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGU7XG4gICAgQElucHV0KCkgY29udGFpbmVyICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz58Q29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnfEZpZWxkQ29udGFpbmVyO1xuICAgIEBJbnB1dCgpIGNvbnRhaW5WYWx1ZXMgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfCgoZmllbGQ6IEZpZWxkKSA9PiBib29sZWFuKTtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWNpbWFsUHJlY2lzaW9uICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaW50ICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBoaW50SHRtbCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5wdXRBbGlnbiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0QXR0cmlidXRlcyAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgaW5wdXRUYWcgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0VHlwZSAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dFdpZHRoICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGtleVN0cm9rZUNoYW5nZURlbGF5ICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsYWJlbENscyAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8bnVsbDtcbiAgICBASW5wdXQoKSBsYWJlbHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3RbXTtcbiAgICBASW5wdXQoKSBsYWJlbFdpZHRoICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IER1cmF0aW9uRmllbGRMaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9jYWxlQ2xhc3MgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIEJhc2U7XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZVByb3BlcnRpZXMgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWF4TGVuZ3RoICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkxlbmd0aCAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG93bmVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IFdpZGdldHxhbnk7XG4gICAgQElucHV0KCkgcG9zaXRpb25lZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmV2ZXJ0T25Fc2NhcGUgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByaXBwbGUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsQWN0aW9uICAgICAgICAgICAgICAgICAhIDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsO1xuICAgIEBJbnB1dCgpIHNob3dBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHNob3dUb29sdGlwV2hlbkRpc2FibGVkICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2tpcFZhbGlkYXRpb24gICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzcGVsbENoZWNrICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0ZXAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IER1cmF0aW9uQ29uZmlnfG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFiSW5kZXggICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHRleHRBbGlnbiAgICAgICAgICAgICAgICAgICAgISA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgdGl0bGUgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICdkdXJhdGlvbmZpZWxkJ3wnZHVyYXRpb24nO1xuICAgIEBJbnB1dCgpIHVpICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgdXNlQWJicmV2aWF0aW9uICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB2YWxpZGF0ZU9uSW5wdXQgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhbGxvd2VkVW5pdHMgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBiYWRnZSAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGVkaXRhYmxlICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmbGV4ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBrZXlNYXAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbGFiZWwgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWFnbml0dWRlICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbWFyZ2luICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhpbWl6ZU9uTW9iaWxlICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbiAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVhZE9ubHkgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAhIDogJ291dGxpbmVkJ3wnZmlsbGVkJ3xzdHJpbmc7XG4gICAgQElucHV0KCkgcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93UmVxdWlyZWRJbmRpY2F0b3IgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdHJpZ2dlcnMgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFRyaWdnZXJDb25maWc+fFJlY29yZDxzdHJpbmcsIFdpZGdldD47XG4gICAgQElucHV0KCkgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBEdXJhdGlvblVuaXQ7XG4gICAgQElucHV0KCkgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyfER1cmF0aW9uQ29uZmlnfER1cmF0aW9uO1xuICAgIEBJbnB1dCgpIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXMgb25seVxuICAgIEBJbnB1dCgpIGFuY2hvclNpemUgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgY29udGVudCAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvcm11bGEgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGh0bWwgICAgICAgICAhIDogc3RyaW5nfCgod2lkZ2V0OiBXaWRnZXQpID0+IHN0cmluZyl8RG9tQ29uZmlnfERvbUNvbmZpZ1tdfFZ1ZUNvbmZpZztcbiAgICBASW5wdXQoKSBpbnB1dCAgICAgICAgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAhIDogV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAhIDogU2Nyb2xsZXI7XG5cbiAgICAvLyBFdmVudHMgZW1pdHRlcnNcbiAgICAvKipcbiAgICAgKiBVc2VyIHBlcmZvcm1lZCB0aGUgZGVmYXVsdCBhY3Rpb24gKHR5cGVkIGludG8gdGhpcyBmaWVsZCBvciBoaXQgdGhlIHRyaWdnZXJzKS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuRHVyYXRpb259IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLkR1cmF0aW9ufSBldmVudC5vbGRWYWx1ZSBUaGlzIGZpZWxkJ3MgcHJldmlvdXMgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkIFRydWUgaWYgdGhpcyBmaWVsZCBpcyBpbiBhIHZhbGlkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudCBpZiBhbnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC51c2VyQWN0aW9uIFRyaWdnZXJlZCBieSB1c2VyIHRha2luZyBhbiBhY3Rpb24gKGB0cnVlYCkgb3IgYnkgc2V0dGluZyBhIHZhbHVlIChgZmFsc2VgKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRHVyYXRpb25GaWVsZH0gZXZlbnQuc291cmNlIFRoaXMgZmllbGRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BY3Rpb246IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyB2YWx1ZTogRHVyYXRpb24sIG9sZFZhbHVlOiBEdXJhdGlvbiwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQsIHVzZXJBY3Rpb246IGJvb2xlYW4sIHNvdXJjZTogRHVyYXRpb25GaWVsZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgc2hvd24uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXQsYW55fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBzaG93blxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldHxhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9EdXJhdGlvbkZpZWxkI2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGlzIGZpZWxkJ3MgdmFsdWUgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuRHVyYXRpb259IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLkR1cmF0aW9ufSBldmVudC5vbGRWYWx1ZSBUaGlzIGZpZWxkJ3MgcHJldmlvdXMgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkIFRydWUgaWYgdGhpcyBmaWVsZCBpcyBpbiBhIHZhbGlkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudCBpZiBhbnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC51c2VyQWN0aW9uIFRyaWdnZXJlZCBieSB1c2VyIHRha2luZyBhbiBhY3Rpb24gKGB0cnVlYCkgb3IgYnkgc2V0dGluZyBhIHZhbHVlIChgZmFsc2VgKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRHVyYXRpb25GaWVsZH0gZXZlbnQuc291cmNlIFRoaXMgZmllbGRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyB2YWx1ZTogRHVyYXRpb24sIG9sZFZhbHVlOiBEdXJhdGlvbiwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQsIHVzZXJBY3Rpb246IGJvb2xlYW4sIHNvdXJjZTogRHVyYXRpb25GaWVsZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGlzIGZpZWxkIGlzIFtjbGVhcmVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjZnVuY3Rpb24tY2xlYXIpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNldmVudC1jbGVhcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZCxhbnl9IGV2ZW50LnNvdXJjZSBUaGlzIEZpZWxkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xlYXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEZpZWxkfGFueSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQncyBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHVzZXIgdHlwZXMgaW50byB0aGlzIGZpZWxkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkLGFueX0gZXZlbnQuc291cmNlIFRoaXMgZmllbGRcbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXIsYm9vbGVhbixhbnl9IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbklucHV0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZHxhbnksIHZhbHVlOiBzdHJpbmd8bnVtYmVyfGJvb2xlYW58YW55LCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRHVyYXRpb25GaWVsZCNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXJlY29tcG9zZSksIGlmIHRoaXMgcmVzdWx0cyBpbiBzb21lIGNoYW5nZSB0byB0aGUgd2lkZ2V0J3MgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlY29tcG9zZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1vbml0b3JSZXNpemUpIGlzIGB0cnVlYCouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsIG9sZEhlaWdodDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVXNlciBjbGlja2VkIG9uZSBvZiB0aGlzIGZpZWxkJ3MgW3RyaWdnZXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjcHJvcGVydHktdHJpZ2dlcnMpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRmllbGQsYW55fSBldmVudC5zb3VyY2UgVGhpcyBmaWVsZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50cmlnZ2VyIFRoZSB0cmlnZ2VyIGFjdGl2YXRlZCBieSBjbGljayBvciB0b3VjaCB0YXAuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVHJpZ2dlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogRmllbGR8YW55LCB0cmlnZ2VyOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1EdXJhdGlvbkZpZWxkQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1EdXJhdGlvbkZpZWxkQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1EdXJhdGlvbkZpZWxkQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19