@decaf-ts/for-angular 0.0.18 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/components/crud-form/crud-form.component.d.ts +1 -1
- package/components/fieldset/fieldset.component.d.ts +1 -1
- package/components/filter/filter.component.d.ts +1 -1
- package/components/for-angular-components.module.d.ts +1 -2
- package/components/list/constants.d.ts +5 -9
- package/components/list-item/list-item.component.d.ts +1 -1
- package/engine/NgxBaseComponent.d.ts +1 -1
- package/esm2022/components/component-renderer/component-renderer.component.mjs +7 -7
- package/esm2022/components/crud-field/crud-field.component.mjs +13 -12
- package/esm2022/components/crud-form/crud-form.component.mjs +9 -9
- package/esm2022/components/empty-state/empty-state.component.mjs +8 -12
- package/esm2022/components/fieldset/fieldset.component.mjs +27 -19
- package/esm2022/components/filter/filter.component.mjs +14 -13
- package/esm2022/components/for-angular-components.module.mjs +17 -9
- package/esm2022/components/layout/layout.component.mjs +6 -7
- package/esm2022/components/list/constants.mjs +1 -1
- package/esm2022/components/list/list.component.mjs +6 -11
- package/esm2022/components/list-item/list-item.component.mjs +7 -12
- package/esm2022/components/model-renderer/model-renderer.component.mjs +5 -7
- package/esm2022/components/pagination/pagination.component.mjs +8 -9
- package/esm2022/components/searchbar/searchbar.component.mjs +5 -7
- package/esm2022/directives/collapsable.directive.mjs +3 -3
- package/esm2022/engine/NgxBaseComponent.mjs +11 -10
- package/esm2022/engine/NgxFormService.mjs +12 -3
- package/esm2022/engine/NgxRenderingEngine.mjs +3 -2
- package/esm2022/for-angular-common.module.mjs +82 -0
- package/esm2022/helpers/utils.mjs +2 -2
- package/esm2022/i18n/Loader.mjs +10 -6
- package/esm2022/i18n/data/en.json +80 -0
- package/esm2022/public-apis.mjs +3 -2
- package/fesm2022/decaf-ts-for-angular.mjs +254 -170
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/for-angular-common.module.d.ts +44 -0
- package/package.json +6 -3
- package/public-apis.d.ts +2 -1
- package/esm2022/for-angular.module.mjs +0 -118
- package/for-angular.module.d.ts +0 -45
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
|
|
3
3
|
import { Location } from '@angular/common';
|
|
4
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
5
|
import { NgxFormService } from '../../engine/NgxFormService';
|
|
5
6
|
import { Dynamic, EventConstants } from '../../engine';
|
|
6
7
|
import { OperationKeys } from '@decaf-ts/db-decorators';
|
|
7
8
|
import { DefaultFormReactiveOptions } from './constants';
|
|
8
|
-
import { ForAngularModule, getLogger } from '../../for-angular.module';
|
|
9
|
-
import { IonIcon } from '@ionic/angular/standalone';
|
|
10
9
|
import { generateRandomValue } from '../../helpers';
|
|
10
|
+
import { getLogger } from '../../for-angular-common.module';
|
|
11
|
+
import { IonButton, IonIcon } from '@ionic/angular/standalone';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@
|
|
13
|
-
import * as i2 from "@angular/forms";
|
|
13
|
+
import * as i1 from "@angular/forms";
|
|
14
14
|
/**
|
|
15
15
|
* @component CrudFormComponent
|
|
16
16
|
* @example <ngx-decaf-crud-form
|
|
@@ -211,16 +211,16 @@ let CrudFormComponent = class CrudFormComponent {
|
|
|
211
211
|
name: EventConstants.SUBMIT,
|
|
212
212
|
});
|
|
213
213
|
}
|
|
214
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
215
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.
|
|
214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CrudFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CrudFormComponent, isStandalone: true, selector: "ngx-decaf-crud-form", inputs: { model: "model", modelId: "modelId", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid", allowClear: "allowClear" }, outputs: { submitEvent: "submitEvent" }, host: { properties: { "attr.id": "uid" } }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 768px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 767px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
216
216
|
};
|
|
217
217
|
CrudFormComponent = __decorate([
|
|
218
218
|
Dynamic()
|
|
219
219
|
], CrudFormComponent);
|
|
220
220
|
export { CrudFormComponent };
|
|
221
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
221
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CrudFormComponent, decorators: [{
|
|
222
222
|
type: Component,
|
|
223
|
-
args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [
|
|
223
|
+
args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ReactiveFormsModule, IonButton, IonIcon], host: { '[attr.id]': 'uid' }, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n @if(!action) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n Back\n </ion-button>\n </div>\n }\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-buttons-container dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" [id]=\"uid\">\n @if(operation === OperationKeys.READ && modelId) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ [OperationKeys.DELETE, OperationKeys.READ, OperationKeys.UPDATE].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: [".dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 768px){.dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 767px){.dcf-buttons-container.dcf-flex div{width:100%}.dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}form{padding:2rem 1rem}\n"] }]
|
|
224
224
|
}], propDecorators: { model: [{
|
|
225
225
|
type: Input
|
|
226
226
|
}], modelId: [{
|
|
@@ -256,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
256
256
|
}], submitEvent: [{
|
|
257
257
|
type: Output
|
|
258
258
|
}] } });
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUErRCxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQStESSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUF2QjtRQTJCTDs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQWNyQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUVqQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdB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QXFWN0I7OzRGQXJWWSxpQkFBaUI7a0JBN0Q3QixTQUFTO2lDQUNJLElBQUksWUFDTixxQkFBcUIsV0FHdEIsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsUUFDOUIsRUFBQyxXQUFXLEVBQUUsS0FBSyxFQUFDOzhCQWtFMUIsS0FBSztzQkFESixLQUFLO2dCQWVOLE9BQU87c0JBRE4sS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBYU4sU0FBUztzQkFEUixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFjOUQsTUFBTTtzQkFETCxLQUFLO2dCQWNOLE1BQU07c0JBREwsS0FBSztnQkFhTixPQUFPO3NCQUROLEtBQUs7Z0JBYU4sTUFBTTtzQkFETCxLQUFLO2dCQWNOLFNBQVM7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBYXpCLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLEtBQUs7Z0JBV04sT0FBTztzQkFETixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFZTixHQUFHO3NCQURGLEtBQUs7Z0JBZ0JOLFVBQVU7c0JBRFQsS0FBSztnQkEyQk4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRm9ybUVsZW1lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBDcnVkRm9ybUV2ZW50LCBEeW5hbWljLCBFdmVudENvbnN0YW50cywgRmllbGRVcGRhdGVNb2RlLCBIYW5kbGVyTGlrZSwgSFRNTEZvcm1UYXJnZXQsIFJlbmRlcmVkTW9kZWwgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1PcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucywgT3BlcmF0aW9uS2V5cyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSwgZ2V0TG9nZ2VyIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BkZWNhZi10cy9sb2dnaW5nJztcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcblxuXG4vKipcbiAqIEBjb21wb25lbnQgQ3J1ZEZvcm1Db21wb25lbnRcbiAqIEBleGFtcGxlIDxuZ3gtZGVjYWYtY3J1ZC1mb3JtXG4gKiAgIGFjdGlvbj1cImNyZWF0ZVwiXG4gKiAgIG9wZXJhdGlvbj1cImNyZWF0ZVwiXG4gKiAgIGZvcm1Hcm91cD1cImZvcm1Hcm91cFwiXG4gKiAgIHJlbmRlcmVySWQ9XCJyZW5kZXJlcklkXCJcbiAqICAgc3VibWl0RXZlbnQ9XCJzdWJtaXRFdmVudFwiXG4gKiAgIHRhcmdldD1cIl9zZWxmXCJcbiAqICAgbWV0aG9kPVwiZXZlbnRcIj5cbiAqIDwvbmd4LWRlY2FmLWNydWQtZm9ybT5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIC0gVGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge0NydWRPcGVyYXRpb25zfSBvcGVyYXRpb24gLSBUaGUgQ1JVRCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIChjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtGb3JtR3JvdXB9IGZvcm1Hcm91cCAtIFRoZSBmb3JtIGdyb3VwXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVuZGVyZXJJZCAtIFRoZSByZW5kZXJlciBpZFxuICogQHBhcmFtIHtTdWJtaXRFdmVudH0gc3VibWl0RXZlbnQgLSBUaGUgc3VibWl0IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gVGhlIHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIFRoZSBtZXRob2RcbiAqL1xuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLWNydWQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcnVkLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcnVkLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW0ZvckFuZ3VsYXJNb2R1bGUsIElvbkljb25dLFxuICBob3N0OiB7J1thdHRyLmlkXSc6ICd1aWQnfSxcbn0pXG4vKipcbiAqIEBjbGFzcyBDcnVkRm9ybUNvbXBvbmVudFxuICogQGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBDcnVkRm9ybUNvbXBvbmVudGAgaXMgYW4gQW5ndWxhciBjb21wb25lbnQgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGZsZXhpYmxlIGFuZCBleHRlbnNpYmxlIGZvcm0gaW50ZXJmYWNlIGZvciBwZXJmb3JtaW5nIENSVUQgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIG9wZXJhdGlvbnMgb24gYSBkYXRhIG1vZGVsLiBJdCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhcidzIHJlYWN0aXZlIGZvcm1zIGFuZCBzdXBwb3J0cyBhZHZhbmNlZCBjb25maWd1cmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZXZlbnQgaGFuZGxpbmcgZm9yIGEgd2lkZSByYW5nZSBvZiB1c2UgY2FzZXMuXG4gKlxuICogQHN1bW1hcnlcbiAqIC0gU3VwcG9ydHMgZHluYW1pYyBmb3JtIHJlbmRlcmluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0YSBtb2RlbCBhbmQgb3BlcmF0aW9uIHR5cGUuXG4gKiAtIEhhbmRsZXMgZm9ybSB2YWxpZGF0aW9uLCBzdWJtaXNzaW9uLCBhbmQgcmVzZXQgbG9naWMgd2l0aCBjdXN0b21pemFibGUgYmVoYXZpb3IuXG4gKiAtIEVtaXRzIHN0cnVjdHVyZWQgZXZlbnRzIGZvciBmb3JtIGFjdGlvbnMsIGVuYWJsaW5nIGRlY291cGxlZCBidXNpbmVzcyBsb2dpYy5cbiAqIC0gSW50ZWdyYXRlcyB3aXRoIGV4dGVybmFsIHNlcnZpY2VzIGZvciBsb2dnaW5nLCBmb3JtIG1hbmFnZW1lbnQsIGFuZCBuYXZpZ2F0aW9uLlxuICogLSBQcm92aWRlcyBleHRlbnNpdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW9yLlxuICpcbiAqIEBpbnB1dHNcbiAqIC0gYG1vZGVsYDogVGhlIHJlcG9zaXRvcnkgbW9kZWwgZm9yIGRhdGEgb3BlcmF0aW9ucy5cbiAqIC0gYG1vZGVsSWRgOiBUaGUgcHJpbWFyeSBkYXRhIG1vZGVsIGluc3RhbmNlIGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gKiAtIGB1cGRhdGVPbmA6IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gaXMgdHJpZ2dlcmVkIChgY2hhbmdlYCwgYGJsdXJgLCBvciBgc3VibWl0YCkuXG4gKiAtIGBjb21wb25lbnRgOiBSZWZlcmVuY2UgdG8gdGhlIHJlYWN0aXZlIGZvcm0gRE9NIGVsZW1lbnQuXG4gKiAtIGB0YXJnZXRgOiBTcGVjaWZpZXMgdGhlIGZvcm0gc3VibWlzc2lvbiB0YXJnZXQgKGUuZy4sIGBfc2VsZmAsIGBfYmxhbmtgKS5cbiAqIC0gYG1ldGhvZGA6IERlZmluZXMgdGhlIGZvcm0gc3VibWlzc2lvbiBzdHJhdGVneSAoYGdldGAsIGBwb3N0YCwgb3IgYGV2ZW50YCkuXG4gKiAtIGBvcHRpb25zYDogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtIGJlaGF2aW9yIGFuZCByZW5kZXJpbmcuXG4gKiAtIGBhY3Rpb25gOiBPcHRpb25hbCBjdXN0b20gYWN0aW9uIGlkZW50aWZpZXIgZm9yIHN1Ym1pc3Npb24gY29udGV4dC5cbiAqIC0gYG9wZXJhdGlvbmA6IFRoZSBjdXJyZW50IENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCAocmVxdWlyZWQpLlxuICogLSBgaGFuZGxlcnNgOiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAqIC0gYGZvcm1Hcm91cGA6IEFuZ3VsYXIgRm9ybUdyb3VwIGZvciBmb3JtIHN0YXRlIG1hbmFnZW1lbnQuXG4gKiAtIGBjaGlsZE9mYDogUGF0aCB0byB0aGUgcGFyZW50IEZvcm1Hcm91cCBpZiBuZXN0ZWQuXG4gKiAtIGByZW5kZXJlcklkYDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtIHJlbmRlcmVyLlxuICogLSBgdWlkYDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZC5cbiAqIC0gYGFsbG93Q2xlYXJgOiBFbmFibGVzIG9yIGRpc2FibGVzIGZvcm0gY2xlYXJpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAb3V0cHV0c1xuICogLSBgc3VibWl0RXZlbnRgOiBFbWl0cyBgQ3J1ZEZvcm1FdmVudGAgb2JqZWN0cyBvbiBmb3JtIHN1Ym1pc3Npb24uXG4gKlxuICogQHByb3RlY3RlZFxuICogLSBgT3BlcmF0aW9uS2V5c2A6IFJlZmVyZW5jZSB0byBDUlVEIG9wZXJhdGlvbiBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzYWdlLlxuICpcbiAqIEBwcml2YXRlXG4gKiAtIGBsb2dnZXJgOiBMb2dnZXIgaW5zdGFuY2UgZm9yIHN0cnVjdHVyZWQgbG9nZ2luZy5cbiAqIC0gYGxvY2F0aW9uYDogQW5ndWxhciBMb2NhdGlvbiBzZXJ2aWNlIGZvciBuYXZpZ2F0aW9uLlxuICpcbiAqIEBsaWZlY3ljbGVcbiAqIC0gYG5nT25Jbml0YDogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCwgY29uZmlndXJlcyBsb2dnZXIsIG1lcmdlcyBvcHRpb25zLCBhbmQgc2V0cyBmb3JtIHN0YXRlIGJhc2VkIG9uIG9wZXJhdGlvbi5cbiAqIC0gYG5nT25EZXN0cm95YDogQ2xlYW5zIHVwIHJlc291cmNlcyBhbmQgdW5yZWdpc3RlcnMgdGhlIEZvcm1Hcm91cC5cbiAqXG4gKiBAbWV0aG9kc1xuICogLSBgc3VibWl0KGV2ZW50OiBTdWJtaXRFdmVudClgOiBIYW5kbGVzIGZvcm0gc3VibWlzc2lvbiwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50IGVtaXNzaW9uLlxuICogLSBgaGFuZGxlUmVzZXQoKWA6IFJlc2V0cyB0aGUgZm9ybSBvciBuYXZpZ2F0ZXMgYmFjayBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uLlxuICogLSBgaGFuZGxlRGVsZXRlKClgOiBFbWl0cyBhIGRlbGV0ZSBldmVudCBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICpcbiAqIEB1c2FnZVxuICogVXNlIHRoaXMgY29tcG9uZW50IHdpdGhpbiBBbmd1bGFyIHRlbXBsYXRlcyB0byBwcm92aWRlIGEgcm9idXN0IENSVUQgZm9ybSBpbnRlcmZhY2UuIENvbmZpZ3VyZSBpbnB1dHMgdG8gbWF0Y2ggeW91ciBkYXRhIG1vZGVsIGFuZCBkZXNpcmVkIGJlaGF2aW9yLCBhbmQgaGFuZGxlIG91dHB1dCBldmVudHMgdG8gaW1wbGVtZW50IGN1c3RvbSBidXNpbmVzcyBsb2dpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIENydWRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBJRm9ybUVsZW1lbnQsIE9uRGVzdHJveSwgUmVuZGVyZWRNb2RlbCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFRoZSBkYXRhIG1vZGVsIHJlcG9zaXRvcnkgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHByb3ZpZGVzIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YSBsYXllciBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGRhdGEuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBwcmltYXJ5IGRhdGEgbW9kZWwgdXNlZCBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGlzIGlucHV0IHByb3ZpZGVzIHRoZSBtYWluIE1vZGVsIGluc3RhbmNlIHRoYXQgdGhlIGZvcm0gaW50ZXJhY3RzIHdpdGggZm9yXG4gICAqIGNyZWF0aW5nLCByZWFkaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgcmVjb3Jkcy4gSXQgc2VydmVzIGFzIHRoZSBzb3VyY2Ugb2Ygc2NoZW1hXG4gICAqIGFuZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciB0aGUgZm9ybSBmaWVsZHMsIGFuZCBpcyByZXF1aXJlZCBmb3IgbW9zdCBvcGVyYXRpb25zIGV4Y2VwdFxuICAgKiBmb3IgY2VydGFpbiByZWFkIG9yIGRlbGV0ZSBzY2VuYXJpb3MuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbCB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbElkITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWVsZCB1cGRhdGUgdHJpZ2dlciBtb2RlIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZC4gT3B0aW9ucyBpbmNsdWRlXG4gICAqICdjaGFuZ2UnLCAnYmx1cicsIG9yICdzdWJtaXQnLiBUaGlzIGFmZmVjdHMgdGhlIHVzZXIgZXhwZXJpZW5jZSBieSBjb250cm9sbGluZ1xuICAgKiB3aGVuIHZhbGlkYXRpb24gZmVlZGJhY2sgaXMgc2hvd24gdG8gdGhlIHVzZXIgZHVyaW5nIGZvcm0gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtGaWVsZFVwZGF0ZU1vZGV9XG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIERPTSBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHRoYXQgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgZm9ybSdzIERPTSBlbGVtZW50LlxuICAgKiBUaGlzIGVuYWJsZXMgcHJvZ3JhbW1hdGljIG1hbmlwdWxhdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IGFuZCBhY2Nlc3MgdG8gbmF0aXZlXG4gICAqIEhUTUwgZm9ybSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHdoZW4gbmVlZGVkLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZvcm0gc3VibWlzc2lvbiB0YXJnZXQgc3BlY2lmaWNhdGlvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIGFmdGVyIGZvcm0gc3VibWlzc2lvbiwgc2ltaWxhclxuICAgKiB0byB0aGUgSFRNTCBmb3JtIHRhcmdldCBhdHRyaWJ1dGUuIE9wdGlvbnMgaW5jbHVkZSAnX3NlbGYnLCAnX2JsYW5rJywgJ19wYXJlbnQnLFxuICAgKiAnX3RvcCcsIG9yIGEgbmFtZWQgZnJhbWUuIENvbnRyb2xzIHRoZSBicm93c2VyIGJlaGF2aW9yIGZvciBmb3JtIHJlc3BvbnNlcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxGb3JtVGFyZ2V0fVxuICAgKiBAZGVmYXVsdCAnX3NlbGYnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGFyZ2V0OiBIVE1MRm9ybVRhcmdldCA9ICdfc2VsZic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIVFRQIG1ldGhvZCBvciBzdWJtaXNzaW9uIHN0cmF0ZWd5IGZvciB0aGUgZm9ybS5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgdGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4gJ2dldCcgYW5kICdwb3N0JyBjb3JyZXNwb25kXG4gICAqIHRvIHN0YW5kYXJkIEhUVFAgbWV0aG9kcyBmb3IgdHJhZGl0aW9uYWwgZm9ybSBzdWJtaXNzaW9uLCB3aGlsZSAnZXZlbnQnIHVzZXNcbiAgICogQW5ndWxhciBldmVudC1kcml2ZW4gc3VibWlzc2lvbiBmb3Igc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAdHlwZSB7J2dldCcgfCAncG9zdCcgfCAnZXZlbnQnfVxuICAgKiBAZGVmYXVsdCAnZXZlbnQnXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdldmVudCcgPSAnZXZlbnQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ1JVRCBmb3JtIGJlaGF2aW9yLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdGhhdCBjb250cm9sIGZvcm0gcmVuZGVyaW5nLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgYmVoYXZpb3IuIFRoZXNlIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAgICogZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiB0byBjdXN0b21pemUgdGhlIGZvcm0ncyBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZEZvcm1PcHRpb25zfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG9wdGlvbnMhOiBDcnVkRm9ybU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBPcHRpb25hbCBhY3Rpb24gaWRlbnRpZmllciBmb3IgZm9ybSBzdWJtaXNzaW9uIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyBhIGN1c3RvbSBhY3Rpb24gbmFtZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHN1Ym1pdCBldmVudC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byB0aGUgc3RhbmRhcmQgc3VibWl0IGV2ZW50IGNvbnN0YW50LiBVc2VkIHRvXG4gICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHR5cGVzIG9mIGZvcm0gc3VibWlzc2lvbnMgd2l0aGluIHRoZSBzYW1lIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBvcGVyYXRpb24gdGhpcyBmb3JtIGlzIGhhbmRsaW5nIChDUkVBVEUsIFJFQUQsIFVQREFURSwgREVMRVRFKS5cbiAgICogVGhpcyBpcyBhIHJlcXVpcmVkIGlucHV0IHRoYXQgZGV0ZXJtaW5lcyBmb3JtIGJlaGF2aW9yLCB2YWxpZGF0aW9uIHJ1bGVzLCBhbmQgYXZhaWxhYmxlIGFjdGlvbnMuXG4gICAqIFRoZSBvcGVyYXRpb24gYWZmZWN0cyBmb3JtIHN0YXRlLCBidXR0b24gdmlzaWJpbGl0eSwgYW5kIHN1Ym1pc3Npb24gbG9naWMuXG4gICAqXG4gICAqIEB0eXBlIHtDcnVkT3BlcmF0aW9uc31cbiAgICogQHJlcXVpcmVkXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXN0b20gZXZlbnQgaGFuZGxlcnMgZm9yIGZvcm0gYWN0aW9ucy5cbiAgICogQHN1bW1hcnkgQSByZWNvcmQgb2YgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMga2V5ZWQgYnkgZXZlbnQgbmFtZXMgdGhhdCBjYW4gYmVcbiAgICogdHJpZ2dlcmVkIGR1cmluZyBmb3JtIG9wZXJhdGlvbnMuIFRoZXNlIGhhbmRsZXJzIHByb3ZpZGUgZXh0ZW5zaWJpbGl0eSBmb3JcbiAgICogY3VzdG9tIGJ1c2luZXNzIGxvZ2ljIGFuZCBjYW4gYmUgaW52b2tlZCBmb3IgdmFyaW91cyBmb3JtIGV2ZW50cyBhbmQgYWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge0hhbmRsZXJMaWtlfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGhhbmRsZXJzITogSGFuZGxlckxpa2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIHJlYWN0aXZlIEZvcm1Hcm91cCBmb3IgZm9ybSBzdGF0ZSBtYW5hZ2VtZW50LlxuICAgKiBAc3VtbWFyeSBUaGUgRm9ybUdyb3VwIGluc3RhbmNlIHRoYXQgbWFuYWdlcyBhbGwgZm9ybSBjb250cm9scywgdmFsaWRhdGlvbixcbiAgICogYW5kIGZvcm0gc3RhdGUuIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgZm9ybSB2YWx1ZXMgYW5kXG4gICAqIGNvbnRyb2xsaW5nIGZvcm0gYmVoYXZpb3IuIE1heSBiZSB1bmRlZmluZWQgZm9yIHJlYWQtb25seSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhdGggdG8gdGhlIHBhcmVudCBGb3JtR3JvdXAsIGlmIG5lc3RlZC5cbiAgICogQHN1bW1hcnkgRnVsbCBkb3QtZGVsaW1pdGVkIHBhdGggb2YgdGhlIHBhcmVudCBGb3JtR3JvdXAuIFNldCBvbmx5IHdoZW4gaXMgcGFydCBvZiBhIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY2hpbGRPZj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybSByZW5kZXJlci5cbiAgICogQHN1bW1hcnkgQSB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdXNlZCB0byByZWdpc3RlciBhbmQgbWFuYWdlIHRoaXMgZm9ybVxuICAgKiBpbnN0YW5jZSB3aXRoaW4gdGhlIE5neEZvcm1TZXJ2aWNlLiBUaGlzIElEIGlzIGFsc28gdXNlZCBhcyB0aGUgSFRNTCBpZFxuICAgKiBhdHRyaWJ1dGUgZm9yIHRoZSBmb3JtIGVsZW1lbnQsIGVuYWJsaW5nIERPTSBxdWVyaWVzIGFuZCBmb3JtIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZCE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyBkaXNwbGF5ZWQgb3IgbWFuaXB1bGF0ZWQuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJpbWFyeSBrZXkgZm9yIG9wZXJhdGlvbnMgb24gc3BlY2lmaWMgcmVjb3Jkcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQ6IHN0cmluZyA9IGdlbmVyYXRlUmFuZG9tVmFsdWUoMTIpO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkIGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIHByb3BlcnR5IGhvbGRzIGEgdW5pcXVlIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHNwZWNpZmljIHJlY29yZCBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBmb3JtLlxuICAgKiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQsIGVuc3VyaW5nIGVhY2ggZm9ybSBpbnN0YW5jZSBoYXMgYSBkaXN0aW5jdCBpZGVudGlmaWVyLlxuICAgKiBUaGUgdWlkIGlzIHVzZWQgZm9yIHRyYWNraW5nLCByZWZlcmVuY2luZywgYW5kIGVtaXR0aW5nIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHJlY29yZCwgYW5kIG1heSBiZSB1c2VkXG4gICAqIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFJhbmRvbWx5IGdlbmVyYXRlZCAxMi1jaGFyYWN0ZXIgc3RyaW5nXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dDbGVhcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAgICogQHN1bW1hcnkgRXhwb3NlcyB0aGUgT3BlcmF0aW9uS2V5cyBlbnVtIHRvIHRoZSBjb21wb25lbnQgdGVtcGxhdGUsIGVuYWJsaW5nXG4gICAqIGNvbmRpdGlvbmFsIHJlbmRlcmluZyBhbmQgYmVoYXZpb3IgYmFzZWQgb24gb3BlcmF0aW9uIHR5cGVzLiBUaGlzIHByb3RlY3RlZFxuICAgKiByZWFkb25seSBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgdGVtcGxhdGUgbG9naWMgY2FuIGFjY2VzcyBvcGVyYXRpb24gY29uc3RhbnRzXG4gICAqIHdoaWxlIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gYW5kIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb24uXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBmb3JtIHN1Ym1pc3Npb24gZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBDcnVkRm9ybUV2ZW50IG9iamVjdHMgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQsIHByb3ZpZGluZ1xuICAgKiBmb3JtIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbiwgYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzIHRvIHBhcmVudFxuICAgKiBjb21wb25lbnRzLiBUaGlzIGVuYWJsZXMgZGVjb3VwbGVkIGhhbmRsaW5nIG9mIGZvcm0gc3VibWlzc2lvbiBsb2dpYy5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgc3VibWl0RXZlbnQ6IEV2ZW50RW1pdHRlcjxDcnVkRm9ybUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgbG9nZ2luZyBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb21wb25lbnQsIGFsbG93aW5nIGZvciBjb25zaXN0ZW50XG4gICAqIGFuZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb2YgaW5mb3JtYXRpb24sIHdhcm5pbmdzLCBhbmQgZXJyb3JzLiBUaGlzIGxvZ2dlciBpcyBpbml0aWFsaXplZFxuICAgKiBpbiB0aGUgbmdPbkluaXQgbWV0aG9kIHVzaW5nIHRoZSBnZXRMb2dnZXIgZnVuY3Rpb24gZnJvbSB0aGUgRm9yQW5ndWxhck1vZHVsZS5cbiAgICpcbiAgICogVGhlIGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCB0byByZWNvcmQgaW1wb3J0YW50IGV2ZW50cywgZGVidWcgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJdCBoZWxwcyBpbiBtb25pdG9yaW5nIHRoZSBjb21wb25lbnQncyBiZWhhdmlvciwgdHJhY2tpbmcgdGhlIGZsb3dcbiAgICogb2Ygb3BlcmF0aW9ucywgYW5kIGZhY2lsaXRhdGluZyBlYXNpZXIgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZS5cbiAgICpcbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ2dlciE6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYnJvd3NlcidzIFVSTCBhbmQgaGlzdG9yeS5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQSSwgYWxsb3dpbmdcbiAgICogZm9yIGJhY2sgbmF2aWdhdGlvbiBhbmQgVVJMIG1hbmlwdWxhdGlvbiBvdXRzaWRlIG9mIEFuZ3VsYXIncyByb3V0ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtMb2NhdGlvbn1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGlmICghW09wZXJhdGlvbktleXMuUkVBRCwgT3BlcmF0aW9uS2V5cy5ERUxFVEVdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSlcbiAgICAvLyAgIE5neEZvcm1TZXJ2aWNlLmZvcm1BZnRlclZpZXdJbml0KHRoaXMsIHRoaXMucmVuZGVyZXJJZCk7XG4gIC8vIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBpbml0aWFsaXphdGlvbiBsaWZlY3ljbGUgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGJ5IHNldHRpbmcgdXAgdGhlIGxvZ2dlciwgY29uZmlndXJpbmcgZm9ybSBzdGF0ZVxuICAgKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHR5cGUsIGFuZCBtZXJnaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIFJFQUQgYW5kIERFTEVURVxuICAgKiBvcGVyYXRpb25zLCB0aGUgZm9ybUdyb3VwIGlzIHNldCB0byB1bmRlZmluZWQgc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCByZXF1aXJlXG4gICAqIGZvcm0gaW5wdXQuIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmxvZ2dlcilcbiAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSlcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBjbGVhbnVwIGxpZmVjeWNsZSBtZXRob2QuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKiBVbnJlZ2lzdGVycyB0aGUgRm9ybUdyb3VwIGZyb20gdGhlIE5neEZvcm1TZXJ2aWNlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAqIGFuZCBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cClcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5mb3JtR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGZvcm0gc3VibWlzc2lvbiB3aXRoIHZhbGlkYXRpb24gYW5kIGV2ZW50IGVtaXNzaW9uLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgZm9ybSBzdWJtaXNzaW9uIGJ5IGZpcnN0IHByZXZlbnRpbmcgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yLFxuICAgKiB0aGVuIHZhbGlkYXRpbmcgYWxsIGZvcm0gZmllbGRzIHVzaW5nIE5neEZvcm1TZXJ2aWNlLiBJZiB2YWxpZGF0aW9uIHBhc3NlcyxcbiAgICogZXh0cmFjdHMgZm9ybSBkYXRhIGFuZCBlbWl0cyBhIHN1Ym1pdEV2ZW50IHdpdGggdGhlIGRhdGEsIGNvbXBvbmVudCBpbmZvcm1hdGlvbixcbiAgICogYW5kIGFueSBhc3NvY2lhdGVkIGhhbmRsZXJzLiBSZXR1cm5zIGZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3VibWl0RXZlbnR9IGV2ZW50IC0gVGhlIGJyb3dzZXIncyBuYXRpdmUgZm9ybSBzdWJtaXQgZXZlbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbiB8IHZvaWQ+fSBSZXR1cm5zIGZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMsIHZvaWQgaWYgc3VjY2Vzc2Z1bFxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIU5neEZvcm1TZXJ2aWNlLnZhbGlkYXRlRmllbGRzKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGF0YSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGEsXG4gICAgICBjb21wb25lbnQ6ICdDcnVkRm9ybUNvbXBvbmVudCcsXG4gICAgICBuYW1lOiB0aGlzLmFjdGlvbiB8fCBFdmVudENvbnN0YW50cy5TVUJNSVQsXG4gICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb3JtIHJlc2V0IG9yIG5hdmlnYXRpb24gYmFjayBmdW5jdGlvbmFsaXR5LlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBkaWZmZXJlbnQgcmVzZXQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW9uLlxuICAgKiBGb3IgQ1JFQVRFIGFuZCBVUERBVEUgb3BlcmF0aW9ucywgcmVzZXRzIHRoZSBmb3JtIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgKiBGb3IgUkVBRCBhbmQgREVMRVRFIG9wZXJhdGlvbnMsIG5hdmlnYXRlcyBiYWNrIGluIHRoZSBicm93c2VyIGhpc3RvcnlcbiAgICogc2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBkb24ndCBoYXZlIG1vZGlmaWFibGUgZm9ybSBkYXRhIHRvIHJlc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVSZXNldCgpOiB2b2lkIHtcbiAgICBpZighW09wZXJhdGlvbktleXMuREVMRVRFLCBPcGVyYXRpb25LZXlzLlJFQURdLmluY2x1ZGVzKHRoaXMub3BlcmF0aW9uKSAmJiB0aGlzLmFsbG93Q2xlYXIpXG4gICAgICByZXR1cm4gTmd4Rm9ybVNlcnZpY2UucmVzZXQodGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBkZWxldGUgb3BlcmF0aW9ucyBieSBlbWl0dGluZyBkZWxldGUgZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgZGVsZXRlIHJlcXVlc3RzIGJ5IGVtaXR0aW5nIGEgc3VibWl0IGV2ZW50IHdpdGggdGhlXG4gICAqIHJlY29yZCdzIHVuaXF1ZSBpZGVudGlmaWVyIGFzIGRhdGEuIFRoaXMgYWxsb3dzIHBhcmVudCBjb21wb25lbnRzIHRvXG4gICAqIGhhbmRsZSB0aGUgYWN0dWFsIGRlbGV0aW9uIGxvZ2ljIHdoaWxlIG1haW50YWluaW5nIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG4gICAqIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgdWlkIGFuZCBzdGFuZGFyZCBjb21wb25lbnQgaWRlbnRpZmljYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGhhbmRsZURlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdEV2ZW50LmVtaXQoe1xuICAgICAgZGF0YTogdGhpcy5tb2RlbElkLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlULFxuICAgIH0pO1xuICB9XG5cbn1cbiIsIkBpZihvcGVyYXRpb24gIT09ICdyZWFkJyAmJiBvcGVyYXRpb24gIT09ICdkZWxldGUnKSB7XG4gIDxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cInJlbmRlcmVySWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChzdWJtaXQpPVwic3VibWl0KCRldmVudClcIiBub3ZhbGlkYXRlIFt0YXJnZXRdPVwidGFyZ2V0XCI+XG4gICAgPG5nLWNvbnRlbnQgI2Zvcm1Db250ZW50PjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZGNmLWJ1dHRvbnMtY29udGFpbmVyIGRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgYWN0aW9uID8gYWN0aW9uIDogb3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYoIWFjdGlvbikge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBCYWNrXG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxufSBAZWxzZSB7XG4gIDxkaXYgW2NsYXNzXT1cIidkY2YtYnV0dG9ucy1jb250YWluZXIgZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbGVmdCAnICsgb3BlcmF0aW9uXCIgW2lkXT1cInVpZFwiPlxuICAgIEBpZihvcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuUkVBRCAmJiBtb2RlbElkKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEZWxldGUoKVwiXG4gICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgIH1cbiAgICBAaWYob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkNSRUFURSB8fCBvcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuVVBEQVRFKSB7XG5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3tvcHRpb25zLmJ1dHRvbnMuc3VibWl0LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyKSB7XG4gICAgICA8ZGl2PlxuICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uICBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgW09wZXJhdGlvbktleXMuREVMRVRFLCBPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuVVBEQVRFXS5pbmNsdWRlcyhvcGVyYXRpb24pID8gJ0JhY2snIDogb3B0aW9ucy5idXR0b25zLmNsZWFyPy50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG4iXX0=
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUErRCxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUcvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQStESSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUF2QjtRQTJCTDs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQWNyQzs7Ozs7Ozs7O1dBU0c7UUFFSCxXQUFNLEdBQW1C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LE9BQU87O0FBd0R0QyxpQkFBaUI7SUE5RDdCLE9BQU8sRUFBRTtHQThERyxpQkFBaUIsQ0FxVjdCOzs0RkFyVlksaUJBQWlCO2tCQTdEN0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04scUJBQXFCLFdBR3RCLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUM1QyxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUM7OEJBa0UxQixLQUFLO3NCQURKLEtBQUs7Z0JBZU4sT0FBTztzQkFETixLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQWM5RCxNQUFNO3NCQURMLEtBQUs7Z0JBY04sTUFBTTtzQkFETCxLQUFLO2dCQWFOLE9BQU87c0JBRE4sS0FBSztnQkFhTixNQUFNO3NCQURMLEtBQUs7Z0JBY04sU0FBUztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFhekIsUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsS0FBSztnQkFXTixPQUFPO3NCQUROLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQVlOLEdBQUc7c0JBREYsS0FBSztnQkFnQk4sVUFBVTtzQkFEVCxLQUFLO2dCQTJCTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGb3JtRWxlbWVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5neEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEZvcm1TZXJ2aWNlJztcbmltcG9ydCB7IENydWRGb3JtRXZlbnQsIER5bmFtaWMsIEV2ZW50Q29uc3RhbnRzLCBGaWVsZFVwZGF0ZU1vZGUsIEhhbmRsZXJMaWtlLCBIVE1MRm9ybVRhcmdldCwgUmVuZGVyZWRNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci1jb21tb24ubW9kdWxlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5cbi8qKlxuICogQGNvbXBvbmVudCBDcnVkRm9ybUNvbXBvbmVudFxuICogQGV4YW1wbGUgPG5neC1kZWNhZi1jcnVkLWZvcm1cbiAqICAgYWN0aW9uPVwiY3JlYXRlXCJcbiAqICAgb3BlcmF0aW9uPVwiY3JlYXRlXCJcbiAqICAgZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCJcbiAqICAgcmVuZGVyZXJJZD1cInJlbmRlcmVySWRcIlxuICogICBzdWJtaXRFdmVudD1cInN1Ym1pdEV2ZW50XCJcbiAqICAgdGFyZ2V0PVwiX3NlbGZcIlxuICogICBtZXRob2Q9XCJldmVudFwiPlxuICogPC9uZ3gtZGVjYWYtY3J1ZC1mb3JtPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Q3J1ZE9wZXJhdGlvbnN9IG9wZXJhdGlvbiAtIFRoZSBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIGZvcm0gZ3JvdXBcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW5kZXJlcklkIC0gVGhlIHJlbmRlcmVyIGlkXG4gKiBAcGFyYW0ge1N1Ym1pdEV2ZW50fSBzdWJtaXRFdmVudCAtIFRoZSBzdWJtaXQgZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBUaGUgdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG1ldGhvZFxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtY3J1ZC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NydWQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NydWQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgaG9zdDogeydbYXR0ci5pZF0nOiAndWlkJ30sXG59KVxuLyoqXG4gKiBAY2xhc3MgQ3J1ZEZvcm1Db21wb25lbnRcbiAqIEBpbXBsZW1lbnRzIE9uSW5pdCwgSUZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWxcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgQ3J1ZEZvcm1Db21wb25lbnRgIGlzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGRlc2lnbmVkIHRvIHByb3ZpZGUgYSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZSBmb3JtIGludGVyZmFjZSBmb3IgcGVyZm9ybWluZyBDUlVEIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlKSBvcGVyYXRpb25zIG9uIGEgZGF0YSBtb2RlbC4gSXQgaW50ZWdyYXRlcyB3aXRoIEFuZ3VsYXIncyByZWFjdGl2ZSBmb3JtcyBhbmQgc3VwcG9ydHMgYWR2YW5jZWQgY29uZmlndXJhdGlvbiwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50IGhhbmRsaW5nIGZvciBhIHdpZGUgcmFuZ2Ugb2YgdXNlIGNhc2VzLlxuICpcbiAqIEBzdW1tYXJ5XG4gKiAtIFN1cHBvcnRzIGR5bmFtaWMgZm9ybSByZW5kZXJpbmcgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRhdGEgbW9kZWwgYW5kIG9wZXJhdGlvbiB0eXBlLlxuICogLSBIYW5kbGVzIGZvcm0gdmFsaWRhdGlvbiwgc3VibWlzc2lvbiwgYW5kIHJlc2V0IGxvZ2ljIHdpdGggY3VzdG9taXphYmxlIGJlaGF2aW9yLlxuICogLSBFbWl0cyBzdHJ1Y3R1cmVkIGV2ZW50cyBmb3IgZm9ybSBhY3Rpb25zLCBlbmFibGluZyBkZWNvdXBsZWQgYnVzaW5lc3MgbG9naWMuXG4gKiAtIEludGVncmF0ZXMgd2l0aCBleHRlcm5hbCBzZXJ2aWNlcyBmb3IgbG9nZ2luZywgZm9ybSBtYW5hZ2VtZW50LCBhbmQgbmF2aWdhdGlvbi5cbiAqIC0gUHJvdmlkZXMgZXh0ZW5zaXZlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZm9ybSBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvci5cbiAqXG4gKiBAaW5wdXRzXG4gKiAtIGBtb2RlbGA6IFRoZSByZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gKiAtIGBtb2RlbElkYDogVGhlIHByaW1hcnkgZGF0YSBtb2RlbCBpbnN0YW5jZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICogLSBgdXBkYXRlT25gOiBEZXRlcm1pbmVzIHdoZW4gZm9ybSBmaWVsZCB2YWxpZGF0aW9uIGlzIHRyaWdnZXJlZCAoYGNoYW5nZWAsIGBibHVyYCwgb3IgYHN1Ym1pdGApLlxuICogLSBgY29tcG9uZW50YDogUmVmZXJlbmNlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIERPTSBlbGVtZW50LlxuICogLSBgdGFyZ2V0YDogU3BlY2lmaWVzIHRoZSBmb3JtIHN1Ym1pc3Npb24gdGFyZ2V0IChlLmcuLCBgX3NlbGZgLCBgX2JsYW5rYCkuXG4gKiAtIGBtZXRob2RgOiBEZWZpbmVzIHRoZSBmb3JtIHN1Ym1pc3Npb24gc3RyYXRlZ3kgKGBnZXRgLCBgcG9zdGAsIG9yIGBldmVudGApLlxuICogLSBgb3B0aW9uc2A6IENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZm9ybSBiZWhhdmlvciBhbmQgcmVuZGVyaW5nLlxuICogLSBgYWN0aW9uYDogT3B0aW9uYWwgY3VzdG9tIGFjdGlvbiBpZGVudGlmaWVyIGZvciBzdWJtaXNzaW9uIGNvbnRleHQuXG4gKiAtIGBvcGVyYXRpb25gOiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgKHJlcXVpcmVkKS5cbiAqIC0gYGhhbmRsZXJzYDogQ3VzdG9tIGV2ZW50IGhhbmRsZXJzIGZvciBmb3JtIGFjdGlvbnMuXG4gKiAtIGBmb3JtR3JvdXBgOiBBbmd1bGFyIEZvcm1Hcm91cCBmb3IgZm9ybSBzdGF0ZSBtYW5hZ2VtZW50LlxuICogLSBgY2hpbGRPZmA6IFBhdGggdG8gdGhlIHBhcmVudCBGb3JtR3JvdXAgaWYgbmVzdGVkLlxuICogLSBgcmVuZGVyZXJJZGA6IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybSByZW5kZXJlci5cbiAqIC0gYHVpZGA6IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQuXG4gKiAtIGBhbGxvd0NsZWFyYDogRW5hYmxlcyBvciBkaXNhYmxlcyBmb3JtIGNsZWFyaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQG91dHB1dHNcbiAqIC0gYHN1Ym1pdEV2ZW50YDogRW1pdHMgYENydWRGb3JtRXZlbnRgIG9iamVjdHMgb24gZm9ybSBzdWJtaXNzaW9uLlxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIC0gYE9wZXJhdGlvbktleXNgOiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogLSBgbG9nZ2VyYDogTG9nZ2VyIGluc3RhbmNlIGZvciBzdHJ1Y3R1cmVkIGxvZ2dpbmcuXG4gKiAtIGBsb2NhdGlvbmA6IEFuZ3VsYXIgTG9jYXRpb24gc2VydmljZSBmb3IgbmF2aWdhdGlvbi5cbiAqXG4gKiBAbGlmZWN5Y2xlXG4gKiAtIGBuZ09uSW5pdGA6IEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIGNvbmZpZ3VyZXMgbG9nZ2VyLCBtZXJnZXMgb3B0aW9ucywgYW5kIHNldHMgZm9ybSBzdGF0ZSBiYXNlZCBvbiBvcGVyYXRpb24uXG4gKiAtIGBuZ09uRGVzdHJveWA6IENsZWFucyB1cCByZXNvdXJjZXMgYW5kIHVucmVnaXN0ZXJzIHRoZSBGb3JtR3JvdXAuXG4gKlxuICogQG1ldGhvZHNcbiAqIC0gYHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpYDogSGFuZGxlcyBmb3JtIHN1Ym1pc3Npb24sIHZhbGlkYXRpb24sIGFuZCBldmVudCBlbWlzc2lvbi5cbiAqIC0gYGhhbmRsZVJlc2V0KClgOiBSZXNldHMgdGhlIGZvcm0gb3IgbmF2aWdhdGVzIGJhY2sgYmFzZWQgb24gdGhlIG9wZXJhdGlvbi5cbiAqIC0gYGhhbmRsZURlbGV0ZSgpYDogRW1pdHMgYSBkZWxldGUgZXZlbnQgZm9yIHRoZSBjdXJyZW50IHJlY29yZC5cbiAqXG4gKiBAdXNhZ2VcbiAqIFVzZSB0aGlzIGNvbXBvbmVudCB3aXRoaW4gQW5ndWxhciB0ZW1wbGF0ZXMgdG8gcHJvdmlkZSBhIHJvYnVzdCBDUlVEIGZvcm0gaW50ZXJmYWNlLiBDb25maWd1cmUgaW5wdXRzIHRvIG1hdGNoIHlvdXIgZGF0YSBtb2RlbCBhbmQgZGVzaXJlZCBiZWhhdmlvciwgYW5kIGhhbmRsZSBvdXRwdXQgZXZlbnRzIHRvIGltcGxlbWVudCBjdXN0b20gYnVzaW5lc3MgbG9naWMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDcnVkRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgSUZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWwge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBtb2RlbCBmb3IgZGF0YSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGUgZGF0YSBtb2RlbCByZXBvc2l0b3J5IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogVGhpcyBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWx8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbCE6IE1vZGVsIHwgdW5kZWZpbmVkO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgcHJpbWFyeSBkYXRhIG1vZGVsIHVzZWQgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgVGhpcyBpbnB1dCBwcm92aWRlcyB0aGUgbWFpbiBNb2RlbCBpbnN0YW5jZSB0aGF0IHRoZSBmb3JtIGludGVyYWN0cyB3aXRoIGZvclxuICAgKiBjcmVhdGluZywgcmVhZGluZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIHJlY29yZHMuIEl0IHNlcnZlcyBhcyB0aGUgc291cmNlIG9mIHNjaGVtYVxuICAgKiBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhlIGZvcm0gZmllbGRzLCBhbmQgaXMgcmVxdWlyZWQgZm9yIG1vc3Qgb3BlcmF0aW9ucyBleGNlcHRcbiAgICogZm9yIGNlcnRhaW4gcmVhZCBvciBkZWxldGUgc2NlbmFyaW9zLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWwgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbW9kZWxJZCE6IE1vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmllbGQgdXBkYXRlIHRyaWdnZXIgbW9kZSBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZW4gZm9ybSBmaWVsZCB2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQuIE9wdGlvbnMgaW5jbHVkZVxuICAgKiAnY2hhbmdlJywgJ2JsdXInLCBvciAnc3VibWl0Jy4gVGhpcyBhZmZlY3RzIHRoZSB1c2VyIGV4cGVyaWVuY2UgYnkgY29udHJvbGxpbmdcbiAgICogd2hlbiB2YWxpZGF0aW9uIGZlZWRiYWNrIGlzIHNob3duIHRvIHRoZSB1c2VyIGR1cmluZyBmb3JtIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7RmllbGRVcGRhdGVNb2RlfVxuICAgKiBAZGVmYXVsdCAnY2hhbmdlJ1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHVwZGF0ZU9uOiBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgcmVhY3RpdmUgZm9ybSBET00gZWxlbWVudC5cbiAgICogQHN1bW1hcnkgVmlld0NoaWxkIHJlZmVyZW5jZSB0aGF0IHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGZvcm0ncyBET00gZWxlbWVudC5cbiAgICogVGhpcyBlbmFibGVzIHByb2dyYW1tYXRpYyBtYW5pcHVsYXRpb24gb2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgYWNjZXNzIHRvIG5hdGl2ZVxuICAgKiBIVE1MIGZvcm0gcHJvcGVydGllcyBhbmQgbWV0aG9kcyB3aGVuIG5lZWRlZC5cbiAgICpcbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgncmVhY3RpdmVGb3JtJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNvbXBvbmVudCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGb3JtIHN1Ym1pc3Npb24gdGFyZ2V0IHNwZWNpZmljYXRpb24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGVyZSB0byBkaXNwbGF5IHRoZSByZXNwb25zZSBhZnRlciBmb3JtIHN1Ym1pc3Npb24sIHNpbWlsYXJcbiAgICogdG8gdGhlIEhUTUwgZm9ybSB0YXJnZXQgYXR0cmlidXRlLiBPcHRpb25zIGluY2x1ZGUgJ19zZWxmJywgJ19ibGFuaycsICdfcGFyZW50JyxcbiAgICogJ190b3AnLCBvciBhIG5hbWVkIGZyYW1lLiBDb250cm9scyB0aGUgYnJvd3NlciBiZWhhdmlvciBmb3IgZm9ybSByZXNwb25zZXMuXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRm9ybVRhcmdldH1cbiAgICogQGRlZmF1bHQgJ19zZWxmJ1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSFRUUCBtZXRob2Qgb3Igc3VibWlzc2lvbiBzdHJhdGVneSBmb3IgdGhlIGZvcm0uXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IHRoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuICdnZXQnIGFuZCAncG9zdCcgY29ycmVzcG9uZFxuICAgKiB0byBzdGFuZGFyZCBIVFRQIG1ldGhvZHMgZm9yIHRyYWRpdGlvbmFsIGZvcm0gc3VibWlzc2lvbiwgd2hpbGUgJ2V2ZW50JyB1c2VzXG4gICAqIEFuZ3VsYXIgZXZlbnQtZHJpdmVuIHN1Ym1pc3Npb24gZm9yIHNpbmdsZS1wYWdlIGFwcGxpY2F0aW9uIHdvcmtmbG93cy5cbiAgICpcbiAgICogQHR5cGUgeydnZXQnIHwgJ3Bvc3QnIHwgJ2V2ZW50J31cbiAgICogQGRlZmF1bHQgJ2V2ZW50J1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAnZXZlbnQnID0gJ2V2ZW50JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENSVUQgZm9ybSBiZWhhdmlvci5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdmFyaW91cyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgY29udHJvbCBmb3JtIHJlbmRlcmluZyxcbiAgICogdmFsaWRhdGlvbiwgYW5kIGJlaGF2aW9yLiBUaGVzZSBvcHRpb25zIGFyZSBtZXJnZWQgd2l0aCBkZWZhdWx0IHNldHRpbmdzXG4gICAqIGR1cmluZyBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24gdG8gY3VzdG9taXplIHRoZSBmb3JtJ3MgZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHR5cGUge0NydWRGb3JtT3B0aW9uc31cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBvcHRpb25zITogQ3J1ZEZvcm1PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gT3B0aW9uYWwgYWN0aW9uIGlkZW50aWZpZXIgZm9yIGZvcm0gc3VibWlzc2lvbiBjb250ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgYSBjdXN0b20gYWN0aW9uIG5hbWUgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBzdWJtaXQgZXZlbnQuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdHMgdG8gdGhlIHN0YW5kYXJkIHN1Ym1pdCBldmVudCBjb25zdGFudC4gVXNlZCB0b1xuICAgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlcyBvZiBmb3JtIHN1Ym1pc3Npb25zIHdpdGhpbiB0aGUgc2FtZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYWN0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnQgQ1JVRCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHR5cGUgb2Ygb3BlcmF0aW9uIHRoaXMgZm9ybSBpcyBoYW5kbGluZyAoQ1JFQVRFLCBSRUFELCBVUERBVEUsIERFTEVURSkuXG4gICAqIFRoaXMgaXMgYSByZXF1aXJlZCBpbnB1dCB0aGF0IGRldGVybWluZXMgZm9ybSBiZWhhdmlvciwgdmFsaWRhdGlvbiBydWxlcywgYW5kIGF2YWlsYWJsZSBhY3Rpb25zLlxuICAgKiBUaGUgb3BlcmF0aW9uIGFmZmVjdHMgZm9ybSBzdGF0ZSwgYnV0dG9uIHZpc2liaWxpdHksIGFuZCBzdWJtaXNzaW9uIGxvZ2ljLlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZE9wZXJhdGlvbnN9XG4gICAqIEByZXF1aXJlZFxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG9wZXJhdGlvbiE6IENydWRPcGVyYXRpb25zO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VzdG9tIGV2ZW50IGhhbmRsZXJzIGZvciBmb3JtIGFjdGlvbnMuXG4gICAqIEBzdW1tYXJ5IEEgcmVjb3JkIG9mIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGtleWVkIGJ5IGV2ZW50IG5hbWVzIHRoYXQgY2FuIGJlXG4gICAqIHRyaWdnZXJlZCBkdXJpbmcgZm9ybSBvcGVyYXRpb25zLiBUaGVzZSBoYW5kbGVycyBwcm92aWRlIGV4dGVuc2liaWxpdHkgZm9yXG4gICAqIGN1c3RvbSBidXNpbmVzcyBsb2dpYyBhbmQgY2FuIGJlIGludm9rZWQgZm9yIHZhcmlvdXMgZm9ybSBldmVudHMgYW5kIGFjdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtIYW5kbGVyTGlrZX1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBoYW5kbGVycyE6IEhhbmRsZXJMaWtlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQW5ndWxhciByZWFjdGl2ZSBGb3JtR3JvdXAgZm9yIGZvcm0gc3RhdGUgbWFuYWdlbWVudC5cbiAgICogQHN1bW1hcnkgVGhlIEZvcm1Hcm91cCBpbnN0YW5jZSB0aGF0IG1hbmFnZXMgYWxsIGZvcm0gY29udHJvbHMsIHZhbGlkYXRpb24sXG4gICAqIGFuZCBmb3JtIHN0YXRlLiBUaGlzIGlzIHRoZSBtYWluIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGZvcm0gdmFsdWVzIGFuZFxuICAgKiBjb250cm9sbGluZyBmb3JtIGJlaGF2aW9yLiBNYXkgYmUgdW5kZWZpbmVkIGZvciByZWFkLW9ubHkgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge0Zvcm1Hcm91cCB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXRoIHRvIHRoZSBwYXJlbnQgRm9ybUdyb3VwLCBpZiBuZXN0ZWQuXG4gICAqIEBzdW1tYXJ5IEZ1bGwgZG90LWRlbGltaXRlZCBwYXRoIG9mIHRoZSBwYXJlbnQgRm9ybUdyb3VwLiBTZXQgb25seSB3aGVuIGlzIHBhcnQgb2YgYSBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNoaWxkT2Y/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGZvcm0gcmVuZGVyZXIuXG4gICAqIEBzdW1tYXJ5IEEgdW5pcXVlIHN0cmluZyBpZGVudGlmaWVyIHVzZWQgdG8gcmVnaXN0ZXIgYW5kIG1hbmFnZSB0aGlzIGZvcm1cbiAgICogaW5zdGFuY2Ugd2l0aGluIHRoZSBOZ3hGb3JtU2VydmljZS4gVGhpcyBJRCBpcyBhbHNvIHVzZWQgYXMgdGhlIEhUTUwgaWRcbiAgICogYXR0cmlidXRlIGZvciB0aGUgZm9ybSBlbGVtZW50LCBlbmFibGluZyBET00gcXVlcmllcyBhbmQgZm9ybSBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICAgKiBAc3VtbWFyeSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQgYmVpbmcgZGlzcGxheWVkIG9yIG1hbmlwdWxhdGVkLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBvcGVyYXRpb25zIG9uIHNwZWNpZmljIHJlY29yZHMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdWlkOiBzdHJpbmcgPSBnZW5lcmF0ZVJhbmRvbVZhbHVlKDEyKTtcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZCBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgVGhpcyBwcm9wZXJ0eSBob2xkcyBhIHVuaXF1ZSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBzcGVjaWZpYyByZWNvcmQgYmVpbmcgbWFuYWdlZCBieSB0aGUgZm9ybS5cbiAgICogSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLCBlbnN1cmluZyBlYWNoIGZvcm0gaW5zdGFuY2UgaGFzIGEgZGlzdGluY3QgaWRlbnRpZmllci5cbiAgICogVGhlIHVpZCBpcyB1c2VkIGZvciB0cmFja2luZywgcmVmZXJlbmNpbmcsIGFuZCBlbWl0dGluZyBldmVudHMgcmVsYXRlZCB0byB0aGUgY3VycmVudCByZWNvcmQsIGFuZCBtYXkgYmUgdXNlZFxuICAgKiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcmltYXJ5IGtleSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBSYW5kb21seSBnZW5lcmF0ZWQgMTItY2hhcmFjdGVyIHN0cmluZ1xuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFsbG93Q2xlYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIENSVUQgb3BlcmF0aW9uIGNvbnN0YW50cyBmb3IgdGVtcGxhdGUgdXNhZ2UuXG4gICAqIEBzdW1tYXJ5IEV4cG9zZXMgdGhlIE9wZXJhdGlvbktleXMgZW51bSB0byB0aGUgY29tcG9uZW50IHRlbXBsYXRlLCBlbmFibGluZ1xuICAgKiBjb25kaXRpb25hbCByZW5kZXJpbmcgYW5kIGJlaGF2aW9yIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlcy4gVGhpcyBwcm90ZWN0ZWRcbiAgICogcmVhZG9ubHkgcHJvcGVydHkgZW5zdXJlcyB0aGF0IHRlbXBsYXRlIGxvZ2ljIGNhbiBhY2Nlc3Mgb3BlcmF0aW9uIGNvbnN0YW50c1xuICAgKiB3aGlsZSBtYWludGFpbmluZyBlbmNhcHN1bGF0aW9uIGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbW9kaWZpY2F0aW9uLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEByZWFkb25seVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBPcGVyYXRpb25LZXlzID0gT3BlcmF0aW9uS2V5cztcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3IgZm9ybSBzdWJtaXNzaW9uIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgRW1pdHMgQ3J1ZEZvcm1FdmVudCBvYmplY3RzIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLCBwcm92aWRpbmdcbiAgICogZm9ybSBkYXRhLCBjb21wb25lbnQgaW5mb3JtYXRpb24sIGFuZCBhbnkgYXNzb2NpYXRlZCBoYW5kbGVycyB0byBwYXJlbnRcbiAgICogY29tcG9uZW50cy4gVGhpcyBlbmFibGVzIGRlY291cGxlZCBoYW5kbGluZyBvZiBmb3JtIHN1Ym1pc3Npb24gbG9naWMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD59XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHN1Ym1pdEV2ZW50OiBFdmVudEVtaXR0ZXI8Q3J1ZEZvcm1FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENydWRGb3JtRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGxvZ2dpbmcgY2FwYWJpbGl0aWVzIGZvciB0aGUgY29tcG9uZW50LCBhbGxvd2luZyBmb3IgY29uc2lzdGVudFxuICAgKiBhbmQgc3RydWN0dXJlZCBsb2dnaW5nIG9mIGluZm9ybWF0aW9uLCB3YXJuaW5ncywgYW5kIGVycm9ycy4gVGhpcyBsb2dnZXIgaXMgaW5pdGlhbGl6ZWRcbiAgICogaW4gdGhlIG5nT25Jbml0IG1ldGhvZCB1c2luZyB0aGUgZ2V0TG9nZ2VyIGZ1bmN0aW9uIGZyb20gdGhlIEZvckFuZ3VsYXJDb21tb25Nb2R1bGUuXG4gICAqXG4gICAqIFRoZSBsb2dnZXIgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21wb25lbnQgdG8gcmVjb3JkIGltcG9ydGFudCBldmVudHMsIGRlYnVnIGluZm9ybWF0aW9uLFxuICAgKiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSXQgaGVscHMgaW4gbW9uaXRvcmluZyB0aGUgY29tcG9uZW50J3MgYmVoYXZpb3IsIHRyYWNraW5nIHRoZSBmbG93XG4gICAqIG9mIG9wZXJhdGlvbnMsIGFuZCBmYWNpbGl0YXRpbmcgZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dnZXIhOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIExvY2F0aW9uIHNlcnZpY2UuXG4gICAqIEBzdW1tYXJ5IEluamVjdGVkIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGJyb3dzZXIncyBVUkwgYW5kIGhpc3RvcnkuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm93c2VyJ3MgaGlzdG9yeSBBUEksIGFsbG93aW5nXG4gICAqIGZvciBiYWNrIG5hdmlnYXRpb24gYW5kIFVSTCBtYW5pcHVsYXRpb24gb3V0c2lkZSBvZiBBbmd1bGFyJ3Mgcm91dGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7TG9jYXRpb259XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBpZiAoIVtPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuREVMRVRFXS5pbmNsdWRlcyh0aGlzLm9wZXJhdGlvbikpXG4gICAgLy8gICBOZ3hGb3JtU2VydmljZS5mb3JtQWZ0ZXJWaWV3SW5pdCh0aGlzLCB0aGlzLnJlbmRlcmVySWQpO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgaW5pdGlhbGl6YXRpb24gbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBieSBzZXR0aW5nIHVwIHRoZSBsb2dnZXIsIGNvbmZpZ3VyaW5nIGZvcm0gc3RhdGVcbiAgICogYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlLCBhbmQgbWVyZ2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBSRUFEIGFuZCBERUxFVEVcbiAgICogb3BlcmF0aW9ucywgdGhlIGZvcm1Hcm91cCBpcyBzZXQgdG8gdW5kZWZpbmVkIHNpbmNlIHRoZXNlIG9wZXJhdGlvbnMgZG9uJ3QgcmVxdWlyZVxuICAgKiBmb3JtIGlucHV0LiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyT2YgQ3J1ZEZvcm1Db21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5sb2dnZXIpXG4gICAgICB0aGlzLmxvZ2dlciA9IGdldExvZ2dlcih0aGlzKTtcbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuUkVBRCB8fCB0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5ERUxFVEUpXG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0Rm9ybVJlYWN0aXZlT3B0aW9ucyxcbiAgICAgIHRoaXMub3B0aW9ucyB8fCB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgY2xlYW51cCBsaWZlY3ljbGUgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBjbGVhbnVwIG9wZXJhdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICogVW5yZWdpc3RlcnMgdGhlIEZvcm1Hcm91cCBmcm9tIHRoZSBOZ3hGb3JtU2VydmljZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgKiBhbmQgZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXApXG4gICAgICBOZ3hGb3JtU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZm9ybUdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb3JtIHN1Ym1pc3Npb24gd2l0aCB2YWxpZGF0aW9uIGFuZCBldmVudCBlbWlzc2lvbi5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGZvcm0gc3VibWlzc2lvbiBieSBmaXJzdCBwcmV2ZW50aW5nIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvcixcbiAgICogdGhlbiB2YWxpZGF0aW5nIGFsbCBmb3JtIGZpZWxkcyB1c2luZyBOZ3hGb3JtU2VydmljZS4gSWYgdmFsaWRhdGlvbiBwYXNzZXMsXG4gICAqIGV4dHJhY3RzIGZvcm0gZGF0YSBhbmQgZW1pdHMgYSBzdWJtaXRFdmVudCB3aXRoIHRoZSBkYXRhLCBjb21wb25lbnQgaW5mb3JtYXRpb24sXG4gICAqIGFuZCBhbnkgYXNzb2NpYXRlZCBoYW5kbGVycy4gUmV0dXJucyBmYWxzZSBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0ge1N1Ym1pdEV2ZW50fSBldmVudCAtIFRoZSBicm93c2VyJ3MgbmF0aXZlIGZvcm0gc3VibWl0IGV2ZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4gfCB2b2lkPn0gUmV0dXJucyBmYWxzZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB2b2lkIGlmIHN1Y2Nlc3NmdWxcbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyBzdWJtaXQoZXZlbnQ6IFN1Ym1pdEV2ZW50KTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFOZ3hGb3JtU2VydmljZS52YWxpZGF0ZUZpZWxkcyh0aGlzLmZvcm1Hcm91cCBhcyBGb3JtR3JvdXApKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRhdGEgPSBOZ3hGb3JtU2VydmljZS5nZXRGb3JtRGF0YSh0aGlzLmZvcm1Hcm91cCBhcyBGb3JtR3JvdXApO1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh7XG4gICAgICBkYXRhLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogdGhpcy5hY3Rpb24gfHwgRXZlbnRDb25zdGFudHMuU1VCTUlULFxuICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZm9ybSByZXNldCBvciBuYXZpZ2F0aW9uIGJhY2sgZnVuY3Rpb25hbGl0eS5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgZGlmZmVyZW50IHJlc2V0IGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBjdXJyZW50IG9wZXJhdGlvbi5cbiAgICogRm9yIENSRUFURSBhbmQgVVBEQVRFIG9wZXJhdGlvbnMsIHJlc2V0cyB0aGUgZm9ybSB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICogRm9yIFJFQUQgYW5kIERFTEVURSBvcGVyYXRpb25zLCBuYXZpZ2F0ZXMgYmFjayBpbiB0aGUgYnJvd3NlciBoaXN0b3J5XG4gICAqIHNpbmNlIHRoZXNlIG9wZXJhdGlvbnMgZG9uJ3QgaGF2ZSBtb2RpZmlhYmxlIGZvcm0gZGF0YSB0byByZXNldC5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlUmVzZXQoKTogdm9pZCB7XG4gICAgaWYoIVtPcGVyYXRpb25LZXlzLkRFTEVURSwgT3BlcmF0aW9uS2V5cy5SRUFEXS5pbmNsdWRlcyh0aGlzLm9wZXJhdGlvbikgJiYgdGhpcy5hbGxvd0NsZWFyKVxuICAgICAgcmV0dXJuIE5neEZvcm1TZXJ2aWNlLnJlc2V0KHRoaXMuZm9ybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZGVsZXRlIG9wZXJhdGlvbnMgYnkgZW1pdHRpbmcgZGVsZXRlIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGRlbGV0ZSByZXF1ZXN0cyBieSBlbWl0dGluZyBhIHN1Ym1pdCBldmVudCB3aXRoIHRoZVxuICAgKiByZWNvcmQncyB1bmlxdWUgaWRlbnRpZmllciBhcyBkYXRhLiBUaGlzIGFsbG93cyBwYXJlbnQgY29tcG9uZW50cyB0b1xuICAgKiBoYW5kbGUgdGhlIGFjdHVhbCBkZWxldGlvbiBsb2dpYyB3aGlsZSBtYWludGFpbmluZyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuICAgKiBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIHVpZCBhbmQgc3RhbmRhcmQgY29tcG9uZW50IGlkZW50aWZpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVEZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMubW9kZWxJZCxcbiAgICAgIGNvbXBvbmVudDogJ0NydWRGb3JtQ29tcG9uZW50JyxcbiAgICAgIG5hbWU6IEV2ZW50Q29uc3RhbnRzLlNVQk1JVCxcbiAgICB9KTtcbiAgfVxuXG59XG4iLCJAaWYob3BlcmF0aW9uICE9PSAncmVhZCcgJiYgb3BlcmF0aW9uICE9PSAnZGVsZXRlJykge1xuICA8Zm9ybSAjcmVhY3RpdmVGb3JtIFtpZF09XCJyZW5kZXJlcklkXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAoc3VibWl0KT1cInN1Ym1pdCgkZXZlbnQpXCIgbm92YWxpZGF0ZSBbdGFyZ2V0XT1cInRhcmdldFwiPlxuICAgIDxuZy1jb250ZW50ICNmb3JtQ29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImRjZi1idXR0b25zLWNvbnRhaW5lciBkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZmxleCBkY2YtZmxleC1sZWZ0XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGFjdGlvbiA/IGFjdGlvbiA6IG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmKCFhY3Rpb24pIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQmFja1xuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbn0gQGVsc2Uge1xuICA8ZGl2IFtjbGFzc109XCInZGNmLWJ1dHRvbnMtY29udGFpbmVyIGRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnQgJyArIG9wZXJhdGlvblwiIFtpZF09XCJ1aWRcIj5cbiAgICBAaWYob3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgJiYgbW9kZWxJZCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gICAgQGlmKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuXG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7b3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcikge1xuICAgICAgPGRpdj5cbiAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiaGFuZGxlUmVzZXQoKVwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IFtPcGVyYXRpb25LZXlzLkRFTEVURSwgT3BlcmF0aW9uS2V5cy5SRUFELCBPcGVyYXRpb25LZXlzLlVQREFURV0uaW5jbHVkZXMob3BlcmF0aW9uKSA/ICdCYWNrJyA6IG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8udGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgfVxuICA8L2Rpdj5cbn1cblxuIl19
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, inject, Input } from '@angular/core';
|
|
3
|
-
import { IonCard, IonCardContent, IonIcon,
|
|
3
|
+
import { IonCard, IonCardContent, IonIcon, } from '@ionic/angular/standalone';
|
|
4
4
|
import * as allIcons from 'ionicons/icons';
|
|
5
5
|
import { addIcons } from 'ionicons';
|
|
6
|
-
import { ForAngularModule } from '../../for-angular.module';
|
|
7
6
|
import { Dynamic } from '../../engine';
|
|
8
7
|
import { stringToBoolean } from '../../helpers';
|
|
9
8
|
import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
|
|
10
9
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
11
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
10
|
+
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
|
|
12
11
|
import { Router } from '@angular/router';
|
|
13
12
|
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
15
|
-
import * as i2 from "@angular/common";
|
|
16
13
|
/**
|
|
17
14
|
* @description Component for displaying empty state messages with optional actions.
|
|
18
15
|
* @summary This component provides a standardized way to display empty state messages
|
|
@@ -300,23 +297,22 @@ let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
|
|
|
300
297
|
const result = await this.translate.instant(content, { 'value0': this.searchValue });
|
|
301
298
|
return this.sanitizer.bypassSecurityTrustHtml(result);
|
|
302
299
|
}
|
|
303
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
304
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.
|
|
300
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
301
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EmptyStateComponent, isStandalone: true, selector: "ngx-decaf-empty-state", inputs: { title: "title", titleColor: "titleColor", subtitle: "subtitle", subtitleColor: "subtitleColor", showIcon: "showIcon", icon: "icon", iconSize: "iconSize", iconColor: "iconColor", buttonLink: "buttonLink", buttonText: "buttonText", buttonFill: "buttonFill", buttonColor: "buttonColor", buttonSize: "buttonSize", searchValue: "searchValue" }, usesInheritance: true, ngImport: i0, template: "\n<ion-card [id]=\"uid\" [class]=\"className\">\n <ion-card-content>\n @if(icon && showIcon) {\n <div class=\"dcf-icon-container\">\n <ion-icon\n name=\"alert-circle-outline\"\n size=\"large\"\n color=\"danger\"\n />\n </div>\n }\n @if(title) {\n <h5 [class]=\"titleColor\" [innerHTML]=\"title\"></h5>\n }\n @if(subtitle) {\n @if(!searchValue) {\n <p [class]=\"subtitleColor\" [innerHTML]=\"subtitle\"></p>\n } @else {\n <p [class]=\"subtitleColor\" [innerHTML]=\"searchSubtitle\"></p>\n }\n }\n @if(buttonLink && buttonText) {\n <div>\n <ion-button\n [size]=\"buttonSize\"\n [fill]=\"buttonFill\"\n [color]=\"buttonColor\"\n (click)=\"handleClick()\">\n {{ buttonText }}\n </ion-button>\n </div>\n }\n </ion-card-content>\n</ion-card>\n", styles: ["ion-card{text-align:center}ion-card ion-button{margin-top:.75rem}ion-card ion-icon{font-size:2.5rem}ion-card .dcf-icon-container{transform:scale(1.25);opacity:.75;margin-top:1.25rem!important;margin-bottom:.5rem!important}ion-card .dcf-ititle{font-weight:600!important;color:var(--dcf-color-gray-6)!important}ion-card .dcf-isubtitle{font-weight:500!important}\n"], dependencies: [{ kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
305
302
|
};
|
|
306
303
|
EmptyStateComponent = __decorate([
|
|
307
304
|
Dynamic(),
|
|
308
305
|
__metadata("design:paramtypes", [])
|
|
309
306
|
], EmptyStateComponent);
|
|
310
307
|
export { EmptyStateComponent };
|
|
311
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, decorators: [{
|
|
312
309
|
type: Component,
|
|
313
310
|
args: [{ selector: 'ngx-decaf-empty-state', standalone: true, imports: [
|
|
314
|
-
|
|
311
|
+
TranslatePipe,
|
|
315
312
|
IonCard,
|
|
316
313
|
IonCardContent,
|
|
317
|
-
IonTitle,
|
|
318
314
|
IonIcon
|
|
319
|
-
], template: "\n<ion-card [id]=\"uid\" [
|
|
315
|
+
], template: "\n<ion-card [id]=\"uid\" [class]=\"className\">\n <ion-card-content>\n @if(icon && showIcon) {\n <div class=\"dcf-icon-container\">\n <ion-icon\n name=\"alert-circle-outline\"\n size=\"large\"\n color=\"danger\"\n />\n </div>\n }\n @if(title) {\n <h5 [class]=\"titleColor\" [innerHTML]=\"title\"></h5>\n }\n @if(subtitle) {\n @if(!searchValue) {\n <p [class]=\"subtitleColor\" [innerHTML]=\"subtitle\"></p>\n } @else {\n <p [class]=\"subtitleColor\" [innerHTML]=\"searchSubtitle\"></p>\n }\n }\n @if(buttonLink && buttonText) {\n <div>\n <ion-button\n [size]=\"buttonSize\"\n [fill]=\"buttonFill\"\n [color]=\"buttonColor\"\n (click)=\"handleClick()\">\n {{ buttonText }}\n </ion-button>\n </div>\n }\n </ion-card-content>\n</ion-card>\n", styles: ["ion-card{text-align:center}ion-card ion-button{margin-top:.75rem}ion-card ion-icon{font-size:2.5rem}ion-card .dcf-icon-container{transform:scale(1.25);opacity:.75;margin-top:1.25rem!important;margin-bottom:.5rem!important}ion-card .dcf-ititle{font-weight:600!important;color:var(--dcf-color-gray-6)!important}ion-card .dcf-isubtitle{font-weight:500!important}\n"] }]
|
|
320
316
|
}], ctorParameters: () => [], propDecorators: { title: [{
|
|
321
317
|
type: Input
|
|
322
318
|
}], titleColor: [{
|
|
@@ -346,4 +342,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
346
342
|
}], searchValue: [{
|
|
347
343
|
type: Input
|
|
348
344
|
}] } });
|
|
349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sRUFDUCxRQUFRLEVBQ1QsTUFDSSwyQkFBMkIsQ0FBQztBQUNqQyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBR3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBZ0JJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJB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QkFBbUI7bUdBQW5CLG1CQUFtQixzY0N0RWhDLDQ1QkFtQ0Esa2FEMkJJLGdCQUFnQiw2WEFDaEIsT0FBTyx5TEFDUCxjQUFjLCtFQUVkLE9BQU87O0FBSUUsbUJBQW1CO0lBZi9CLE9BQU8sRUFBRTs7R0FlRyxtQkFBbUIsQ0FvVS9COzs0RkFwVVksbUJBQW1CO2tCQWQvQixTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsUUFBUTt3QkFDUixPQUFPO3FCQUNSO3dEQWdCRCxLQUFLO3NCQURKLEtBQUs7Z0JBY04sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixhQUFhO3NCQURaLEtBQUs7Z0JBY04sUUFBUTtzQkFEUCxLQUFLO2dCQWNOLElBQUk7c0JBREgsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBYU4sU0FBUztzQkFEUixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBY04sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25DYXJkLFxuICBJb25DYXJkQ29udGVudCxcbiAgSW9uSWNvbixcbiAgSW9uVGl0bGVcbn1cbmZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0ICogYXMgYWxsSWNvbnMgZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBzdHJpbmdUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgZW1wdHkgc3RhdGUgbWVzc2FnZXMgd2l0aCBvcHRpb25hbCBhY3Rpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGRpc3BsYXkgZW1wdHkgc3RhdGUgbWVzc2FnZXNcbiAqIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUgb3Igd2hlbiBhIHVzZXIgbmVlZHMgdG8gdGFrZSBhbiBhY3Rpb24gdG8gcG9wdWxhdGUgY29udGVudC5cbiAqIEl0IGluY2x1ZGVzIGN1c3RvbWl6YWJsZSB0aXRsZSwgc3VidGl0bGUsIGljb24sIGFuZCBhY3Rpb24gYnV0dG9uIGVsZW1lbnRzIHRoYXQgY2FuIGJlXG4gKiBzdHlsZWQgYW5kIGNvbmZpZ3VyZWQgdGhyb3VnaCBpbnB1dCBwcm9wZXJ0aWVzLiBUaGUgY29tcG9uZW50IHN1cHBvcnRzIGxvY2FsaXphdGlvblxuICogYW5kIGNhbiB0cmlnZ2VyIG5hdmlnYXRpb24gb3IgY3VzdG9tIGFjdGlvbnMgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAqICAgICArc3RyaW5nIHRpdGxlXG4gKiAgICAgK3N0cmluZyB0aXRsZUNvbG9yXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZVxuICogICAgICtzdHJpbmcgc3VidGl0bGVDb2xvclxuICogICAgICtTdHJpbmdPckJvb2xlYW4gc2hvd0ljb25cbiAqICAgICArc3RyaW5nIGljb25cbiAqICAgICArc3RyaW5nIGljb25TaXplXG4gKiAgICAgK3N0cmluZyBpY29uQ29sb3JcbiAqICAgICArc3RyaW5nfEZ1bmN0aW9uIGJ1dHRvbkxpbmtcbiAqICAgICArc3RyaW5nIGJ1dHRvblRleHRcbiAqICAgICArc3RyaW5nIGJ1dHRvbkZpbGxcbiAqICAgICArc3RyaW5nIGJ1dHRvbkNvbG9yXG4gKiAgICAgK3N0cmluZyBidXR0b25TaXplXG4gKiAgICAgK3N0cmluZyBzZWFyY2hWYWx1ZVxuICogICAgIC1Sb3V0ZXIgUm91dGVyXG4gKiAgICAgK25nT25Jbml0KClcbiAqICAgICAraGFuZGxlQ2xpY2soKVxuICogICB9XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBPbkluaXRcbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1lbXB0eS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uVGl0bGUsXG4gICAgSW9uSWNvblxuICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1haW4gdGl0bGUgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBwcmltYXJ5IG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZW1wdHkgc3RhdGUgY29tcG9uZW50LlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHdoeSB0aGV5J3JlIHNlZWluZyBhbiBlbXB0eSB2aWV3LlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpdGxlXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmcgPSBcInRpdGxlXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSB0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS02J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGVDb2xvciA9ICdncmF5LTYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlY29uZGFyeSBtZXNzYWdlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBpbnN0cnVjdGlvbnMgYmVsb3cgdGhlIG1haW4gdGl0bGUuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBndWlkZSB0aGUgdXNlciBvbiB3aGF0IGFjdGlvbnMgdGhleSBjYW4gdGFrZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzdWJ0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgc3VidGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlQ29sb3I6IHN0cmluZyA9ICdncmF5LTQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaWNvbiBpcyBkaXNwbGF5ZWQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgdGhlIHZpc3VhbCBpY29uIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYm9vbGVhbiBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogSWNvbnMgaGVscCB2aXN1YWxseSBjb21tdW5pY2F0ZSB0aGUgZW1wdHkgc3RhdGUgY29udGV4dCB0byB1c2Vycy5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0ljb246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBzaG93IHdoZW4gc2hvd0ljb24gaXMgdHJ1ZS5cbiAgICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBpY29uIHN5c3RlbSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbixcbiAgICogYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIGljb24gbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZyA9IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIENhbiBiZSBlaXRoZXIgJ2xhcmdlJyBvciAnc21hbGwnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ2xhcmdlJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJyA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgaWNvbiB1c2luZyBJb25pYydzIHByZWRlZmluZWQgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgaWNvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtQcmVkZWZpbmVkQ29sb3JzIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbkNvbG9yPzogc3RyaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgb3IgYWN0aW9uIGZvciB0aGUgYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hlcmUgdGhlIGJ1dHRvbiBzaG91bGQgbmF2aWdhdGUgdG8gd2hlbiBjbGlja2VkIG9yIHdoYXQgZnVuY3Rpb25cbiAgICogaXQgc2hvdWxkIGV4ZWN1dGUuIFRoaXMgY2FuIGJlIGVpdGhlciBhIFVSTCBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmF2aWdhdGlvbi5cbiAgICogV2hlbiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgcGVyZm9ybSBhbnkgYWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgRnVuY3Rpb25MaWtlIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uTGluaz86IHN0cmluZyB8IEZ1bmN0aW9uTGlrZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IGRpc3BsYXllZCBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgZGlzcGxheSBhbnkgdGV4dC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZmlsbCBzdHlsZSBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgYnV0dG9uIGZpbGwgb3B0aW9ucy5cbiAgICogJ3NvbGlkJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGggYSBzb2xpZCBiYWNrZ3JvdW5kLCAnb3V0bGluZScgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoXG4gICAqIGp1c3QgYSBib3JkZXIsIGFuZCAnY2xlYXInIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBubyBiYWNrZ3JvdW5kIG9yIGJvcmRlci5cbiAgICpcbiAgICogQHR5cGUgeydjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnfVxuICAgKiBAZGVmYXVsdCAnc29saWQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25GaWxsOiAnY2xlYXInIHwgJ3NvbGlkJyB8ICdvdXRsaW5lJyA9ICAnc29saWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgYnV0dG9uIHRvIG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHNjaGVtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25Db2xvcjogc3RyaW5nID0gICdwcmltYXJ5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlICdsYXJnZScsICdzbWFsbCcsIG9yICdkZWZhdWx0JyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCd9XG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uU2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCcgPSAgJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlYXJjaCB2YWx1ZSB0aGF0IHJlc3VsdGVkIGluIG5vIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gdGhlIGVtcHR5IHN0YXRlIGlzIHNob3duIGR1ZSB0byBhIHNlYXJjaCB3aXRoIG5vIHJlc3VsdHMsXG4gICAqIHRoaXMgcHJvcGVydHkgY2FuIGhvbGQgdGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWQuIFRoaXMgY2FuIGJlIGRpc3BsYXllZFxuICAgKiBpbiB0aGUgZW1wdHkgc3RhdGUgbWVzc2FnZSB0byBwcm92aWRlIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hWYWx1ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgYmV0d2VlbiByb3V0ZXMuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIHdoZW4gdGhlIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcgVVJMIHRvIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb3V0ZXJ9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIHJvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHNlYXJjaFN1YnRpdGxlITogU2FmZUh0bWxcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFbXB0eVN0YXRlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBFbXB0eVN0YXRlQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzXG4gICAqIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgaWNvbnMgYW5kIGFjdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFbXB0eVN0YXRlQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKGFsbEljb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLCBhcHBseWluZyBsb2NhbGl6YXRpb24gdG8gdGV4dFxuICAgKiBlbGVtZW50cyBpZiB0cmFuc2xhdGlvbiBpcyBlbmFibGVkLCBhbmQgZm9ybWF0dGluZyBDU1MgY2xhc3NlcyBmb3IgdGl0bGUgYW5kIHN1YnRpdGxlIGNvbG9ycy5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGxvY2FsaXplZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5FOiBuZ09uSW5pdCgpXG4gICAqICAgRS0+PkU6IFByb2Nlc3MgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogICBFLT4+RTogUHJvY2VzcyBzaG93SWNvbiBmbGFnXG4gICAqICAgRS0+PkU6IEdldCBsb2NhbGUgc2V0dGluZ3NcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIHRydWVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSB0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHN1YnRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgYnV0dG9uVGV4dFxuICAgKiAgIGVuZFxuICAgKiAgIEUtPj5FOiBGb3JtYXQgdGl0bGUgQ1NTIGNsYXNzXG4gICAqICAgRS0+PkU6IEZvcm1hdCBzdWJ0aXRsZSBDU1MgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGFyc2VQcm9wcyh0aGlzKTtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5zaG93SWNvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnNob3dJY29uKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcblxuICAgIC8vIGlmKHRoaXMudHJhbnNsYXRhYmxlKSB7XG4gICAgLy8gICB0aGlzLnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuc3VidGl0bGUgPSBnZW5lcmF0ZUxvY2FsZUZyb21TdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMuc3VidGl0bGUpO1xuICAgIC8vICAgdGhpcy5idXR0b25UZXh0ID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLmJ1dHRvblRleHQpO1xuICAgIC8vIH1cblxuICAgIHRoaXMudGl0bGVDb2xvciA9IGBkY2YtdGl0bGUgY29sb3ItJHt0aGlzLnRpdGxlQ29sb3J9YDtcbiAgICB0aGlzLnN1YnRpdGxlQ29sb3IgPSBgZGNmLXN1YnRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG5cbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlICYmIHRoaXMudHJhbnNsYXRhYmxlKVxuICAgICAgdGhpcy5zZWFyY2hTdWJ0aXRsZSA9IGF3YWl0IHRoaXMuZ2V0U2VhcmNoU3VidGl0bGUodGhpcy5zdWJ0aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZVxuICAgKiBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRocmVlIG5hdmlnYXRpb24gcGF0dGVybnM6IDEpIG5vIGFjdGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkLFxuICAgKiAyKSBjdXN0b20gZnVuY3Rpb24gZXhlY3V0aW9uIHdoZW4gYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uLCBhbmQgMykgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIFVSTFxuICAgKiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcuIFRoaXMgZmxleGliaWxpdHkgYWxsb3dzIHRoZSBlbXB0eSBzdGF0ZSB0byB0cmlnZ2VyIHZhcmlvdXMgYWN0aW9uc1xuICAgKiBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgUm91dGVyXG4gICAqXG4gICAqICAgVS0+PkU6IENsaWNrIGFjdGlvbiBidXR0b25cbiAgICogICBFLT4+RTogaGFuZGxlQ2xpY2soKVxuICAgKiAgIGFsdCBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZFxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZmFsc2UgKG5vIGFjdGlvbilcbiAgICogICBlbHNlIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvblxuICAgKiAgICAgRS0+PkU6IEV4ZWN1dGUgYnV0dG9uTGluayBmdW5jdGlvblxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZnVuY3Rpb24gcmVzdWx0XG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgVVJMIHN0cmluZ1xuICAgKiAgICAgRS0+Pk46IG5hdmlnYXRlRm9yd2FyZChidXR0b25MaW5rKVxuICAgKiAgICAgTi0tPj5FOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgZW5kXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPn1cbiAgICogICAtIGZhbHNlIGlmIG5vIGFjdGlvbiBpcyB0YWtlblxuICAgKiAgIC0gVGhlIHJlc3VsdCBvZiB0aGUgYnV0dG9uTGluayBmdW5jdGlvbiBpZiBpdCdzIGEgZnVuY3Rpb25cbiAgICogICAtIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIG5hdmlnYXRpb24gcmVzdWx0IGlmIGJ1dHRvbkxpbmsgaXMgYSBVUkxcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsaWNrKCk6IGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmJ1dHRvbkxpbms7XG4gICAgaWYoIWZuKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmKGZuIGluc3RhbmNlb2YgRnVuY3Rpb24pXG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZm4gYXMgc3RyaW5nXSk7XG4gIH1cblxuXG4gLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgYW5kIHNhbml0aXplZCBzdWJ0aXRsZSBmb3Igc2VhcmNoIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgY29udGVudCBzdHJpbmcsIHR5cGljYWxseSB0aGUgc3VidGl0bGUsIGFuZCBwcm9jZXNzZXMgaXRcbiAgICogdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gc2VydmljZS4gSXQgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciAoJ3ZhbHVlMCcpIHdpdGggdGhlIGFjdHVhbFxuICAgKiBzZWFyY2ggdmFsdWUsIHRoZW4gc2FuaXRpemVzIHRoZSByZXN1bHQgdG8gc2FmZWx5IHVzZSBhcyBIVE1MLiBUaGlzIGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgZHluYW1pYywgbG9jYWxpemVkIG1lc3NhZ2VzIGluIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIGEgc2VhcmNoXG4gICAqIHlpZWxkcyBubyByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBiZSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxTYWZlSHRtbD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2FuaXRpemVkIEhUTUwgc3RyaW5nXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVHJhbnNsYXRlU2VydmljZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgRG9tU2FuaXRpemVyXG4gICAqXG4gICAqICAgRS0+PlQ6IGluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiBzZWFyY2hWYWx1ZX0pXG4gICAqICAgVC0tPj5FOiBSZXR1cm4gdHJhbnNsYXRlZCBzdHJpbmdcbiAgICogICBFLT4+UzogYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlZFN0cmluZylcbiAgICogICBTLS0+PkU6IFJldHVybiBzYW5pdGl6ZWQgU2FmZUh0bWxcbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIGdldFNlYXJjaFN1YnRpdGxlKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8U2FmZUh0bWw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogdGhpcy5zZWFyY2hWYWx1ZX0pO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iLCJcbjxpb24tY2FyZCBbaWRdPVwidWlkXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxpb24tY2FyZC1jb250ZW50PlxuICAgIEBpZihpY29uICYmIHNob3dJY29uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24taWNvblxuICAgICAgICAgIG5hbWU9XCJhbGVydC1jaXJjbGUtb3V0bGluZVwiXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYodGl0bGUpIHtcbiAgICAgIDxoNSBbY2xhc3NdPVwidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2g1PlxuICAgIH1cbiAgICBAaWYoc3VidGl0bGUpIHtcbiAgICAgIEBpZighc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInN1YnRpdGxlXCI+PC9wPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJzdWJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJzZWFyY2hTdWJ0aXRsZVwiPjwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmKGJ1dHRvbkxpbmsgJiYgYnV0dG9uVGV4dCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBbc2l6ZV09XCJidXR0b25TaXplXCJcbiAgICAgICAgICBbZmlsbF09XCJidXR0b25GaWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uQ29sb3JcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygpXCI+XG4gICAgICAgICAge3sgIGJ1dHRvblRleHQgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuIl19
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sR0FDUixNQUNJLDJCQUEyQixDQUFDO0FBQ2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUd6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQWVJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQXpNL0I7Ozs7Ozs7OztXQVNHO1FBRUgsVUFBSyxHQUFX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eUxBQ1AsY0FBYywrRUFDZCxPQUFPOztBQUlFLG1CQUFtQjtJQWQvQixPQUFPLEVBQUU7O0dBY0csbUJBQW1CLENBb1UvQjs7NEZBcFVZLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLE9BQU87cUJBQ1I7d0RBZ0JELEtBQUs7c0JBREosS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWNOLGFBQWE7c0JBRFosS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sSUFBSTtzQkFESCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sV0FBVztzQkFEVixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElvbkNhcmQsXG4gIElvbkNhcmRDb250ZW50LFxuICBJb25JY29uLFxufVxuZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgKiBhcyBhbGxJY29ucyBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBzdHJpbmdUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgZW1wdHkgc3RhdGUgbWVzc2FnZXMgd2l0aCBvcHRpb25hbCBhY3Rpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGRpc3BsYXkgZW1wdHkgc3RhdGUgbWVzc2FnZXNcbiAqIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUgb3Igd2hlbiBhIHVzZXIgbmVlZHMgdG8gdGFrZSBhbiBhY3Rpb24gdG8gcG9wdWxhdGUgY29udGVudC5cbiAqIEl0IGluY2x1ZGVzIGN1c3RvbWl6YWJsZSB0aXRsZSwgc3VidGl0bGUsIGljb24sIGFuZCBhY3Rpb24gYnV0dG9uIGVsZW1lbnRzIHRoYXQgY2FuIGJlXG4gKiBzdHlsZWQgYW5kIGNvbmZpZ3VyZWQgdGhyb3VnaCBpbnB1dCBwcm9wZXJ0aWVzLiBUaGUgY29tcG9uZW50IHN1cHBvcnRzIGxvY2FsaXphdGlvblxuICogYW5kIGNhbiB0cmlnZ2VyIG5hdmlnYXRpb24gb3IgY3VzdG9tIGFjdGlvbnMgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAqICAgICArc3RyaW5nIHRpdGxlXG4gKiAgICAgK3N0cmluZyB0aXRsZUNvbG9yXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZVxuICogICAgICtzdHJpbmcgc3VidGl0bGVDb2xvclxuICogICAgICtTdHJpbmdPckJvb2xlYW4gc2hvd0ljb25cbiAqICAgICArc3RyaW5nIGljb25cbiAqICAgICArc3RyaW5nIGljb25TaXplXG4gKiAgICAgK3N0cmluZyBpY29uQ29sb3JcbiAqICAgICArc3RyaW5nfEZ1bmN0aW9uIGJ1dHRvbkxpbmtcbiAqICAgICArc3RyaW5nIGJ1dHRvblRleHRcbiAqICAgICArc3RyaW5nIGJ1dHRvbkZpbGxcbiAqICAgICArc3RyaW5nIGJ1dHRvbkNvbG9yXG4gKiAgICAgK3N0cmluZyBidXR0b25TaXplXG4gKiAgICAgK3N0cmluZyBzZWFyY2hWYWx1ZVxuICogICAgIC1Sb3V0ZXIgUm91dGVyXG4gKiAgICAgK25nT25Jbml0KClcbiAqICAgICAraGFuZGxlQ2xpY2soKVxuICogICB9XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBPbkluaXRcbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1lbXB0eS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uSWNvblxuICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1haW4gdGl0bGUgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBwcmltYXJ5IG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZW1wdHkgc3RhdGUgY29tcG9uZW50LlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHdoeSB0aGV5J3JlIHNlZWluZyBhbiBlbXB0eSB2aWV3LlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpdGxlXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmcgPSBcInRpdGxlXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSB0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS02J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGVDb2xvciA9ICdncmF5LTYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlY29uZGFyeSBtZXNzYWdlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBpbnN0cnVjdGlvbnMgYmVsb3cgdGhlIG1haW4gdGl0bGUuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBndWlkZSB0aGUgdXNlciBvbiB3aGF0IGFjdGlvbnMgdGhleSBjYW4gdGFrZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzdWJ0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgc3VidGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlQ29sb3I6IHN0cmluZyA9ICdncmF5LTQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaWNvbiBpcyBkaXNwbGF5ZWQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgdGhlIHZpc3VhbCBpY29uIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYm9vbGVhbiBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogSWNvbnMgaGVscCB2aXN1YWxseSBjb21tdW5pY2F0ZSB0aGUgZW1wdHkgc3RhdGUgY29udGV4dCB0byB1c2Vycy5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0ljb246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBzaG93IHdoZW4gc2hvd0ljb24gaXMgdHJ1ZS5cbiAgICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBpY29uIHN5c3RlbSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbixcbiAgICogYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIGljb24gbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZyA9IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIENhbiBiZSBlaXRoZXIgJ2xhcmdlJyBvciAnc21hbGwnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ2xhcmdlJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJyA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgaWNvbiB1c2luZyBJb25pYydzIHByZWRlZmluZWQgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgaWNvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtQcmVkZWZpbmVkQ29sb3JzIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbkNvbG9yPzogc3RyaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgb3IgYWN0aW9uIGZvciB0aGUgYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hlcmUgdGhlIGJ1dHRvbiBzaG91bGQgbmF2aWdhdGUgdG8gd2hlbiBjbGlja2VkIG9yIHdoYXQgZnVuY3Rpb25cbiAgICogaXQgc2hvdWxkIGV4ZWN1dGUuIFRoaXMgY2FuIGJlIGVpdGhlciBhIFVSTCBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmF2aWdhdGlvbi5cbiAgICogV2hlbiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgcGVyZm9ybSBhbnkgYWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgRnVuY3Rpb25MaWtlIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uTGluaz86IHN0cmluZyB8IEZ1bmN0aW9uTGlrZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IGRpc3BsYXllZCBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBidXR0b24gd2lsbCBub3QgZGlzcGxheSBhbnkgdGV4dC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZmlsbCBzdHlsZSBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgYnV0dG9uIGZpbGwgb3B0aW9ucy5cbiAgICogJ3NvbGlkJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGggYSBzb2xpZCBiYWNrZ3JvdW5kLCAnb3V0bGluZScgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoXG4gICAqIGp1c3QgYSBib3JkZXIsIGFuZCAnY2xlYXInIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBubyBiYWNrZ3JvdW5kIG9yIGJvcmRlci5cbiAgICpcbiAgICogQHR5cGUgeydjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnfVxuICAgKiBAZGVmYXVsdCAnc29saWQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25GaWxsOiAnY2xlYXInIHwgJ3NvbGlkJyB8ICdvdXRsaW5lJyA9ICAnc29saWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgYnV0dG9uIHVzaW5nIElvbmljJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgYnV0dG9uIHRvIG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHNjaGVtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25Db2xvcjogc3RyaW5nID0gICdwcmltYXJ5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlICdsYXJnZScsICdzbWFsbCcsIG9yICdkZWZhdWx0JyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCd9XG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uU2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCcgPSAgJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlYXJjaCB2YWx1ZSB0aGF0IHJlc3VsdGVkIGluIG5vIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gdGhlIGVtcHR5IHN0YXRlIGlzIHNob3duIGR1ZSB0byBhIHNlYXJjaCB3aXRoIG5vIHJlc3VsdHMsXG4gICAqIHRoaXMgcHJvcGVydHkgY2FuIGhvbGQgdGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWQuIFRoaXMgY2FuIGJlIGRpc3BsYXllZFxuICAgKiBpbiB0aGUgZW1wdHkgc3RhdGUgbWVzc2FnZSB0byBwcm92aWRlIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hWYWx1ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgYmV0d2VlbiByb3V0ZXMuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIHdoZW4gdGhlIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcgVVJMIHRvIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb3V0ZXJ9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIHJvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHNlYXJjaFN1YnRpdGxlITogU2FmZUh0bWxcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFbXB0eVN0YXRlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBFbXB0eVN0YXRlQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzXG4gICAqIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgaWNvbnMgYW5kIGFjdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFbXB0eVN0YXRlQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKGFsbEljb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLCBhcHBseWluZyBsb2NhbGl6YXRpb24gdG8gdGV4dFxuICAgKiBlbGVtZW50cyBpZiB0cmFuc2xhdGlvbiBpcyBlbmFibGVkLCBhbmQgZm9ybWF0dGluZyBDU1MgY2xhc3NlcyBmb3IgdGl0bGUgYW5kIHN1YnRpdGxlIGNvbG9ycy5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGxvY2FsaXplZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5FOiBuZ09uSW5pdCgpXG4gICAqICAgRS0+PkU6IFByb2Nlc3MgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogICBFLT4+RTogUHJvY2VzcyBzaG93SWNvbiBmbGFnXG4gICAqICAgRS0+PkU6IEdldCBsb2NhbGUgc2V0dGluZ3NcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIHRydWVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSB0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHN1YnRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgYnV0dG9uVGV4dFxuICAgKiAgIGVuZFxuICAgKiAgIEUtPj5FOiBGb3JtYXQgdGl0bGUgQ1NTIGNsYXNzXG4gICAqICAgRS0+PkU6IEZvcm1hdCBzdWJ0aXRsZSBDU1MgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGFyc2VQcm9wcyh0aGlzKTtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5zaG93SWNvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnNob3dJY29uKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcblxuICAgIC8vIGlmKHRoaXMudHJhbnNsYXRhYmxlKSB7XG4gICAgLy8gICB0aGlzLnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuc3VidGl0bGUgPSBnZW5lcmF0ZUxvY2FsZUZyb21TdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMuc3VidGl0bGUpO1xuICAgIC8vICAgdGhpcy5idXR0b25UZXh0ID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLmJ1dHRvblRleHQpO1xuICAgIC8vIH1cblxuICAgIHRoaXMudGl0bGVDb2xvciA9IGBkY2YtdGl0bGUgY29sb3ItJHt0aGlzLnRpdGxlQ29sb3J9YDtcbiAgICB0aGlzLnN1YnRpdGxlQ29sb3IgPSBgZGNmLXN1YnRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG5cbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlICYmIHRoaXMudHJhbnNsYXRhYmxlKVxuICAgICAgdGhpcy5zZWFyY2hTdWJ0aXRsZSA9IGF3YWl0IHRoaXMuZ2V0U2VhcmNoU3VidGl0bGUodGhpcy5zdWJ0aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZVxuICAgKiBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRocmVlIG5hdmlnYXRpb24gcGF0dGVybnM6IDEpIG5vIGFjdGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkLFxuICAgKiAyKSBjdXN0b20gZnVuY3Rpb24gZXhlY3V0aW9uIHdoZW4gYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uLCBhbmQgMykgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIFVSTFxuICAgKiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcuIFRoaXMgZmxleGliaWxpdHkgYWxsb3dzIHRoZSBlbXB0eSBzdGF0ZSB0byB0cmlnZ2VyIHZhcmlvdXMgYWN0aW9uc1xuICAgKiBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgUm91dGVyXG4gICAqXG4gICAqICAgVS0+PkU6IENsaWNrIGFjdGlvbiBidXR0b25cbiAgICogICBFLT4+RTogaGFuZGxlQ2xpY2soKVxuICAgKiAgIGFsdCBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZFxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZmFsc2UgKG5vIGFjdGlvbilcbiAgICogICBlbHNlIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvblxuICAgKiAgICAgRS0+PkU6IEV4ZWN1dGUgYnV0dG9uTGluayBmdW5jdGlvblxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gZnVuY3Rpb24gcmVzdWx0XG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgVVJMIHN0cmluZ1xuICAgKiAgICAgRS0+Pk46IG5hdmlnYXRlRm9yd2FyZChidXR0b25MaW5rKVxuICAgKiAgICAgTi0tPj5FOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgZW5kXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPn1cbiAgICogICAtIGZhbHNlIGlmIG5vIGFjdGlvbiBpcyB0YWtlblxuICAgKiAgIC0gVGhlIHJlc3VsdCBvZiB0aGUgYnV0dG9uTGluayBmdW5jdGlvbiBpZiBpdCdzIGEgZnVuY3Rpb25cbiAgICogICAtIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIG5hdmlnYXRpb24gcmVzdWx0IGlmIGJ1dHRvbkxpbmsgaXMgYSBVUkxcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsaWNrKCk6IGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmJ1dHRvbkxpbms7XG4gICAgaWYoIWZuKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmKGZuIGluc3RhbmNlb2YgRnVuY3Rpb24pXG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZm4gYXMgc3RyaW5nXSk7XG4gIH1cblxuXG4gLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgYW5kIHNhbml0aXplZCBzdWJ0aXRsZSBmb3Igc2VhcmNoIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgY29udGVudCBzdHJpbmcsIHR5cGljYWxseSB0aGUgc3VidGl0bGUsIGFuZCBwcm9jZXNzZXMgaXRcbiAgICogdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gc2VydmljZS4gSXQgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciAoJ3ZhbHVlMCcpIHdpdGggdGhlIGFjdHVhbFxuICAgKiBzZWFyY2ggdmFsdWUsIHRoZW4gc2FuaXRpemVzIHRoZSByZXN1bHQgdG8gc2FmZWx5IHVzZSBhcyBIVE1MLiBUaGlzIGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgZHluYW1pYywgbG9jYWxpemVkIG1lc3NhZ2VzIGluIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIGEgc2VhcmNoXG4gICAqIHlpZWxkcyBubyByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBiZSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxTYWZlSHRtbD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2FuaXRpemVkIEhUTUwgc3RyaW5nXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVHJhbnNsYXRlU2VydmljZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgRG9tU2FuaXRpemVyXG4gICAqXG4gICAqICAgRS0+PlQ6IGluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiBzZWFyY2hWYWx1ZX0pXG4gICAqICAgVC0tPj5FOiBSZXR1cm4gdHJhbnNsYXRlZCBzdHJpbmdcbiAgICogICBFLT4+UzogYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlZFN0cmluZylcbiAgICogICBTLS0+PkU6IFJldHVybiBzYW5pdGl6ZWQgU2FmZUh0bWxcbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIGdldFNlYXJjaFN1YnRpdGxlKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8U2FmZUh0bWw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogdGhpcy5zZWFyY2hWYWx1ZX0pO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iLCJcbjxpb24tY2FyZCBbaWRdPVwidWlkXCIgW2NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8aW9uLWNhcmQtY29udGVudD5cbiAgICBAaWYoaWNvbiAmJiBzaG93SWNvbikge1xuICAgICAgPGRpdiBjbGFzcz1cImRjZi1pY29uLWNvbnRhaW5lclwiPlxuICAgICAgICA8aW9uLWljb25cbiAgICAgICAgICBuYW1lPVwiYWxlcnQtY2lyY2xlLW91dGxpbmVcIlxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmKHRpdGxlKSB7XG4gICAgICA8aDUgW2NsYXNzXT1cInRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9oNT5cbiAgICB9XG4gICAgQGlmKHN1YnRpdGxlKSB7XG4gICAgICBAaWYoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJzdWJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJzdWJ0aXRsZVwiPjwvcD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8cCBbY2xhc3NdPVwic3VidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwic2VhcmNoU3VidGl0bGVcIj48L3A+XG4gICAgICB9XG4gICAgfVxuICAgIEBpZihidXR0b25MaW5rICYmIGJ1dHRvblRleHQpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiYnV0dG9uU2l6ZVwiXG4gICAgICAgICAgW2ZpbGxdPVwiYnV0dG9uRmlsbFwiXG4gICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbkNvbG9yXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soKVwiPlxuICAgICAgICAgIHt7ICBidXR0b25UZXh0IH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9pb24tY2FyZC1jb250ZW50PlxuPC9pb24tY2FyZD5cbiJdfQ==
|