@fundamental-ngx/platform 0.49.1-rc.4 → 0.49.1-rc.6

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 (145) hide show
  1. package/approval-flow/approval-flow-node/approval-flow-node.component.d.ts +6 -6
  2. package/approval-flow/approval-flow.component.d.ts +18 -18
  3. package/dynamic-page/dynamic-page.config.d.ts +2 -2
  4. package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +5 -5
  5. package/esm2022/approval-flow/approval-flow.component.mjs +50 -50
  6. package/esm2022/dynamic-page/dynamic-page.config.mjs +8 -8
  7. package/esm2022/form/combobox/combobox/combobox.component.mjs +2 -2
  8. package/esm2022/form/form-group/form-field/form-field.component.mjs +16 -16
  9. package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +5 -5
  10. package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +5 -5
  11. package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +5 -5
  12. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +11 -11
  13. package/esm2022/form/input-group/input-group.config.mjs +5 -5
  14. package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +83 -83
  15. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +2 -2
  16. package/esm2022/form/multi-combobox/multi-combobox.config.mjs +8 -8
  17. package/esm2022/form/multi-input/base-multi-input.mjs +5 -7
  18. package/esm2022/form/multi-input/multi-input.config.mjs +8 -8
  19. package/esm2022/form/radio-group/radio/radio.component.mjs +3 -3
  20. package/esm2022/form/select/select.config.mjs +5 -5
  21. package/esm2022/form/step-input/base.step-input.mjs +6 -12
  22. package/esm2022/form/text-area/text-area.component.mjs +24 -25
  23. package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +1 -1
  24. package/esm2022/list/action-list-item/action-list-item.component.mjs +3 -3
  25. package/esm2022/list/base-list-item.mjs +7 -10
  26. package/esm2022/list/display-list-item/display-list-item.component.mjs +3 -3
  27. package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +3 -3
  28. package/esm2022/list/list.component.mjs +4 -4
  29. package/esm2022/list/object-list-item/object-list-item.component.mjs +3 -3
  30. package/esm2022/list/standard-list-item/standard-list-item.component.mjs +3 -3
  31. package/esm2022/menu/menu-item.component.mjs +12 -12
  32. package/esm2022/menu/menu-trigger.directive.mjs +38 -39
  33. package/esm2022/message-popover/components/message-view/message-view.component.mjs +2 -2
  34. package/esm2022/panel/panel.config.mjs +8 -8
  35. package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +2 -2
  36. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +2 -2
  37. package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +3 -3
  38. package/esm2022/shared/base.mjs +3 -5
  39. package/esm2022/shared/domain/data-source.mjs +1 -1
  40. package/esm2022/shared/form/base.input.mjs +5 -5
  41. package/esm2022/shared/form/collection-base.input.mjs +1 -1
  42. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +13 -13
  43. package/esm2022/smart-filter-bar/interfaces/smart-filter-dynamic-form-item.mjs +1 -1
  44. package/esm2022/table/components/growing-button/table-growing-button.component.mjs +3 -3
  45. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +2 -2
  46. package/esm2022/table/components/table-row/table-row.component.mjs +3 -3
  47. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +9 -9
  48. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +2 -2
  49. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +2 -2
  50. package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +2 -2
  51. package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +1 -1
  52. package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +2 -2
  53. package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +2 -2
  54. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +1 -1
  55. package/esm2022/table-helpers/directives/table-draggable.directive.mjs +3 -3
  56. package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +5 -5
  57. package/esm2022/table-helpers/domain/table-data-provider.mjs +3 -1
  58. package/esm2022/table-helpers/domain/table-data-source.mjs +1 -1
  59. package/esm2022/table-helpers/models/table-row.model.mjs +5 -6
  60. package/esm2022/table-helpers/services/table-column-resize.service.mjs +8 -8
  61. package/esm2022/table-helpers/services/table-row.service.mjs +9 -13
  62. package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +1 -1
  63. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +9 -11
  64. package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +1 -1
  65. package/esm2022/variant-management/variant-management.component.mjs +2 -2
  66. package/esm2022/wizard-generator/base-wizard-generator.mjs +10 -10
  67. package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +33 -33
  68. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +2 -6
  69. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +53 -53
  70. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +7 -7
  72. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-platform-form.mjs +176 -183
  74. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  76. package/fesm2022/fundamental-ngx-platform-list.mjs +19 -22
  77. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  78. package/fesm2022/fundamental-ngx-platform-menu.mjs +48 -49
  79. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  80. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +1 -1
  81. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  82. package/fesm2022/fundamental-ngx-platform-panel.mjs +7 -7
  83. package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
  84. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +4 -4
  85. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  86. package/fesm2022/fundamental-ngx-platform-shared.mjs +6 -8
  87. package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
  88. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +12 -12
  89. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  90. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +26 -30
  91. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  92. package/fesm2022/fundamental-ngx-platform-table.mjs +18 -18
  93. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  94. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +8 -10
  95. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  96. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +1 -1
  97. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  98. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +42 -46
  99. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  100. package/form/form-group/form-field/form-field.component.d.ts +5 -7
  101. package/form/form-group/form-field-error/form-field-error-description.directive.d.ts +2 -2
  102. package/form/form-group/form-field-error/form-field-error-heading.directive.d.ts +2 -2
  103. package/form/form-group/form-field-error/form-field-error.directive.d.ts +2 -2
  104. package/form/form-group/form-field-group/form-field-group.component.d.ts +7 -9
  105. package/form/input-group/input-group.config.d.ts +2 -2
  106. package/form/multi-combobox/commons/base-multi-combobox.d.ts +33 -31
  107. package/form/multi-combobox/multi-combobox.config.d.ts +2 -2
  108. package/form/multi-input/base-multi-input.d.ts +33 -35
  109. package/form/multi-input/multi-input.config.d.ts +2 -2
  110. package/form/radio-group/radio/radio.component.d.ts +4 -4
  111. package/form/select/select.config.d.ts +2 -2
  112. package/form/step-input/base.step-input.d.ts +9 -14
  113. package/form/text-area/text-area.component.d.ts +4 -4
  114. package/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.d.ts +2 -2
  115. package/list/base-list-item.d.ts +5 -8
  116. package/list/list.component.d.ts +5 -5
  117. package/menu/menu-item.component.d.ts +8 -8
  118. package/menu/menu-trigger.directive.d.ts +6 -6
  119. package/package.json +4 -4
  120. package/panel/panel.config.d.ts +2 -2
  121. package/schematics/ng-add/index.js +2 -2
  122. package/schematics/ng-add/index.js.map +1 -1
  123. package/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.d.ts +6 -6
  124. package/shared/base.d.ts +4 -9
  125. package/shared/domain/data-source.d.ts +1 -1
  126. package/shared/form/base.input.d.ts +4 -4
  127. package/shared/form/collection-base.input.d.ts +2 -2
  128. package/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.d.ts +6 -6
  129. package/smart-filter-bar/interfaces/smart-filter-dynamic-form-item.d.ts +2 -2
  130. package/table/components/table-toolbar/table-toolbar.component.d.ts +2 -2
  131. package/table/components/table-view-settings-dialog/filtering/filters.component.d.ts +12 -12
  132. package/table/components/table-view-settings-dialog/table-view-settings-dialog.component.d.ts +2 -2
  133. package/table-helpers/directives/table-draggable.directive.d.ts +2 -2
  134. package/table-helpers/directives/table-view-settings-filter-custom.directive.d.ts +2 -2
  135. package/table-helpers/domain/table-data-provider.d.ts +5 -2
  136. package/table-helpers/domain/table-data-source.d.ts +7 -6
  137. package/table-helpers/models/table-row.model.d.ts +5 -5
  138. package/table-helpers/services/table-column-resize.service.d.ts +14 -14
  139. package/table-helpers/services/table-row.service.d.ts +18 -16
  140. package/table-helpers/services/table-scroll-dispatcher.service.d.ts +2 -2
  141. package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +11 -13
  142. package/variant-management/components/manage-variant-item/manage-variant-item.component.d.ts +2 -2
  143. package/wizard-generator/base-wizard-generator.d.ts +9 -9
  144. package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +12 -12
  145. package/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.d.ts +10 -14
@@ -68,12 +68,6 @@ export declare class ApprovalFlowNodeComponent implements OnInit, OnChanges, OnD
68
68
  get _lastBlank(): boolean;
69
69
  /** @hidden */
70
70
  get _isSelected(): boolean;
71
- /** @hidden */
72
- _objectStatus: ObjectStatus;
73
- /** @hidden */
74
- _showDueDateWarning: boolean;
75
- /** @hidden */
76
- _dueIn: number;
77
71
  /** Event emitted on add node button clicked, value is the placement for the new node */
78
72
  onAdd: EventEmitter<ApprovalFlowNodeTarget>;
79
73
  /** Event emitted on edit node button clicked */
@@ -91,6 +85,12 @@ export declare class ApprovalFlowNodeComponent implements OnInit, OnChanges, OnD
91
85
  /** @hidden */
92
86
  _gridListItem: GridListItemComponent<ApprovalGraphNode>;
93
87
  /** @hidden */
