@decaf-ts/for-angular 0.0.6 → 0.0.8

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.
@@ -1,6 +1,7 @@
1
1
  import { ComponentRef, EnvironmentInjector, EventEmitter, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
2
- import { KeyValue, ModelRenderCustomEvent } from '../../engine';
2
+ import { KeyValue, RendererCustomEvent } from '../../engine';
3
3
  import { Logger } from '@decaf-ts/logging';
4
+ import { Model } from '@decaf-ts/decorator-validation';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
7
  * @description Dynamic component renderer for Decaf Angular applications.
@@ -25,7 +26,7 @@ import * as i0 from "@angular/core";
25
26
  * +Record~string, unknown~ globals
26
27
  * +EnvironmentInjector injector
27
28
  * +ComponentRef~unknown~ component
28
- * +EventEmitter~ModelRenderCustomEvent~ listenEvent
29
+ * +EventEmitter~RendererCustomEvent~ listenEvent
29
30
  * +ngOnInit()
30
31
  * +ngOnDestroy()
31
32
  * +ngOnChanges(changes)
@@ -104,10 +105,10 @@ export declare class ComponentRendererComponent implements OnInit, OnDestroy {
104
105
  * dynamic component, creating a communication channel between the parent and the dynamically
105
106
  * rendered child.
106
107
  *
107
- * @type {EventEmitter<ModelRenderCustomEvent>}
108
+ * @type {EventEmitter<RendererCustomEvent>}
108
109
  * @memberOf ComponentRendererComponent
109
110
  */
110
- listenEvent: EventEmitter<ModelRenderCustomEvent>;
111
+ listenEvent: EventEmitter<RendererCustomEvent>;
111
112
  /**
112
113
  * @description Logger instance for the component.
113
114
  * @summary This property holds a Logger instance specific to this component.
@@ -119,6 +120,14 @@ export declare class ComponentRendererComponent implements OnInit, OnDestroy {
119
120
  * @memberOf ComponentRendererComponent
120
121
  */
121
122
  logger: Logger;
123
+ /**
124
+ * @description Repository model for data operations.
125
+ * @summary The data model repository that this component will use for CRUD operations.
126
+ * This provides a connection to the data layer for retrieving and manipulating data.
127
+ *
128
+ * @type {Model| undefined}
129
+ */
130
+ model: Model | undefined;
122
131
  parent: undefined | KeyValue;
123
132
  inner?: TemplateRef<unknown>;
124
133
  /**
@@ -263,5 +272,5 @@ export declare class ComponentRendererComponent implements OnInit, OnDestroy {
263
272
  */
264
273
  private unsubscribeEvents;
265
274
  static ɵfac: i0.ɵɵFactoryDeclaration<ComponentRendererComponent, never>;
266
- static ɵcmp: i0.ɵɵComponentDeclaration<ComponentRendererComponent, "ngx-decaf-component-renderer", never, { "tag": { "alias": "tag"; "required": true; }; "globals": { "alias": "globals"; "required": false; }; "parent": { "alias": "parent"; "required": false; }; }, { "listenEvent": "listenEvent"; }, never, never, true, never>;
275
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentRendererComponent, "ngx-decaf-component-renderer", never, { "tag": { "alias": "tag"; "required": true; }; "globals": { "alias": "globals"; "required": false; }; "model": { "alias": "model"; "required": false; }; "parent": { "alias": "parent"; "required": false; }; }, { "listenEvent": "listenEvent"; }, never, never, true, never>;
267
276
  }
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter, OnChanges, OnDestroy, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
2
2
  import { Model } from '@decaf-ts/decorator-validation';
3
3
  import { AngularDynamicOutput, RenderedModel } from '../../engine';
4
- import { ModelRenderCustomEvent } from 'src/lib/engine/types';
4
+ import { RendererCustomEvent } from 'src/lib/engine/types';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
7
  * @description Component for rendering dynamic models
@@ -60,7 +60,7 @@ export declare class ModelRendererComponent<M extends Model> implements OnChange
60
60
  /**
61
61
  * @description Event emitter for custom events from the rendered component
62
62
  */
63
- listenEvent: EventEmitter<ModelRenderCustomEvent>;
63
+ listenEvent: EventEmitter<RendererCustomEvent>;
64
64
  /**
65
65
  * @description Instance of the NgxRenderingEngine2
66
66
  */
@@ -3,7 +3,22 @@ import { TextFieldTypes } from '@ionic/core';
3
3
  import { EnvironmentInjector, Injector, Type } from '@angular/core';
4
4
  import { FormControl, FormGroup } from '@angular/forms';
5
5
  import { FieldProperties } from '@decaf-ts/ui-decorators';
6
+ /**
7
+ * @description Generic key-value pair type
8
+ * @summary Represents a generic object with string keys and any type of values.
9
+ * This is commonly used for dynamic data structures where the properties are not known at compile time.
10
+ * @typedef {Record<string, any>} KeyValue
11
+ * @memberOf module:engine
12
+ */
6
13
  export type KeyValue = Record<string, any>;
14
+ /**
15
+ * @description Generic function type
16
+ * @summary Represents a function that accepts any number of arguments of any type
17
+ * and returns any type. This is useful for defining function parameters or variables
18
+ * where the exact function signature is not known at compile time.
19
+ * @typedef FunctionLike
20
+ * @memberOf module:engine
21
+ */
7
22
  export type FunctionLike = (...args: any[]) => any;
8
23
  /**
9
24
  * @description Element size options for UI components
@@ -204,6 +219,15 @@ export type HTMLFormTarget = '_blank' | '_self' | '_parent' | '_top' | string;
204
219
  export interface IListComponentRefreshEvent {
205
220
  data: KeyValue[];
206
221
  }
222
+ /**
223
+ * @description Form service control structure
224
+ * @summary Defines the structure for a form control managed by the form service.
225
+ * Contains the FormGroup control and the associated field properties for rendering.
226
+ * @interface FormServiceControl
227
+ * @property {FormGroup} control - The Angular FormGroup for the control
228
+ * @property {AngularFieldDefinition} props - The field properties for rendering the control
229
+ * @memberOf module:engine
230
+ */
207
231
  export interface FormServiceControl {
208
232
  control: FormGroup;
209
233
  props: AngularFieldDefinition;
@@ -218,20 +242,14 @@ export interface FormServiceControl {
218
242
  */
219
243
  export type FormServiceControls = Record<string, Record<string, FormServiceControl>>;
220
244
  /**
221
- * @description Interface for model render custom events
222
- * @summary Defines the structure of custom events triggered during model rendering.
223
- * Contains the event detail, component name, and event name.
224
- * @interface ModelRenderCustomEvent
225
- * @property {BaseCustomEvent} detail - The detailed event information
226
- * @property {string} component - The component that triggered the event
227
- * @property {string} name - The name of the event
245
+ * @description Renderer custom event type
246
+ * @summary Combines BaseCustomEvent with KeyValue properties to create a flexible
247
+ * custom event type for renderer components. This allows events to carry both
248
+ * standard event properties and additional custom data.
249
+ * @typedef RendererCustomEvent
228
250
  * @memberOf module:engine
229
251
  */
230
- export interface ModelRenderCustomEvent {
231
- detail: BaseCustomEvent;
232
- component: string;
233
- name: string;
234
- }
252
+ export type RendererCustomEvent = BaseCustomEvent & KeyValue;
235
253
  /**
236
254
  * @description Interface for list item custom events
237
255
  * @summary Defines the structure of custom events triggered by list items.
@@ -261,34 +279,59 @@ export interface ListItemCustomEvent extends BaseCustomEvent {
261
279
  * @memberOf module:engine
262
280
  */
263
281
  export interface BaseCustomEvent {
264
- data: unknown;
265
- target?: HTMLElement;
266
- name?: string;
282
+ name: string;
267
283
  component: string;
284
+ data?: unknown;
285
+ target?: HTMLElement;
268
286
  }
269
287
  /**
270
- * @description Base interface for custom events
271
- * @summary Defines the base structure for custom events in the application.
272
- * Contains properties for the event data, target element, name, and component.
273
- * @interface BaseCustomEvent
274
- * @property {any} data - The data associated with the event
275
- * @property {HTMLElement} [target] - The target element that triggered the event
276
- * @property {string} [name] - The name of the event
277
- * @property {string} component - The component that triggered the event
288
+ * @description CRUD form event type
289
+ * @summary Extends BaseCustomEvent to include optional handlers for CRUD form operations.
290
+ * This event type is used for form-related actions like create, read, update, and delete operations.
291
+ * @typedef CrudFormEvent
292
+ * @property {Record<string, any>} [handlers] - Optional handlers for form operations
278
293
  * @memberOf module:engine
279
294
  */
280
295
  export type CrudFormEvent = BaseCustomEvent & {
281
296
  handlers?: Record<string, any>;
282
297
  };
298
+ /**
299
+ * @description Component input properties
300
+ * @summary Extends FieldProperties with additional properties specific to Angular components.
301
+ * Includes update mode for form controls and optional FormGroup and FormControl references.
302
+ * @interface ComponentInput
303
+ * @property {FieldUpdateMode} [updateMode] - When the field value should be updated
304
+ * @property {FormGroup} [formGroup] - Optional FormGroup reference
305
+ * @property {FormControl} [formControl] - Optional FormControl reference
306
+ * @memberOf module:engine
307
+ */
283
308
  export interface ComponentInput extends FieldProperties {
284
309
  updateMode?: FieldUpdateMode;
285
310
  formGroup?: FormGroup;
286
311
  formControl?: FormControl;
287
312
  }
313
+ /**
314
+ * @description Component configuration structure
315
+ * @summary Defines the configuration for dynamically creating Angular components.
316
+ * Contains the component name, input properties, injector, and optional child components.
317
+ * @interface ComponentConfig
318
+ * @property {string} component - The name of the component to render
319
+ * @property {ComponentInput} inputs - The input properties for the component
320
+ * @property {EnvironmentInjector | Injector} injector - The Angular injector for dependency injection
321
+ * @property {ComponentConfig[]} [children] - Optional child component configurations
322
+ * @memberOf module:engine
323
+ */
288
324
  export interface ComponentConfig {
289
325
  component: string;
290
326
  inputs: ComponentInput;
291
327
  injector: EnvironmentInjector | Injector;
292
328
  children?: ComponentConfig[];
293
329
  }
330
+ /**
331
+ * @description Form parent group tuple
332
+ * @summary Represents a tuple containing a FormGroup and its associated string identifier.
333
+ * This is used for managing hierarchical form structures and parent-child relationships.
334
+ * @typedef {[FormGroup, string]} FormParentGroup
335
+ * @memberOf module:engine
336
+ */
294
337
  export type FormParentGroup = [FormGroup, string];
@@ -26,7 +26,7 @@ import * as i1 from "@angular/common";
26
26
  * +Record~string, unknown~ globals
27
27
  * +EnvironmentInjector injector
28
28
  * +ComponentRef~unknown~ component
29
- * +EventEmitter~ModelRenderCustomEvent~ listenEvent
29
+ * +EventEmitter~RendererCustomEvent~ listenEvent
30
30
  * +ngOnInit()
31
31
  * +ngOnDestroy()
32
32
  * +ngOnChanges(changes)
@@ -82,7 +82,7 @@ export class ComponentRendererComponent {
82
82
  * dynamic component, creating a communication channel between the parent and the dynamically
83
83
  * rendered child.
84
84
  *
85
- * @type {EventEmitter<ModelRenderCustomEvent>}
85
+ * @type {EventEmitter<RendererCustomEvent>}
86
86
  * @memberOf ComponentRendererComponent
87
87
  */
88
88
  this.listenEvent = new EventEmitter();
@@ -181,8 +181,9 @@ export class ComponentRendererComponent {
181
181
  ?.constructor;
182
182
  const metadata = reflectComponentType(component);
183
183
  const componentInputs = metadata.inputs;
184
- const props = globals?.['item'];
185
- delete props['tag'];
184
+ const props = globals?.['item'] || globals?.['props'] || {};
185
+ if (props?.['tag'])
186
+ delete props['tag'];
186
187
  const inputKeys = Object.keys(props);
187
188
  const unmappedKeys = [];
188
189
  for (const input of inputKeys) {
@@ -194,8 +195,6 @@ export class ComponentRendererComponent {
194
195
  unmappedKeys.push(input);
195
196
  }
196
197
  }
197
- if (unmappedKeys.length)
198
- this.logger.info(`Unmapped input properties for component ${tag}: ${unmappedKeys.join(', ')}`);
199
198
  this.vcr.clear();
200
199
  this.component = NgxRenderingEngine2.createComponent(component, props, metadata, this.vcr, this.injector, []);
201
200
  this.subscribeEvents();
@@ -288,7 +287,7 @@ export class ComponentRendererComponent {
288
287
  }
289
288
  }
290
289
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ComponentRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
291
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ComponentRendererComponent, isStandalone: true, selector: "ngx-decaf-component-renderer", inputs: { tag: "tag", globals: "globals", parent: "parent" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "vcr", first: true, predicate: ["componentViewContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #componentViewContainer></ng-template>\n\n<ng-template #inner>\n @if(parent?.children?.length) {\n @for(child of parent.children; track child) {\n @if(!child.children?.length) {\n <ng-container\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n } @else {\n <ngx-decaf-component-renderer [parent]=\"child\"> </ngx-decaf-component-renderer>\n }\n }\n }\n</ng-template>\n\n\n", styles: [""], dependencies: [{ kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "parent"], outputs: ["listenEvent"] }, { kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
290
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ComponentRendererComponent, isStandalone: true, selector: "ngx-decaf-component-renderer", inputs: { tag: "tag", globals: "globals", model: "model", parent: "parent" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "vcr", first: true, predicate: ["componentViewContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #componentViewContainer></ng-template>\n\n<ng-template #inner>\n @if(parent?.children?.length) {\n @for(child of parent.children; track child) {\n @if(!child.children?.length) {\n <ng-container\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n } @else {\n <ngx-decaf-component-renderer [parent]=\"child\"> </ngx-decaf-component-renderer>\n }\n }\n }\n</ng-template>\n\n\n", styles: [""], dependencies: [{ kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "model", "parent"], outputs: ["listenEvent"] }, { kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
292
291
  }
293
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ComponentRendererComponent, decorators: [{
294
293
  type: Component,
@@ -303,10 +302,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
303
302
  type: Input
304
303
  }], listenEvent: [{
305
304
  type: Output
305
+ }], model: [{
306
+ type: Input
306
307
  }], parent: [{
307
308
  type: Input
308
309
  }], inner: [{
309
310
  type: ViewChild,
310
311
  args: ['inner', { read: TemplateRef, static: true }]
311
312
  }] } });
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21wb25lbnQtcmVuZGVyZXIvY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21wb25lbnQtcmVuZGVyZXIvY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixNQUFNLEVBRU4sS0FBSyxFQUdMLE1BQU0sRUFDTixvQkFBb0IsRUFDcEIsV0FBVyxFQUVYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFHekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBUUgsTUFBTSxPQUFPLDBCQUEwQjtJQWtHckM7Ozs7Ozs7T0FPRztJQUNIO1FBOUVBOzs7Ozs7Ozs7O1dBVUc7UUFFSCxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUV0Qzs7Ozs7Ozs7O1dBU0c7UUFDSCxhQUFRLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBYTVEOzs7Ozs7Ozs7V0FTRztRQUVILGdCQUFXLEdBQ1QsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFlN0MsV0FBTSxHQUF5QixTQUFTLENBQUM7UUFldkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JH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QVcsRUFBRSxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0F6VVUsMEJBQTBCO21HQUExQiwwQkFBMEIseVJBV3NCLGdCQUFnQix1R0FvRi9DLFdBQVcsMkNDcEt6QywrbUJBc0JBLDBERCtDYSwwQkFBMEIsd0lBSDNCLGdCQUFnQjs7NEZBR2YsMEJBQTBCO2tCQVB0QyxTQUFTOytCQUNFLDhCQUE4QixXQUcvQixDQUFDLGdCQUFnQixDQUFDLGNBQ2YsSUFBSTt3REFjaEIsR0FBRztzQkFERixTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZTdFLEdBQUc7c0JBREYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBZXpCLE9BQU87c0JBRE4sS0FBSztnQkFxQ04sV0FBVztzQkFEVixNQUFNO2dCQWlCUCxNQUFNO3NCQURMLEtBQUs7Z0JBS04sS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50TWlycm9yLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIHJlZmxlY3RDb21wb25lbnRUeXBlLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFJlbmRlcmluZ0VuZ2luZTIgfSBmcm9tICdzcmMvbGliL2VuZ2luZS9OZ3hSZW5kZXJpbmdFbmdpbmUyJztcbmltcG9ydCB7IEJhc2VDdXN0b21FdmVudCwgS2V5VmFsdWUsIE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSwgZ2V0TG9nZ2VyIH0gZnJvbSAnc3JjL2xpYi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGRlY2FmLXRzL2xvZ2dpbmcnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEeW5hbWljIGNvbXBvbmVudCByZW5kZXJlciBmb3IgRGVjYWYgQW5ndWxhciBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGZsZXhpYmxlIHdheSB0byBkeW5hbWljYWxseSByZW5kZXIgQW5ndWxhciBjb21wb25lbnRzXG4gKiBhdCBydW50aW1lIGJhc2VkIG9uIGEgdGFnIG5hbWUuIEl0IGhhbmRsZXMgdGhlIGNyZWF0aW9uLCBwcm9wZXJ0eSBiaW5kaW5nLCBhbmQgZXZlbnRcbiAqIHN1YnNjcmlwdGlvbiBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIGNvbXBvbmVudHMuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3JcbiAqIGJ1aWxkaW5nIGNvbmZpZ3VyYWJsZSBVSXMgd2hlcmUgY29tcG9uZW50cyBuZWVkIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbiAqXG4gKiBAY29tcG9uZW50IHtDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudH1cbiAqIEBleGFtcGxlXG4gKiA8bmd4LWRlY2FmLWNvbXBvbmVudC1yZW5kZXJlclxuICogICBbdGFnXT1cInRhZ1wiXG4gKiAgIFtnbG9iYWxzXT1cImdsb2JhbHNcIlxuICogICAobGlzdGVuRXZlbnQpPVwibGlzdGVuRXZlbnQoJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyPlxuICpcbiAqIEBtZXJtYWlkXG4gKiBjbGFzc0RpYWdyYW1cbiAqICAgY2xhc3MgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQge1xuICogICAgICtWaWV3Q29udGFpbmVyUmVmIHZjclxuICogICAgICtzdHJpbmcgdGFnXG4gKiAgICAgK1JlY29yZH5zdHJpbmcsIHVua25vd25+IGdsb2JhbHNcbiAqICAgICArRW52aXJvbm1lbnRJbmplY3RvciBpbmplY3RvclxuICogICAgICtDb21wb25lbnRSZWZ+dW5rbm93bn4gY29tcG9uZW50XG4gKiAgICAgK0V2ZW50RW1pdHRlcn5Nb2RlbFJlbmRlckN1c3RvbUV2ZW50fiBsaXN0ZW5FdmVudFxuICogICAgICtuZ09uSW5pdCgpXG4gKiAgICAgK25nT25EZXN0cm95KClcbiAqICAgICArbmdPbkNoYW5nZXMoY2hhbmdlcylcbiAqICAgICAtY3JlYXRlQ29tcG9uZW50KHRhZywgZ2xvYmFscylcbiAqICAgICAtc3Vic2NyaWJlRXZlbnRzKClcbiAqICAgICAtdW5zdWJzY3JpYmVFdmVudHMoKVxuICogICB9XG4gKiAgIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IC0tfD4gT25Jbml0XG4gKiAgIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IC0tfD4gT25DaGFuZ2VzXG4gKiAgIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IC0tfD4gT25EZXN0cm95XG4gKlxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqIEBpbXBsZW1lbnRzIHtPbkNoYW5nZXN9XG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBkeW5hbWljIGNvbXBvbmVudCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIFZpZXdDb250YWluZXJSZWYgcHJvdmlkZXMgdGhlIGNvbnRhaW5lciB3aGVyZSB0aGUgZHluYW1pY2FsbHkgY3JlYXRlZFxuICAgKiBjb21wb25lbnQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uIEl0J3MgbWFya2VkIGFzIHN0YXRpYyB0byBlbnN1cmUgaXQncyBhdmFpbGFibGVcbiAgICogZHVyaW5nIHRoZSBuZ09uSW5pdCBsaWZlY3ljbGUgaG9vayB3aGVuIHRoZSBjb21wb25lbnQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHR5cGUge1ZpZXdDb250YWluZXJSZWZ9XG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50Vmlld0NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHZjciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdGFnIG5hbWUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBkeW5hbWljYWxseSByZW5kZXJlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBpbnB1dCBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hpY2ggY29tcG9uZW50IHNob3VsZCBiZSByZW5kZXJlZCBieSBwcm92aWRpbmdcbiAgICogaXRzIHJlZ2lzdGVyZWQgdGFnIG5hbWUuIFRoZSB0YWcgbXVzdCBjb3JyZXNwb25kIHRvIGEgY29tcG9uZW50IHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZFxuICAgKiB3aXRoIHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmUyLiBUaGlzIGlzIGEgcmVxdWlyZWQgaW5wdXQgYXMgaXQgZGV0ZXJtaW5lcyB3aGljaCBjb21wb25lbnRcbiAgICogdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAcmVxdWlyZWRcbiAgICogQG1lbWJlck9mIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICB0YWchOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSByZW5kZXJlZCBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgaW5wdXQgcHJvcGVydHkgYWxsb3dzIHBhc3NpbmcgYSBzZXQgb2YgcHJvcGVydGllcyB0byB0aGUgZHluYW1pY2FsbHlcbiAgICogcmVuZGVyZWQgY29tcG9uZW50LiBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbWFwcGVkIHRvIHRoZSBjb21wb25lbnQncyBpbnB1dHMgaWYgdGhleVxuICAgKiBtYXRjaC4gUHJvcGVydGllcyB0aGF0IGRvbid0IG1hdGNoIGFueSBpbnB1dCBvbiB0aGUgdGFyZ2V0IGNvbXBvbmVudCB3aWxsIGJlIGZpbHRlcmVkIG91dFxuICAgKiB3aXRoIGEgd2FybmluZy5cbiAgICpcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKiBAZGVmYXVsdCB7fVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdsb2JhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbmplY3RvciB1c2VkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBpbiB0aGUgZHluYW1pYyBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgaW5qZWN0b3IgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBkeW5hbWljIGNvbXBvbmVudCB0byBwcm92aWRlIGl0IHdpdGhcbiAgICogYWNjZXNzIHRvIHRoZSBhcHBsaWNhdGlvbidzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBkeW5hbWljYWxseVxuICAgKiBjcmVhdGVkIGNvbXBvbmVudCBjYW4gYWNjZXNzIHRoZSBzYW1lIHNlcnZpY2VzIGFuZCBkZXBlbmRlbmNpZXMgYXMgc3RhdGljYWxseSBjcmVhdGVkXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtFbnZpcm9ubWVudEluamVjdG9yfVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBkeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBwcm9wZXJ0eSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgQ29tcG9uZW50UmVmIG9mIHRoZSBkeW5hbWljYWxseSBjcmVhdGVkXG4gICAqIGNvbXBvbmVudC4gSXQncyB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgc3Vic2NyaWJlIHRvIGl0cyBldmVudHMsXG4gICAqIGFuZCBwcm9wZXJseSBkZXN0cm95IGl0IHdoZW4gdGhlIHJlbmRlcmVyIGlzIGRlc3Ryb3llZC5cbiAgICpcbiAgICogQHR5cGUge0NvbXBvbmVudFJlZjx1bmtub3duPn1cbiAgICogQG1lbWJlck9mIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqL1xuICBjb21wb25lbnQhOiBDb21wb25lbnRSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBldmVudHMgZnJvbSB0aGUgcmVuZGVyZWQgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBUaGlzIG91dHB1dCBwcm9wZXJ0eSBlbWl0cyBldmVudHMgdGhhdCBvcmlnaW5hdGUgZnJvbSB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWRcbiAgICogY29tcG9uZW50LiBJdCBhbGxvd3MgdGhlIHBhcmVudCBjb21wb25lbnQgdG8gbGlzdGVuIGZvciBhbmQgcmVzcG9uZCB0byBldmVudHMgZnJvbSB0aGVcbiAgICogZHluYW1pYyBjb21wb25lbnQsIGNyZWF0aW5nIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsIGJldHdlZW4gdGhlIHBhcmVudCBhbmQgdGhlIGR5bmFtaWNhbGx5XG4gICAqIHJlbmRlcmVkIGNoaWxkLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQ+fVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBsaXN0ZW5FdmVudDogRXZlbnRFbWl0dGVyPE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgcHJvcGVydHkgaG9sZHMgYSBMb2dnZXIgaW5zdGFuY2Ugc3BlY2lmaWMgdG8gdGhpcyBjb21wb25lbnQuXG4gICAqIEl0J3MgdXNlZCB0byBsb2cgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlIGNvbXBvbmVudCdzXG4gICAqIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZyB0aGUgZHluYW1pY1xuICAgKiBjb21wb25lbnQgcmVuZGVyaW5nIHByb2Nlc3MuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgbG9nZ2VyITogTG9nZ2VyO1xuXG4gIEBJbnB1dCgpXG4gIHBhcmVudDogdW5kZWZpbmVkIHwgS2V5VmFsdWUgPSB1bmRlZmluZWQ7XG5cblxuICBAVmlld0NoaWxkKCdpbm5lcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBpbm5lcj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQuIFRoaXMgY29tcG9uZW50IGRvZXNuJ3QgcmVxdWlyZVxuICAgKiBhbnkgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGluIGl0cyBjb25zdHJ1Y3RvciBhcyBpdCB1c2VzIHRoZSBpbmplY3QgZnVuY3Rpb24gdG9cbiAgICogb2J0YWluIHRoZSBFbnZpcm9ubWVudEluamVjdG9yLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFmdGVyIEFuZ3VsYXIgZmlyc3QgZGlzcGxheXMgdGhlIGRhdGEtYm91bmQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgY29tcG9uZW50IGJ5IGNyZWF0aW5nIHRoZSBkeW5hbWljIGNvbXBvbmVudCBzcGVjaWZpZWQgYnkgdGhlIHRhZyBpbnB1dC5cbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkIGFuZCB0cmlnZ2VycyB0aGUgZHluYW1pY1xuICAgKiBjb21wb25lbnQgY3JlYXRpb24gcHJvY2VzcyB3aXRoIHRoZSBwcm92aWRlZCB0YWcgbmFtZSBhbmQgZ2xvYmFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUyXG4gICAqXG4gICAqICAgQS0+PkM6IG5nT25Jbml0KClcbiAgICogICBDLT4+QzogY3JlYXRlQ29tcG9uZW50KHRhZywgZ2xvYmFscylcbiAgICogICBDLT4+UjogY29tcG9uZW50cyh0YWcpXG4gICAqICAgUi0tPj5DOiBSZXR1cm4gY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAqICAgQy0+PkM6IFByb2Nlc3MgY29tcG9uZW50IGlucHV0c1xuICAgKiAgIEMtPj5DOiBDcmVhdGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAqICAgQy0+PkM6IHN1YnNjcmliZUV2ZW50cygpXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQodGhpcy50YWcsIHRoaXMuZ2xvYmFscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlUGFyZW50Q29tcG9uZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhbnMgdXAgcmVzb3VyY2VzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkIGJ5IEFuZ3VsYXIuXG4gICAqIFRoaXMgaW5jbHVkZXMgdW5zdWJzY3JpYmluZyBmcm9tIGFsbCBldmVudCBlbWl0dGVycyBvZiB0aGUgZHluYW1pYyBjb21wb25lbnQgYW5kXG4gICAqIGRlc3Ryb3lpbmcgdGhlIHJlbmRlcmluZyBlbmdpbmUgaW5zdGFuY2UgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUyXG4gICAqXG4gICAqICAgQS0+PkM6IG5nT25EZXN0cm95KClcbiAgICogICBhbHQgY29tcG9uZW50IGV4aXN0c1xuICAgKiAgICAgQy0+PkM6IHVuc3Vic2NyaWJlRXZlbnRzKClcbiAgICogICAgIEMtPj5SOiBkZXN0cm95KClcbiAgICogICBlbmRcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBjbGVhbnVwIGlzIGNvbXBsZXRlXG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICBOZ3hSZW5kZXJpbmdFbmdpbmUyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW5kIHJlbmRlcnMgYSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgYSBkeW5hbWljIGNvbXBvbmVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGFnLlxuICAgKiBJdCByZXRyaWV2ZXMgdGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBmcm9tIHRoZSByZW5kZXJpbmcgZW5naW5lLCBwcm9jZXNzZXMgaXRzIGlucHV0cyxcbiAgICogZmlsdGVycyBvdXQgdW5tYXBwZWQgcHJvcGVydGllcywgY3JlYXRlcyB0aGUgY29tcG9uZW50IGluc3RhbmNlLCBhbmQgc2V0cyB1cCBldmVudCBzdWJzY3JpcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBjb21wb25lbnQgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IGdsb2JhbHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgTmd4UmVuZGVyaW5nRW5naW5lMlxuICAgKiAgIHBhcnRpY2lwYW50IFYgYXMgVmlld0NvbnRhaW5lclJlZlxuICAgKlxuICAgKiAgIEMtPj5SOiBjb21wb25lbnRzKHRhZylcbiAgICogICBSLS0+PkM6IFJldHVybiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogICBDLT4+QzogcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KVxuICAgKiAgIEMtPj5DOiBQcm9jZXNzIGlucHV0IHByb3BlcnRpZXNcbiAgICogICBDLT4+QzogRmlsdGVyIHVubWFwcGVkIHByb3BlcnRpZXNcbiAgICogICBDLT4+VjogY2xlYXIoKVxuICAgKiAgIEMtPj5SOiBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCBwcm9wcywgbWV0YWRhdGEsIHZjciwgaW5qZWN0b3IsIFtdKVxuICAgKiAgIFItLT4+QzogUmV0dXJuIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICogICBDLT4+Qzogc3Vic2NyaWJlRXZlbnRzKClcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudCh0YWc6IHN0cmluZywgZ2xvYmFsczogS2V5VmFsdWUgPSB7fSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IE5neFJlbmRlcmluZ0VuZ2luZTIuY29tcG9uZW50cyh0YWcpXG4gICAgICA/LmNvbnN0cnVjdG9yIGFzIFR5cGU8dW5rbm93bj47XG4gICAgY29uc3QgbWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpO1xuICAgIGNvbnN0IGNvbXBvbmVudElucHV0cyA9IChtZXRhZGF0YSBhcyBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pLmlucHV0cztcbiAgICBjb25zdCBwcm9wcyA9IGdsb2JhbHM/LlsnaXRlbSddO1xuICAgIGRlbGV0ZSBwcm9wc1sndGFnJ107XG4gICAgY29uc3QgaW5wdXRLZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGNvbnN0IHVubWFwcGVkS2V5cyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dEtleXMpIHtcbiAgICAgIGlmICghaW5wdXRLZXlzLmxlbmd0aCkgYnJlYWs7XG4gICAgICBjb25zdCBwcm9wID0gY29tcG9uZW50SW5wdXRzLmZpbmQoXG4gICAgICAgIChpdGVtOiB7IHByb3BOYW1lOiBzdHJpbmcgfSkgPT4gaXRlbS5wcm9wTmFtZSA9PT0gaW5wdXQsXG4gICAgICApO1xuICAgICAgaWYgKCFwcm9wKSB7XG4gICAgICAgIGRlbGV0ZSBwcm9wc1tpbnB1dF07XG4gICAgICAgIHVubWFwcGVkS2V5cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVubWFwcGVkS2V5cy5sZW5ndGgpXG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBVbm1hcHBlZCBpbnB1dCBwcm9wZXJ0aWVzIGZvciBjb21wb25lbnQgJHt0YWd9OiAke3VubWFwcGVkS2V5cy5qb2luKCcsICcpfWApO1xuXG4gICAgdGhpcy52Y3IuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudCA9IE5neFJlbmRlcmluZ0VuZ2luZTIuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgY29tcG9uZW50LFxuICAgICAgcHJvcHMsXG4gICAgICBtZXRhZGF0YSBhcyBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sXG4gICAgICB0aGlzLnZjcixcbiAgICAgIHRoaXMuaW5qZWN0b3IgYXMgSW5qZWN0b3IsXG4gICAgICBbXSxcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gIH1cblxuICBjcmVhdGVQYXJlbnRDb21wb25lbnQoKSB7XG4gICAgY29uc3QgeyBjb21wb25lbnQsIGlucHV0cyB9ID0gdGhpcy5wYXJlbnQgYXMgS2V5VmFsdWU7XG4gICAgY29uc3QgbWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpIGFzIENvbXBvbmVudE1pcnJvcjx1bmtub3duPjtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmlubmVyIGFzIFRlbXBsYXRlUmVmPHVua25vd24+LCB0aGlzLmluamVjdG9yKS5yb290Tm9kZXM7XG4gICAgdGhpcy5jb21wb25lbnQgPSBOZ3hSZW5kZXJpbmdFbmdpbmUyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGlucHV0cyxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdGhpcy52Y3IsXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpYmVzIHRvIGV2ZW50cyBlbWl0dGVkIGJ5IHRoZSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2V0cyB1cCBzdWJzY3JpcHRpb25zIHRvIGFsbCBFdmVudEVtaXR0ZXIgcHJvcGVydGllcyBvZiB0aGVcbiAgICogZHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnQuIFdoZW4gYW4gZXZlbnQgaXMgZW1pdHRlZCBieSB0aGUgZHluYW1pYyBjb21wb25lbnQsXG4gICAqIGl0IGlzIGNhcHR1cmVkIGFuZCByZS1lbWl0dGVkIHRocm91Z2ggdGhlIGxpc3RlbkV2ZW50IG91dHB1dCBwcm9wZXJ0eSB3aXRoIGFkZGl0aW9uYWxcbiAgICogbWV0YWRhdGEgYWJvdXQgdGhlIGV2ZW50IHNvdXJjZS5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRHluYW1pYyBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhcmVudCBDb21wb25lbnRcbiAgICpcbiAgICogICBDLT4+Qzogc3Vic2NyaWJlRXZlbnRzKClcbiAgICogICBDLT4+RDogR2V0IGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICogICBsb29wIEZvciBlYWNoIHByb3BlcnR5XG4gICAqICAgICBDLT4+QzogQ2hlY2sgaWYgcHJvcGVydHkgaXMgRXZlbnRFbWl0dGVyXG4gICAqICAgICBhbHQgaXMgRXZlbnRFbWl0dGVyXG4gICAqICAgICAgIEMtPj5EOiBTdWJzY3JpYmUgdG8gZXZlbnRcbiAgICogICAgICAgRC0tPj5DOiBFdmVudCBlbWl0dGVkXG4gICAqICAgICAgIEMtPj5QOiBSZS1lbWl0IGV2ZW50IHdpdGggbWV0YWRhdGFcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlRXZlbnRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvbmVudCkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudD8uaW5zdGFuY2UgYXMgS2V5VmFsdWU7XG4gICAgICBjb25zdCBjb21wb25lbnRLZXlzID0gT2JqZWN0LmtleXMoaW5zdGFuY2UpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29tcG9uZW50S2V5cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcilcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgS2V5VmFsdWUpW2tleV0uc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGV2ZW50OiBQYXJ0aWFsPEJhc2VDdXN0b21FdmVudD4pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5FdmVudC5lbWl0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICAgIH0gYXMgTW9kZWxSZW5kZXJDdXN0b21FdmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbnN1YnNjcmliZXMgZnJvbSBhbGwgZXZlbnRzIG9mIHRoZSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgY2xlYW5zIHVwIGV2ZW50IHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICogSXQgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBvZiB0aGUgZHluYW1pYyBjb21wb25lbnQgaW5zdGFuY2UgYW5kIHVuc3Vic2NyaWJlc1xuICAgKiBmcm9tIGFueSBFdmVudEVtaXR0ZXIgcHJvcGVydGllcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvciBhZnRlclxuICAgKiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRHluYW1pYyBDb21wb25lbnRcbiAgICpcbiAgICogICBDLT4+QzogdW5zdWJzY3JpYmVFdmVudHMoKVxuICAgKiAgIEMtPj5EOiBHZXQgaW5zdGFuY2UgcHJvcGVydGllc1xuICAgKiAgIGxvb3AgRm9yIGVhY2ggcHJvcGVydHlcbiAgICogICAgIEMtPj5DOiBDaGVjayBpZiBwcm9wZXJ0eSBpcyBFdmVudEVtaXR0ZXJcbiAgICogICAgIGFsdCBpcyBFdmVudEVtaXR0ZXJcbiAgICogICAgICAgQy0+PkQ6IFVuc3Vic2NyaWJlIGZyb20gZXZlbnRcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVFdmVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZSBhcyBLZXlWYWx1ZTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEtleXMgPSBPYmplY3Qua2V5cyhpbnN0YW5jZSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb21wb25lbnRLZXlzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSBpbnN0YW5jZVtrZXldLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2NvbXBvbmVudFZpZXdDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgQGlmKHBhcmVudD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgIEBmb3IoY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuOyB0cmFjayBjaGlsZCkge1xuICAgICAgICBAaWYoIWNoaWxkLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjaGlsZC5jb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICBpbmplY3RvcjogY2hpbGQuaW5qZWN0b3I7XG4gICAgICAgICAgICAgICAgICBpbnB1dHM6IGNoaWxkLmlucHV0cztcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6Y2hpbGQuY29udGVudDtcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxuZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyIFtwYXJlbnRdPVwiY2hpbGRcIj4gPC9uZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyPlxuICAgICAgICB9XG4gICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuXG4iXX0=
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21wb25lbnQtcmVuZGVyZXIvY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21wb25lbnQtcmVuZGVyZXIvY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixNQUFNLEVBRU4sS0FBSyxFQUdMLE1BQU0sRUFDTixvQkFBb0IsRUFDcEIsV0FBVyxFQUVYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFJekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBUUgsTUFBTSxPQUFPLDBCQUEwQjtJQTRHckM7Ozs7Ozs7T0FPRztJQUNIO1FBeEZBOzs7Ozs7Ozs7O1dBVUc7UUFFSCxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUV0Qzs7Ozs7Ozs7O1dBU0c7UUFDSCxhQUFRLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBYTVEOzs7Ozs7Ozs7V0FTRztRQUVILGdCQUFXLEdBQ1QsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUF5QjFDLFdBQU0sR0FBeUIsU0FBUyxDQUFDO1FBZXZDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNC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VSwwQkFBMEI7bUdBQTFCLDBCQUEwQix5U0FXc0IsZ0JBQWdCLHVHQThGL0MsV0FBVywyQ0MvS3pDLCttQkFzQkEsMEREZ0RhLDBCQUEwQixpSkFIM0IsZ0JBQWdCOzs0RkFHZiwwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0UsOEJBQThCLFdBRy9CLENBQUMsZ0JBQWdCLENBQUMsY0FDZixJQUFJO3dEQWNoQixHQUFHO3NCQURGLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFlN0UsR0FBRztzQkFERixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFlekIsT0FBTztzQkFETixLQUFLO2dCQXFDTixXQUFXO3NCQURWLE1BQU07Z0JBd0JQLEtBQUs7c0JBREosS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBS04sS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50TWlycm9yLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIHJlZmxlY3RDb21wb25lbnRUeXBlLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFJlbmRlcmluZ0VuZ2luZTIgfSBmcm9tICdzcmMvbGliL2VuZ2luZS9OZ3hSZW5kZXJpbmdFbmdpbmUyJztcbmltcG9ydCB7IEJhc2VDdXN0b21FdmVudCwgS2V5VmFsdWUsIFJlbmRlcmVyQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSwgZ2V0TG9nZ2VyIH0gZnJvbSAnc3JjL2xpYi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGRlY2FmLXRzL2xvZ2dpbmcnO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEeW5hbWljIGNvbXBvbmVudCByZW5kZXJlciBmb3IgRGVjYWYgQW5ndWxhciBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGZsZXhpYmxlIHdheSB0byBkeW5hbWljYWxseSByZW5kZXIgQW5ndWxhciBjb21wb25lbnRzXG4gKiBhdCBydW50aW1lIGJhc2VkIG9uIGEgdGFnIG5hbWUuIEl0IGhhbmRsZXMgdGhlIGNyZWF0aW9uLCBwcm9wZXJ0eSBiaW5kaW5nLCBhbmQgZXZlbnRcbiAqIHN1YnNjcmlwdGlvbiBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIGNvbXBvbmVudHMuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3JcbiAqIGJ1aWxkaW5nIGNvbmZpZ3VyYWJsZSBVSXMgd2hlcmUgY29tcG9uZW50cyBuZWVkIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbiAqXG4gKiBAY29tcG9uZW50IHtDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudH1cbiAqIEBleGFtcGxlXG4gKiA8bmd4LWRlY2FmLWNvbXBvbmVudC1yZW5kZXJlclxuICogICBbdGFnXT1cInRhZ1wiXG4gKiAgIFtnbG9iYWxzXT1cImdsb2JhbHNcIlxuICogICAobGlzdGVuRXZlbnQpPVwibGlzdGVuRXZlbnQoJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyPlxuICpcbiAqIEBtZXJtYWlkXG4gKiBjbGFzc0RpYWdyYW1cbiAqICAgY2xhc3MgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQge1xuICogICAgICtWaWV3Q29udGFpbmVyUmVmIHZjclxuICogICAgICtzdHJpbmcgdGFnXG4gKiAgICAgK1JlY29yZH5zdHJpbmcsIHVua25vd25+IGdsb2JhbHNcbiAqICAgICArRW52aXJvbm1lbnRJbmplY3RvciBpbmplY3RvclxuICogICAgICtDb21wb25lbnRSZWZ+dW5rbm93bn4gY29tcG9uZW50XG4gKiAgICAgK0V2ZW50RW1pdHRlcn5SZW5kZXJlckN1c3RvbUV2ZW50fiBsaXN0ZW5FdmVudFxuICogICAgICtuZ09uSW5pdCgpXG4gKiAgICAgK25nT25EZXN0cm95KClcbiAqICAgICArbmdPbkNoYW5nZXMoY2hhbmdlcylcbiAqICAgICAtY3JlYXRlQ29tcG9uZW50KHRhZywgZ2xvYmFscylcbiAqICAgICAtc3Vic2NyaWJlRXZlbnRzKClcbiAqICAgICAtdW5zdWJzY3JpYmVFdmVudHMoKVxuICogICB9XG4gKiAgIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IC0tfD4gT25Jbml0XG4gKiAgIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IC0tfD4gT25DaGFuZ2VzXG4gKiAgIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IC0tfD4gT25EZXN0cm95XG4gKlxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqIEBpbXBsZW1lbnRzIHtPbkNoYW5nZXN9XG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBkeW5hbWljIGNvbXBvbmVudCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIFZpZXdDb250YWluZXJSZWYgcHJvdmlkZXMgdGhlIGNvbnRhaW5lciB3aGVyZSB0aGUgZHluYW1pY2FsbHkgY3JlYXRlZFxuICAgKiBjb21wb25lbnQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uIEl0J3MgbWFya2VkIGFzIHN0YXRpYyB0byBlbnN1cmUgaXQncyBhdmFpbGFibGVcbiAgICogZHVyaW5nIHRoZSBuZ09uSW5pdCBsaWZlY3ljbGUgaG9vayB3aGVuIHRoZSBjb21wb25lbnQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHR5cGUge1ZpZXdDb250YWluZXJSZWZ9XG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50Vmlld0NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHZjciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdGFnIG5hbWUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBkeW5hbWljYWxseSByZW5kZXJlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBpbnB1dCBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hpY2ggY29tcG9uZW50IHNob3VsZCBiZSByZW5kZXJlZCBieSBwcm92aWRpbmdcbiAgICogaXRzIHJlZ2lzdGVyZWQgdGFnIG5hbWUuIFRoZSB0YWcgbXVzdCBjb3JyZXNwb25kIHRvIGEgY29tcG9uZW50IHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZFxuICAgKiB3aXRoIHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmUyLiBUaGlzIGlzIGEgcmVxdWlyZWQgaW5wdXQgYXMgaXQgZGV0ZXJtaW5lcyB3aGljaCBjb21wb25lbnRcbiAgICogdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAcmVxdWlyZWRcbiAgICogQG1lbWJlck9mIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICB0YWchOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSByZW5kZXJlZCBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgaW5wdXQgcHJvcGVydHkgYWxsb3dzIHBhc3NpbmcgYSBzZXQgb2YgcHJvcGVydGllcyB0byB0aGUgZHluYW1pY2FsbHlcbiAgICogcmVuZGVyZWQgY29tcG9uZW50LiBUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbWFwcGVkIHRvIHRoZSBjb21wb25lbnQncyBpbnB1dHMgaWYgdGhleVxuICAgKiBtYXRjaC4gUHJvcGVydGllcyB0aGF0IGRvbid0IG1hdGNoIGFueSBpbnB1dCBvbiB0aGUgdGFyZ2V0IGNvbXBvbmVudCB3aWxsIGJlIGZpbHRlcmVkIG91dFxuICAgKiB3aXRoIGEgd2FybmluZy5cbiAgICpcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKiBAZGVmYXVsdCB7fVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdsb2JhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbmplY3RvciB1c2VkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBpbiB0aGUgZHluYW1pYyBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgaW5qZWN0b3IgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBkeW5hbWljIGNvbXBvbmVudCB0byBwcm92aWRlIGl0IHdpdGhcbiAgICogYWNjZXNzIHRvIHRoZSBhcHBsaWNhdGlvbidzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBkeW5hbWljYWxseVxuICAgKiBjcmVhdGVkIGNvbXBvbmVudCBjYW4gYWNjZXNzIHRoZSBzYW1lIHNlcnZpY2VzIGFuZCBkZXBlbmRlbmNpZXMgYXMgc3RhdGljYWxseSBjcmVhdGVkXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtFbnZpcm9ubWVudEluamVjdG9yfVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBkeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBwcm9wZXJ0eSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgQ29tcG9uZW50UmVmIG9mIHRoZSBkeW5hbWljYWxseSBjcmVhdGVkXG4gICAqIGNvbXBvbmVudC4gSXQncyB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgc3Vic2NyaWJlIHRvIGl0cyBldmVudHMsXG4gICAqIGFuZCBwcm9wZXJseSBkZXN0cm95IGl0IHdoZW4gdGhlIHJlbmRlcmVyIGlzIGRlc3Ryb3llZC5cbiAgICpcbiAgICogQHR5cGUge0NvbXBvbmVudFJlZjx1bmtub3duPn1cbiAgICogQG1lbWJlck9mIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqL1xuICBjb21wb25lbnQhOiBDb21wb25lbnRSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBldmVudHMgZnJvbSB0aGUgcmVuZGVyZWQgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBUaGlzIG91dHB1dCBwcm9wZXJ0eSBlbWl0cyBldmVudHMgdGhhdCBvcmlnaW5hdGUgZnJvbSB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWRcbiAgICogY29tcG9uZW50LiBJdCBhbGxvd3MgdGhlIHBhcmVudCBjb21wb25lbnQgdG8gbGlzdGVuIGZvciBhbmQgcmVzcG9uZCB0byBldmVudHMgZnJvbSB0aGVcbiAgICogZHluYW1pYyBjb21wb25lbnQsIGNyZWF0aW5nIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsIGJldHdlZW4gdGhlIHBhcmVudCBhbmQgdGhlIGR5bmFtaWNhbGx5XG4gICAqIHJlbmRlcmVkIGNoaWxkLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPFJlbmRlcmVyQ3VzdG9tRXZlbnQ+fVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBsaXN0ZW5FdmVudDogRXZlbnRFbWl0dGVyPFJlbmRlcmVyQ3VzdG9tRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlbmRlcmVyQ3VzdG9tRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgcHJvcGVydHkgaG9sZHMgYSBMb2dnZXIgaW5zdGFuY2Ugc3BlY2lmaWMgdG8gdGhpcyBjb21wb25lbnQuXG4gICAqIEl0J3MgdXNlZCB0byBsb2cgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlIGNvbXBvbmVudCdzXG4gICAqIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZyB0aGUgZHluYW1pY1xuICAgKiBjb21wb25lbnQgcmVuZGVyaW5nIHByb2Nlc3MuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgbG9nZ2VyITogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBtb2RlbCBmb3IgZGF0YSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGUgZGF0YSBtb2RlbCByZXBvc2l0b3J5IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogVGhpcyBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWx8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogIE1vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHBhcmVudDogdW5kZWZpbmVkIHwgS2V5VmFsdWUgPSB1bmRlZmluZWQ7XG5cblxuICBAVmlld0NoaWxkKCdpbm5lcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBpbm5lcj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQuIFRoaXMgY29tcG9uZW50IGRvZXNuJ3QgcmVxdWlyZVxuICAgKiBhbnkgZGVwZW5kZW5jaWVzIHRvIGJlIGluamVjdGVkIGluIGl0cyBjb25zdHJ1Y3RvciBhcyBpdCB1c2VzIHRoZSBpbmplY3QgZnVuY3Rpb24gdG9cbiAgICogb2J0YWluIHRoZSBFbnZpcm9ubWVudEluamVjdG9yLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFmdGVyIEFuZ3VsYXIgZmlyc3QgZGlzcGxheXMgdGhlIGRhdGEtYm91bmQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgY29tcG9uZW50IGJ5IGNyZWF0aW5nIHRoZSBkeW5hbWljIGNvbXBvbmVudCBzcGVjaWZpZWQgYnkgdGhlIHRhZyBpbnB1dC5cbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkIGFuZCB0cmlnZ2VycyB0aGUgZHluYW1pY1xuICAgKiBjb21wb25lbnQgY3JlYXRpb24gcHJvY2VzcyB3aXRoIHRoZSBwcm92aWRlZCB0YWcgbmFtZSBhbmQgZ2xvYmFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUyXG4gICAqXG4gICAqICAgQS0+PkM6IG5nT25Jbml0KClcbiAgICogICBDLT4+QzogY3JlYXRlQ29tcG9uZW50KHRhZywgZ2xvYmFscylcbiAgICogICBDLT4+UjogY29tcG9uZW50cyh0YWcpXG4gICAqICAgUi0tPj5DOiBSZXR1cm4gY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAqICAgQy0+PkM6IFByb2Nlc3MgY29tcG9uZW50IGlucHV0c1xuICAgKiAgIEMtPj5DOiBDcmVhdGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAqICAgQy0+PkM6IHN1YnNjcmliZUV2ZW50cygpXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQodGhpcy50YWcsIHRoaXMuZ2xvYmFscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlUGFyZW50Q29tcG9uZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhbnMgdXAgcmVzb3VyY2VzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkIGJ5IEFuZ3VsYXIuXG4gICAqIFRoaXMgaW5jbHVkZXMgdW5zdWJzY3JpYmluZyBmcm9tIGFsbCBldmVudCBlbWl0dGVycyBvZiB0aGUgZHluYW1pYyBjb21wb25lbnQgYW5kXG4gICAqIGRlc3Ryb3lpbmcgdGhlIHJlbmRlcmluZyBlbmdpbmUgaW5zdGFuY2UgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUyXG4gICAqXG4gICAqICAgQS0+PkM6IG5nT25EZXN0cm95KClcbiAgICogICBhbHQgY29tcG9uZW50IGV4aXN0c1xuICAgKiAgICAgQy0+PkM6IHVuc3Vic2NyaWJlRXZlbnRzKClcbiAgICogICAgIEMtPj5SOiBkZXN0cm95KClcbiAgICogICBlbmRcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBjbGVhbnVwIGlzIGNvbXBsZXRlXG4gICAqIEBtZW1iZXJPZiBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICBOZ3hSZW5kZXJpbmdFbmdpbmUyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW5kIHJlbmRlcnMgYSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgYSBkeW5hbWljIGNvbXBvbmVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGFnLlxuICAgKiBJdCByZXRyaWV2ZXMgdGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBmcm9tIHRoZSByZW5kZXJpbmcgZW5naW5lLCBwcm9jZXNzZXMgaXRzIGlucHV0cyxcbiAgICogZmlsdGVycyBvdXQgdW5tYXBwZWQgcHJvcGVydGllcywgY3JlYXRlcyB0aGUgY29tcG9uZW50IGluc3RhbmNlLCBhbmQgc2V0cyB1cCBldmVudCBzdWJzY3JpcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBjb21wb25lbnQgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IGdsb2JhbHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgTmd4UmVuZGVyaW5nRW5naW5lMlxuICAgKiAgIHBhcnRpY2lwYW50IFYgYXMgVmlld0NvbnRhaW5lclJlZlxuICAgKlxuICAgKiAgIEMtPj5SOiBjb21wb25lbnRzKHRhZylcbiAgICogICBSLS0+PkM6IFJldHVybiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogICBDLT4+QzogcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KVxuICAgKiAgIEMtPj5DOiBQcm9jZXNzIGlucHV0IHByb3BlcnRpZXNcbiAgICogICBDLT4+QzogRmlsdGVyIHVubWFwcGVkIHByb3BlcnRpZXNcbiAgICogICBDLT4+VjogY2xlYXIoKVxuICAgKiAgIEMtPj5SOiBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCBwcm9wcywgbWV0YWRhdGEsIHZjciwgaW5qZWN0b3IsIFtdKVxuICAgKiAgIFItLT4+QzogUmV0dXJuIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICogICBDLT4+Qzogc3Vic2NyaWJlRXZlbnRzKClcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudCh0YWc6IHN0cmluZywgZ2xvYmFsczogS2V5VmFsdWUgPSB7fSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IE5neFJlbmRlcmluZ0VuZ2luZTIuY29tcG9uZW50cyh0YWcpXG4gICAgICA/LmNvbnN0cnVjdG9yIGFzIFR5cGU8dW5rbm93bj47XG4gICAgY29uc3QgbWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpO1xuICAgIGNvbnN0IGNvbXBvbmVudElucHV0cyA9IChtZXRhZGF0YSBhcyBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pLmlucHV0cztcbiAgICBjb25zdCBwcm9wcyA9IGdsb2JhbHM/LlsnaXRlbSddIHx8IGdsb2JhbHM/LlsncHJvcHMnXSB8fCB7fTtcbiAgICBpZihwcm9wcz8uWyd0YWcnXSlcbiAgICAgIGRlbGV0ZSBwcm9wc1sndGFnJ107XG4gICAgY29uc3QgaW5wdXRLZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGNvbnN0IHVubWFwcGVkS2V5cyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dEtleXMpIHtcbiAgICAgIGlmICghaW5wdXRLZXlzLmxlbmd0aCkgYnJlYWs7XG4gICAgICBjb25zdCBwcm9wID0gY29tcG9uZW50SW5wdXRzLmZpbmQoXG4gICAgICAgIChpdGVtOiB7IHByb3BOYW1lOiBzdHJpbmcgfSkgPT4gaXRlbS5wcm9wTmFtZSA9PT0gaW5wdXQsXG4gICAgICApO1xuICAgICAgaWYgKCFwcm9wKSB7XG4gICAgICAgIGRlbGV0ZSBwcm9wc1tpbnB1dF07XG4gICAgICAgIHVubWFwcGVkS2V5cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52Y3IuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudCA9IE5neFJlbmRlcmluZ0VuZ2luZTIuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgY29tcG9uZW50LFxuICAgICAgcHJvcHMsXG4gICAgICBtZXRhZGF0YSBhcyBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sXG4gICAgICB0aGlzLnZjcixcbiAgICAgIHRoaXMuaW5qZWN0b3IgYXMgSW5qZWN0b3IsXG4gICAgICBbXSxcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gIH1cblxuICBjcmVhdGVQYXJlbnRDb21wb25lbnQoKSB7XG4gICAgY29uc3QgeyBjb21wb25lbnQsIGlucHV0cyB9ID0gdGhpcy5wYXJlbnQgYXMgS2V5VmFsdWU7XG4gICAgY29uc3QgbWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpIGFzIENvbXBvbmVudE1pcnJvcjx1bmtub3duPjtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmlubmVyIGFzIFRlbXBsYXRlUmVmPHVua25vd24+LCB0aGlzLmluamVjdG9yKS5yb290Tm9kZXM7XG4gICAgdGhpcy5jb21wb25lbnQgPSBOZ3hSZW5kZXJpbmdFbmdpbmUyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGlucHV0cyxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdGhpcy52Y3IsXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpYmVzIHRvIGV2ZW50cyBlbWl0dGVkIGJ5IHRoZSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2V0cyB1cCBzdWJzY3JpcHRpb25zIHRvIGFsbCBFdmVudEVtaXR0ZXIgcHJvcGVydGllcyBvZiB0aGVcbiAgICogZHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnQuIFdoZW4gYW4gZXZlbnQgaXMgZW1pdHRlZCBieSB0aGUgZHluYW1pYyBjb21wb25lbnQsXG4gICAqIGl0IGlzIGNhcHR1cmVkIGFuZCByZS1lbWl0dGVkIHRocm91Z2ggdGhlIGxpc3RlbkV2ZW50IG91dHB1dCBwcm9wZXJ0eSB3aXRoIGFkZGl0aW9uYWxcbiAgICogbWV0YWRhdGEgYWJvdXQgdGhlIGV2ZW50IHNvdXJjZS5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRHluYW1pYyBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhcmVudCBDb21wb25lbnRcbiAgICpcbiAgICogICBDLT4+Qzogc3Vic2NyaWJlRXZlbnRzKClcbiAgICogICBDLT4+RDogR2V0IGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICogICBsb29wIEZvciBlYWNoIHByb3BlcnR5XG4gICAqICAgICBDLT4+QzogQ2hlY2sgaWYgcHJvcGVydHkgaXMgRXZlbnRFbWl0dGVyXG4gICAqICAgICBhbHQgaXMgRXZlbnRFbWl0dGVyXG4gICAqICAgICAgIEMtPj5EOiBTdWJzY3JpYmUgdG8gZXZlbnRcbiAgICogICAgICAgRC0tPj5DOiBFdmVudCBlbWl0dGVkXG4gICAqICAgICAgIEMtPj5QOiBSZS1lbWl0IGV2ZW50IHdpdGggbWV0YWRhdGFcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlRXZlbnRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvbmVudCkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudD8uaW5zdGFuY2UgYXMgS2V5VmFsdWU7XG4gICAgICBjb25zdCBjb21wb25lbnRLZXlzID0gT2JqZWN0LmtleXMoaW5zdGFuY2UpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29tcG9uZW50S2V5cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcilcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgS2V5VmFsdWUpW2tleV0uc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGV2ZW50OiBQYXJ0aWFsPEJhc2VDdXN0b21FdmVudD4pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0ZW5FdmVudC5lbWl0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICAgIH0gYXMgUmVuZGVyZXJDdXN0b21FdmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbnN1YnNjcmliZXMgZnJvbSBhbGwgZXZlbnRzIG9mIHRoZSBkeW5hbWljIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgY2xlYW5zIHVwIGV2ZW50IHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICogSXQgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBvZiB0aGUgZHluYW1pYyBjb21wb25lbnQgaW5zdGFuY2UgYW5kIHVuc3Vic2NyaWJlc1xuICAgKiBmcm9tIGFueSBFdmVudEVtaXR0ZXIgcHJvcGVydGllcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvciBhZnRlclxuICAgKiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRHluYW1pYyBDb21wb25lbnRcbiAgICpcbiAgICogICBDLT4+QzogdW5zdWJzY3JpYmVFdmVudHMoKVxuICAgKiAgIEMtPj5EOiBHZXQgaW5zdGFuY2UgcHJvcGVydGllc1xuICAgKiAgIGxvb3AgRm9yIGVhY2ggcHJvcGVydHlcbiAgICogICAgIEMtPj5DOiBDaGVjayBpZiBwcm9wZXJ0eSBpcyBFdmVudEVtaXR0ZXJcbiAgICogICAgIGFsdCBpcyBFdmVudEVtaXR0ZXJcbiAgICogICAgICAgQy0+PkQ6IFVuc3Vic2NyaWJlIGZyb20gZXZlbnRcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVFdmVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZSBhcyBLZXlWYWx1ZTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEtleXMgPSBPYmplY3Qua2V5cyhpbnN0YW5jZSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb21wb25lbnRLZXlzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSBpbnN0YW5jZVtrZXldLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2NvbXBvbmVudFZpZXdDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgQGlmKHBhcmVudD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgIEBmb3IoY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuOyB0cmFjayBjaGlsZCkge1xuICAgICAgICBAaWYoIWNoaWxkLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjaGlsZC5jb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICBpbmplY3RvcjogY2hpbGQuaW5qZWN0b3I7XG4gICAgICAgICAgICAgICAgICBpbnB1dHM6IGNoaWxkLmlucHV0cztcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6Y2hpbGQuY29udGVudDtcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxuZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyIFtwYXJlbnRdPVwiY2hpbGRcIj4gPC9uZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyPlxuICAgICAgICB9XG4gICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuXG4iXX0=
@@ -76,7 +76,7 @@ let CrudFormComponent = class CrudFormComponent {
76
76
  const data = NgxFormService.getFormData(this.formGroup);
77
77
  this.submitEvent.emit({
78
78
  data,
79
- component: 'FormReactiveComponent',
79
+ component: 'CrudFormComponent',
80
80
  name: this.action || EventConstants.SUBMIT_EVENT,
81
81
  handlers: this.handlers,
82
82
  });
@@ -91,7 +91,7 @@ let CrudFormComponent = class CrudFormComponent {
91
91
  handleDelete() {
92
92
  this.submitEvent.emit({
93
93
  data: this.uid,
94
- component: 'FormReactiveComponent',
94
+ component: 'CrudFormComponent',
95
95
  name: EventConstants.SUBMIT_EVENT,
96
96
  });
97
97
  }
@@ -136,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
136
136
  }], submitEvent: [{
137
137
  type: Output
138
138
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUV0SCxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBS3BEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBU0ksSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7SUFBdkI7UUFhTCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQU1yQyxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUdqQyxXQUFNLEdBQTZCLE9BQU8sQ0FBQztRQTBDM0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQWtCaEQ7Ozs7Ozs7OztXQVNHO1FBQ0ssYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQTZEM0Isa0JBQWEsR0FBRyxhQUFhLENBQUM7S0FDbEQ7SUE1REMsc0JBQXNCO0lBQ3BCLDRFQUE0RTtJQUM1RSw2REFBNkQ7SUFDL0QsSUFBSTtJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsTUFBTTtZQUNsRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzFCLEVBQUUsRUFDRiwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQ25CLENBQUM7SUFFSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVM7WUFDaEIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFrQjtRQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFzQixDQUFDO1lBQzdELE9BQU8sS0FBSyxDQUFDO1FBRWYsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBc0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BCLElBQUk7WUFDSixTQUFTLEVBQUUsdUJBQXVCO1lBQ2xDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxZQUFZO1lBQ2hELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsOENBQThDO1FBQzlDLDBDQUEwQztRQUMxQyxPQUFPO1FBQ1AsMEJBQTBCO0lBQzVCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2QsU0FBUyxFQUFFLHVCQUF1QjtZQUNsQyxJQUFJLEVBQUUsY0FBYyxDQUFDLFlBQVk7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F2SlUsaUJBQWlCO21HQUFqQixpQkFBaUIsMGNBZXNCLFVBQVUsNkJDcEU5RCxrNkVBNERBLG9IRFRZLGdCQUFnQixxckJBQUUsT0FBTzs7QUFFeEIsaUJBQWlCO0lBUjdCLE9BQU8sRUFBRTtHQVFHLGlCQUFpQixDQTBKN0I7OzRGQTFKWSxpQkFBaUI7a0JBUDdCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixXQUd0QixDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQzs4QkFZcEMsS0FBSztzQkFESixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixTQUFTO3NCQURSLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUk5RCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFXTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQVdOLEdBQUc7c0JBREYsS0FBSztnQkFLTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBDcnVkRm9ybUV2ZW50LCBEeW5hbWljLCBFdmVudENvbnN0YW50cywgRmllbGRVcGRhdGVNb2RlLCBIVE1MRm9ybVRhcmdldCwgUmVuZGVyZWRNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlLCBnZXRMb2dnZXIgfSBmcm9tICdzcmMvbGliL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5cblxuLyoqXG4gKiBAY29tcG9uZW50IENydWRGb3JtQ29tcG9uZW50XG4gKiBAZXhhbXBsZSA8bmd4LWRlY2FmLWNydWQtZm9ybVxuICogICBhY3Rpb249XCJjcmVhdGVcIlxuICogICBvcGVyYXRpb249XCJjcmVhdGVcIlxuICogICBmb3JtR3JvdXA9XCJmb3JtR3JvdXBcIlxuICogICByZW5kZXJlcklkPVwicmVuZGVyZXJJZFwiXG4gKiAgIHN1Ym1pdEV2ZW50PVwic3VibWl0RXZlbnRcIlxuICogICB0YXJnZXQ9XCJfc2VsZlwiXG4gKiAgIG1ldGhvZD1cImV2ZW50XCI+XG4gKiA8L25neC1kZWNhZi1jcnVkLWZvcm0+XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtDcnVkT3BlcmF0aW9uc30gb3BlcmF0aW9uIC0gVGhlIENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBmb3JtR3JvdXAgLSBUaGUgZm9ybSBncm91cFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbmRlcmVySWQgLSBUaGUgcmVuZGVyZXIgaWRcbiAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IHN1Ym1pdEV2ZW50IC0gVGhlIHN1Ym1pdCBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIFRoZSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgbWV0aG9kXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1jcnVkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtGb3JBbmd1bGFyTW9kdWxlLCBJb25JY29uXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3J1ZEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWwge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBtb2RlbCBmb3IgZGF0YSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGUgZGF0YSBtb2RlbCByZXBvc2l0b3J5IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogVGhpcyBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWx8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIEBWaWV3Q2hpbGQoJ3JlYWN0aXZlRm9ybScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIEBJbnB1dCgpXG4gIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAnZXZlbnQnID0gJ2V2ZW50JztcblxuICBASW5wdXQoKVxuICBvcHRpb25zITogQ3J1ZEZvcm1PcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbj86IHN0cmluZztcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBvcGVyYXRpb24hOiBDcnVkT3BlcmF0aW9ucztcblxuICBASW5wdXQoKVxuICBoYW5kbGVycyE6IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+PjtcblxuICBASW5wdXQoKVxuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXRoIHRvIHRoZSBwYXJlbnQgRm9ybUdyb3VwLCBpZiBuZXN0ZWQuXG4gICAqIEBzdW1tYXJ5IEZ1bGwgZG90LWRlbGltaXRlZCBwYXRoIG9mIHRoZSBwYXJlbnQgRm9ybUdyb3VwLiBTZXQgb25seSB3aGVuIGlzIHBhcnQgb2YgYSBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNoaWxkT2Y/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyBkaXNwbGF5ZWQgb3IgbWFuaXB1bGF0ZWQuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBrZXkgZm9yIG9wZXJhdGlvbnMgb24gc3BlY2lmaWMgcmVjb3Jkcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHVpZCE6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXG4gIEBPdXRwdXQoKVxuICBzdWJtaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgbG9nZ2luZyBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb21wb25lbnQsIGFsbG93aW5nIGZvciBjb25zaXN0ZW50XG4gICAqIGFuZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb2YgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzLiBUaGlzIGxvZ2dlciBpcyBpbml0aWFsaXplZFxuICAgKiBpbiB0aGUgbmdPbkluaXQgbWV0aG9kIHVzaW5nIHRoZSBnZXRMb2dnZXIgZnVuY3Rpb24gZnJvbSB0aGUgRm9yQW5ndWxhck1vZHVsZS5cbiAgICpcbiAgICogVGhlIGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCB0byByZWNvcmQgaW1wb3J0YW50IGV2ZW50cywgZGVidWcgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJdCBoZWxwcyBpbiBtb25pdG9yaW5nIHRoZSBjb21wb25lbnQncyBiZWhhdmlvciwgdHJhY2tpbmcgdGhlIGZsb3dcbiAgICogb2Ygb3BlcmF0aW9ucywgYW5kIGZhY2lsaXRhdGluZyBlYXNpZXIgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZS5cbiAgICpcbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYnJvd3NlcidzIFVSTCBhbmQgaGlzdG9yeS5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQSSwgYWxsb3dpbmdcbiAgICogZm9yIGJhY2sgbmF2aWdhdGlvbiBhbmQgVVJMIG1hbmlwdWxhdGlvbiBvdXRzaWRlIG9mIEFuZ3VsYXIncyByb3V0ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtMb2NhdGlvbn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGlmICghW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5ERUxFVEVdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSlcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLmZvcm1BZnRlclZpZXdJbml0KHRoaXMsIHRoaXMucmVuZGVyZXJJZCk7XG4gIC8vIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKVxuICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIodGhpcyk7XG4gICAgaWYgKHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgfHwgdGhpcy5vcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuREVMRVRFKVxuICAgICAgdGhpcy5mb3JtR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMgfHwge30sXG4gICAgKTtcblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKVxuICAgICAgTmd4Rm9ybVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7U3VibWl0RXZlbnR9IGV2ZW50XG4gICAqL1xuICBhc3luYyBzdWJtaXQoZXZlbnQ6IFN1Ym1pdEV2ZW50KTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIU5neEZvcm1TZXJ2aWNlLnZhbGlkYXRlRmllbGRzKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBkYXRhID0gTmd4Rm9ybVNlcnZpY2UuZ2V0Rm9ybURhdGEodGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YSxcbiAgICAgIGNvbXBvbmVudDogJ0Zvcm1SZWFjdGl2ZUNvbXBvbmVudCcsXG4gICAgICBuYW1lOiB0aGlzLmFjdGlvbiB8fCBFdmVudENvbnN0YW50cy5TVUJNSVRfRVZFTlQsXG4gICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVJlc2V0KCkge1xuICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgIC8vIGlmKE9wZXJhdGlvbktleXMuREVMRVRFICE9PSB0aGlzLm9wZXJhdGlvbilcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLnJlc2V0KHRoaXMuZm9ybUdyb3VwKTtcbiAgICAvLyBlbHNlXG4gICAgLy8gICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZSgpIHtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YTogdGhpcy51aWQsXG4gICAgICBjb21wb25lbnQ6ICdGb3JtUmVhY3RpdmVDb21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlUX0VWRU5ULFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzO1xufVxuIiwiQGlmKG9wZXJhdGlvbiAhPT0gJ3JlYWQnICYmIG9wZXJhdGlvbiAhPT0gJ2RlbGV0ZScpIHtcbiAgPGZvcm0gI3JlYWN0aXZlRm9ybSBbaWRdPVwicmVuZGVyZXJJZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKHN1Ym1pdCk9XCJzdWJtaXQoJGV2ZW50KVwiIG5vdmFsaWRhdGUgW3RhcmdldF09XCJ0YXJnZXRcIj5cbiAgICA8bmctY29udGVudCAjZm9ybUNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJkY2YtZmxleCBkY2YtZmxleC1yaWdodFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcikge1xuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7e29wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyAnQmFjaycgOiBvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgYWN0aW9uID8gYWN0aW9uIDogb3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbn0gQGVsc2Uge1xuICA8ZGl2IFtjbGFzc109XCInZGNmLWZsZXggZGNmLWZsZXgtcmlnaHQgJyArIG9wZXJhdGlvblwiIGlkPVwiZGNmLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgPGRpdj5cbiAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImhhbmRsZVJlc2V0KClcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7eyBbJ2RlbGV0ZScsICdyZWFkJywgJ3VwZGF0ZSddLmluY2x1ZGVzKG9wZXJhdGlvbikgPyAnQmFjaycgOiBvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYob3BlcmF0aW9uID09PSAnZGVsZXRlJyAmJiB1aWQpIHtcbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBEZWxldGVcbiAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkNSRUFURSB8fCBvcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuVVBEQVRFKSB7XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3tvcHRpb25zLmJ1dHRvbnMuc3VibWl0LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG5cbiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUV0SCxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBS3BEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBU0ksSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7SUFBdkI7UUFhTCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQU1yQyxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUdqQyxXQUFNLEdBQTZCLE9BQU8sQ0FBQztRQTBDM0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQWtCaEQ7Ozs7Ozs7OztXQVNHO1FBQ0ssYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQTZEM0Isa0JBQWEsR0FBRyxhQUFhLENBQUM7S0FDbEQ7SUE1REMsc0JBQXNCO0lBQ3BCLDRFQUE0RTtJQUM1RSw2REFBNkQ7SUFDL0QsSUFBSTtJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsTUFBTTtZQUNsRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzFCLEVBQUUsRUFDRiwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQ25CLENBQUM7SUFFSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVM7WUFDaEIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFrQjtRQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFzQixDQUFDO1lBQzdELE9BQU8sS0FBSyxDQUFDO1FBRWYsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBc0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BCLElBQUk7WUFDSixTQUFTLEVBQUUsbUJBQW1CO1lBQzlCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxZQUFZO1lBQ2hELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsOENBQThDO1FBQzlDLDBDQUEwQztRQUMxQyxPQUFPO1FBQ1AsMEJBQTBCO0lBQzVCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2QsU0FBUyxFQUFFLG1CQUFtQjtZQUM5QixJQUFJLEVBQUUsY0FBYyxDQUFDLFlBQVk7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F2SlUsaUJBQWlCO21HQUFqQixpQkFBaUIsMGNBZXNCLFVBQVUsNkJDcEU5RCxrNkVBNERBLG9IRFRZLGdCQUFnQixxckJBQUUsT0FBTzs7QUFFeEIsaUJBQWlCO0lBUjdCLE9BQU8sRUFBRTtHQVFHLGlCQUFpQixDQTBKN0I7OzRGQTFKWSxpQkFBaUI7a0JBUDdCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixXQUd0QixDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQzs4QkFZcEMsS0FBSztzQkFESixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixTQUFTO3NCQURSLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUk5RCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFXTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQVdOLEdBQUc7c0JBREYsS0FBSztnQkFLTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBDcnVkRm9ybUV2ZW50LCBEeW5hbWljLCBFdmVudENvbnN0YW50cywgRmllbGRVcGRhdGVNb2RlLCBIVE1MRm9ybVRhcmdldCwgUmVuZGVyZWRNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlLCBnZXRMb2dnZXIgfSBmcm9tICdzcmMvbGliL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5cblxuLyoqXG4gKiBAY29tcG9uZW50IENydWRGb3JtQ29tcG9uZW50XG4gKiBAZXhhbXBsZSA8bmd4LWRlY2FmLWNydWQtZm9ybVxuICogICBhY3Rpb249XCJjcmVhdGVcIlxuICogICBvcGVyYXRpb249XCJjcmVhdGVcIlxuICogICBmb3JtR3JvdXA9XCJmb3JtR3JvdXBcIlxuICogICByZW5kZXJlcklkPVwicmVuZGVyZXJJZFwiXG4gKiAgIHN1Ym1pdEV2ZW50PVwic3VibWl0RXZlbnRcIlxuICogICB0YXJnZXQ9XCJfc2VsZlwiXG4gKiAgIG1ldGhvZD1cImV2ZW50XCI+XG4gKiA8L25neC1kZWNhZi1jcnVkLWZvcm0+XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtDcnVkT3BlcmF0aW9uc30gb3BlcmF0aW9uIC0gVGhlIENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBmb3JtR3JvdXAgLSBUaGUgZm9ybSBncm91cFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbmRlcmVySWQgLSBUaGUgcmVuZGVyZXIgaWRcbiAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IHN1Ym1pdEV2ZW50IC0gVGhlIHN1Ym1pdCBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIFRoZSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBUaGUgbWV0aG9kXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1jcnVkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtGb3JBbmd1bGFyTW9kdWxlLCBJb25JY29uXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3J1ZEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWwge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBtb2RlbCBmb3IgZGF0YSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGUgZGF0YSBtb2RlbCByZXBvc2l0b3J5IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogVGhpcyBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWx8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIEBWaWV3Q2hpbGQoJ3JlYWN0aXZlRm9ybScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIEBJbnB1dCgpXG4gIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAnZXZlbnQnID0gJ2V2ZW50JztcblxuICBASW5wdXQoKVxuICBvcHRpb25zITogQ3J1ZEZvcm1PcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbj86IHN0cmluZztcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBvcGVyYXRpb24hOiBDcnVkT3BlcmF0aW9ucztcblxuICBASW5wdXQoKVxuICBoYW5kbGVycyE6IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+PjtcblxuICBASW5wdXQoKVxuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXRoIHRvIHRoZSBwYXJlbnQgRm9ybUdyb3VwLCBpZiBuZXN0ZWQuXG4gICAqIEBzdW1tYXJ5IEZ1bGwgZG90LWRlbGltaXRlZCBwYXRoIG9mIHRoZSBwYXJlbnQgRm9ybUdyb3VwLiBTZXQgb25seSB3aGVuIGlzIHBhcnQgb2YgYSBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNoaWxkT2Y/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyBkaXNwbGF5ZWQgb3IgbWFuaXB1bGF0ZWQuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBrZXkgZm9yIG9wZXJhdGlvbnMgb24gc3BlY2lmaWMgcmVjb3Jkcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHVpZCE6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXG4gIEBPdXRwdXQoKVxuICBzdWJtaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgbG9nZ2luZyBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb21wb25lbnQsIGFsbG93aW5nIGZvciBjb25zaXN0ZW50XG4gICAqIGFuZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb2YgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzLiBUaGlzIGxvZ2dlciBpcyBpbml0aWFsaXplZFxuICAgKiBpbiB0aGUgbmdPbkluaXQgbWV0aG9kIHVzaW5nIHRoZSBnZXRMb2dnZXIgZnVuY3Rpb24gZnJvbSB0aGUgRm9yQW5ndWxhck1vZHVsZS5cbiAgICpcbiAgICogVGhlIGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCB0byByZWNvcmQgaW1wb3J0YW50IGV2ZW50cywgZGVidWcgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJdCBoZWxwcyBpbiBtb25pdG9yaW5nIHRoZSBjb21wb25lbnQncyBiZWhhdmlvciwgdHJhY2tpbmcgdGhlIGZsb3dcbiAgICogb2Ygb3BlcmF0aW9ucywgYW5kIGZhY2lsaXRhdGluZyBlYXNpZXIgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZS5cbiAgICpcbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYnJvd3NlcidzIFVSTCBhbmQgaGlzdG9yeS5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQSSwgYWxsb3dpbmdcbiAgICogZm9yIGJhY2sgbmF2aWdhdGlvbiBhbmQgVVJMIG1hbmlwdWxhdGlvbiBvdXRzaWRlIG9mIEFuZ3VsYXIncyByb3V0ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtMb2NhdGlvbn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGlmICghW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5ERUxFVEVdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSlcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLmZvcm1BZnRlclZpZXdJbml0KHRoaXMsIHRoaXMucmVuZGVyZXJJZCk7XG4gIC8vIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKVxuICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIodGhpcyk7XG4gICAgaWYgKHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgfHwgdGhpcy5vcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuREVMRVRFKVxuICAgICAgdGhpcy5mb3JtR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMgfHwge30sXG4gICAgKTtcblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKVxuICAgICAgTmd4Rm9ybVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7U3VibWl0RXZlbnR9IGV2ZW50XG4gICAqL1xuICBhc3luYyBzdWJtaXQoZXZlbnQ6IFN1Ym1pdEV2ZW50KTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIU5neEZvcm1TZXJ2aWNlLnZhbGlkYXRlRmllbGRzKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBkYXRhID0gTmd4Rm9ybVNlcnZpY2UuZ2V0Rm9ybURhdGEodGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YSxcbiAgICAgIGNvbXBvbmVudDogJ0NydWRGb3JtQ29tcG9uZW50JyxcbiAgICAgIG5hbWU6IHRoaXMuYWN0aW9uIHx8IEV2ZW50Q29uc3RhbnRzLlNVQk1JVF9FVkVOVCxcbiAgICAgIGhhbmRsZXJzOiB0aGlzLmhhbmRsZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlUmVzZXQoKSB7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgLy8gaWYoT3BlcmF0aW9uS2V5cy5ERUxFVEUgIT09IHRoaXMub3BlcmF0aW9uKVxuICAgIC8vICAgTmd4Rm9ybVNlcnZpY2UucmVzZXQodGhpcy5mb3JtR3JvdXApO1xuICAgIC8vIGVsc2VcbiAgICAvLyAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICB9XG5cbiAgaGFuZGxlRGVsZXRlKCkge1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLnVpZCxcbiAgICAgIGNvbXBvbmVudDogJ0NydWRGb3JtQ29tcG9uZW50JyxcbiAgICAgIG5hbWU6IEV2ZW50Q29uc3RhbnRzLlNVQk1JVF9FVkVOVCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBPcGVyYXRpb25LZXlzID0gT3BlcmF0aW9uS2V5cztcbn1cbiIsIkBpZihvcGVyYXRpb24gIT09ICdyZWFkJyAmJiBvcGVyYXRpb24gIT09ICdkZWxldGUnKSB7XG4gIDxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cInJlbmRlcmVySWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChzdWJtaXQpPVwic3VibWl0KCRldmVudClcIiBub3ZhbGlkYXRlIFt0YXJnZXRdPVwidGFyZ2V0XCI+XG4gICAgPG5nLWNvbnRlbnQgI2Zvcm1Db250ZW50PjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZGNmLWZsZXggZGNmLWZsZXgtcmlnaHRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge3tvcGVyYXRpb24gPT09ICd1cGRhdGUnID8gJ0JhY2snIDogb3B0aW9ucy5idXR0b25zLmNsZWFyPy50ZXh0fX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGFjdGlvbiA/IGFjdGlvbiA6IG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG59IEBlbHNlIHtcbiAgPGRpdiBbY2xhc3NdPVwiJ2RjZi1mbGV4IGRjZi1mbGV4LXJpZ2h0ICcgKyBvcGVyYXRpb25cIiBpZD1cImRjZi1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgIDxkaXY+XG4gICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyKSB7XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uICBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgWydkZWxldGUnLCAncmVhZCcsICd1cGRhdGUnXS5pbmNsdWRlcyhvcGVyYXRpb24pID8gJ0JhY2snIDogb3B0aW9ucy5idXR0b25zLmNsZWFyPy50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmKG9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScgJiYgdWlkKSB7XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZURlbGV0ZSgpXCJcbiAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgRGVsZXRlXG4gICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7b3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuXG4iXX0=
@@ -55,7 +55,7 @@ export class ModelRendererComponent {
55
55
  refresh(model) {
56
56
  model =
57
57
  typeof model === 'string'
58
- ? Model.build({}, JSON.parse(model))
58
+ ? Model.build({}, model)
59
59
  : model;
60
60
  this.output = model.render(this.globals || {}, this.vcr, this.injector, this.inner);
61
61
  if (this.output?.inputs)
@@ -114,7 +114,7 @@ export class ModelRendererComponent {
114
114
  }
115
115
  }
116
116
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ModelRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
117
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ModelRendererComponent, isStandalone: true, selector: "ngx-decaf-model-renderer", inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }, { propertyName: "vcr", first: true, predicate: ["componentOuter"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: " <ng-template #componentOuter></ng-template>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child) {\n @if(child?.children?.length) {\n <ngx-decaf-component-renderer [parent]=\"child\" />\n } @else {\n <ng-container\n #childComponents\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n }\n }\n </div>\n </ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "parent"], outputs: ["listenEvent"] }] }); }
117
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ModelRendererComponent, isStandalone: true, selector: "ngx-decaf-model-renderer", inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }, { propertyName: "vcr", first: true, predicate: ["componentOuter"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: " <ng-template #componentOuter></ng-template>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child) {\n @if(child?.children?.length) {\n <ngx-decaf-component-renderer [parent]=\"child\" />\n } @else {\n <ng-container\n #childComponents\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n }\n }\n </div>\n </ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "model", "parent"], outputs: ["listenEvent"] }] }); }
118
118
  }
119
119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ModelRendererComponent, decorators: [{
120
120
  type: Component,
@@ -135,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
135
135
  }], listenEvent: [{
136
136
  type: Output
137
137
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vZGVsLXJlbmRlcmVyL21vZGVsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2RlbC1yZW5kZXJlci9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUVsQixtQkFBbUIsR0FFcEIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7OztBQUVoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBUUgsTUFBTSxPQUFPLHNCQUFzQjtJQVBuQztRQWlCRTs7V0FFRztRQUVILFlBQU8sR0FBNEIsRUFBRSxDQUFDO1FBeUJ0Qzs7V0FFRztRQUVILGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFZakQsYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQWtGM0IsU0FBSSxHQUFHLElBQUksQ0FBQztLQUNoQztJQWpGQyxtQkFBbUI7SUFFbkI7OztPQUdHO0lB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SCxDQUFDO0lBQ0gsQ0FBQzsrR0F2SVUsc0JBQXNCO21HQUF0QixzQkFBc0Isa1JBbUJMLFdBQVcsOEdBaUJZLGdCQUFnQixnRUNwR3JFLGdtQkFvQkEseUREdUNZLGdCQUFnQix1U0FBcUIsMEJBQTBCOzs0RkFLOUQsc0JBQXNCO2tCQVBsQyxTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDLFlBQ2hFLDBCQUEwQjs4QkFZcEMsS0FBSztzQkFESixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPekIsT0FBTztzQkFETixLQUFLO2dCQU9OLEtBQUs7c0JBREosU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBWXZELFVBQVU7c0JBRFQsS0FBSztnQkFPTixHQUFHO3NCQURGLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFPckUsV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVsLCBzZiB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBbmd1bGFyRHluYW1pY091dHB1dCxcbiAgQW5ndWxhckVuZ2luZUtleXMsXG4gIEJhc2VDb21wb25lbnRQcm9wcyxcbiAgQmFzZUN1c3RvbUV2ZW50LFxuICBOZ3hSZW5kZXJpbmdFbmdpbmUyLFxuICBSZW5kZXJlZE1vZGVsLFxufSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgS2V5VmFsdWUsIE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQgfSBmcm9tICdzcmMvbGliL2VuZ2luZS90eXBlcyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnc3JjL2xpYi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgUmVuZGVyYWJsZSB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50LXJlbmRlcmVyL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgZm9yIHJlbmRlcmluZyBkeW5hbWljIG1vZGVsc1xuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIGR5bmFtaWNhbGx5IHJlbmRlcmluZyBtb2RlbHMsXG4gKiBoYW5kbGluZyBtb2RlbCBjaGFuZ2VzLCBhbmQgbWFuYWdpbmcgZXZlbnQgc3Vic2NyaXB0aW9ucyBmb3IgdGhlIHJlbmRlcmVkIGNvbXBvbmVudHMuXG4gKiBJdCB1c2VzIHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmUyIHRvIHJlbmRlciB0aGUgbW9kZWxzIGFuZCBzdXBwb3J0cyBib3RoIHN0cmluZyBhbmQgTW9kZWwgaW5wdXRzLlxuICogQGNsYXNzXG4gKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIEFuZ3VsYXIgSW5qZWN0b3IgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogPG5neC1kZWNhZi1tb2RlbC1yZW5kZXJlclxuICogICBbbW9kZWxdPVwibXlNb2RlbFwiXG4gKiAgIFtnbG9iYWxzXT1cImdsb2JhbFZhcmlhYmxlc1wiXG4gKiAgIChsaXN0ZW5FdmVudCk9XCJoYW5kbGVFdmVudCgkZXZlbnQpXCI+XG4gKiA8L25neC1kZWNhZi1tb2RlbC1yZW5kZXJlcj5cbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQXBwXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsUmVuZGVyZXJcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIEFwcC0+Pk1vZGVsUmVuZGVyZXI6IElucHV0IG1vZGVsXG4gKiAgIE1vZGVsUmVuZGVyZXItPj5Nb2RlbDogUGFyc2UgaWYgc3RyaW5nXG4gKiAgIE1vZGVsLS0+Pk1vZGVsUmVuZGVyZXI6IFBhcnNlZCBtb2RlbFxuICogICBNb2RlbFJlbmRlcmVyLT4+UmVuZGVyaW5nRW5naW5lOiBSZW5kZXIgbW9kZWxcbiAqICAgUmVuZGVyaW5nRW5naW5lLS0+Pk1vZGVsUmVuZGVyZXI6IFJlbmRlcmVkIG91dHB1dFxuICogICBNb2RlbFJlbmRlcmVyLT4+TW9kZWxSZW5kZXJlcjogU3Vic2NyaWJlIHRvIGV2ZW50c1xuICogICBNb2RlbFJlbmRlcmVyLS0+PkFwcDogRW1pdCBldmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGb3JBbmd1bGFyTW9kdWxlLCBOZ0NvbXBvbmVudE91dGxldCwgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRdLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1tb2RlbC1yZW5kZXJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsUmVuZGVyZXJDb21wb25lbnQ8TSBleHRlbmRzIE1vZGVsPlxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBSZW5kZXJlZE1vZGVsIHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIElucHV0IG1vZGVsIHRvIGJlIHJlbmRlcmVkXG4gICAqIEBzdW1tYXJ5IENhbiBiZSBhIE1vZGVsIGluc3RhbmNlIG9yIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb2RlbFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgbW9kZWwhOiBNIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2xvYmFsIHZhcmlhYmxlcyB0byBiZSBwYXNzZWQgdG8gdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZ2xvYmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgaW5uZXIgY29udGVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnaW5uZXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgaW5uZXI/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBvZiB0aGUgcmVuZGVyZWQgbW9kZWxcbiAgICovXG4gIG91dHB1dD86IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZW5kZXJlclxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFZpZXcgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgZHluYW1pYyBjb21wb25lbnQgcmVuZGVyaW5nXG4gICAqL1xuICBAVmlld0NoaWxkKCdjb21wb25lbnRPdXRlcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHZjciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBjdXN0b20gZXZlbnRzIGZyb20gdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGxpc3RlbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxNb2RlbFJlbmRlckN1c3RvbUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5zdGFuY2Ugb2YgdGhlIE5neFJlbmRlcmluZ0VuZ2luZTJcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyITogTmd4UmVuZGVyaW5nRW5naW5lMjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RhbmNlIG9mIHRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgaW5zdGFuY2UhOiBLZXlWYWx1ZSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgLy8gY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmcmVzaGVzIHRoZSByZW5kZXJlZCBtb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IE19IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGJlIHJlbmRlcmVkXG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2gobW9kZWw6IHN0cmluZyB8IE0pIHtcbiAgICBtb2RlbCA9XG4gICAgICB0eXBlb2YgbW9kZWwgPT09ICdzdHJpbmcnXG4gICAgICAgID8gKE1vZGVsLmJ1aWxkKHt9LCBKU09OLnBhcnNlKG1vZGVsKSkgYXMgTSlcbiAgICAgICAgOiBtb2RlbDtcbiAgICB0aGlzLm91dHB1dCA9IChtb2RlbCBhcyB1bmtub3duIGFzIFJlbmRlcmFibGUpLnJlbmRlcjxBbmd1bGFyRHluYW1pY091dHB1dD4oXG4gICAgICB0aGlzLmdsb2JhbHMgfHwge30sXG4gICAgICB0aGlzLnZjcixcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICB0aGlzLmlubmVyLFxuICAgICk7XG4gICAgaWYgKHRoaXMub3V0cHV0Py5pbnB1dHMpXG4gICAgICB0aGlzLnJlbmRlcmVySWQgPSBzZihcbiAgICAgICAgQW5ndWxhckVuZ2luZUtleXMuUkVOREVSRURfSUQsXG4gICAgICAgICh0aGlzLm91dHB1dC5pbnB1dHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydyZW5kZXJlcklkJ10gYXMgc3RyaW5nLFxuICAgICAgKTtcbiAgICB0aGlzLmluc3RhbmNlID0gdGhpcy5vdXRwdXQ/Lmluc3RhbmNlO1xuICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIHdoZW4gZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIG9mIGEgZGlyZWN0aXZlIGNoYW5nZVxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXMgLSBPYmplY3QgY29udGFpbmluZyBjaGFuZ2VzXG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLk1PREVMXSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLk1PREVMXTtcbiAgICAgIHRoaXMucmVmcmVzaChjdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIGRpcmVjdGl2ZSwgcGlwZSwgb3Igc2VydmljZSBpcyBkZXN0cm95ZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIG5nT25EZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICBhd2FpdCBOZ3hSZW5kZXJpbmdFbmdpbmUyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5vdXRwdXQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZUV2ZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgY29uc3QgY29tcG9uZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29tcG9uZW50S2V5cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKVxuICAgICAgICAgICh0aGlzLmluc3RhbmNlIGFzIEtleVZhbHVlKVtrZXldLnN1YnNjcmliZSgoZXZlbnQ6IFBhcnRpYWw8QmFzZUN1c3RvbUV2ZW50PikgPT4ge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5FdmVudC5lbWl0KHtcbiAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLm91dHB1dD8uY29tcG9uZW50Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICB9IGFzIE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5zdWJzY3JpYmVzIGZyb20gZXZlbnRzIGVtaXR0ZWQgYnkgdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUV2ZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgY29uc3QgY29tcG9uZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29tcG9uZW50S2V5cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKVxuICAgICAgICAgIHRoaXMuaW5zdGFuY2Vba2V5XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBKU09OID0gSlNPTjtcbn1cbiIsIiAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRPdXRlcj48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2lubmVyPlxuICAgIDxkaXYgIFtpZF09XCJyZW5kZXJlcklkIHx8IG51bGxcIj5cbiAgICAgIEBmb3IgKGNoaWxkIG9mIG91dHB1dD8uY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XG4gICAgICAgIEBpZihjaGlsZD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIDxuZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyIFtwYXJlbnRdPVwiY2hpbGRcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAjY2hpbGRDb21wb25lbnRzXG4gICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgY2hpbGQuY29tcG9uZW50O1xuICAgICAgICAgICAgICBpbmplY3RvcjogY2hpbGQuaW5qZWN0b3I7XG4gICAgICAgICAgICAgIGlucHV0czogY2hpbGQuaW5wdXRzO1xuICAgICAgICAgICAgICBjb250ZW50OmNoaWxkLmNvbnRlbnQ7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vZGVsLXJlbmRlcmVyL21vZGVsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2RlbC1yZW5kZXJlci9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUVsQixtQkFBbUIsR0FFcEIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7OztBQUVoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBUUgsTUFBTSxPQUFPLHNCQUFzQjtJQVBuQztRQWlCRTs7V0FFRztRQUVILFlBQU8sR0FBNEIsRUFBRSxDQUFDO1FBeUJ0Qzs7V0FFRztRQUVILGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFZOUMsYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQWtGM0IsU0FBSSxHQUFHLElBQUksQ0FBQztLQUNoQztJQWpGQyxtQkFBbUI7SUFFbkI7OztPQUdHO0lB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QUFzQjttR0FBdEIsc0JBQXNCLGtSQW1CTCxXQUFXLDhHQWlCWSxnQkFBZ0IsZ0VDcEdyRSxnbUJBb0JBLHlERHVDWSxnQkFBZ0IsdVNBQXFCLDBCQUEwQjs7NEZBSzlELHNCQUFzQjtrQkFQbEMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQyxZQUNoRSwwQkFBMEI7OEJBWXBDLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLE9BQU87c0JBRE4sS0FBSztnQkFPTixLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVl2RCxVQUFVO3NCQURULEtBQUs7Z0JBT04sR0FBRztzQkFERixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBT3JFLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbCwgc2YgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgTmdDb21wb25lbnRPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQW5ndWxhckR5bmFtaWNPdXRwdXQsXG4gIEFuZ3VsYXJFbmdpbmVLZXlzLFxuICBCYXNlQ29tcG9uZW50UHJvcHMsXG4gIEJhc2VDdXN0b21FdmVudCxcbiAgTmd4UmVuZGVyaW5nRW5naW5lMixcbiAgUmVuZGVyZWRNb2RlbCxcbn0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IEtleVZhbHVlLCBSZW5kZXJlckN1c3RvbUV2ZW50IH0gZnJvbSAnc3JjL2xpYi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSB9IGZyb20gJ3NyYy9saWIvZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IFJlbmRlcmFibGUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC1yZW5kZXJlci9jb21wb25lbnQtcmVuZGVyZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGZvciByZW5kZXJpbmcgZHluYW1pYyBtb2RlbHNcbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBkeW5hbWljYWxseSByZW5kZXJpbmcgbW9kZWxzLFxuICogaGFuZGxpbmcgbW9kZWwgY2hhbmdlcywgYW5kIG1hbmFnaW5nIGV2ZW50IHN1YnNjcmlwdGlvbnMgZm9yIHRoZSByZW5kZXJlZCBjb21wb25lbnRzLlxuICogSXQgdXNlcyB0aGUgTmd4UmVuZGVyaW5nRW5naW5lMiB0byByZW5kZXIgdGhlIG1vZGVscyBhbmQgc3VwcG9ydHMgYm90aCBzdHJpbmcgYW5kIE1vZGVsIGlucHV0cy5cbiAqIEBjbGFzc1xuICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBBbmd1bGFyIEluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQGV4YW1wbGVcbiAqIDxuZ3gtZGVjYWYtbW9kZWwtcmVuZGVyZXJcbiAqICAgW21vZGVsXT1cIm15TW9kZWxcIlxuICogICBbZ2xvYmFsc109XCJnbG9iYWxWYXJpYWJsZXNcIlxuICogICAobGlzdGVuRXZlbnQpPVwiaGFuZGxlRXZlbnQoJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtbW9kZWwtcmVuZGVyZXI+XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEFwcFxuICogICBwYXJ0aWNpcGFudCBNb2RlbFJlbmRlcmVyXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBBcHAtPj5Nb2RlbFJlbmRlcmVyOiBJbnB1dCBtb2RlbFxuICogICBNb2RlbFJlbmRlcmVyLT4+TW9kZWw6IFBhcnNlIGlmIHN0cmluZ1xuICogICBNb2RlbC0tPj5Nb2RlbFJlbmRlcmVyOiBQYXJzZWQgbW9kZWxcbiAqICAgTW9kZWxSZW5kZXJlci0+PlJlbmRlcmluZ0VuZ2luZTogUmVuZGVyIG1vZGVsXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0tPj5Nb2RlbFJlbmRlcmVyOiBSZW5kZXJlZCBvdXRwdXRcbiAqICAgTW9kZWxSZW5kZXJlci0+Pk1vZGVsUmVuZGVyZXI6IFN1YnNjcmliZSB0byBldmVudHNcbiAqICAgTW9kZWxSZW5kZXJlci0tPj5BcHA6IEVtaXQgZXZlbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZSwgTmdDb21wb25lbnRPdXRsZXQsIENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50XSxcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtbW9kZWwtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbFJlbmRlcmVyQ29tcG9uZW50PE0gZXh0ZW5kcyBNb2RlbD5cbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbnB1dCBtb2RlbCB0byBiZSByZW5kZXJlZFxuICAgKiBAc3VtbWFyeSBDYW4gYmUgYSBNb2RlbCBpbnN0YW5jZSBvciBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9kZWxcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG1vZGVsITogTSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdsb2JhbCB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdsb2JhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGlubmVyIGNvbnRlbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2lubmVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIGlubmVyPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBPdXRwdXQgb2YgdGhlIHJlbmRlcmVkIG1vZGVsXG4gICAqL1xuICBvdXRwdXQ/OiBBbmd1bGFyRHluYW1pY091dHB1dDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVuZGVyZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBWaWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGR5bmFtaWMgY29tcG9uZW50IHJlbmRlcmluZ1xuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50T3V0ZXInLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICB2Y3IhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3IgY3VzdG9tIGV2ZW50cyBmcm9tIHRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBsaXN0ZW5FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVuZGVyZXJDdXN0b21FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RhbmNlIG9mIHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmUyXG4gICAqL1xuICBwcml2YXRlIHJlbmRlciE6IE5neFJlbmRlcmluZ0VuZ2luZTI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0YW5jZSBvZiB0aGUgcmVuZGVyZWQgY29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGluc3RhbmNlITogS2V5VmFsdWUgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIC8vIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZnJlc2hlcyB0aGUgcmVuZGVyZWQgbW9kZWxcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byBiZSByZW5kZXJlZFxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoKG1vZGVsOiBzdHJpbmcgfCBNKSB7XG4gICAgbW9kZWwgPVxuICAgICAgdHlwZW9mIG1vZGVsID09PSAnc3RyaW5nJ1xuICAgICAgICA/IChNb2RlbC5idWlsZCh7fSwgbW9kZWwpIGFzIE0pXG4gICAgICAgIDogbW9kZWw7XG4gICAgdGhpcy5vdXRwdXQgPSAobW9kZWwgYXMgdW5rbm93biBhcyBSZW5kZXJhYmxlKS5yZW5kZXI8QW5ndWxhckR5bmFtaWNPdXRwdXQ+KFxuICAgICAgdGhpcy5nbG9iYWxzIHx8IHt9LFxuICAgICAgdGhpcy52Y3IsXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgdGhpcy5pbm5lcixcbiAgICApO1xuICAgIGlmICh0aGlzLm91dHB1dD8uaW5wdXRzKVxuICAgICAgdGhpcy5yZW5kZXJlcklkID0gc2YoXG4gICAgICAgIEFuZ3VsYXJFbmdpbmVLZXlzLlJFTkRFUkVEX0lELFxuICAgICAgICAodGhpcy5vdXRwdXQuaW5wdXRzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsncmVuZGVyZXJJZCddIGFzIHN0cmluZyxcbiAgICAgICk7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMub3V0cHV0Py5pbnN0YW5jZTtcbiAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCB3aGVuIGRhdGEtYm91bmQgcHJvcGVydGllcyBvZiBhIGRpcmVjdGl2ZSBjaGFuZ2VcbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY2hhbmdlc1xuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW0Jhc2VDb21wb25lbnRQcm9wcy5NT0RFTF0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSBjaGFuZ2VzW0Jhc2VDb21wb25lbnRQcm9wcy5NT0RFTF07XG4gICAgICB0aGlzLnJlZnJlc2goY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBkaXJlY3RpdmUsIHBpcGUsIG9yIHNlcnZpY2UgaXMgZGVzdHJveWVkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBuZ09uRGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUV2ZW50cygpO1xuICAgICAgYXdhaXQgTmd4UmVuZGVyaW5nRW5naW5lMi5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMub3V0cHV0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVFdmVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbXBvbmVudEtleXMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3RhbmNlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcilcbiAgICAgICAgICAodGhpcy5pbnN0YW5jZSBhcyBLZXlWYWx1ZSlba2V5XS5zdWJzY3JpYmUoKGV2ZW50OiBQYXJ0aWFsPEJhc2VDdXN0b21FdmVudD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5vdXRwdXQ/LmNvbXBvbmVudC5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgfSBhcyBSZW5kZXJlckN1c3RvbUV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuc3Vic2NyaWJlcyBmcm9tIGV2ZW50cyBlbWl0dGVkIGJ5IHRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVFdmVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbXBvbmVudEtleXMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3RhbmNlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcilcbiAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgSlNPTiA9IEpTT047XG59XG4iLCIgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50T3V0ZXI+PC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgICA8ZGl2ICBbaWRdPVwicmVuZGVyZXJJZCB8fCBudWxsXCI+XG4gICAgICBAZm9yIChjaGlsZCBvZiBvdXRwdXQ/LmNoaWxkcmVuOyB0cmFjayBjaGlsZCkge1xuICAgICAgICBAaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICA8bmd4LWRlY2FmLWNvbXBvbmVudC1yZW5kZXJlciBbcGFyZW50XT1cImNoaWxkXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgI2NoaWxkQ29tcG9uZW50c1xuICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgIGNoaWxkLmNvbXBvbmVudDtcbiAgICAgICAgICAgICAgaW5qZWN0b3I6IGNoaWxkLmluamVjdG9yO1xuICAgICAgICAgICAgICBpbnB1dHM6IGNoaWxkLmlucHV0cztcbiAgICAgICAgICAgICAgY29udGVudDpjaGlsZC5jb250ZW50O1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4iXX0=