88
+ _objectStatus: ObjectStatus;
89
+ /** @hidden */
90
+ _showDueDateWarning: boolean;
91
+ /** @hidden */
92
+ _dueIn: number;
93
+ /** @hidden */
94
94
  readonly approvalFlowNodeId: string;
95
95
  /** @hidden */
96
96
  private _subscriptions;
@@ -116,18 +116,10 @@ export declare class ApprovalFlowComponent implements OnInit, OnChanges, OnDestr
116
116
  /** @hidden */
117
117
  _usersForWatchersList: ApprovalUser[];
118
118
  /** @hidden */
119
- private _selectedWatchers;
120
- /** @hidden */
121
119
  _selectedWatcherIds: ApprovalUser['id'][];
122
120
  /** @hidden */
123
121
  _messages: ApprovalFlowMessage[];
124
122
  /** @hidden */
125
- _displayUserFn: typeof displayUserFn;
126
- /** @hidden */
127
- _userValueFn: typeof userValueFn;
128
- /** @hidden */
129
- _trackByFn: typeof trackByFn;
130
- /** @hidden */
131
123
  _emptyApprovalFlowSpotConfig: {
132
124
  spot: {
133
125
  url: string;
@@ -140,9 +132,23 @@ export declare class ApprovalFlowComponent implements OnInit, OnChanges, OnDestr
140
132
  _multipleFinalNodes: boolean;
141
133
  /** @hidden */
142
134
  _dragDropInProgress: boolean;
135
+ /** Returns snapshot of the current and initial states of approval process */
136
+ get approvalProcess(): ApprovalProcess;
137
+ /** @hidden */
138
+ get _rtl(): boolean;
139
+ /** @hidden */
140
+ get _selectedNodes(): ApprovalGraphNode[];
141
+ /** @hidden */
142
+ _displayUserFn: typeof displayUserFn;
143
+ /** @hidden */
144
+ _userValueFn: typeof userValueFn;
145
+ /** @hidden */
146
+ _trackByFn: typeof trackByFn;
143
147
  /** @hidden */
144
148
  readonly approvalFlowUniqueId: string;
145
149
  /** @hidden */
150
+ private _selectedWatchers;
151
+ /** @hidden */
146
152
  private _editModeInitSub;
147
153
  /** @hidden */
148
154
  private _subscriptions;
@@ -150,12 +156,6 @@ export declare class ApprovalFlowComponent implements OnInit, OnChanges, OnDestr
150
156
  private _dataSourceChanged$;
151
157
  /** @hidden */
152
158
  constructor(_dialogService: DialogService, _cdr: ChangeDetectorRef, _injector: Injector, providers: Map<string, DataProvider<any>>, _rtlService: RtlService);
153
- /** Returns snapshot of the current and initial states of approval process */
154
- get approvalProcess(): ApprovalProcess;
155
- /** @hidden */
156
- get _rtl(): boolean;
157
- /** @hidden */
158
- get _selectedNodes(): ApprovalGraphNode[];
159
159
  /** @hidden */
160
160
  ngOnInit(): void;
161
161
  /** @hidden */
@@ -182,8 +182,6 @@ export declare class ApprovalFlowComponent implements OnInit, OnChanges, OnDestr
182
182
  nextSlide(dir?: number): void;
183
183
  /** @hidden */
184
184
  _setScrollPosition(pos: number): void;
185
- /** @hidden */
186
- private _moveColInView;
187
185
  /** @hidden Handle node keydown and focus other node based on which key is pressed */
188
186
  _onNodeKeyDown(event: KeyboardEvent, node: ApprovalGraphNode): void;
189
187
  /** @hidden Fetch all necessary data and enter edit mode */
@@ -206,9 +204,13 @@ export declare class ApprovalFlowComponent implements OnInit, OnChanges, OnDestr
206
204
  _deleteSelectedNodes(): void;
207
205
  /** @hidden Node drag move handler, used to check if need to highlight a drop zone rectangle */
208
206
  _onNodeDragMoved(node: ApprovalGraphNode): void;
207
+ /** @hidden */
208
+ _focusNode(node: ApprovalGraphNode): void;
209
209
  /** @hidden Node drop handler */
210
210
  _onNodeDrop(nodeToDrop: ApprovalGraphNode, drag: CdkDrag): void;
211
211
  /** @hidden */
212
+ private _moveColInView;
213
+ /** @hidden */
212
214
  private _finishDragDropProcess;
213
215
  /** @hidden */
214
216
  private _showMessage;
@@ -216,8 +218,6 @@ export declare class ApprovalFlowComponent implements OnInit, OnChanges, OnDestr
216
218
  private _buildView;
217
219
  /** @hidden Listen window resize and distribute cards on column change */
218
220
  private _listenOnResize;
219
- /** @hidden */
220
- _focusNode(node: ApprovalGraphNode): void;
221
221
  /** @hidden Update node object in local approval process data structure */
222
222
  private _updateNode;
223
223
  /** @hidden Delete node object in local approval process data structure */
@@ -21,12 +21,12 @@ export declare class DynamicPageConfig extends PlatformConfig {
21
21
  * aria label for pin button when the Panel should be unpinned
22
22
  */
23
23
  unpinLabel: string;
24
+ /** @hidden */
25
+ constructor(platformConfig: PlatformConfig);
24
26
  /**
25
27
  * Create Provider factory function
26
28
  */
27
29
  static createProviderFactory(obj: Partial<DynamicPageConfig>): (platformConfig: PlatformConfig) => DynamicPageConfig;
28
- /** @hidden */
29
- constructor(platformConfig: PlatformConfig);
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicPageConfig, never>;
31
31
  static ɵprov: i0.ɵɵInjectableDeclaration<DynamicPageConfig>;
32
32
  }
@@ -105,10 +105,6 @@ export class ApprovalFlowNodeComponent {
105
105
  * Used to render appropriate vertical line after (dashed/solid)
106
106
  */
107
107
  this.allNodesInColumnApproved = false;
108
- /** @hidden */
109
- this._showDueDateWarning = false;
110
- /** @hidden */
111
- this._dueIn = 0;
112
108
  /** Event emitted on add node button clicked, value is the placement for the new node */
113
109
  this.onAdd = new EventEmitter();
114
110
  /** Event emitted on edit node button clicked */
@@ -116,6 +112,10 @@ export class ApprovalFlowNodeComponent {
116
112
  /** Event emitted on delete node button clicked */
117
113
  this.onDelete = new EventEmitter();
118
114
  /** @hidden */
115
+ this._showDueDateWarning = false;
116
+ /** @hidden */
117
+ this._dueIn = 0;
118
+ /** @hidden */
119
119
  this.approvalFlowNodeId = 'fdp-approval-flow-node-' + defaultId++;
120
120
  /** @hidden */
121
121
  this._subscriptions = new Subscription();
@@ -342,4 +342,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
342
342
  type: ContentChild,
343
343
  args: [GridListItemComponent]
344
344
  }] } });
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDdkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUs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QkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsaURBQWlEO2dCQU8xRCxpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMsZ0RBQWdEO2dCQU96RCxVQUFVO3NCQURiLFdBQVc7dUJBQUMsMENBQTBDOztRQXFCdkQsK0RBQStEO1FBQy9ELEtBQUs7c0JBRkosTUFBTTs7UUFNUCwrREFBK0Q7UUFDL0QsTUFBTTtzQkFGTCxNQUFNOztRQU1QLCtEQUErRDtRQUMvRCxRQUFRO3NCQUZQLE1BQU07Z0JBTVAsS0FBSztzQkFESixTQUFTO3VCQUFDLGFBQWE7Z0JBS3hCLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBSy9CLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixVQUFVO3NCQURULFlBQVk7dUJBQUMsNkJBQTZCO2dCQUszQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgR3JpZExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2dyaWQtbGlzdCc7XG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21lbnUnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdHVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL29iamVjdC1zdGF0dXMnO1xuXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7XG4gICAgTWVudUludGVyYWN0aXZlQ29tcG9uZW50LFxuICAgIE1lbnVJdGVtQ29tcG9uZW50LFxuICAgIE1lbnVUaXRsZURpcmVjdGl2ZSxcbiAgICBNZW51VHJpZ2dlckRpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVudSc7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgT2JqZWN0U3RhdHVzQ29tcG9uZW50LCBQbGF0Zm9ybU9iamVjdFN0YXR1c1RleHREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL29iamVjdC1zdGF0dXMnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93Tm9kZVRhcmdldCB9IGZyb20gJy4uL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUvYXBwcm92YWwtZmxvdy1hZGQtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOb2RlQXBwcm92ZWQsIGlzTm9kZVN0YXJ0ZWQgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IEFwcHJvdmFsR3JhcGhOb2RlLCBBcHByb3ZhbEdyYXBoTm9kZU1ldGFkYXRhLCBBcHByb3ZhbFN0YXR1cyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93RHJvcFpvbmVEaXJlY3RpdmUgfSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctZHJvcC16b25lLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IE5PREVfU1RBVFVTX0NMQVNTX01BUCA9IHtcbiAgICBhcHByb3ZlZDogJ3Bvc2l0aXZlJyxcbiAgICByZWplY3RlZDogJ25lZ2F0aXZlJyxcbiAgICAnaW4gcHJvZ3Jlc3MnOiAnaW5mb3JtYXRpdmUnLFxuICAgICdub3Qgc3RhcnRlZCc6ICcnXG59O1xuXG5jb25zdCBEQVlfSU5fTUlMTElTRUNPTkRTID0gMTAwMCAqIDYwICogNjAgKiAyNDtcblxubGV0IGRlZmF1bHRJZCA9IDA7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIEFwcHJvdmFsRmxvd05vZGUgY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjQwLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtYXBwcm92YWwtZmxvdy1ub2RlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZHAtYXBwcm92YWwtZmxvdy1ub2RlJyxcbiAgICAgICAgJ1tjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1maXJzdC1yb290XSc6ICdtZXRhPy5maXJzdE9mTXVsdGlwbGVSb290Tm9kZXMnLFxuICAgICAgICAnW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWZpcnN0LWZpbmFsXSc6ICdtZXRhPy5maXJzdE9mTXVsdGlwbGVGaW5hbE5vZGVzJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgQ29udGVudERlbnNpdHlEaXJlY3RpdmUsXG4gICAgICAgIE1lbnVUcmlnZ2VyRGlyZWN0aXZlLFxuICAgICAgICBPYmplY3RTdGF0dXNDb21wb25lbnQsXG4gICAgICAgIFBsYXRmb3JtT2JqZWN0U3RhdHVzVGV4dERpcmVjdGl2ZSxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQXBwcm92YWxGbG93RHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgICAgIE1lbnVDb21wb25lbnQsXG4gICAgICAgIE1lbnVJdGVtQ29tcG9uZW50LFxuICAgICAgICBNZW51SW50ZXJhY3RpdmVDb21wb25lbnQsXG4gICAgICAgIE1lbnVUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIEFwcHJvdmFsIGZsb3cgZ3JhcGggbm9kZSAqL1xuICAgIEBJbnB1dCgpIG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlO1xuXG4gICAgLyoqIE5vZGUgbWV0YWRhdGEgKi9cbiAgICBASW5wdXQoKSBtZXRhOiBBcHByb3ZhbEdyYXBoTm9kZU1ldGFkYXRhO1xuXG4gICAgLyoqIFdoZXRoZXIgbm9kZSBlbGVtZW50IGhhcyBhcnJvdyBvbiB0aGUgbGVmdCBzaWRlIHBvaW50aW5nIHRvIHRoZSBub2RlICovXG4gICAgQElucHV0KCkgcmVuZGVyQXJyb3cgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgZHVlIGRhdGUgd2FybmluZyBpbiBzdGF0dXMgKi9cbiAgICBASW5wdXQoKSBjaGVja0R1ZURhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgZHVlIGRhdGUgd2hlbiBzdGF0dXMgY2hhbmdlcyB0byBgd2FybmluZ2Agd2l0aCB0ZXh0ICdEdWUgaW4gWCBkYXlzJy5cbiAgICAgKiAgTm90IHVzZWQgaWYgJ2NoZWNrRHVlRGF0ZScgZXF1YWxzIGZhbHNlICovXG4gICAgQElucHV0KCkgZHVlRGF0ZVRocmVzaG9sZCA9IDc7XG5cbiAgICAvKiogV2hldGhlciBub2RlcyBpbiBjb2x1bW4gaW4gd2hpY2ggY3VycmVudCBub2RlIHBsYWNlZCBhcmUgYXBwcm92ZWRcbiAgICAgKiAgVXNlZCB0byByZW5kZXIgYXBwcm9wcmlhdGUgdmVydGljYWwgbGluZSBhZnRlciAoZGFzaGVkL3NvbGlkKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFsbE5vZGVzSW5Db2x1bW5BcHByb3ZlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBhcHAgY3VzdG9tIHN0YXR1c2VzICovXG4gICAgQElucHV0KClcbiAgICBhcHByb3ZhbFN0YXR1c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEN1c3RvbSBzdGF0dXMgdG8gY29sb3IgbWFwcGluZyAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1c0NvbG9yTWFwcGluZzogUmVjb3JkPEFwcHJvdmFsU3RhdHVzLCBPYmplY3RTdGF0dXM+O1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG5vZGUgaXMgaW4gZWRpdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWVkaXQtbW9kZScpXG4gICAgaXNFZGl0OiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG5vZGUgYWZ0ZXIgaXMgYmxhbmsgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tbmV4dC1ibGFuaycpXG4gICAgaXNOZXh0Tm9kZUJsYW5rOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWJsYW5rJylcbiAgICBnZXQgX2JsYW5rKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLm5vZGU/LmJsYW5rO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1zcGFjZScpXG4gICAgZ2V0IF9zcGFjZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ub2RlPy5zcGFjZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tcm9vdCcpXG4gICAgZ2V0IF9pc1Jvb3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGE/LmlzUm9vdDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tZmluYWwnKVxuICAgIGdldCBfaXNGaW5hbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YT8uaXNGaW5hbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tbGluZS1iZWZvcmUnKVxuICAgIGdldCBfcmVuZGVyTGluZUJlZm9yZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vZGU/LmJsYW5rO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1saW5lLWFmdGVyJylcbiAgICBnZXQgX3JlbmRlckxpbmVBZnRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vZGU/LmJsYW5rIHx8IHRoaXMuX2lzRmluYWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWFwcHJvdmVkJylcbiAgICBnZXQgX2lzQXBwcm92ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUgJiYgaXNOb2RlQXBwcm92ZWQodGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tcGFyZW50LWFwcHJvdmVkJylcbiAgICBnZXQgX2lzUGFyZW50QXBwcm92ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5tZXRhPy5wYXJlbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMubWV0YT8ucm9vdE5vZGVzQXBwcm92ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tZXRhLnBhcmVudHMuZXZlcnkoKG5vZGUpID0+IGlzTm9kZUFwcHJvdmVkKG5vZGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tc2VsZWN0ZWQnKVxuICAgIGdldCBfaXNOb2RlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRWRpdCAmJiB0aGlzLl9pc1NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1wYXJhbGxlbC1zdGFydCcpXG4gICAgZ2V0IF9pc1BhcmFsbGVsU3RhcnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMubWV0YT8ucGFyYWxsZWxTdGFydCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLXBhcmFsbGVsLWVuZCcpXG4gICAgZ2V0IF9pc1BhcmFsbGVsRW5kKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLm1ldGE/LnBhcmFsbGVsRW5kKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tZmlyc3QtaW4tcGFyYWxsZWwnKVxuICAgIGdldCBfaXNGaXJzdEluUGFyYWxsZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMubWV0YT8uaXNGaXJzdEluUGFyYWxsZWwpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1sYXN0LWluLXBhcmFsbGVsJylcbiAgICBnZXQgX2lzTGFzdEluUGFyYWxsZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMubWV0YT8uaXNMYXN0SW5QYXJhbGxlbCk7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG5vZGUgaXMgYmxhbmsgYW5kIHRoZSBmaW5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tbGFzdC1ibGFuaycpXG4gICAgZ2V0IF9sYXN0QmxhbmsoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibGFuayAmJiB0aGlzLm5vZGUudGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2lzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubm9kZS5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vYmplY3RTdGF0dXM6IE9iamVjdFN0YXR1cztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dEdWVEYXRlV2FybmluZyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZHVlSW4gPSAwO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYWRkIG5vZGUgYnV0dG9uIGNsaWNrZWQsIHZhbHVlIGlzIHRoZSBwbGFjZW1lbnQgZm9yIHRoZSBuZXcgbm9kZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gZWRpdCBub2RlIGJ1dHRvbiBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25FZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gZGVsZXRlIG5vZGUgYnV0dG9uIGNsaWNrZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChNZW51Q29tcG9uZW50KVxuICAgIF9tZW51OiBNZW51Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdvdmVyZmxvd01lbnVCdXR0b24nKVxuICAgIF9vdmVyZmxvd01lbnVCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ25vZGVDb250ZW50JylcbiAgICBfbm9kZUNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQXBwcm92YWxGbG93RHJvcFpvbmVEaXJlY3RpdmUpXG4gICAgX2Ryb3Bab25lczogUXVlcnlMaXN0PEFwcHJvdmFsRmxvd0Ryb3Bab25lRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Db21wb25lbnQpXG4gICAgX2dyaWRMaXN0SXRlbTogR3JpZExpc3RJdGVtQ29tcG9uZW50PEFwcHJvdmFsR3JhcGhOb2RlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgYXBwcm92YWxGbG93Tm9kZUlkID0gJ2ZkcC1hcHByb3ZhbC1mbG93LW5vZGUtJyArIGRlZmF1bHRJZCsrO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9pc05vdFN0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhaXNOb2RlU3RhcnRlZCh0aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9pc0VkaXRBY3Rpb25zQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlLnN0YXR1cyA9PT0gJ2FwcHJvdmVkJyB8fCB0aGlzLm5vZGUuc3RhdHVzID09PSAncmVqZWN0ZWQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9hY3RpdmVEcm9wWm9uZXMoKTogQXBwcm92YWxGbG93RHJvcFpvbmVEaXJlY3RpdmVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wWm9uZXMuZmlsdGVyKCh6KSA9PiB6LmFjdGl2ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2lzQW55RHJvcFpvbmVBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcm9wWm9uZXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaXNWZXJ0aWNhbExpbmVCZWZvcmVTb2xpZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLm1ldGE/LnBhcmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLm1ldGE/LmlzVmVydGljYWxMaW5lQmVmb3JlU29saWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tZXRhLnBhcmVudHMuZXZlcnkoKHBhcmVudE5vZGUpID0+IGlzTm9kZUFwcHJvdmVkKHBhcmVudE5vZGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaXNWZXJ0aWNhbExpbmVBZnRlclNvbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMubm9kZT8udGFyZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMubWV0YT8uaXNWZXJ0aWNhbExpbmVBZnRlclNvbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWxMaW5lQmVmb3JlU29saWQgJiYgdGhpcy5hbGxOb2Rlc0luQ29sdW1uQXBwcm92ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dBZGRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRWRpdCAmJiAhdGhpcy5fYmxhbmsgJiYgIXRoaXMuX3NwYWNlICYmICF0aGlzLm5vZGU/LmRpc2FibGVBY3Rpb25zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zaG93QWZ0ZXJBbGxBZGRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRWRpdCAmJiAhdGhpcy5fc3BhY2UgJiYgIXRoaXMubm9kZT8uZGlzYWJsZUFjdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZHJvcFpvbmVQYXJ0aWFsKHBsYWNlbWVudDogQXBwcm92YWxGbG93Tm9kZVRhcmdldCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKCF0aGlzLl9ibGFuayAmJiAoIXRoaXMuaXNOZXh0Tm9kZUJsYW5rIHx8IHBsYWNlbWVudCA9PT0gJ2JlZm9yZScpKSB8fFxuICAgICAgICAgICAgKHRoaXMuX2xhc3RCbGFuayAmJiBwbGFjZW1lbnQgPT09ICdhZnRlci1hbGwnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoZWNrTm9kZVN0YXR1cygpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hlY2tOb2RlU3RhdHVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uTWVudU9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21lbnUucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncmlkTGlzdEl0ZW0/LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RlYWN0aXZhdGVEcm9wWm9uZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Ryb3Bab25lcy5mb3JFYWNoKChkcm9wWm9uZSkgPT4gKGRyb3Bab25lLmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tJZk5vZGVEcmFnZ2VkSW5Ecm9wWm9uZShub2RlUmVjdDogRE9NUmVjdCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kcm9wWm9uZXMuZm9yRWFjaCgoZHJvcFpvbmUpID0+IGRyb3Bab25lLl9jaGVja0lmTm9kZURyYWdnZWRJbkRyb3Bab25lKG5vZGVSZWN0KSk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja05vZGVTdGF0dXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5ub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jaGVja0R1ZURhdGUgJiYgdGhpcy5ub2RlLmR1ZURhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGR1ZVRocmVzaG9sZCA9IE51bWJlcihuZXcgRGF0ZSh0aGlzLm5vZGUuZHVlRGF0ZSkpIC0gdGhpcy5kdWVEYXRlVGhyZXNob2xkICogREFZX0lOX01JTExJU0VDT05EUztcbiAgICAgICAgICAgIGNvbnN0IG5vd0FuZER1ZURpZmYgPSBEYXRlLm5vdygpIC0gZHVlVGhyZXNob2xkO1xuXG4gICAgICAgICAgICB0aGlzLl9kdWVJbiA9IE1hdGgucm91bmQobm93QW5kRHVlRGlmZiAvIERBWV9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgICAgICAgdGhpcy5fc2hvd0R1ZURhdGVXYXJuaW5nID0gIWlzTm9kZUFwcHJvdmVkKHRoaXMubm9kZSkgJiYgZHVlVGhyZXNob2xkIDwgRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRoaXMuX29iamVjdFN0YXR1cyA9IHRoaXMuX3Nob3dEdWVEYXRlV2FybmluZyA/ICdjcml0aWNhbCcgOiB0aGlzLl9nZXROb2RlU3RhdHVzQ2xhc3MoKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb2JqZWN0U3RhdHVzID0gdGhpcy5fZ2V0Tm9kZVN0YXR1c0NsYXNzKCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROb2RlU3RhdHVzQ2xhc3MoKTogT2JqZWN0U3RhdHVzIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29sb3JNYXBwaW5nXG4gICAgICAgICAgICAgICAgPyB0aGlzLnN0YXR1c0NvbG9yTWFwcGluZ1t0aGlzLm5vZGUuc3RhdHVzXVxuICAgICAgICAgICAgICAgIDogTk9ERV9TVEFUVVNfQ0xBU1NfTUFQW3RoaXMubm9kZS5zdGF0dXNdXG4gICAgICAgICkgYXMgT2JqZWN0U3RhdHVzO1xuICAgIH1cbn1cbiIsIkBpZiAobWV0YT8ucmVuZGVyVmVydGljYWxMaW5lQmVmb3JlKSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX3ZlcnRpY2FsLWxpbmUtYmVmb3JlXCJcbiAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX3ZlcnRpY2FsLWxpbmUtYmVmb3JlLXNvbGlkXT1cIl9pc1ZlcnRpY2FsTGluZUJlZm9yZVNvbGlkXCJcbiAgICA+PC9kaXY+XG59XG5AaWYgKG1ldGE/LnJlbmRlclZlcnRpY2FsTGluZUFmdGVyKSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX3ZlcnRpY2FsLWxpbmUtYWZ0ZXJcIlxuICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fdmVydGljYWwtbGluZS1hZnRlci1zb2xpZF09XCJfaXNWZXJ0aWNhbExpbmVBZnRlclNvbGlkXCJcbiAgICA+PC9kaXY+XG59XG5AaWYgKCFfYmxhbmsgJiYgIV9zcGFjZSkge1xuICAgIEBpZiAocmVuZGVyQXJyb3cpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2Fycm93XCI+PC9kaXY+XG4gICAgfVxuICAgIEBpZiAoX2lzUm9vdCAmJiBtZXRhPy5ub2RlSW5kZXggPT09IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2Nhcm91c2VsLXN0YXJ0LW1hcmtlclwiPjwvZGl2PlxuICAgIH1cbiAgICBAaWYgKF9pc0ZpbmFsICYmIG1ldGE/Lm5vZGVJbmRleCA9PT0gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fY2Fyb3VzZWwtZW5kLW1hcmtlclwiPjwvZGl2PlxuICAgIH1cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG59XG48bmctdGVtcGxhdGUgI292ZXJmbG93TWVudUJ1dHRvbj5cbiAgICA8IS0tIEFjdHVhbGx5IGp1c3QgdGhlIGZkLWdyaWQtaXRlbSBhY3Rpb24gYnV0dG9uIGJ1dCB3aXRoIHNvbWUgaGFyZGNvZGUgdG8gYmUgdXNlZCBhcyBtZW51IHRyaWdnZXIgLS0+XG4gICAgQGlmICghbm9kZT8uZGlzYWJsZUFjdGlvbnMpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1ub2RlX19tZW51LWJ1dHRvblwiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBnbHlwaD1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZU1lbnVCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBmZENvbXBhY3RcbiAgICAgICAgICAgIFtmZE1lbnVUcmlnZ2VyXT1cIm1lbnVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9pc0VkaXRBY3Rpb25zQXZhaWxhYmxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm9kZUNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2luZm9cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1ub2RlX19uYW1lXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19uYW1lLS1tZW1iZXJzLWNvdW50XT1cIm5vZGUuYXBwcm92ZXJzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgW2lkXT1cImFwcHJvdmFsRmxvd05vZGVJZFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAobm9kZS5hcHByb3ZlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAge3sgbm9kZS5hcHByb3ZlcnNbMF0ubmFtZSB9fVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5vZGVNZW1iZXJzQ291bnQnIHwgZmRUcmFuc2xhdGU6IHsgY291bnQ6IG5vZGUuYXBwcm92ZXJzLmxlbmd0aCB9IH19XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIEBpZiAoIW5vZGUudmFyaW91c1RlYW1zKSB7XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHByb3ZlcnMubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBub2RlLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGUuYXBwcm92ZXJzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5vZGUuYXBwcm92ZXJzWzBdLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5vZGVWYXJpb3VzVGVhbXMnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdmFyaW91c1RlYW1zPiB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZVZhcmlvdXNUZWFtcycgfCBmZFRyYW5zbGF0ZSB9fSA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZkcC1vYmplY3Qtc3RhdHVzIFtzdGF0dXNdPVwiX29iamVjdFN0YXR1c1wiIFtpbnZlcnRlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRwT2JqZWN0U3RhdHVzVGV4dD5cbiAgICAgICAgICAgICAgICBAaWYgKGFwcHJvdmFsU3RhdHVzVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICghY2hlY2tEdWVEYXRlIHx8ICFfc2hvd0R1ZURhdGVXYXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFwcHJvdmFsU3RhdHVzVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXBwcm92YWxTdGF0dXNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICghY2hlY2tEdWVEYXRlIHx8ICFfc2hvd0R1ZURhdGVXYXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChub2RlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnYXBwcm92ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5zdGF0dXNBcHByb3ZlZCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3JlamVjdGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cuc3RhdHVzUmVqZWN0ZWQnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdpbiBwcm9ncmVzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LnN0YXR1c0luUHJvZ3Jlc3MnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdub3Qgc3RhcnRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LnN0YXR1c05vdFN0YXJ0ZWQnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChjaGVja0R1ZURhdGUgJiYgX3Nob3dEdWVEYXRlV2FybmluZykge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKF9kdWVJbiA9PT0gZHVlRGF0ZVRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5vZGVTdGF0dXNEdWVUb2RheScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoX2R1ZUluIDwgZHVlRGF0ZVRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZVN0YXR1c0R1ZUluWERheXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGU6IHsgY291bnQ6IGR1ZURhdGVUaHJlc2hvbGQgLSBfZHVlSW4gfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKF9kdWVJbiA+IGR1ZURhdGVUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5vZGVTdGF0dXNYRGF5c092ZXJkdWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGU6IHsgY291bnQ6IF9kdWVJbiAtIGR1ZURhdGVUaHJlc2hvbGQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmRwLW9iamVjdC1zdGF0dXM+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuQGlmIChfc2hvd0FkZEJ1dHRvbiAmJiBtZXRhPy5jYW5BZGROb2RlQmVmb3JlQWxsICYmICFub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkQmVmb3JlKSB7XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkZE5vZGVCdXR0b25cIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBwbGFjZW1lbnQ6ICdiZWZvcmUtYWxsJyB9XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbn1cbkBpZiAoX3Nob3dBZGRCdXR0b24gJiYgbWV0YT8uY2FuQWRkTm9kZUJlZm9yZSAmJiAhbm9kZT8uYWN0aW9uc0NvbmZpZz8uZGlzYWJsZUFkZEJlZm9yZSkge1xuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGROb2RlQnV0dG9uXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcGxhY2VtZW50OiAnYmVmb3JlJyB9XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbkBpZiAoXG4gICAgX3Nob3dBZGRCdXR0b24gJiYgbWV0YT8uY2FuQWRkTm9kZUFmdGVyICYmIG1ldGE/LnJlbmRlckFkZE5vZGVBZnRlckJ1dHRvbiAmJiAhbm9kZT8uYWN0aW9uc0NvbmZpZz8uZGlzYWJsZUFkZEFmdGVyXG4pIHtcbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWRkTm9kZUJ1dHRvblwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHBsYWNlbWVudDogJ2FmdGVyJyB9XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbkBpZiAoXG4gICAgX3Nob3dBZnRlckFsbEFkZEJ1dHRvbiAmJlxuICAgIG1ldGE/LmNhbkFkZE5vZGVBZnRlckFsbCAmJlxuICAgIG1ldGE/LnJlbmRlckFkZE5vZGVBZnRlckJ1dHRvbiAmJlxuICAgICFub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkQWZ0ZXJcbikge1xuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGROb2RlQnV0dG9uXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcGxhY2VtZW50OiAnYWZ0ZXItYWxsJyB9XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbn1cbjxuZy10ZW1wbGF0ZSAjYWRkTm9kZUJ1dHRvbiBsZXQtcGxhY2VtZW50PVwicGxhY2VtZW50XCI+XG4gICAgQGlmIChub2RlLnN0YXR1cyAhPT0gJ2FwcHJvdmVkJykge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGdseXBoPVwiYWRkXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuYWRkTm9kZUJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1ub2RlX19hZGRcIlxuICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2FkZC0tYmxhbmtdPVwidGhpcy5fYmxhbmtcIlxuICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2FkZC0tYmVmb3JlXT1cIlxuICAgICAgICAgICAgICAgICF0aGlzLl9ibGFuayAmJiAocGxhY2VtZW50ID09PSAnYmVmb3JlJyB8fCBwbGFjZW1lbnQgPT09ICdiZWZvcmUtYWxsJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fYWRkLS1iZWZvcmUtYWxsXT1cIiF0aGlzLl9ibGFuayAmJiBwbGFjZW1lbnQgPT09ICdiZWZvcmUtYWxsJ1wiXG4gICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fYWRkLS1hZnRlcl09XCJcbiAgICAgICAgICAgICAgICAhdGhpcy5fYmxhbmsgJiYgKHBsYWNlbWVudCA9PT0gJ2FmdGVyJyB8fCBwbGFjZW1lbnQgPT09ICdhZnRlci1hbGwnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19hZGQtLWFmdGVyLWFsbF09XCJwbGFjZW1lbnQgPT09ICdhZnRlci1hbGwnXCJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cImRyb3Bab25lLmFjdGl2ZSA/ICdoaWRkZW4nIDogJydcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkLmVtaXQocGxhY2VtZW50KVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICB9XG4gICAgPGRpdlxuICAgICAgICAjZHJvcFpvbmU9XCJmZHAtYXBwcm92YWwtZmxvdy1kcm9wLXpvbmVcIlxuICAgICAgICBmZHAtYXBwcm92YWwtZmxvdy1kcm9wLXpvbmVcbiAgICAgICAgW3BsYWNlbWVudF09XCJwbGFjZW1lbnRcIlxuICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2Ryb3Atem9uZVwiXG4gICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19kcm9wLXpvbmUtLWFjdGl2ZV09XCJkcm9wWm9uZS5hY3RpdmVcIlxuICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fZHJvcC16b25lLS1ibGFua109XCJpc05leHROb2RlQmxhbmtcIlxuICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fZHJvcC16b25lLS1wYXJ0aWFsXT1cIl9kcm9wWm9uZVBhcnRpYWwocGxhY2VtZW50KVwiXG4gICAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxmZC1tZW51ICNtZW51IGZkQ29udGVudERlbnNpdHkgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiIChpc09wZW5DaGFuZ2UpPVwiX29uTWVudU9wZW4oKVwiPlxuICAgIEBpZiAobWV0YT8uY2FuQWRkTm9kZUJlZm9yZSAmJiAhdGhpcy5ub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkQmVmb3JlKSB7XG4gICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm1lbnUuY2xvc2UoKTsgb25BZGQuZW1pdCgnYmVmb3JlJylcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlQWN0aW9uQWRkQXBwcm92ZXJzQmVmb3JlJyB8IGZkVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAobWV0YT8uY2FuQWRkTm9kZUFmdGVyICYmICF0aGlzLm5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRBZnRlcikge1xuICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJtZW51LmNsb3NlKCk7IG9uQWRkLmVtaXQoJ2FmdGVyJylcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlQWN0aW9uQWRkQXBwcm92ZXJzQWZ0ZXInIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICB9XG4gICAgQGlmIChtZXRhPy5jYW5BZGRQYXJhbGxlbCAmJiAhdGhpcy5ub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkUGFyYWxsZWwpIHtcbiAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwibWVudS5jbG9zZSgpOyBvbkFkZC5lbWl0KCdwYXJhbGxlbCcpXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLW1lbnUtaW50ZXJhY3RpdmU+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZUFjdGlvbkFkZEFwcHJvdmVyc1BhcmFsbGVsJyB8IGZkVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoX2lzTm90U3RhcnRlZCAmJiAhdGhpcy5ub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlRWRpdCkge1xuICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJtZW51LmNsb3NlKCk7IG9uRWRpdC5lbWl0KClcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPiB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZUFjdGlvbkVkaXRBcHByb3ZlcicgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCF0aGlzLm5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVSZW1vdmUpIHtcbiAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwibWVudS5jbG9zZSgpOyBvbkRlbGV0ZS5lbWl0KClcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPiB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZUFjdGlvblJlbW92ZScgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgIH1cbjwvZmQtbWVudT5cbiJdfQ==
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDdkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUs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QkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsaURBQWlEO2dCQU8xRCxpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMsZ0RBQWdEO2dCQU96RCxVQUFVO3NCQURiLFdBQVc7dUJBQUMsMENBQTBDOztRQVl2RCwrREFBK0Q7UUFDL0QsS0FBSztzQkFGSixNQUFNOztRQU1QLCtEQUErRDtRQUMvRCxNQUFNO3NCQUZMLE1BQU07O1FBTVAsK0RBQStEO1FBQy9ELFFBQVE7c0JBRlAsTUFBTTtnQkFNUCxLQUFLO3NCQURKLFNBQVM7dUJBQUMsYUFBYTtnQkFLeEIsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLG9CQUFvQjtnQkFLL0IsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGFBQWE7Z0JBS3hCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBSzNDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBHcmlkTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZ3JpZC1saXN0JztcbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVudSc7XG5pbXBvcnQgeyBPYmplY3RTdGF0dXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvb2JqZWN0LXN0YXR1cyc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHtcbiAgICBNZW51SW50ZXJhY3RpdmVDb21wb25lbnQsXG4gICAgTWVudUl0ZW1Db21wb25lbnQsXG4gICAgTWVudVRpdGxlRGlyZWN0aXZlLFxuICAgIE1lbnVUcmlnZ2VyRGlyZWN0aXZlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tZW51JztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBPYmplY3RTdGF0dXNDb21wb25lbnQsIFBsYXRmb3JtT2JqZWN0U3RhdHVzVGV4dERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vb2JqZWN0LXN0YXR1cyc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0IH0gZnJvbSAnLi4vYXBwcm92YWwtZmxvdy1hZGQtbm9kZS9hcHByb3ZhbC1mbG93LWFkZC1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc05vZGVBcHByb3ZlZCwgaXNOb2RlU3RhcnRlZCB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgQXBwcm92YWxHcmFwaE5vZGUsIEFwcHJvdmFsR3JhcGhOb2RlTWV0YWRhdGEsIEFwcHJvdmFsU3RhdHVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dEcm9wWm9uZURpcmVjdGl2ZSB9IGZyb20gJy4vYXBwcm92YWwtZmxvdy1kcm9wLXpvbmUuZGlyZWN0aXZlJztcblxuY29uc3QgTk9ERV9TVEFUVVNfQ0xBU1NfTUFQID0ge1xuICAgIGFwcHJvdmVkOiAncG9zaXRpdmUnLFxuICAgIHJlamVjdGVkOiAnbmVnYXRpdmUnLFxuICAgICdpbiBwcm9ncmVzcyc6ICdpbmZvcm1hdGl2ZScsXG4gICAgJ25vdCBzdGFydGVkJzogJydcbn07XG5cbmNvbnN0IERBWV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuXG5sZXQgZGVmYXVsdElkID0gMDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogQXBwcm92YWxGbG93Tm9kZSBjb21wb25lbnQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNDAuMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1hcHByb3ZhbC1mbG93LW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1mbG93LW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9hcHByb3ZhbC1mbG93LW5vZGUuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC1hcHByb3ZhbC1mbG93LW5vZGUnLFxuICAgICAgICAnW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWZpcnN0LXJvb3RdJzogJ21ldGE/LmZpcnN0T2ZNdWx0aXBsZVJvb3ROb2RlcycsXG4gICAgICAgICdbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tZmlyc3QtZmluYWxdJzogJ21ldGE/LmZpcnN0T2ZNdWx0aXBsZUZpbmFsTm9kZXMnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSxcbiAgICAgICAgTWVudVRyaWdnZXJEaXJlY3RpdmUsXG4gICAgICAgIE9iamVjdFN0YXR1c0NvbXBvbmVudCxcbiAgICAgICAgUGxhdGZvcm1PYmplY3RTdGF0dXNUZXh0RGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBBcHByb3ZhbEZsb3dEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICAgICAgTWVudUNvbXBvbmVudCxcbiAgICAgICAgTWVudUl0ZW1Db21wb25lbnQsXG4gICAgICAgIE1lbnVJbnRlcmFjdGl2ZUNvbXBvbmVudCxcbiAgICAgICAgTWVudVRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogQXBwcm92YWwgZmxvdyBncmFwaCBub2RlICovXG4gICAgQElucHV0KCkgbm9kZTogQXBwcm92YWxHcmFwaE5vZGU7XG5cbiAgICAvKiogTm9kZSBtZXRhZGF0YSAqL1xuICAgIEBJbnB1dCgpIG1ldGE6IEFwcHJvdmFsR3JhcGhOb2RlTWV0YWRhdGE7XG5cbiAgICAvKiogV2hldGhlciBub2RlIGVsZW1lbnQgaGFzIGFycm93IG9uIHRoZSBsZWZ0IHNpZGUgcG9pbnRpbmcgdG8gdGhlIG5vZGUgKi9cbiAgICBASW5wdXQoKSByZW5kZXJBcnJvdyA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBkdWUgZGF0ZSB3YXJuaW5nIGluIHN0YXR1cyAqL1xuICAgIEBJbnB1dCgpIGNoZWNrRHVlRGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIE51bWJlciBvZiBkYXlzIGJlZm9yZSBkdWUgZGF0ZSB3aGVuIHN0YXR1cyBjaGFuZ2VzIHRvIGB3YXJuaW5nYCB3aXRoIHRleHQgJ0R1ZSBpbiBYIGRheXMnLlxuICAgICAqICBOb3QgdXNlZCBpZiAnY2hlY2tEdWVEYXRlJyBlcXVhbHMgZmFsc2UgKi9cbiAgICBASW5wdXQoKSBkdWVEYXRlVGhyZXNob2xkID0gNztcblxuICAgIC8qKiBXaGV0aGVyIG5vZGVzIGluIGNvbHVtbiBpbiB3aGljaCBjdXJyZW50IG5vZGUgcGxhY2VkIGFyZSBhcHByb3ZlZFxuICAgICAqICBVc2VkIHRvIHJlbmRlciBhcHByb3ByaWF0ZSB2ZXJ0aWNhbCBsaW5lIGFmdGVyIChkYXNoZWQvc29saWQpXG4gICAgICovXG4gICAgQElucHV0KCkgYWxsTm9kZXNJbkNvbHVtbkFwcHJvdmVkID0gZmFsc2U7XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIGFwcCBjdXN0b20gc3RhdHVzZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcHJvdmFsU3RhdHVzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQ3VzdG9tIHN0YXR1cyB0byBjb2xvciBtYXBwaW5nICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdHVzQ29sb3JNYXBwaW5nOiBSZWNvcmQ8QXBwcm92YWxTdGF0dXMsIE9iamVjdFN0YXR1cz47XG5cbiAgICAvKiogV2hldGhlciB0aGUgbm9kZSBpcyBpbiBlZGl0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tZWRpdC1tb2RlJylcbiAgICBpc0VkaXQ6IGJvb2xlYW47XG5cbiAgICAvKiogV2hldGhlciB0aGUgbm9kZSBhZnRlciBpcyBibGFuayAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1uZXh0LWJsYW5rJylcbiAgICBpc05leHROb2RlQmxhbms6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tYmxhbmsnKVxuICAgIGdldCBfYmxhbmsoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubm9kZT8uYmxhbms7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLXNwYWNlJylcbiAgICBnZXQgX3NwYWNlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLm5vZGU/LnNwYWNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1yb290JylcbiAgICBnZXQgX2lzUm9vdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YT8uaXNSb290O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1maW5hbCcpXG4gICAgZ2V0IF9pc0ZpbmFsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhPy5pc0ZpbmFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1saW5lLWJlZm9yZScpXG4gICAgZ2V0IF9yZW5kZXJMaW5lQmVmb3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubm9kZT8uYmxhbms7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWxpbmUtYWZ0ZXInKVxuICAgIGdldCBfcmVuZGVyTGluZUFmdGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubm9kZT8uYmxhbmsgfHwgdGhpcy5faXNGaW5hbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tYXBwcm92ZWQnKVxuICAgIGdldCBfaXNBcHByb3ZlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZSAmJiBpc05vZGVBcHByb3ZlZCh0aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1wYXJlbnQtYXBwcm92ZWQnKVxuICAgIGdldCBfaXNQYXJlbnRBcHByb3ZlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLm1ldGE/LnBhcmVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5tZXRhPy5yb290Tm9kZXNBcHByb3ZlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1ldGEucGFyZW50cy5ldmVyeSgobm9kZSkgPT4gaXNOb2RlQXBwcm92ZWQobm9kZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1zZWxlY3RlZCcpXG4gICAgZ2V0IF9pc05vZGVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFZGl0ICYmIHRoaXMuX2lzU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLXBhcmFsbGVsLXN0YXJ0JylcbiAgICBnZXQgX2lzUGFyYWxsZWxTdGFydCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5tZXRhPy5wYXJhbGxlbFN0YXJ0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0tcGFyYWxsZWwtZW5kJylcbiAgICBnZXQgX2lzUGFyYWxsZWxFbmQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMubWV0YT8ucGFyYWxsZWxFbmQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1maXJzdC1pbi1wYXJhbGxlbCcpXG4gICAgZ2V0IF9pc0ZpcnN0SW5QYXJhbGxlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5tZXRhPy5pc0ZpcnN0SW5QYXJhbGxlbCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGUtLWxhc3QtaW4tcGFyYWxsZWwnKVxuICAgIGdldCBfaXNMYXN0SW5QYXJhbGxlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5tZXRhPy5pc0xhc3RJblBhcmFsbGVsKTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgbm9kZSBpcyBibGFuayBhbmQgdGhlIGZpbmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlLS1sYXN0LWJsYW5rJylcbiAgICBnZXQgX2xhc3RCbGFuaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JsYW5rICYmIHRoaXMubm9kZS50YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ub2RlLnNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFkZCBub2RlIGJ1dHRvbiBjbGlja2VkLCB2YWx1ZSBpcyB0aGUgcGxhY2VtZW50IGZvciB0aGUgbmV3IG5vZGUgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwcm92YWxGbG93Tm9kZVRhcmdldD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGVkaXQgbm9kZSBidXR0b24gY2xpY2tlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGRlbGV0ZSBub2RlIGJ1dHRvbiBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoTWVudUNvbXBvbmVudClcbiAgICBfbWVudTogTWVudUNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmZsb3dNZW51QnV0dG9uJylcbiAgICBfb3ZlcmZsb3dNZW51QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdub2RlQ29udGVudCcpXG4gICAgX25vZGVDb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEFwcHJvdmFsRmxvd0Ryb3Bab25lRGlyZWN0aXZlKVxuICAgIF9kcm9wWm9uZXM6IFF1ZXJ5TGlzdDxBcHByb3ZhbEZsb3dEcm9wWm9uZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoR3JpZExpc3RJdGVtQ29tcG9uZW50KVxuICAgIF9ncmlkTGlzdEl0ZW06IEdyaWRMaXN0SXRlbUNvbXBvbmVudDxBcHByb3ZhbEdyYXBoTm9kZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vYmplY3RTdGF0dXM6IE9iamVjdFN0YXR1cztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dEdWVEYXRlV2FybmluZyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZHVlSW4gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBhcHByb3ZhbEZsb3dOb2RlSWQgPSAnZmRwLWFwcHJvdmFsLWZsb3ctbm9kZS0nICsgZGVmYXVsdElkKys7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9uYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2lzTm90U3RhcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFpc05vZGVTdGFydGVkKHRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2lzRWRpdEFjdGlvbnNBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUuc3RhdHVzID09PSAnYXBwcm92ZWQnIHx8IHRoaXMubm9kZS5zdGF0dXMgPT09ICdyZWplY3RlZCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FjdGl2ZURyb3Bab25lcygpOiBBcHByb3ZhbEZsb3dEcm9wWm9uZURpcmVjdGl2ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bab25lcy5maWx0ZXIoKHopID0+IHouYWN0aXZlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaXNBbnlEcm9wWm9uZUFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURyb3Bab25lcy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9pc1ZlcnRpY2FsTGluZUJlZm9yZVNvbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMubWV0YT8ucGFyZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMubWV0YT8uaXNWZXJ0aWNhbExpbmVCZWZvcmVTb2xpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1ldGEucGFyZW50cy5ldmVyeSgocGFyZW50Tm9kZSkgPT4gaXNOb2RlQXBwcm92ZWQocGFyZW50Tm9kZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9pc1ZlcnRpY2FsTGluZUFmdGVyU29saWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5ub2RlPy50YXJnZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5tZXRhPy5pc1ZlcnRpY2FsTGluZUFmdGVyU29saWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNWZXJ0aWNhbExpbmVCZWZvcmVTb2xpZCAmJiB0aGlzLmFsbE5vZGVzSW5Db2x1bW5BcHByb3ZlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd0FkZEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFZGl0ICYmICF0aGlzLl9ibGFuayAmJiAhdGhpcy5fc3BhY2UgJiYgIXRoaXMubm9kZT8uZGlzYWJsZUFjdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dBZnRlckFsbEFkZEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFZGl0ICYmICF0aGlzLl9zcGFjZSAmJiAhdGhpcy5ub2RlPy5kaXNhYmxlQWN0aW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kcm9wWm9uZVBhcnRpYWwocGxhY2VtZW50OiBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoIXRoaXMuX2JsYW5rICYmICghdGhpcy5pc05leHROb2RlQmxhbmsgfHwgcGxhY2VtZW50ID09PSAnYmVmb3JlJykpIHx8XG4gICAgICAgICAgICAodGhpcy5fbGFzdEJsYW5rICYmIHBsYWNlbWVudCA9PT0gJ2FmdGVyLWFsbCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hlY2tOb2RlU3RhdHVzKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fcnRsU2VydmljZT8ucnRsLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGVja05vZGVTdGF0dXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25NZW51T3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVudS5yZWZyZXNoUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyaWRMaXN0SXRlbT8uZm9jdXMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVhY3RpdmF0ZURyb3Bab25lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZHJvcFpvbmVzLmZvckVhY2goKGRyb3Bab25lKSA9PiAoZHJvcFpvbmUuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGVja0lmTm9kZURyYWdnZWRJbkRyb3Bab25lKG5vZGVSZWN0OiBET01SZWN0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Ryb3Bab25lcy5mb3JFYWNoKChkcm9wWm9uZSkgPT4gZHJvcFpvbmUuX2NoZWNrSWZOb2RlRHJhZ2dlZEluRHJvcFpvbmUobm9kZVJlY3QpKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrTm9kZVN0YXR1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrRHVlRGF0ZSAmJiB0aGlzLm5vZGUuZHVlRGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgZHVlVGhyZXNob2xkID0gTnVtYmVyKG5ldyBEYXRlKHRoaXMubm9kZS5kdWVEYXRlKSkgLSB0aGlzLmR1ZURhdGVUaHJlc2hvbGQgKiBEQVlfSU5fTUlMTElTRUNPTkRTO1xuICAgICAgICAgICAgY29uc3Qgbm93QW5kRHVlRGlmZiA9IERhdGUubm93KCkgLSBkdWVUaHJlc2hvbGQ7XG5cbiAgICAgICAgICAgIHRoaXMuX2R1ZUluID0gTWF0aC5yb3VuZChub3dBbmREdWVEaWZmIC8gREFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgICAgICAgICB0aGlzLl9zaG93RHVlRGF0ZVdhcm5pbmcgPSAhaXNOb2RlQXBwcm92ZWQodGhpcy5ub2RlKSAmJiBkdWVUaHJlc2hvbGQgPCBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdGhpcy5fb2JqZWN0U3RhdHVzID0gdGhpcy5fc2hvd0R1ZURhdGVXYXJuaW5nID8gJ2NyaXRpY2FsJyA6IHRoaXMuX2dldE5vZGVTdGF0dXNDbGFzcygpO1xuXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vYmplY3RTdGF0dXMgPSB0aGlzLl9nZXROb2RlU3RhdHVzQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5vZGVTdGF0dXNDbGFzcygpOiBPYmplY3RTdGF0dXMge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2xvck1hcHBpbmdcbiAgICAgICAgICAgICAgICA/IHRoaXMuc3RhdHVzQ29sb3JNYXBwaW5nW3RoaXMubm9kZS5zdGF0dXNdXG4gICAgICAgICAgICAgICAgOiBOT0RFX1NUQVRVU19DTEFTU19NQVBbdGhpcy5ub2RlLnN0YXR1c11cbiAgICAgICAgKSBhcyBPYmplY3RTdGF0dXM7XG4gICAgfVxufVxuIiwiQGlmIChtZXRhPy5yZW5kZXJWZXJ0aWNhbExpbmVCZWZvcmUpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fdmVydGljYWwtbGluZS1iZWZvcmVcIlxuICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fdmVydGljYWwtbGluZS1iZWZvcmUtc29saWRdPVwiX2lzVmVydGljYWxMaW5lQmVmb3JlU29saWRcIlxuICAgID48L2Rpdj5cbn1cbkBpZiAobWV0YT8ucmVuZGVyVmVydGljYWxMaW5lQWZ0ZXIpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fdmVydGljYWwtbGluZS1hZnRlclwiXG4gICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX192ZXJ0aWNhbC1saW5lLWFmdGVyLXNvbGlkXT1cIl9pc1ZlcnRpY2FsTGluZUFmdGVyU29saWRcIlxuICAgID48L2Rpdj5cbn1cbkBpZiAoIV9ibGFuayAmJiAhX3NwYWNlKSB7XG4gICAgQGlmIChyZW5kZXJBcnJvdykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fYXJyb3dcIj48L2Rpdj5cbiAgICB9XG4gICAgQGlmIChfaXNSb290ICYmIG1ldGE/Lm5vZGVJbmRleCA9PT0gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fY2Fyb3VzZWwtc3RhcnQtbWFya2VyXCI+PC9kaXY+XG4gICAgfVxuICAgIEBpZiAoX2lzRmluYWwgJiYgbWV0YT8ubm9kZUluZGV4ID09PSAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1ub2RlX19jYXJvdXNlbC1lbmQtbWFya2VyXCI+PC9kaXY+XG4gICAgfVxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbn1cbjxuZy10ZW1wbGF0ZSAjb3ZlcmZsb3dNZW51QnV0dG9uPlxuICAgIDwhLS0gQWN0dWFsbHkganVzdCB0aGUgZmQtZ3JpZC1pdGVtIGFjdGlvbiBidXR0b24gYnV0IHdpdGggc29tZSBoYXJkY29kZSB0byBiZSB1c2VkIGFzIG1lbnUgdHJpZ2dlciAtLT5cbiAgICBAaWYgKCFub2RlPy5kaXNhYmxlQWN0aW9ucykge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX21lbnUtYnV0dG9uXCJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGdseXBoPVwib3ZlcmZsb3dcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlTWVudUJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgW2ZkTWVudVRyaWdnZXJdPVwibWVudVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2lzRWRpdEFjdGlvbnNBdmFpbGFibGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNub2RlQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9faW5mb1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX25hbWVcIlxuICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX25hbWUtLW1lbWJlcnMtY291bnRdPVwibm9kZS5hcHByb3ZlcnMubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICBbaWRdPVwiYXBwcm92YWxGbG93Tm9kZUlkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChub2RlLmFwcHJvdmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB7eyBub2RlLmFwcHJvdmVyc1swXS5uYW1lIH19XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZU1lbWJlcnNDb3VudCcgfCBmZFRyYW5zbGF0ZTogeyBjb3VudDogbm9kZS5hcHByb3ZlcnMubGVuZ3RoIH0gfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1ub2RlX19kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgQGlmICghbm9kZS52YXJpb3VzVGVhbXMpIHtcbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBub2RlLmFwcHJvdmVycy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5vZGUuZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm9kZS5hcHByb3ZlcnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gbm9kZS5hcHByb3ZlcnNbMF0uZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZVZhcmlvdXNUZWFtcycgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN2YXJpb3VzVGVhbXM+IHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlVmFyaW91c1RlYW1zJyB8IGZkVHJhbnNsYXRlIH19IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZmRwLW9iamVjdC1zdGF0dXMgW3N0YXR1c109XCJfb2JqZWN0U3RhdHVzXCIgW2ludmVydGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZHBPYmplY3RTdGF0dXNUZXh0PlxuICAgICAgICAgICAgICAgIEBpZiAoYXBwcm92YWxTdGF0dXNUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGVja0R1ZURhdGUgfHwgIV9zaG93RHVlRGF0ZVdhcm5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXBwcm92YWxTdGF0dXNUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhcHByb3ZhbFN0YXR1c1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbm9kZTogbm9kZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGVja0R1ZURhdGUgfHwgIV9zaG93RHVlRGF0ZVdhcm5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKG5vZGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdhcHByb3ZlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LnN0YXR1c0FwcHJvdmVkJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5zdGF0dXNSZWplY3RlZCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2luIHByb2dyZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cuc3RhdHVzSW5Qcm9ncmVzcycgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ25vdCBzdGFydGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cuc3RhdHVzTm90U3RhcnRlZCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGNoZWNrRHVlRGF0ZSAmJiBfc2hvd0R1ZURhdGVXYXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoX2R1ZUluID09PSBkdWVEYXRlVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZVN0YXR1c0R1ZVRvZGF5JyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChfZHVlSW4gPCBkdWVEYXRlVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlU3RhdHVzRHVlSW5YRGF5cydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZTogeyBjb3VudDogZHVlRGF0ZVRocmVzaG9sZCAtIF9kdWVJbiB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoX2R1ZUluID4gZHVlRGF0ZVRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1BcHByb3ZhbEZsb3cubm9kZVN0YXR1c1hEYXlzT3ZlcmR1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZTogeyBjb3VudDogX2R1ZUluIC0gZHVlRGF0ZVRocmVzaG9sZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZHAtb2JqZWN0LXN0YXR1cz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5AaWYgKF9zaG93QWRkQnV0dG9uICYmIG1ldGE/LmNhbkFkZE5vZGVCZWZvcmVBbGwgJiYgIW5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRCZWZvcmUpIHtcbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWRkTm9kZUJ1dHRvblwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHBsYWNlbWVudDogJ2JlZm9yZS1hbGwnIH1cIlxuICAgID48L25nLXRlbXBsYXRlPlxufVxuQGlmIChfc2hvd0FkZEJ1dHRvbiAmJiBtZXRhPy5jYW5BZGROb2RlQmVmb3JlICYmICFub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkQmVmb3JlKSB7XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkZE5vZGVCdXR0b25cIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBwbGFjZW1lbnQ6ICdiZWZvcmUnIH1cIj48L25nLXRlbXBsYXRlPlxufVxuQGlmIChcbiAgICBfc2hvd0FkZEJ1dHRvbiAmJiBtZXRhPy5jYW5BZGROb2RlQWZ0ZXIgJiYgbWV0YT8ucmVuZGVyQWRkTm9kZUFmdGVyQnV0dG9uICYmICFub2RlPy5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkQWZ0ZXJcbikge1xuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGROb2RlQnV0dG9uXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcGxhY2VtZW50OiAnYWZ0ZXInIH1cIj48L25nLXRlbXBsYXRlPlxufVxuQGlmIChcbiAgICBfc2hvd0FmdGVyQWxsQWRkQnV0dG9uICYmXG4gICAgbWV0YT8uY2FuQWRkTm9kZUFmdGVyQWxsICYmXG4gICAgbWV0YT8ucmVuZGVyQWRkTm9kZUFmdGVyQnV0dG9uICYmXG4gICAgIW5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRBZnRlclxuKSB7XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkZE5vZGVCdXR0b25cIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBwbGFjZW1lbnQ6ICdhZnRlci1hbGwnIH1cIlxuICAgID48L25nLXRlbXBsYXRlPlxufVxuPG5nLXRlbXBsYXRlICNhZGROb2RlQnV0dG9uIGxldC1wbGFjZW1lbnQ9XCJwbGFjZW1lbnRcIj5cbiAgICBAaWYgKG5vZGUuc3RhdHVzICE9PSAnYXBwcm92ZWQnKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZ2x5cGg9XCJhZGRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5hZGROb2RlQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2FkZFwiXG4gICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fYWRkLS1ibGFua109XCJ0aGlzLl9ibGFua1wiXG4gICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fYWRkLS1iZWZvcmVdPVwiXG4gICAgICAgICAgICAgICAgIXRoaXMuX2JsYW5rICYmIChwbGFjZW1lbnQgPT09ICdiZWZvcmUnIHx8IHBsYWNlbWVudCA9PT0gJ2JlZm9yZS1hbGwnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19hZGQtLWJlZm9yZS1hbGxdPVwiIXRoaXMuX2JsYW5rICYmIHBsYWNlbWVudCA9PT0gJ2JlZm9yZS1hbGwnXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19hZGQtLWFmdGVyXT1cIlxuICAgICAgICAgICAgICAgICF0aGlzLl9ibGFuayAmJiAocGxhY2VtZW50ID09PSAnYWZ0ZXInIHx8IHBsYWNlbWVudCA9PT0gJ2FmdGVyLWFsbCcpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2FkZC0tYWZ0ZXItYWxsXT1cInBsYWNlbWVudCA9PT0gJ2FmdGVyLWFsbCdcIlxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiZHJvcFpvbmUuYWN0aXZlID8gJ2hpZGRlbicgOiAnJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BZGQuZW1pdChwbGFjZW1lbnQpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIH1cbiAgICA8ZGl2XG4gICAgICAgICNkcm9wWm9uZT1cImZkcC1hcHByb3ZhbC1mbG93LWRyb3Atem9uZVwiXG4gICAgICAgIGZkcC1hcHByb3ZhbC1mbG93LWRyb3Atem9uZVxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctbm9kZV9fZHJvcC16b25lXCJcbiAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LW5vZGVfX2Ryb3Atem9uZS0tYWN0aXZlXT1cImRyb3Bab25lLmFjdGl2ZVwiXG4gICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19kcm9wLXpvbmUtLWJsYW5rXT1cImlzTmV4dE5vZGVCbGFua1wiXG4gICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvdy1ub2RlX19kcm9wLXpvbmUtLXBhcnRpYWxdPVwiX2Ryb3Bab25lUGFydGlhbChwbGFjZW1lbnQpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPGZkLW1lbnUgI21lbnUgZmRDb250ZW50RGVuc2l0eSBwbGFjZW1lbnQ9XCJib3R0b20tZW5kXCIgKGlzT3BlbkNoYW5nZSk9XCJfb25NZW51T3BlbigpXCI+XG4gICAgQGlmIChtZXRhPy5jYW5BZGROb2RlQmVmb3JlICYmICF0aGlzLm5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRCZWZvcmUpIHtcbiAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwibWVudS5jbG9zZSgpOyBvbkFkZC5lbWl0KCdiZWZvcmUnKVwiPlxuICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+e3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5vZGVBY3Rpb25BZGRBcHByb3ZlcnNCZWZvcmUnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICB9XG4gICAgQGlmIChtZXRhPy5jYW5BZGROb2RlQWZ0ZXIgJiYgIXRoaXMubm9kZT8uYWN0aW9uc0NvbmZpZz8uZGlzYWJsZUFkZEFmdGVyKSB7XG4gICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm1lbnUuY2xvc2UoKTsgb25BZGQuZW1pdCgnYWZ0ZXInKVwiPlxuICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+e3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5vZGVBY3Rpb25BZGRBcHByb3ZlcnNBZnRlcicgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKG1ldGE/LmNhbkFkZFBhcmFsbGVsICYmICF0aGlzLm5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRQYXJhbGxlbCkge1xuICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJtZW51LmNsb3NlKCk7IG9uQWRkLmVtaXQoJ3BhcmFsbGVsJylcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlQWN0aW9uQWRkQXBwcm92ZXJzUGFyYWxsZWwnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICB9XG4gICAgQGlmIChfaXNOb3RTdGFydGVkICYmICF0aGlzLm5vZGU/LmFjdGlvbnNDb25maWc/LmRpc2FibGVFZGl0KSB7XG4gICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm1lbnUuY2xvc2UoKTsgb25FZGl0LmVtaXQoKVwiPlxuICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+IHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlQWN0aW9uRWRpdEFwcHJvdmVyJyB8IGZkVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIXRoaXMubm9kZT8uYWN0aW9uc0NvbmZpZz8uZGlzYWJsZVJlbW92ZSkge1xuICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJtZW51LmNsb3NlKCk7IG9uRGVsZXRlLmVtaXQoKVwiPlxuICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+IHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5ub2RlQWN0aW9uUmVtb3ZlJyB8IGZkVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuPC9mZC1tZW51PlxuIl19