@ieeesa-npm/groups 0.15.17 → 0.15.19
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/esm2022/lib/assets/constants.json +27 -1
- package/esm2022/lib/components/add-user-roster/add-user-roster.component.mjs +8 -10
- package/esm2022/lib/components/create-group/create-group.component.mjs +2 -2
- package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +7 -55
- package/esm2022/lib/components/interest-form/interest-form.component.mjs +3 -3
- package/esm2022/lib/components/interest-form-management/interest-form-management.component.mjs +3 -3
- package/esm2022/lib/components/interest-responses/interest-responses.component.mjs +119 -0
- package/esm2022/lib/components/interested-rosters/interested-rosters.component.mjs +370 -15
- package/esm2022/lib/components/roster-import-history/roster-import-history.component.mjs +106 -8
- package/esm2022/lib/components/view-roster/view-roster.component.mjs +2 -2
- package/esm2022/lib/groups.component.mjs +58 -9
- package/esm2022/lib/models/interest-response.model.mjs +18 -0
- package/esm2022/lib/models/roster-import.model.mjs +1 -1
- package/esm2022/lib/services/groups.service.mjs +91 -7
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/ieeesa-npm-groups.mjs +821 -212
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/edit-user-roles/edit-user-roles.component.d.ts +0 -10
- package/lib/components/interest-responses/interest-responses.component.d.ts +80 -0
- package/lib/components/interested-rosters/interested-rosters.component.d.ts +143 -9
- package/lib/components/roster-import-history/roster-import-history.component.d.ts +42 -4
- package/lib/groups.component.d.ts +9 -4
- package/lib/models/interest-response.model.d.ts +209 -0
- package/lib/models/roster-import.model.d.ts +12 -0
- package/lib/services/groups.service.d.ts +66 -10
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/esm2022/lib/assets/country-calling-codes.mjs +0 -83
- package/lib/assets/country-calling-codes.d.ts +0 -14
|
@@ -8,7 +8,6 @@ import { HttpErrorResponse } from '@angular/common/http';
|
|
|
8
8
|
import { AlertsService, } from '@ieeesa-npm/utility';
|
|
9
9
|
import { FormControlType, AlignType, SearchType, DynamicFormComponent, } from '@ieeesa-npm/presentation';
|
|
10
10
|
import * as screenTexts from '../../assets/constants.json';
|
|
11
|
-
import { DEFAULT_COUNTRY_CALLING_CODE } from '../../assets/country-calling-codes';
|
|
12
11
|
import { GroupsValidationPatterns, representingOrgRequiredValidator, skipWhenArray, } from '../../assets/form-validations';
|
|
13
12
|
import { FormStatus, AlertType } from '@ieeesa-npm/models';
|
|
14
13
|
import { GroupRosterType } from '../../models/roster-type.model';
|
|
@@ -339,9 +338,8 @@ export class AddUserRosterComponent {
|
|
|
339
338
|
controlName: 'phone',
|
|
340
339
|
dropdownOptions: this.countryCallingCodes,
|
|
341
340
|
value: {
|
|
342
|
-
countryCode: this.userInfo?.phoneCountryCode ??
|
|
343
|
-
|
|
344
|
-
phoneNumber: this.userInfo?.phoneNumber ?? '',
|
|
341
|
+
countryCode: this.userInfo?.phoneCountryCode ?? null,
|
|
342
|
+
phoneNumber: this.userInfo?.phoneNumber ?? null,
|
|
345
343
|
},
|
|
346
344
|
isEditToggle: !!this.userInfo?.phoneNumber,
|
|
347
345
|
validation: [Validators.required],
|
|
@@ -422,8 +420,8 @@ export class AddUserRosterComponent {
|
|
|
422
420
|
supportMessage: this.addUserRosterTexts?.supportText?.lastName,
|
|
423
421
|
},
|
|
424
422
|
// Phone (combined country code + number). New user: always
|
|
425
|
-
// editable
|
|
426
|
-
//
|
|
423
|
+
// editable. Shown only when the tenant's required-profile-
|
|
424
|
+
// fields config requests it.
|
|
427
425
|
...(this.requiredProfileFields.includes('phone')
|
|
428
426
|
? [
|
|
429
427
|
{
|
|
@@ -432,8 +430,8 @@ export class AddUserRosterComponent {
|
|
|
432
430
|
controlName: 'phone',
|
|
433
431
|
dropdownOptions: this.countryCallingCodes,
|
|
434
432
|
value: {
|
|
435
|
-
countryCode:
|
|
436
|
-
phoneNumber:
|
|
433
|
+
countryCode: null,
|
|
434
|
+
phoneNumber: null,
|
|
437
435
|
},
|
|
438
436
|
validation: [Validators.required],
|
|
439
437
|
maxLength: GroupsValidationPatterns.phoneNumberMaxLength,
|
|
@@ -974,7 +972,7 @@ export class AddUserRosterComponent {
|
|
|
974
972
|
}
|
|
975
973
|
}
|
|
976
974
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddUserRosterComponent, deps: [{ token: i1.GroupsService }, { token: i2.GlobalErrorHandlerService }, { token: i2.AlertsService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
977
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AddUserRosterComponent, isStandalone: true, selector: "ieeesa-add-user-roster", outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, providers: [AlertsService], viewQueries: [{ propertyName: "dynamicFormComponent", first: true, predicate: DynamicFormComponent, descendants: true }], ngImport: i0, template: "<ieeesa-dynamic-form\r\n *ngIf=\"searchUserFormGroup && isSearchUserForm\"\r\n class=\"ieeesa-search-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"searchUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onSearchUserFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n></ieeesa-dynamic-form>\r\n\r\n<ieeesa-dynamic-form\r\n *ngIf=\"addUserFormGroup && !isSearchUserForm\"\r\n class=\"ieeesa-add-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [isSubmitButtonDisabled]=\"isSubmitButtonDisabled\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"addUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onAddUserFormSubmit($event)\"\r\n (formSearchApply)=\"formSearchApply($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getAddUserFormGroupRef($event)\"\r\n (formCheckboxSelection)=\"onUserRoleSelection($event)\"\r\n (formChange)=\"onAddUserFormChange($event)\"\r\n>\r\n <!--\r\n Representing Organization (INDIVIDUAL rosters only). Projected into the\r\n dynamic form's [component] slot so it renders after the other fields but\r\n BEFORE the Save/Cancel action buttons. Uses the custom multi-select field so\r\n multiple orgs can be picked from an open dropdown without the Material\r\n autocomplete closing or clearing the typed text. Its value stays synced to\r\n the reactive `representingOrg` control via getSelectedOrganizations().\r\n -->\r\n <ieeesa-org-multi-select\r\n component\r\n *ngIf=\"addUserFormGroup && !isSearchUserForm && isIndividualRoster\"\r\n class=\"ieeesa-add-user-form__org\"\r\n [label]=\"addUserRosterTexts?.label?.representingOrganization + '*'\"\r\n [ariaLabel]=\"addUserRosterTexts?.label?.ariaLabel?.representingOrganization\"\r\n [supportMessage]=\"addUserRosterTexts?.supportText?.representingOrganization\"\r\n [options]=\"organizations\"\r\n [selectedOptions]=\"selectedOrganizations\"\r\n (search)=\"getOrganizations($event)\"\r\n (selectionChange)=\"getSelectedOrganizations($event)\"\r\n (invalidFreeText)=\"onOrgInvalidFreeText($event)\"\r\n ></ieeesa-org-multi-select>\r\n</ieeesa-dynamic-form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-add-user-roster{max-width:97vw!important}.ieeesa-modal-dialog.ieeesa-add-user-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0 1em .75em!important}.ieeesa-search-user-form .ieeesa-dynamic-form__actions,.ieeesa-add-user-form .ieeesa-dynamic-form__actions{flex-direction:row-reverse;gap:.5em;padding:2em 1em .75em;margin-top:2em}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-autocomplete .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-autocomplete .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-mdc-form-field{display:flex}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-form-field-invalid,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-form-field-invalid{border:2px solid #ba0c2f}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-multi-select-autocomplete__input,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-multi-select-autocomplete__input{position:relative}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field{padding-top:0;margin-bottom:0}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper,.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay{background:#fff;padding:0;border:0}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix,.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay .mat-mdc-form-field-infix,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay .mat-mdc-form-field-infix{min-height:2.375em;padding-top:.0625em;padding-bottom:.375em}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:before,.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:after,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:before,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:after{border:0}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name .mat-mdc-text-field-wrapper,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name .mat-mdc-text-field-wrapper{border:unset!important}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-text-area-field .address,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-text-area-field .address{height:96px!important;min-height:96px!important;max-height:96px!important;overflow-y:auto!important}.ieeesa-search-user-form .ieeesa-checkbox-field .mat-mdc-list,.ieeesa-add-user-form .ieeesa-checkbox-field .mat-mdc-list{margin-left:-.625em}.ieeesa-search-user-form .mat-mdc-form-field-subscript-wrapper,.ieeesa-add-user-form .mat-mdc-form-field-subscript-wrapper{display:none}.ieeesa-search-user-form .ieeesa-dynamic-form__actions--right-btn{min-width:175px!important}@media (min-width: 767px){.ieeesa-search-user-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-search-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-search-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-phone-field__box,.ieeesa-add-user-form .ieeesa-phone-field__box{width:32%}.ieeesa-modal-dialog.ieeesa-add-user-roster{max-width:65vw!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicFormComponent, selector: "ieeesa-dynamic-form", inputs: ["formGroups", "submitResponse", "searchResponse", "fileUploadStatus", "colWidth", "isLegendVisible", "rightButtonLabel", "leftButtonLabel", "isSubmitButtonDisabled", "isLeftButtonDisabled", "isLeftButtonNeeded", "isRightButtonNeeded", "actionButtonAlign", "projectedContentAfterControlName", "fileDownloadAndDeleteConfig"], outputs: ["formSubmit", "formChange", "formInput", "formLeftButtonClicked", "formSearchApply", "formGroupsReference", "dropdownChange", "formCheckboxSelection", "formDateSelected", "formSelectSearch", "formControlChange", "formAutoCompleteSearch", "formAutoCompleteClearSearchValue", "autoCompleteOptionSelected", "formAfterContentInit", "formSelectedDateRange", "addFormGroup", "formTimeSelected", "supportTextLinkClick", "formSlideToggleChange", "formFileUpload", "dropdownOpenedChange", "formColorPickerChange", "formRadioOptionSelected", "ctaButtonClick", "formMultiSelectAutoCompleteSearch", "formMultiSelectAutoCompleteClearSearchValue", "multiSelectAutoCompleteOptionsSelected", "formRichTextEditorContentChange"], exportAs: ["dynamicForm"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "component", type: OrgMultiSelectComponent, selector: "ieeesa-org-multi-select", inputs: ["label", "placeholder", "supportMessage", "ariaLabel", "options", "selectedOptions", "required", "removeIconURL", "clearAllIconURL"], outputs: ["search", "selectionChange", "fieldBlur", "invalidFreeText"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
975
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AddUserRosterComponent, isStandalone: true, selector: "ieeesa-add-user-roster", outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, providers: [AlertsService], viewQueries: [{ propertyName: "dynamicFormComponent", first: true, predicate: DynamicFormComponent, descendants: true }], ngImport: i0, template: "<ieeesa-dynamic-form\r\n *ngIf=\"searchUserFormGroup && isSearchUserForm\"\r\n class=\"ieeesa-search-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"searchUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onSearchUserFormSubmit($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n></ieeesa-dynamic-form>\r\n\r\n<ieeesa-dynamic-form\r\n *ngIf=\"addUserFormGroup && !isSearchUserForm\"\r\n class=\"ieeesa-add-user-form\"\r\n [leftButtonLabel]=\"leftButtonLabel\"\r\n [rightButtonLabel]=\"rightButtonLabel\"\r\n [isLegendVisible]=\"false\"\r\n [isSubmitButtonDisabled]=\"isSubmitButtonDisabled\"\r\n [colWidth]=\"colWidth\"\r\n [actionButtonAlign]=\"actionButtonAlign\"\r\n [formGroups]=\"addUserFormGroup\"\r\n [isLeftButtonNeeded]=\"true\"\r\n (formSubmit)=\"onAddUserFormSubmit($event)\"\r\n (formSearchApply)=\"formSearchApply($event)\"\r\n (formLeftButtonClicked)=\"onFormCancel()\"\r\n (formGroupsReference)=\"getAddUserFormGroupRef($event)\"\r\n (formCheckboxSelection)=\"onUserRoleSelection($event)\"\r\n (formChange)=\"onAddUserFormChange($event)\"\r\n>\r\n <!--\r\n Representing Organization (INDIVIDUAL rosters only). Projected into the\r\n dynamic form's [component] slot so it renders after the other fields but\r\n BEFORE the Save/Cancel action buttons. Uses the custom multi-select field so\r\n multiple orgs can be picked from an open dropdown without the Material\r\n autocomplete closing or clearing the typed text. Its value stays synced to\r\n the reactive `representingOrg` control via getSelectedOrganizations().\r\n -->\r\n <ieeesa-org-multi-select\r\n component\r\n *ngIf=\"addUserFormGroup && !isSearchUserForm && isIndividualRoster\"\r\n class=\"ieeesa-add-user-form__org\"\r\n [label]=\"addUserRosterTexts?.label?.representingOrganization + '*'\"\r\n [ariaLabel]=\"addUserRosterTexts?.label?.ariaLabel?.representingOrganization\"\r\n [supportMessage]=\"addUserRosterTexts?.supportText?.representingOrganization\"\r\n [options]=\"organizations\"\r\n [selectedOptions]=\"selectedOrganizations\"\r\n (search)=\"getOrganizations($event)\"\r\n (selectionChange)=\"getSelectedOrganizations($event)\"\r\n (invalidFreeText)=\"onOrgInvalidFreeText($event)\"\r\n ></ieeesa-org-multi-select>\r\n</ieeesa-dynamic-form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-add-user-roster{max-width:97vw!important}.ieeesa-modal-dialog.ieeesa-add-user-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0 1em .75em!important}.ieeesa-search-user-form .ieeesa-dynamic-form__actions,.ieeesa-add-user-form .ieeesa-dynamic-form__actions{flex-direction:row-reverse;gap:.5em;padding:2em 1em .75em;margin-top:2em}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-autocomplete .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-autocomplete .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-mdc-form-field{display:flex}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-form-field-invalid,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-search-field .mat-form-field-invalid{border:2px solid #ba0c2f}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-multi-select-autocomplete__input,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-multi-select-autocomplete__input{position:relative}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field{padding-top:0;margin-bottom:0}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper,.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay{background:#fff;padding:0;border:0}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix,.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay .mat-mdc-form-field-infix,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mat-mdc-form-field-focus-overlay .mat-mdc-form-field-infix{min-height:2.375em;padding-top:.0625em;padding-bottom:.375em}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:before,.ieeesa-search-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:after,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:before,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name.ieeesa-dynamic-form__form-field .ieeesa-text-area-field .mat-mdc-form-field .mdc-line-ripple:after{border:0}.ieeesa-search-user-form .ieeesa-dynamic-form .full-name .mat-mdc-text-field-wrapper,.ieeesa-add-user-form .ieeesa-dynamic-form .full-name .mat-mdc-text-field-wrapper{border:unset!important}.ieeesa-search-user-form .ieeesa-dynamic-form .ieeesa-text-area-field .address,.ieeesa-add-user-form .ieeesa-dynamic-form .ieeesa-text-area-field .address{height:96px!important;min-height:96px!important;max-height:96px!important;overflow-y:auto!important}.ieeesa-search-user-form .ieeesa-checkbox-field .mat-mdc-list,.ieeesa-add-user-form .ieeesa-checkbox-field .mat-mdc-list{margin-left:-.625em}.ieeesa-search-user-form .mat-mdc-form-field-subscript-wrapper,.ieeesa-add-user-form .mat-mdc-form-field-subscript-wrapper{display:none}.ieeesa-search-user-form .ieeesa-dynamic-form__actions--right-btn{min-width:175px!important}@media (min-width: 767px){.ieeesa-search-user-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-search-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-input-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-select-field .mat-mdc-form-field,.ieeesa-add-user-form .ieeesa-search-field .mat-mdc-form-field,.ieeesa-search-user-form .ieeesa-phone-field__box,.ieeesa-add-user-form .ieeesa-phone-field__box{width:32%}.ieeesa-modal-dialog.ieeesa-add-user-roster{max-width:65vw!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicFormComponent, selector: "ieeesa-dynamic-form", inputs: ["formGroups", "submitResponse", "searchResponse", "fileUploadStatus", "colWidth", "isLegendVisible", "rightButtonLabel", "leftButtonLabel", "isSubmitButtonDisabled", "isLeftButtonDisabled", "isLeftButtonNeeded", "isRightButtonNeeded", "actionButtonAlign", "projectedContentAfterControlName", "fileDownloadAndDeleteConfig"], outputs: ["formSubmit", "formChange", "formInput", "formLeftButtonClicked", "formSearchApply", "formGroupsReference", "dropdownChange", "formCheckboxSelection", "formDateSelected", "formSelectSearch", "formControlChange", "formAutoCompleteSearch", "formAutoCompleteClearSearchValue", "autoCompleteOptionSelected", "formAfterContentInit", "formSelectedDateRange", "addFormGroup", "formTimeSelected", "supportTextLinkClick", "formSlideToggleChange", "formFileUpload", "dropdownOpenedChange", "formColorPickerChange", "formRadioOptionSelected", "ctaButtonClick", "formMultiSelectAutoCompleteSearch", "formMultiSelectAutoCompleteClearSearchValue", "multiSelectAutoCompleteOptionsSelected", "formRichTextEditorContentChange", "formEditStarted"], exportAs: ["dynamicForm"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "component", type: OrgMultiSelectComponent, selector: "ieeesa-org-multi-select", inputs: ["label", "placeholder", "supportMessage", "ariaLabel", "options", "selectedOptions", "required", "removeIconURL", "clearAllIconURL"], outputs: ["search", "selectionChange", "fieldBlur", "invalidFreeText"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
978
976
|
}
|
|
979
977
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddUserRosterComponent, decorators: [{
|
|
980
978
|
type: Component,
|
|
@@ -992,4 +990,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
992
990
|
}], formCancel: [{
|
|
993
991
|
type: Output
|
|
994
992
|
}] } });
|
|
995
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXVzZXItcm9zdGVyL2FkZC11c2VyLXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC11c2VyLXJvc3Rlci9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxhQUFhLEdBRWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBTVYsb0JBQW9CLEdBQ3JCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxh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LENBQUM7WUFDeEIsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsU0FBUztnQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzsrR0E5bENVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHNKQUZ0QixDQUFDLGFBQWEsQ0FBQyxnRkE4RGYsb0JBQW9CLGdEQ25JakMsdzlFQXNEQSwrMmJET0ksWUFBWSxtSUFDWixvQkFBb0IseW5DQUNwQixlQUFlLCtCQUNmLHVCQUF1Qjs7NEZBT2Qsc0JBQXNCO2tCQWRsQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsdUJBQXVCO3FCQUN4QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsYUFBYSxDQUFDO2lNQThETyxvQkFBb0I7c0JBQXBELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNyQixrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHtcclxuICBGb3JtR3JpZCxcclxuICBGb3JtQ29udHJvbFR5cGUsXHJcbiAgQWxpZ25UeXBlLFxyXG4gIFNlYXJjaFR5cGUsXHJcbiAgQ2hlY2tib3hPcHRpb24sXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG4gIEZvcm1Nb2RlbCxcclxuICBGaWVsZENvbmZpZyxcclxuICBBdXRvQ29tcGxldGVPcHRpb24sXHJcbiAgRHluYW1pY0Zvcm1Db21wb25lbnQsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgREVGQVVMVF9DT1VOVFJZX0NBTExJTkdfQ09ERSB9IGZyb20gJy4uLy4uL2Fzc2V0cy9jb3VudHJ5LWNhbGxpbmctY29kZXMnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucyxcclxuICByZXByZXNlbnRpbmdPcmdSZXF1aXJlZFZhbGlkYXRvcixcclxuICBza2lwV2hlbkFycmF5LFxyXG59IGZyb20gJy4uLy4uL2Fzc2V0cy9mb3JtLXZhbGlkYXRpb25zJztcclxuaW1wb3J0IHsgRm9ybVN0YXR1cywgQWxlcnRUeXBlIH0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbiAgQWRkT3JFZGl0VXNlclBheWxvYWQsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2FkZC1vci1lZGl0LXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9vcmdhbml6YXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBPcmdNdWx0aVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1tdWx0aS1zZWxlY3Qvb3JnLW11bHRpLXNlbGVjdC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSB2aWV3IGFuZCBmdW5jdGlvbmFsaXRpZXMgdG8gYWRkIGdyb3VwIHVzZXJzIHRvIHJvc3Rlci5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtYWRkLXVzZXItcm9zdGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgT3JnTXVsdGlTZWxlY3RDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW0FsZXJ0c1NlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkVXNlclJvc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IHNjcmVlblRleHRzO1xyXG4gIGFkZFVzZXJSb3N0ZXJUZXh0cyA9IHRoaXMuY29uc3RhbnRzPy5hZGRVc2VyUm9zdGVyO1xyXG4gIGxlZnRCdXR0b25MYWJlbCA9IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ubGVmdEJ1dHRvbkxhYmVsO1xyXG4gIHJpZ2h0QnV0dG9uTGFiZWwgPSB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJpZ2h0QnV0dG9uTGFiZWw7XHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGNvbFdpZHRoOiBGb3JtR3JpZCA9IHsgeHM6IDEyLCB4bDogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIgfTtcclxuICBzZWFyY2hVc2VyRm9ybUdyb3VwITogRm9ybU1vZGVsO1xyXG4gIGFkZFVzZXJGb3JtR3JvdXAhOiBGb3JtTW9kZWw7XHJcbiAgYWN0aW9uQnV0dG9uQWxpZ24gPSBBbGlnblR5cGUuTEVGVDtcclxuICBhZGRVc2VyRm9ybUdyb3VwUmVmITogRm9ybUdyb3VwO1xyXG4gIGlzU2VhcmNoVXNlckZvcm0gPSB0cnVlO1xyXG4gIHVzZXJSb2xlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIHNlbGVjdGVkVXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHVzZXJJbmZvOiBVc2VySW5mbyA9IHtcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIG5hbWU6ICcnLFxyXG4gICAgdXNlcklkOiAnJyxcclxuICB9O1xyXG4gIGlzQWRkVXNlckZvcm1FbWFpbFNlYXJjaCA9IGZhbHNlO1xyXG4gIGNsYXNzaWZpY2F0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJUeXBlczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBvcmdhbml6YXRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIGhhc0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgZ3JvdXBSb3N0ZXJUeXBlITogR3JvdXBSb3N0ZXJUeXBlO1xyXG4gIGlzVXNlckV4aXN0ID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRPcmdhbml6YXRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSA9IFtdO1xyXG4gIGNvdW50cnlDYWxsaW5nQ29kZXM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgLy8gVGVuYW50LWNvbmZpZ3VyZWQgb3B0aW9uYWwgcHJvZmlsZSBmaWVsZHMgKGUuZy4gJ3Bob25lJywgJ2FkZHJlc3MnKSB0byBzaG93IG9uIHRoZSBhZGQtdXNlciBmb3JtLlxyXG4gIHJlcXVpcmVkUHJvZmlsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICB0aW1lT3V0SWQhOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB3aGVuIHRoZSBzZWxlY3RlZCBncm91cCdzIHJvc3RlciB0eXBlIGlzIElORElWSURVQUwgKHRoZSBvbmx5IHJvc3RlclxyXG4gICAqIHR5cGUgdGhhdCBzaG93cyB0aGUgUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiBmaWVsZCkuXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgaXNJbmRpdmlkdWFsUm9zdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgb3JnIGZpZWxkIGhvbGRzIGFuIHVuY29tbWl0dGVkLCBpbnZhbGlkIGZyZWUtdGV4dCB0b2tlbi4gVXNlZFxyXG4gICAqIHRvIGtlZXAgU2F2ZSBkaXNhYmxlZCBldmVuIHdoZW4gYSB2YWxpZCBjaGlwIGFscmVhZHkgZXhpc3RzLlxyXG4gICAqL1xyXG4gIGhhc0ludmFsaWRPcmdGcmVlVGV4dCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBvcmcgZmllbGQncyBpbnZhbGlkLWZyZWUtdGV4dCBzdGF0ZSBhbmQgcmVjb21wdXRlcyBTYXZlLWJ1dHRvblxyXG4gICAqIHN0YXRlIHNvIHRoZSBmb3JtIGNhbm5vdCBiZSBzdWJtaXR0ZWQgd2hpbGUgYW4gaW52YWxpZCB0b2tlbiByZW1haW5zLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNJbnZhbGlkIC13aGV0aGVyIGFuIHVuY29tbWl0dGVkIGludmFsaWQgdG9rZW4gaXMgcHJlc2VudC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uT3JnSW52YWxpZEZyZWVUZXh0KGlzSW52YWxpZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5oYXNJbnZhbGlkT3JnRnJlZVRleHQgPSBpc0ludmFsaWQ7XHJcbiAgICB0aGlzLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXR1cygpO1xyXG4gIH1cclxuICBAVmlld0NoaWxkKER5bmFtaWNGb3JtQ29tcG9uZW50KSBkeW5hbWljRm9ybUNvbXBvbmVudCE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRGb3JtUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvcm1DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3VwU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBnbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlOiBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb24sIG5vLXVudXNlZC12YXJzXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB1c2VyIHJvbGVzIGFuZCBzZWFyY2hVc2VyRm9ybUdyb3VwLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJSb2xlcyA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEdyb3VwVHlwZVVzZXJSb2xlcygpO1xyXG4gICAgdGhpcy5jb3VudHJ5Q2FsbGluZ0NvZGVzID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0Q291bnRyeUNhbGxpbmdDb2RlcygpO1xyXG4gICAgdGhpcy5nZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHMoKTtcclxuICAgIGNvbnN0IGdyb3VwVHlwZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpO1xyXG4gICAgdGhpcy5oYXNDbGFzc2lmaWNhdGlvbiA9IGdyb3VwVHlwZT8uaGFzQ2xhc3NpZmljYXRpb24gPz8gZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBSb3N0ZXJUeXBlKVxyXG4gICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UodGhpcy5jb25zdGFudHM/LmVycm9ycz8uRVIxMDAxLCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbikgdGhpcy5nZXRDbGFzc2lmaWNhdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jcmVhdGVTZWFyY2hVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5pc0FsZXJ0Q2xvc2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoaXNDbG9zZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoaXNDbG9zZWQgJiYgIXRoaXMuaXNTZWFyY2hVc2VyRm9ybSkge1xyXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIHNlYXJjaCB1c2VyIGZvcm0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGNyZWF0ZVNlYXJjaFVzZXJGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFVzZXJGb3JtR3JvdXAgPSB7XHJcbiAgICAgIGZvcm1Hcm91cDogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZ2VuZDogJycsXHJcbiAgICAgICAgICBjb250cm9sczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLklOUFVULFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmVtYWlsICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZW1haWxBZGRyZXNzJyxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgaXNFbWFpbDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uZW1haWxBZGRyZXNzLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm4/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmVtYWlsKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZW1haWwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGZvcm0gdmFsaWRpdHkgYW5kIHNlYXJjaGVzIHRoZSB1c2VyIGJ5IGVudGVyZWQgZW1haWwuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TZWFyY2hVc2VyRm9ybVN1Ym1pdChmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0FkZFVzZXJGb3JtRW1haWxTZWFyY2ggPSBmYWxzZTtcclxuICAgIGlmIChmb3JtWzBdPy5zdGF0dXMgPT09IEZvcm1TdGF0dXMuVkFMSUQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hVc2VyQnlFbWFpbChmb3JtWzBdLmdldFJhd1ZhbHVlKCk/LmVtYWlsQWRkcmVzcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWFyY2hlcyB0aGUgdXNlciBieSBlbnRlcmVkIGVtYWlsIGFuZCBnZXRzIHRoZSB1c2VyIGRldGFpbHMgd2hlbiB0aGUgZW1haWwgaWQgaXMgZm91bmQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzZWFyY2hVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0VXNlckJ5RW1haWwoZW1haWwpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckluZm8gPSByZXM/LmJvZHk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVc2VyRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy51c2VySW5mbz8udXNlcklkKSB0aGlzLnZhbGlkYXRlVXNlckV4aXN0ZW5jZSgpO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMuaW5pdGlhbGl6ZUFkZFVzZXJGb3JtR3JvdXAoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzVXNlckV4aXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXM/LmluY2x1ZGVzKCcyMDAxJykpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaFVzZXJGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25MYWJlbCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5zYXZlQnV0dG9uTGFiZWw7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5pc0FkZFVzZXJGb3JtRW1haWxTZWFyY2ggfHxcclxuICAgICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmLmNvbnRhaW5zKCdmaXJzdE5hbWUnKSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmLmNvbnRhaW5zKCdsYXN0TmFtZScpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJJbmZvLmVtYWlsID0gZW1haWw7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUdyb3VwVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy52YWx1ZSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdmaXJzdE5hbWUnKT8uc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdsYXN0TmFtZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LlsnMjAwMSddLFxyXG4gICAgICAgICAgICAgIEFsZXJ0VHlwZS5FUlJPUlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgZXhpc3RzIGluIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdGhlbiBjcmVhdGVzIGFkZCB1c2VyIGZvcm0gd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB2YWxpZGF0ZVVzZXJFeGlzdGVuY2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJbmZvPy51c2VySWQgYXMgc3RyaW5nLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFVzZXJEZXRhaWxzKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgICAgdGhpcy5jb25zdGFudHM/LmVycm9ycz8uWycxMDIyJ10sXHJcbiAgICAgICAgICAgIEFsZXJ0VHlwZS5FUlJPUlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFkZFVzZXJGb3JtR3JvdXAoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGZvcm0gZmllbGRzIHJlcXVpcmVkIGZvciBhZGQgbmV3IHVzZXIgdG8gdGhlIHJvc3RlciBiYXNlZCBvbiB0aGUgc2VhcmNoZWQgZW1haWwuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBpbml0aWFsaXplQWRkVXNlckZvcm1Hcm91cCgpIHtcclxuICAgIHRoaXMuaXNTZWFyY2hVc2VyRm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yaWdodEJ1dHRvbkxhYmVsID0gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5zYXZlQnV0dG9uTGFiZWw7XHJcbiAgICBjb25zdCBhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgaWYgKCF0aGlzLmlzQWRkVXNlckZvcm1FbWFpbFNlYXJjaCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzID0gW107XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3JlYXRlQWRkVXNlckZvcm1Hcm91cCgpO1xyXG4gICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cFZhbHVlcyhhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcyk7XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZlxyXG4gICAgICAgID8uZ2V0KCdlbWFpbFNlYXJjaCcpXHJcbiAgICAgICAgPy5zZXRWYWx1ZSh0aGlzLnVzZXJJbmZvPy5lbWFpbCk7XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdmdWxsTmFtZScpPy5zZXRWYWx1ZSh0aGlzLnVzZXJJbmZvPy5uYW1lKTtcclxuICAgICAgaWYgKHRoaXMudGltZU91dElkKSBjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpO1xyXG4gICAgICB0aGlzLnRpbWVPdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdHVzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhZGQgdXNlciBmb3JtIGdyb3VwIGFuZCB1cGRhdGVzIGl0IHdpdGggcHJldiBmb3JtIHZhbHVlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5naWZpZWRBZGRVc2VyRm9ybVByZXZWYWx1ZXNcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUFkZFVzZXJGb3JtR3JvdXBWYWx1ZXMoYWRkVXNlckZvcm1WYWx1ZXM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVBZGRVc2VyRm9ybUdyb3VwKHRoaXMudXNlckluZm8/LmVtYWlsKTtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IGFkZFVzZXJGb3JtVmFsdWVzID8gSlNPTi5wYXJzZShhZGRVc2VyRm9ybVZhbHVlcykgOiAnJztcclxuICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUdyb3VwKHtcclxuICAgICAgICBjbGFzc2lmaWNhdGlvbjogZm9ybVZhbHVlcz8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgbWVtYmVyVHlwZTogZm9ybVZhbHVlcz8ubWVtYmVyVHlwZSxcclxuICAgICAgICByZXByZXNlbnRpbmdPcmc6IGZvcm1WYWx1ZXM/LnJlcHJlc2VudGluZ09yZyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBhZGQgdXNlciBmb3JtIGdyb3VwIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZW1haWxdXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVBZGRVc2VyRm9ybUdyb3VwKGVtYWlsPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXAgPSB7XHJcbiAgICAgIGZvcm1Hcm91cDogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZ2VuZDogJycsXHJcbiAgICAgICAgICBjb250cm9sczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlNFQVJDSCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5lbWFpbCArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2VtYWlsU2VhcmNoJyxcclxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5pc1VzZXJFeGlzdCA/IHRoaXMudXNlckluZm8/LmVtYWlsIDogZW1haWwsXHJcbiAgICAgICAgICAgICAgc2VhcmNoVHlwZTogU2VhcmNoVHlwZS5PTl9DTElDSyxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5lbWFpbCksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uZW1haWxBZGRyZXNzLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuPy5lbWFpbCxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5lbWFpbCxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmVtYWlsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi4odGhpcy5pc1VzZXJFeGlzdFxyXG4gICAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlRFWFRfQVJFQSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5mdWxsTmFtZSArICcqJyxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2Z1bGxOYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51c2VySW5mbz8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVhZG9ubHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYU11bHRpbGluZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/LmZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAvLyBQaG9uZSAoY29tYmluZWQgY291bnRyeSBjb2RlICsgbnVtYmVyIGluIG9uZSBmaWVsZCksIHNob3duXHJcbiAgICAgICAgICAgICAgICAgIC8vIG9ubHkgd2hlbiB0aGUgdGVuYW50J3MgcmVxdWlyZWQtcHJvZmlsZS1maWVsZHMgY29uZmlnXHJcbiAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIGl0LiBQcmVmaWxsZWQgZnJvbSB0aGUgcmVzcG9uc2U7IHdoZW4gYSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAvLyBleGlzdHMgaXQgc3RhcnRzIHJlYWQtb25seSB3aXRoIGEgcGVuY2lsIHRvZ2dsZSwgZWxzZSBlZGl0YWJsZS5cclxuICAgICAgICAgICAgICAgICAgLi4uKHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzLmluY2x1ZGVzKCdwaG9uZScpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuUEhPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucGhvbmVOdW1iZXIgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdwaG9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLmNvdW50cnlDYWxsaW5nQ29kZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJJbmZvPy5waG9uZUNvdW50cnlDb2RlID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQ09VTlRSWV9DQUxMSU5HX0NPREUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogdGhpcy51c2VySW5mbz8ucGhvbmVOdW1iZXIgPz8gJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRUb2dnbGU6ICEhdGhpcy51c2VySW5mbz8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5waG9uZU51bWJlck1heExlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LnBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgIC8vIEFkZHJlc3MgKGVkaXRhYmxlKSwgc2hvd24gb25seSB3aGVuIHRoZSB0ZW5hbnQnc1xyXG4gICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZC1wcm9maWxlLWZpZWxkcyBjb25maWcgcmVxdWVzdHMgaXQuIFByZWZpbGxlZCB3aGVuXHJcbiAgICAgICAgICAgICAgICAgIC8vIHByZXNlbnQsIGVtcHR5IHdoZW4gbnVsbC4gRml4ZWQtc2l6ZSBib3ggKHNlZSBjb21wb25lbnQgU0NTUykuXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLnJlcXVpcmVkUHJvZmlsZUZpZWxkcy5pbmNsdWRlcygnYWRkcmVzcycpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFkZHJlc3MgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhZGRyZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51c2VySW5mbz8uYWRkcmVzcyA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGEgdmFsdWUgZXhpc3RzLCBzdGFydCByZWFkLW9ubHkgd2l0aCBhIHBlbmNpbCB0b2dnbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBudWxsLCBzdGFydCBkaXJlY3RseSBlZGl0YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRUb2dnbGU6ICEhdGhpcy51c2VySW5mbz8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5hZGRyZXNzTWF4TGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbGl2ZSBjaGFyYWN0ZXIgY291bnRlciDigJQgZm9sbG93IHRoZSBSZXByZXNlbnRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcmdhbml6YXRpb24gcGF0dGVybjogaGFyZCBtYXhMZW5ndGggKyBlcnJvciBvbiBicmVhY2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuYWRkcmVzc01heExlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFkZHJlc3NNYXhDaGFycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYU11bHRpbGluZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgIDogW1xyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLklOUFVULFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmZpcnN0TmFtZSArICcqJyxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2ZpcnN0TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmZpcnN0T3JMYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZmlyc3RPckxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuSU5QVVQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ubGFzdE5hbWUgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdsYXN0TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmZpcnN0T3JMYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZmlyc3RPckxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5sYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5sYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIC8vIFBob25lIChjb21iaW5lZCBjb3VudHJ5IGNvZGUgKyBudW1iZXIpLiBOZXcgdXNlcjogYWx3YXlzXHJcbiAgICAgICAgICAgICAgICAgIC8vIGVkaXRhYmxlLCBjb3VudHJ5IGNvZGUgZGVmYXVsdHMgdG8gKzEuIFNob3duIG9ubHkgd2hlbiB0aGVcclxuICAgICAgICAgICAgICAgICAgLy8gdGVuYW50J3MgcmVxdWlyZWQtcHJvZmlsZS1maWVsZHMgY29uZmlnIHJlcXVlc3RzIGl0LlxyXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5yZXF1aXJlZFByb2ZpbGVGaWVsZHMuaW5jbHVkZXMoJ3Bob25lJylcclxuICAgICAgICAgICAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5QSE9ORSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5waG9uZU51bWJlciArICcqJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ3Bob25lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbnM6IHRoaXMuY291bnRyeUNhbGxpbmdDb2RlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IERFRkFVTFRfQ09VTlRSWV9DQUxMSU5HX0NPREUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU51bWJlcjogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnBob25lTnVtYmVyTWF4TGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5waG9uZU51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5waG9uZU51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICAgICAgICAgICAgLy8gQWRkcmVzcywgc2hvd24gb25seSB3aGVuIHRoZSB0ZW5hbnQncyByZXF1aXJlZC1wcm9maWxlLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25maWcgcmVxdWVzdHMgaXQuXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLnJlcXVpcmVkUHJvZmlsZUZpZWxkcy5pbmNsdWRlcygnYWRkcmVzcycpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFkZHJlc3MgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhZGRyZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5hZGRyZXNzTWF4TGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbGl2ZSBjaGFyYWN0ZXIgY291bnRlciDigJQgZm9sbG93IHRoZSBSZXByZXNlbnRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcmdhbml6YXRpb24gcGF0dGVybjogaGFyZCBtYXhMZW5ndGggKyBlcnJvciBvbiBicmVhY2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuYWRkcmVzc01heExlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFkZHJlc3NNYXhDaGFycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBib3ggYSBmaXhlZCBzaXplIChubyBkcmFnLXJlc2l6ZSkuIFRoZSBmaXhlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlaWdodCB3aXRoIGludGVybmFsIHNjcm9sbCBpcyBlbmZvcmNlZCB2aWEgY29tcG9uZW50IFNDU1NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgZmllbGQgZG9lc24ndCBncm93IGFzIHRoZSB1c2VyIHR5cGVzLCBtYXRjaGluZyB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXByZXNlbnRpbmcgT3JnYW5pemF0aW9uIGZpZWxkJ3MgZml4ZWQtYm94IGJlaGF2aW9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTXVsdGlsaW5lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5DSEVDS0JPWCxcclxuICAgICAgICAgICAgICBsYWJlbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucm9sZVxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucm9sZSArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ3JvbGVzJyxcclxuICAgICAgICAgICAgICBjaGVja2JveE9wdGlvbnM6IHRoaXMudXNlclJvbGVzLFxyXG4gICAgICAgICAgICAgIG1pblNlbGVjdGlvblJlcXVpcmVkOiAxLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnJvbGUsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5yb2xlLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICA/LnJvbGVGb3JJbmRpdmlkdWFsUm9zdGVyXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5yb2xlLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMXHJcbiAgICAgICAgICAgICAgICAgID8gW11cclxuICAgICAgICAgICAgICAgICAgOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBjbGFzc2lmaWNhdGlvbiwgTWVtYmVyIFR5cGUgYW5kIFJlcHJlc2VudGluZyBPcmdhbml6YXRpb24gZm9ybSBjb250cm9scyB3aGlsZSBhZGRpbmcgbmV3IHVzZXIgdG8gYW4gaW5kaXZpZHVhbCBncm91cCByb3N0ZXIuXHJcbiAgICogQHBhcmFtIHt7XHJcbiAgICogICAgIGNsYXNzaWZpY2F0aW9uOiBTZWxlY3RPcHRpb247XHJcbiAgICogICAgIG1lbWJlclR5cGU6IFNlbGVjdE9wdGlvbjtcclxuICAgKiAgICAgcmVwcmVzZW50aW5nT3JnOiBTZWxlY3RPcHRpb247XHJcbiAgICogICB9fSBbYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXNdXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVBZGRVc2VyRm9ybUdyb3VwKGFkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzPzoge1xyXG4gICAgY2xhc3NpZmljYXRpb246IFNlbGVjdE9wdGlvbjtcclxuICAgIG1lbWJlclR5cGU6IFNlbGVjdE9wdGlvbjtcclxuICAgIHJlcHJlc2VudGluZ09yZzogU2VsZWN0T3B0aW9uO1xyXG4gIH0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICB0aGlzLnVwZGF0ZUFkZFVzZXJGb3JtQ29udHJvbHMoXHJcbiAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5sZW5ndGggLSAxLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5jbGFzc2lmaWNhdGlvbiArICcqJyxcclxuICAgICAgICAgIGNvbnRyb2xOYW1lOiAnY2xhc3NpZmljYXRpb24nLFxyXG4gICAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLmNsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmNsYXNzaWZpY2F0aW9ucz8uZmluZChcclxuICAgICAgICAgICAgKGNsYXNzaWZpY2F0aW9uKSA9PlxyXG4gICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uLmlkID09PVxyXG4gICAgICAgICAgICAgIGFkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzPy5jbGFzc2lmaWNhdGlvbj8uaWRcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUNvbnRyb2xzKFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXAuZm9ybUdyb3VwWzBdLmNvbnRyb2xzLmxlbmd0aCAtIDEsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuU0VMRUNULFxyXG4gICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/Lm1lbWJlclR5cGUgKyAnKicsXHJcbiAgICAgICAgY29udHJvbE5hbWU6ICdtZW1iZXJUeXBlJyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbnM6IHRoaXMubWVtYmVyVHlwZXMsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMubWVtYmVyVHlwZXM/LmZpbmQoXHJcbiAgICAgICAgICAobWVtYmVyVHlwZSkgPT5cclxuICAgICAgICAgICAgbWVtYmVyVHlwZS5pZCA9PT0gYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXM/Lm1lbWJlclR5cGU/LmlkXHJcbiAgICAgICAgKSxcclxuICAgICAgICB2YWxpZGF0aW9uOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8ubWVtYmVyVHlwZSxcclxuICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/Lm1lbWJlclR5cGUsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICAvLyBUaGUgXCJSZXByZXNlbnRpbmcgT3JnYW5pemF0aW9uXCIgZmllbGQgaXMgcmVuZGVyZWQgYnkgdGhlIGN1c3RvbVxyXG4gICAgLy8gT3JnTXVsdGlTZWxlY3RDb21wb25lbnQgaW4gdGhlIHRlbXBsYXRlIChub3QgYnkgdGhlIGR5bmFtaWMgZm9ybSksIHNvIHdlXHJcbiAgICAvLyBubyBsb25nZXIgYWRkIGEgTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEUgY29udHJvbCB0byB0aGUgZHluYW1pYy1mb3JtXHJcbiAgICAvLyBjb25maWcgaGVyZS4gVGhlIHJlYWN0aXZlIGByZXByZXNlbnRpbmdPcmdgIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCBvbiB0aGVcclxuICAgIC8vIGNhcHR1cmVkIGZvcm0gZ3JvdXAgcmVmIGluIHJlZ2lzdGVyUmVwcmVzZW50aW5nT3JnQ29udHJvbCgpIHNvIGFsbFxyXG4gICAgLy8gZXhpc3Rpbmcgc3VibWl0L1NhdmUtYnV0dG9uIGxvZ2ljICh3aGljaCByZWFkcyBmb3JtLmdldCgncmVwcmVzZW50aW5nT3JnJykpXHJcbiAgICAvLyBrZWVwcyB3b3JraW5nIHVuY2hhbmdlZC4gSXRzIHZhbHVlIHN0YXlzIGluIHN5bmMgdmlhIHNlbGVjdGVkT3JnYW5pemF0aW9ucy5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgYWRkIHVzZXIgZm9ybSBncm91cCBjb250cm9scyBieSBhZGRpbmcgZmllbGRDb25maWcgYXQgcmVxdWlyZWQgaW5kZXguXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4UG9zaXRpb25cclxuICAgKiBAcGFyYW0ge0ZpZWxkQ29uZmlnfSBmaWVsZENvbmZpZ1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlQWRkVXNlckZvcm1Db250cm9scyhcclxuICAgIGluZGV4UG9zaXRpb246IG51bWJlcixcclxuICAgIGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5zcGxpY2UoXHJcbiAgICAgIGluZGV4UG9zaXRpb24sXHJcbiAgICAgIDAsXHJcbiAgICAgIGZpZWxkQ29uZmlnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhZGQgdXNlciBmb3JtIGVtYWlsIHNlYXJjaFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZm9ybVNlYXJjaEFwcGx5KGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoID0gdHJ1ZTtcclxuICAgIGlmIChlbWFpbC50cmltKCkpIHRoaXMuc2VhcmNoVXNlckJ5RW1haWwoZW1haWwudHJpbSgpKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJJbmZvLm5hbWUgPSAnJztcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5nZXQoJ2Z1bGxOYW1lJyk/LnNldFZhbHVlKCcnKTtcclxuICAgICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFzc2lnbnMgcm9sZSB0byB1c2VyIG9uIGZvcm0gc3VibWlzc2lvbi5cclxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cFtdfSBmb3JtXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkFkZFVzZXJGb3JtU3VibWl0KGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICBmb3JtWzBdPy5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAvLyBCbG9jayBzdWJtaXQgaWYgYW4gdW5jb21taXR0ZWQsIGludmFsaWQgZnJlZS10ZXh0IHRva2VuIHJlbWFpbnMgaW4gdGhlXHJcbiAgICAvLyBvcmcgZmllbGQgZXZlbiB3aGVuIG90aGVyIGNvbnRyb2xzIC8gc2VsZWN0ZWQgY2hpcHMgYXJlIHZhbGlkLlxyXG4gICAgaWYgKHRoaXMuaGFzSW52YWxpZE9yZ0ZyZWVUZXh0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgKGZvcm1bMF0uZ2V0KCdyZXByZXNlbnRpbmdPcmcnKT8uc3RhdHVzID09PSBGb3JtU3RhdHVzPy5JTlZBTElEICYmXHJcbiAgICAgICAgdGhpcy5pc0FsbE90aGVyQ29udHJvbHNWYWxpZCgpICYmXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMubGVuZ3RoID4gMCkgfHxcclxuICAgICAgZm9ybVswXS5zdGF0dXMgPT09IEZvcm1TdGF0dXM/LlZBTElEXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgICAuYWRkTmV3R3JvdXBVc2VyKHRoaXMuZ2V0QWRkTmV3VXNlclBheWxvYWQoZm9ybVswXT8uZ2V0UmF3VmFsdWUoKSkpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1Ym1pdEZvcm1SZXNwb25zZS5lbWl0KHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWRkIHVzZXIgZm9ybSBncm91cCByZWZlcmVuY2UuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0QWRkVXNlckZvcm1Hcm91cFJlZihmb3JtOiBGb3JtR3JvdXBbXSkge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmID0gZm9ybVswXTtcclxuICAgIHRoaXMucmVnaXN0ZXJSZXByZXNlbnRpbmdPcmdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgdGhlIGByZXByZXNlbnRpbmdPcmdgIHJlYWN0aXZlIGNvbnRyb2wgb24gdGhlIGR5bmFtaWMgZm9ybSdzXHJcbiAgICogRm9ybUdyb3VwIGZvciBJTkRJVklEVUFMIHJvc3RlcnMuIFRoZSBmaWVsZCBpdHNlbGYgaXMgcmVuZGVyZWQgYnkgdGhlIGN1c3RvbVxyXG4gICAqIE9yZ011bHRpU2VsZWN0Q29tcG9uZW50IChub3QgdGhlIGR5bmFtaWMgZm9ybSksIGJ1dCBrZWVwaW5nIHRoaXMgY29udHJvbCBvblxyXG4gICAqIHRoZSBzYW1lIEZvcm1Hcm91cCDigJQgd2l0aCB0aGUgb3JpZ2luYWwgdmFsaWRhdG9ycyDigJQgbWVhbnMgYWxsIGV4aXN0aW5nXHJcbiAgICogc3VibWl0L1NhdmUtYnV0dG9uIGxvZ2ljIHRoYXQgcmVhZHMgYGZvcm0uZ2V0KCdyZXByZXNlbnRpbmdPcmcnKWAga2VlcHNcclxuICAgKiB3b3JraW5nIHVuY2hhbmdlZC4gSXRzIHZhbHVlIGlzIHRoZSBzZWxlY3RlZC1vcmdhbml6YXRpb25zIGFycmF5LCBrZXB0IGluXHJcbiAgICogc3luYyBieSBnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoKS5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyUmVwcmVzZW50aW5nT3JnQ29udHJvbCgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgIT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMIHx8XHJcbiAgICAgICF0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWYgfHxcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmLmNvbnRhaW5zKCdyZXByZXNlbnRpbmdPcmcnKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZi5hZGRDb250cm9sKFxyXG4gICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA/IHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zIDogJycsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdXBkYXRlT246ICdibHVyJyxcclxuICAgICAgICAgIHZhbGlkYXRvcnM6IFtcclxuICAgICAgICAgICAgcmVwcmVzZW50aW5nT3JnUmVxdWlyZWRWYWxpZGF0b3IoKSxcclxuICAgICAgICAgICAgc2tpcFdoZW5BcnJheShcclxuICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdOYW1lTWF4TGVuZ3RoXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBza2lwV2hlbkFycmF5KFxyXG4gICAgICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKFxyXG4gICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ05hbWVNaW5MZW5ndGhcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNraXBXaGVuQXJyYXkoXHJcbiAgICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFxyXG4gICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvblxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB1c2VyIHJvbGUgc2VsZWN0aW9uIGluIGFkZCB1c2VyIGZvcm0uXHJcbiAgICogQHBhcmFtIHtDaGVja2JveE9wdGlvbn0gZXZlbnRcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uVXNlclJvbGVTZWxlY3Rpb24oZXZlbnQ6IENoZWNrYm94T3B0aW9uKTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQ/LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlcz8ucHVzaChldmVudC5pZCBhcyBzdHJpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlcyA9IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXMuZmlsdGVyKFxyXG4gICAgICAgICh2YWx1ZSkgPT4gdmFsdWUgIT09IGV2ZW50LmlkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBSZWNvbXB1dGUgdGhyb3VnaCB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBzbyByb2xlIHNlbGVjdGlvbiBhbmQgZm9ybVxyXG4gICAgLy8gdmFsaWRpdHkgc3RheSBpbiBzeW5jIGZvciBib3RoIHJvc3RlciB0eXBlcy5cclxuICAgIHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdHVzKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGZvcm0gY2FuY2VsIGV2ZW50LlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Gb3JtQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtQ2FuY2VsLmVtaXQoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGVuYW50J3MgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgc28gdGhlIGFkZC11c2VyIGZvcm0gb25seSBzaG93c1xyXG4gICAqIHRoZSBwaG9uZS9hZGRyZXNzIGZpZWxkcyB0aGUgdGVuYW50IGhhcyBjb25maWd1cmVkIGFzIHJlcXVpcmVkLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1aXJlZFByb2ZpbGVGaWVsZHMgPVxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHMoKSA/PyBbXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY2xhc3NpZmljYXRpb25zIGZyb20gbWFzdGVyIGRhdGEuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRDbGFzc2lmaWNhdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0Q2xhc3NpZmljYXRpb25zKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24uY2xhc3NpZmljYXRpb25JZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24uY2xhc3NpZmljYXRpb25EZXNjLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICAgICAgICdjbGFzc2lmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICdkcm9wZG93bk9wdGlvbnMnLFxyXG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpY2F0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1lbWJlciB0eXBlcyBmcm9tIG1hc3RlciBkYXRhLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TWVtYmVyVHlwZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZW1iZXJUeXBlcyA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICBtZW1iZXJUeXBlcz8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMubWVtYmVyVHlwZXM/LnB1c2goe1xyXG4gICAgICAgIGlkOiBvcHRpb24ucm9sZUlkLFxyXG4gICAgICAgIG5hbWU6IG9wdGlvbi5yb2xlTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAnbWVtYmVyVHlwZScsXHJcbiAgICAgICdkcm9wZG93bk9wdGlvbnMnLFxyXG4gICAgICB0aGlzLm1lbWJlclR5cGVzXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZXByZXNlbnRpbmcgT3JnYW5pemF0aW9ucy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JnTmFtZVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0T3JnYW5pemF0aW9ucyhvcmdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMub3JnYW5pemF0aW9ucyA9IFtdO1xyXG4gICAgb3JnTmFtZSA9IG9yZ05hbWU/LnRyaW1TdGFydCgpO1xyXG4gICAgaWYgKCFvcmdOYW1lKSByZXR1cm47XHJcbiAgICBjb25zdCBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHsgb3JnTmFtZTogb3JnTmFtZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRPcmdhbml6YXRpb25zKG9yZ1JlcXVlc3RQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25zID0gW107XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5vcmdJZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24ub3JnTmFtZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIHRoaXMub3JnYW5pemF0aW9ucyBpcyBib3VuZCB0byB0aGUgY3VzdG9tIE9yZ011bHRpU2VsZWN0Q29tcG9uZW50J3NcclxuICAgICAgICAgIC8vIFtvcHRpb25zXSBpbnB1dDsgYXNzaWduaW5nIGEgbmV3IGFycmF5IHJlZmVyZW5jZSBvcGVucyBpdHMgZHJvcGRvd24uXHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnMgPSBbLi4udGhpcy5vcmdhbml6YXRpb25zXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgZHJvcGRvd24gb3B0aW9ucyBvZiBDbGFzc2lmaWNhdGlvbiwgTWVtYmVyIFR5cGUgYW5kIFJlcHJlc2VudGluZyBPcmdhbml6YXRpb24gZm9ybSBmaWVsZHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1Db250cm9sTmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtQ29udHJvbElucHV0UHJvcGVydHlcclxuICAgKiBAcGFyYW0ge1NlbGVjdE9wdGlvbltdfSBvcHRpb25zXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICBmb3JtQ29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1Db250cm9sSW5wdXRQcm9wZXJ0eTogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uW11cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmR5bmFtaWNGb3JtQ29tcG9uZW50Py5mb3JtRmllbGRzPy50b0FycmF5KCk7XHJcbiAgICBmb3JtRmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZvcm1GaWVsZD8uY29tcG9uZW50Py5pbnN0YW5jZT8uY29uZmlnPy5jb250cm9sTmFtZSA9PT1cclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZSAmJlxyXG4gICAgICAgIGZvcm1GaWVsZD8uY29tcG9uZW50Py5pbnN0YW5jZT8uW2Zvcm1Db250cm9sSW5wdXRQcm9wZXJ0eV1cclxuICAgICAgKVxyXG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnQuaW5zdGFuY2VbZm9ybUNvbnRyb2xJbnB1dFByb3BlcnR5XSA9IG9wdGlvbnM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGN1c3RvbSBlcnJvcnMgd2hpbGUgc2VhcmNoaW5nIHVzZXIgYnkgZW1haWwsIHZhbGlkYXRpbmcgdXNlciBleGlzdGVuY2UgYW5kIGFkZGluZyBuZXcgdXNlciB0byByb3N0ZXIuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvclxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBpZiAoZXJyb3JDb2Rlc1swXSAhPT0gJzMwMDQnKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cFNlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgQWxlcnRUeXBlLkVSUk9SLFxyXG4gICAgICAgICAgZXJyb3JDb2Rlc1swXSA9PT0gJzIwMjQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWRkIHVzZXIgZm9ybSBjaGFuZ2UgZXZlbnQuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRVc2VyRm9ybUNoYW5nZShmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmID0gZm9ybVswXTtcclxuICAgIHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYWxsIG90aGVyIGNvbnRyb2wgZXhjZXB0IHJlcHJlc2VudGluZ09yZyBhcmUgdmFsaWQuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGlzQWxsT3RoZXJDb250cm9sc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LmNvbnRyb2xzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWYuY29udHJvbHMpXHJcbiAgICAgID8uZmlsdGVyKChjb250cm9sTmFtZSkgPT4gY29udHJvbE5hbWUgIT09ICdyZXByZXNlbnRpbmdPcmcnKVxyXG4gICAgICAuZXZlcnkoXHJcbiAgICAgICAgKGNvbnRyb2xOYW1lKSA9PlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5nZXQoY29udHJvbE5hbWUpPy5zdGF0dXMgPT09XHJcbiAgICAgICAgICBGb3JtU3RhdHVzPy5WQUxJRFxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgU2F2ZSBidXR0b24gZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZS5cclxuICAgKlxyXG4gICAqIENvbWJpbmVzIGJvdGggaW5wdXRzIHRoYXQgZ2F0ZSB0aGUgZm9ybSBzbyBldmVyeSBjYWxsYmFjayAoZm9ybSBjaGFuZ2UsXHJcbiAgICogcm9sZSBzZWxlY3Rpb24sIG9yZyBzZWxlY3Rpb24pIGNvbXB1dGVzIHRoZSBzYW1lIHJlc3VsdCDigJQgbWlycm9yaW5nIHRoZVxyXG4gICAqIGVkaXQtdXNlci1yb2xlcyBmbG93OlxyXG4gICAqIDEuIEJhc2UgdmFsaWRpdHkgdmlhIEdyb3Vwc1NlcnZpY2UuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCwgd2hpY2ggYWNjb3VudHNcclxuICAgKiAgICBmb3IgdGhlIHJlYWN0aXZlIGZvcm0gc3RhdHVzIEFORCAoZm9yIFNZU1RFTV9VU0VSKSB0aGUgc2VsZWN0ZWQgcm9sZXMsXHJcbiAgICogICAgc2luY2Ugcm9sZXMgbGl2ZSBpbiBgc2VsZWN0ZWRVc2VyUm9sZXNgLCBub3QgdGhlIGZvcm0uXHJcbiAgICogMi4gRm9yIElORElWSURVQUwgb25seTogdGhlIGByZXByZXNlbnRpbmdPcmdgIGNvbnRyb2wgc3RheXMgSU5WQUxJRCBiZWNhdXNlXHJcbiAgICogICAgaXRzIHZhbHVlIGlzIGhlbGQgaW4gYHNlbGVjdGVkT3JnYW5pemF0aW9uc2AgKGEgbXVsdGlzZWxlY3QgYXV0b2NvbXBsZXRlKSxcclxuICAgKiAgICBub3QgdGhlIGNvbnRyb2wuIFNvIGFsc28gZW5hYmxlIHdoZW4gZXZlcnkgb3RoZXIgY29udHJvbCBpcyB2YWxpZCBhbmQgYXRcclxuICAgKiAgICBsZWFzdCBvbmUgb3JnYW5pemF0aW9uIGlzIHNlbGVjdGVkLCBldmVuIHRob3VnaCB0aGUgZm9ybSBzdGF0dXMgaXNcclxuICAgKiAgICBJTlZBTElELlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlU3VibWl0QnV0dG9uU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgbGV0IGlzRGlzYWJsZWQgPSB0aGlzLmdyb3VwU2VydmljZS5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkKFxyXG4gICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSxcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5zdGF0dXMsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXNcclxuICAgICk7XHJcblxyXG4gICAgLy8gRm9yIElORElWSURVQUwsIHRoZSBgcmVwcmVzZW50aW5nT3JnYCBjb250cm9sIHN0YXlzIElOVkFMSUQgYmVjYXVzZSBpdHNcclxuICAgIC8vIHZhbHVlIGlzIGhlbGQgaW4gYHNlbGVjdGVkT3JnYW5pemF0aW9uc2AgKGEgbXVsdGlzZWxlY3QgYXV0b2NvbXBsZXRlKSxcclxuICAgIC8vIG5vdCB0aGUgY29udHJvbC4gU28gZW5hYmxlIHdoZW4gZXZlcnkgb3RoZXIgY29udHJvbCBpcyB2YWxpZCBhbmQgYXQgbGVhc3RcclxuICAgIC8vIG9uZSBvcmdhbml6YXRpb24gaXMgc2VsZWN0ZWQg4oCUIGV2ZW4gdGhvdWdoIHRoZSBmb3JtIHN0YXR1cyBpcyBJTlZBTElELlxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwgJiZcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5nZXQoJ3JlcHJlc2VudGluZ09yZycpPy5zdGF0dXMgPT09XHJcbiAgICAgICAgRm9ybVN0YXR1cz8uSU5WQUxJRCAmJlxyXG4gICAgICB0aGlzLmlzQWxsT3RoZXJDb250cm9sc1ZhbGlkKCkgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnM/Lmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICBpc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQW4gdW5jb21taXR0ZWQsIGludmFsaWQgZnJlZS10ZXh0IHRva2VuIGluIHRoZSBvcmcgZmllbGQgbXVzdCBibG9jayBzdWJtaXRcclxuICAgIC8vIHJlZ2FyZGxlc3Mgb2YgYW55IHZhbGlkIGNoaXBzIGFscmVhZHkgc2VsZWN0ZWQuXHJcbiAgICBpZiAodGhpcy5oYXNJbnZhbGlkT3JnRnJlZVRleHQpIHtcclxuICAgICAgaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgYWRkIG5ldyB1c2VyIHBheWxvYWQgZnJvbSB0aGUgZm9ybSBkYXRhIGRlcGVuZHMgb24gdGhlIEdyb3VwUm9zdGVyVHlwZSBhbmQgcmV0dXJucy5cclxuICAgKiBAcGFyYW0geyp9IGZvcm1EYXRhXHJcbiAgICogQHJldHVybiB7KEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEFkZE5ld1VzZXJQYXlsb2FkKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZvcm1EYXRhOiBhbnlcclxuICApOiBBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCB7XHJcbiAgICBsZXQgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQ7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3JnYW5pemF0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcmdJZDogb3B0aW9uLmlkIGFzIHN0cmluZyxcclxuICAgICAgICAgIG9yZ05hbWU6IG9wdGlvbi5uYW1lLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLmlzVXNlckV4aXN0XHJcbiAgICAgICAgICAgID8gdGhpcy51c2VySW5mbz8uZW1haWxcclxuICAgICAgICAgICAgOiBmb3JtRGF0YT8uZW1haWxTZWFyY2gsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5zZWxlY3RlZFVzZXJSb2xlcyxcclxuICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLnNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgIG9yZ2FuaXphdGlvbnM6IGZvcm1hdHRlZE9wdGlvbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgICAgaWYgKHRoaXMuaGFzQ2xhc3NpZmljYXRpb24pXHJcbiAgICAgICAgcGF5bG9hZC5wYXlsb2FkLmNsYXNzaWZpY2F0aW9uID0ge1xyXG4gICAgICAgICAgY2xhc3NpZmljYXRpb25JZDogZm9ybURhdGE/LmNsYXNzaWZpY2F0aW9uXHJcbiAgICAgICAgICAgID8gZm9ybURhdGE/LmNsYXNzaWZpY2F0aW9uPy5pZFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmb3JtRGF0YT8ubWVtYmVyVHlwZSAmJlxyXG4gICAgICAgICFwYXlsb2FkLnBheWxvYWQucm9sZXM/LmluY2x1ZGVzKGZvcm1EYXRhPy5tZW1iZXJUeXBlPy5pZClcclxuICAgICAgKVxyXG4gICAgICAgIHBheWxvYWQucGF5bG9hZC5yb2xlcz8ucHVzaChmb3JtRGF0YT8ubWVtYmVyVHlwZT8uaWQpO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgZW1haWw6IHRoaXMuaXNVc2VyRXhpc3RcclxuICAgICAgICAgICAgPyB0aGlzLnVzZXJJbmZvPy5lbWFpbFxyXG4gICAgICAgICAgICA6IGZvcm1EYXRhPy5lbWFpbFNlYXJjaCxcclxuICAgICAgICAgIHJvbGVzOiB0aGlzLnNlbGVjdGVkVXNlclJvbGVzLFxyXG4gICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2Uuc2VsZWN0ZWRHcm91cEluZm8/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICBpZiAodGhpcy5pc1VzZXJFeGlzdCkge1xyXG4gICAgICBwYXlsb2FkLnBheWxvYWQudXNlcklkID0gdGhpcy51c2VySW5mbz8udXNlcklkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF5bG9hZC5wYXlsb2FkLmZpcnN0TmFtZSA9IGZvcm1EYXRhPy5maXJzdE5hbWU/LnRyaW0oKTtcclxuICAgICAgcGF5bG9hZC5wYXlsb2FkLmxhc3ROYW1lID0gZm9ybURhdGE/Lmxhc3ROYW1lPy50cmltKCk7XHJcbiAgICB9XHJcbiAgICAvLyBPcHRpb25hbCBjb250YWN0IGZpZWxkcyDigJQgYXBwbHkgdG8gYm90aCBuZXcgYW5kIGV4aXN0aW5nIHVzZXJzLlxyXG4gICAgdGhpcy5hcHBlbmRDb250YWN0RGV0YWlsc1RvUGF5bG9hZChwYXlsb2FkLCBmb3JtRGF0YSk7XHJcbiAgICByZXR1cm4gcGF5bG9hZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgdGhlIG9wdGlvbmFsIGNvbnRhY3QgZmllbGRzIChwaG9uZSBjb3VudHJ5IGNvZGUsIHBob25lIG51bWJlciBhbmRcclxuICAgKiBhZGRyZXNzKSB0byB0aGUgcGF5bG9hZC4gVGhlIGNvdW50cnkgY29kZSBpcyBzZW50IG9ubHkgd2hlbiBhIHBob25lIG51bWJlclxyXG4gICAqIGlzIHByb3ZpZGVkOyBwaG9uZSBudW1iZXIgYW5kIGFkZHJlc3MgYXJlIGluY2x1ZGVkIG9ubHkgd2hlbiB0aGUgdXNlclxyXG4gICAqIGVudGVyZWQgYSB2YWx1ZSAoc28gbnVsbHMvZW1wdGllcyBhcmUgbm90IHNlbnQgdG8gdGhlIGJhY2tlbmQpLlxyXG4gICAqIEBwYXJhbSB7KEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkKX0gcGF5bG9hZFxyXG4gICAqIEBwYXJhbSB7Kn0gZm9ybURhdGFcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGFwcGVuZENvbnRhY3REZXRhaWxzVG9QYXlsb2FkKFxyXG4gICAgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgZm9ybURhdGE6IGFueVxyXG4gICk6IHZvaWQge1xyXG4gICAgLy8gVGhlIGNvbWJpbmVkIFBIT05FIGNvbnRyb2wgc3RvcmVzIHsgY291bnRyeUNvZGUsIHBob25lTnVtYmVyIH0uXHJcbiAgICBjb25zdCBwaG9uZU51bWJlciA9IGZvcm1EYXRhPy5waG9uZT8ucGhvbmVOdW1iZXI/LnRyaW0oKTtcclxuICAgIGNvbnN0IHBob25lQ291bnRyeUNvZGUgPSBmb3JtRGF0YT8ucGhvbmU/LmNvdW50cnlDb2RlO1xyXG4gICAgY29uc3QgYWRkcmVzcyA9IGZvcm1EYXRhPy5hZGRyZXNzPy50cmltKCk7XHJcbiAgICBpZiAocGhvbmVOdW1iZXIpIHtcclxuICAgICAgcGF5bG9hZC5wYXlsb2FkLnBob25lTnVtYmVyID0gcGhvbmVOdW1iZXI7XHJcbiAgICAgIGlmIChwaG9uZUNvdW50cnlDb2RlKSBwYXlsb2FkLnBheWxvYWQucGhvbmVDb3VudHJ5Q29kZSA9IHBob25lQ291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBpZiAoYWRkcmVzcykgcGF5bG9hZC5wYXlsb2FkLmFkZHJlc3MgPSBhZGRyZXNzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzYWJsZXMgZm9ybSBzdWJtaXQgYnV0dG9uIHdoZW4gb3JnIG5hbWUgbGVuZ3RoIGlzIGxlc3MgdGhhbiBtaW5DaGFyVG9TZWFyY2ggYW5kIGdyZWF0ZXIgdGhhbiB6ZXJvLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZGlzYWJsZVN1Ym1pdEJ1dHRvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT3JnYW5pemF0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICAgJ3JlcHJlc2VudGluZ09yZycsXHJcbiAgICAgICAgJ211bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9ucycsXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWxlcnRzIGZvciBlcnJvciwgd2FybmluZy5cclxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBzdHJpbmdbXSl9IG1lc3NhZ2UgLWVycm9yIG9yIHdhcm5pbmcgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB7QWxlcnRUeXBlfSBhbGVydFR5cGVcclxuICAgKiBAcmV0dXJuIC1yZXR1cm5zIG5vdGhpbmdcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSxcclxuICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLFxyXG4gICAgaXNIdG1sQ29udGVudD86IGJvb2xlYW5cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgIGFsZXJ0VHlwZTogYWxlcnRUeXBlLFxyXG4gICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICBpc0h0bWxDb250ZW50OiBpc0h0bWxDb250ZW50ID8/IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHNlbGVjdGVkIG9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtBdXRvQ29tcGxldGVPcHRpb25bXX0gc2VsZWN0ZWRPcmdcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkT3JnYW5pemF0aW9ucyhzZWxlY3RlZE9yZzogQXV0b0NvbXBsZXRlT3B0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zID0gc2VsZWN0ZWRPcmc7XHJcbiAgICAvLyBLZWVwIHRoZSByZWFjdGl2ZSBjb250cm9sJ3MgdmFsdWUgaW4gc3luYyB3aXRoIHRoZSBzZWxlY3Rpb24gc28gdGhlXHJcbiAgICAvLyByZXF1aXJlZCB2YWxpZGF0b3IgYW5kIHN1Ym1pdC9TYXZlLWJ1dHRvbiBsb2dpYyBzdGF5IGFjY3VyYXRlLlxyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmXHJcbiAgICAgID8uZ2V0KCdyZXByZXNlbnRpbmdPcmcnKVxyXG4gICAgICA/LnNldFZhbHVlKHNlbGVjdGVkT3JnPy5sZW5ndGggPyBzZWxlY3RlZE9yZyA6ICcnKTtcclxuICAgIC8vIFJlY29tcHV0ZSB0aHJvdWdoIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHNvIHRoZSByZXByZXNlbnRpbmdPcmdcclxuICAgIC8vIGV4Y2VwdGlvbiAob3JnIHNlbGVjdGVkIHdoaWxlIHRoZSBjb250cm9sIGlzIElOVkFMSUQpIGlzIGFwcGxpZWQuXHJcbiAgICB0aGlzLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXN0cm95JCkge1xyXG4gICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgaWYgKHRoaXMudGltZU91dElkKSBjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8aWVlZXNhLWR5bmFtaWMtZm9ybVxyXG4gICpuZ0lmPVwic2VhcmNoVXNlckZvcm1Hcm91cCAmJiBpc1NlYXJjaFVzZXJGb3JtXCJcclxuICBjbGFzcz1cImllZWVzYS1zZWFyY2gtdXNlci1mb3JtXCJcclxuICBbbGVmdEJ1dHRvbkxhYmVsXT1cImxlZnRCdXR0b25MYWJlbFwiXHJcbiAgW3JpZ2h0QnV0dG9uTGFiZWxdPVwicmlnaHRCdXR0b25MYWJlbFwiXHJcbiAgW2lzTGVnZW5kVmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgW2NvbFdpZHRoXT1cImNvbFdpZHRoXCJcclxuICBbYWN0aW9uQnV0dG9uQWxpZ25dPVwiYWN0aW9uQnV0dG9uQWxpZ25cIlxyXG4gIFtmb3JtR3JvdXBzXT1cInNlYXJjaFVzZXJGb3JtR3JvdXBcIlxyXG4gIFtpc0xlZnRCdXR0b25OZWVkZWRdPVwidHJ1ZVwiXHJcbiAgKGZvcm1TdWJtaXQpPVwib25TZWFyY2hVc2VyRm9ybVN1Ym1pdCgkZXZlbnQpXCJcclxuICAoZm9ybUxlZnRCdXR0b25DbGlja2VkKT1cIm9uRm9ybUNhbmNlbCgpXCJcclxuPjwvaWVlZXNhLWR5bmFtaWMtZm9ybT5cclxuXHJcbjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgKm5nSWY9XCJhZGRVc2VyRm9ybUdyb3VwICYmICFpc1NlYXJjaFVzZXJGb3JtXCJcclxuICBjbGFzcz1cImllZWVzYS1hZGQtdXNlci1mb3JtXCJcclxuICBbbGVmdEJ1dHRvbkxhYmVsXT1cImxlZnRCdXR0b25MYWJlbFwiXHJcbiAgW3JpZ2h0QnV0dG9uTGFiZWxdPVwicmlnaHRCdXR0b25MYWJlbFwiXHJcbiAgW2lzTGVnZW5kVmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgW2lzU3VibWl0QnV0dG9uRGlzYWJsZWRdPVwiaXNTdWJtaXRCdXR0b25EaXNhYmxlZFwiXHJcbiAgW2NvbFdpZHRoXT1cImNvbFdpZHRoXCJcclxuICBbYWN0aW9uQnV0dG9uQWxpZ25dPVwiYWN0aW9uQnV0dG9uQWxpZ25cIlxyXG4gIFtmb3JtR3JvdXBzXT1cImFkZFVzZXJGb3JtR3JvdXBcIlxyXG4gIFtpc0xlZnRCdXR0b25OZWVkZWRdPVwidHJ1ZVwiXHJcbiAgKGZvcm1TdWJtaXQpPVwib25BZGRVc2VyRm9ybVN1Ym1pdCgkZXZlbnQpXCJcclxuICAoZm9ybVNlYXJjaEFwcGx5KT1cImZvcm1TZWFyY2hBcHBseSgkZXZlbnQpXCJcclxuICAoZm9ybUxlZnRCdXR0b25DbGlja2VkKT1cIm9uRm9ybUNhbmNlbCgpXCJcclxuICAoZm9ybUdyb3Vwc1JlZmVyZW5jZSk9XCJnZXRBZGRVc2VyRm9ybUdyb3VwUmVmKCRldmVudClcIlxyXG4gIChmb3JtQ2hlY2tib3hTZWxlY3Rpb24pPVwib25Vc2VyUm9sZVNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAoZm9ybUNoYW5nZSk9XCJvbkFkZFVzZXJGb3JtQ2hhbmdlKCRldmVudClcIlxyXG4+XHJcbiAgPCEtLVxyXG4gICAgUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiAoSU5ESVZJRFVBTCByb3N0ZXJzIG9ubHkpLiBQcm9qZWN0ZWQgaW50byB0aGVcclxuICAgIGR5bmFtaWMgZm9ybSdzIFtjb21wb25lbnRdIHNsb3Qgc28gaXQgcmVuZGVycyBhZnRlciB0aGUgb3RoZXIgZmllbGRzIGJ1dFxyXG4gICAgQkVGT1JFIHRoZSBTYXZlL0NhbmNlbCBhY3Rpb24gYnV0dG9ucy4gVXNlcyB0aGUgY3VzdG9tIG11bHRpLXNlbGVjdCBmaWVsZCBzb1xyXG4gICAgbXVsdGlwbGUgb3JncyBjYW4gYmUgcGlja2VkIGZyb20gYW4gb3BlbiBkcm9wZG93biB3aXRob3V0IHRoZSBNYXRlcmlhbFxyXG4gICAgYXV0b2NvbXBsZXRlIGNsb3Npbmcgb3IgY2xlYXJpbmcgdGhlIHR5cGVkIHRleHQuIEl0cyB2YWx1ZSBzdGF5cyBzeW5jZWQgdG9cclxuICAgIHRoZSByZWFjdGl2ZSBgcmVwcmVzZW50aW5nT3JnYCBjb250cm9sIHZpYSBnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoKS5cclxuICAtLT5cclxuICA8aWVlZXNhLW9yZy1tdWx0aS1zZWxlY3RcclxuICAgIGNvbXBvbmVudFxyXG4gICAgKm5nSWY9XCJhZGRVc2VyRm9ybUdyb3VwICYmICFpc1NlYXJjaFVzZXJGb3JtICYmIGlzSW5kaXZpZHVhbFJvc3RlclwiXHJcbiAgICBjbGFzcz1cImllZWVzYS1hZGQtdXNlci1mb3JtX19vcmdcIlxyXG4gICAgW2xhYmVsXT1cImFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbiArICcqJ1wiXHJcbiAgICBbYXJpYUxhYmVsXT1cImFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uXCJcclxuICAgIFtzdXBwb3J0TWVzc2FnZV09XCJhZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25cIlxyXG4gICAgW29wdGlvbnNdPVwib3JnYW5pemF0aW9uc1wiXHJcbiAgICBbc2VsZWN0ZWRPcHRpb25zXT1cInNlbGVjdGVkT3JnYW5pemF0aW9uc1wiXHJcbiAgICAoc2VhcmNoKT1cImdldE9yZ2FuaXphdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImdldFNlbGVjdGVkT3JnYW5pemF0aW9ucygkZXZlbnQpXCJcclxuICAgIChpbnZhbGlkRnJlZVRleHQpPVwib25PcmdJbnZhbGlkRnJlZVRleHQoJGV2ZW50KVwiXHJcbiAgPjwvaWVlZXNhLW9yZy1tdWx0aS1zZWxlY3Q+XHJcbjwvaWVlZXNhLWR5bmFtaWMtZm9ybT5cclxuIl19
|
|
993
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXVzZXItcm9zdGVyL2FkZC11c2VyLXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC11c2VyLXJvc3Rlci9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxhQUFhLEdBRWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBTVYsb0JBQW9CLEdBQ3JCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxhQUFhLEdBQ2QsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBTzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7QUFFekY7Ozs7OztHQU1HO0FBZUgsTUFBTSxPQUFPLHNCQUFzQjtJQWtDakM7Ozs7O09BS0c7SUFDSCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQztJQUM3RCxDQUFDO0lBUUQ7Ozs7O09BS0c7SUFDSCxvQkFBb0IsQ0FBQyxTQUFrQjtRQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFLRDtJQUNFLDBDQUEwQztJQUNsQyxZQUEyQjtJQUNuQywwQ0FBMEM7SUFDbEMseUJBQW9EO0lBQzVELDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbkMsVUFBc0IsQ0FBQyw2REFBNkQ7O1FBTm5GLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBRTNCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFFckQsaUJBQVksR0FBWixZQUFZLENBQWU7UUFFM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXZFL0IsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsOERBQThEO1FBQzlELGNBQVMsR0FBUSxXQUFXLENBQUM7UUFDN0IsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQztRQUNsRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDO1FBQ3BFLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixhQUFRLEdBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUdoRSxzQkFBaUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBRW5DLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUNqQyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFDakMsYUFBUSxHQUFhO1lBQ25CLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFDRiw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDakMsb0JBQWUsR0FBbUIsRUFBRSxDQUFDO1FBQ3JDLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUNqQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLDBCQUFxQixHQUF5QixFQUFFLENBQUM7UUFDakQsd0JBQW1CLEdBQW1CLEVBQUUsQ0FBQztRQUN6QyxvR0FBb0c7UUFDcEcsMEJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBYXJDOzs7V0FHRztRQUNILDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQWFwQix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBV3ZDLENBQUM7SUFFSjs7O09BR0c7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDckUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRSxpQkFBaUIsSUFBSSxLQUFLLENBQUM7UUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLEVBQUUsVUFBNkIsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEU7WUFDSCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDdkQsSUFBSSxJQUFJLENBQUMsaUJBQWlCO29CQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7WUFDRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYTthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxRQUFpQixFQUFFLEVBQUU7WUFDL0IsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNqRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QjtRQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDekIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE1BQU0sRUFBRSxFQUFFO29CQUNWLFFBQVEsRUFBRTt3QkFDUjs0QkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7NEJBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHOzRCQUNsRCxXQUFXLEVBQUUsY0FBYzs0QkFDM0Isb0JBQW9CLEVBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVE7NEJBQ25ELE9BQU8sRUFBRSxJQUFJOzRCQUNiLGNBQWMsRUFDWixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFlBQVk7NEJBQ3BELG1CQUFtQixFQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSzs0QkFDekQsVUFBVSxFQUFFO2dDQUNWLFVBQVUsQ0FBQyxRQUFRO2dDQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQzs2QkFDbkQ7NEJBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUs7NEJBQzNELGlCQUFpQixFQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSzt5QkFDM0Q7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLElBQWlCO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsWUFBWTthQUNkLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFO29CQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNO3dCQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOzt3QkFDbkQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7aUJBQ3hDO1lBQ0gsQ0FBQztZQUNELDhEQUE4RDtZQUM5RCxLQUFLLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO29CQUM5QixJQUFJLENBQUMsZ0JBQWdCO3dCQUNuQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztvQkFDbkMsSUFDRSxDQUFDLElBQUksQ0FBQyx3QkFBd0I7d0JBQzlCLENBQUMsQ0FDQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQzs0QkFDOUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDOUMsRUFDRDt3QkFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQzVCLElBQUksQ0FBQyw0QkFBNEIsQ0FDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQ2hELENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3pELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN6RDtvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQ2hDLFNBQVMsQ0FBQyxLQUFLLENBQ2hCLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDMUI7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQjtRQUNuQixNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLE9BQWlCO2dCQUNwRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFnQjthQUN4QztTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWTthQUNkLG1CQUFtQixDQUFDLE9BQU8sQ0FBQzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixFQUFFLFNBQVMsQ0FBQztZQUNWLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUNoQyxTQUFTLENBQUMsS0FBSyxDQUNoQixDQUFDO2dCQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7WUFDckMsQ0FBQztZQUNELDhEQUE4RDtZQUM5RCxLQUFLLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO2dCQUNsRCxJQUFJLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2lCQUNuQzs7b0JBQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNEOzs7T0FHRztJQUNILDBCQUEwQjtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQztRQUN4RSxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQy9DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQ2hDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztZQUNuQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDL0I7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLDRCQUE0QixDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLG1CQUFtQjtnQkFDdEIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDO2dCQUNwQixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekUsSUFBSSxJQUFJLENBQUMsU0FBUztnQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDRCQUE0QixDQUFDLGlCQUF5QjtRQUNwRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtZQUN2RCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDO2dCQUMxQixjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWM7Z0JBQzFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtnQkFDbEMsZUFBZSxFQUFFLFVBQVUsRUFBRSxlQUFlO2FBQzdDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTTs0QkFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUc7NEJBQ2xELFdBQVcsRUFBRSxhQUFhOzRCQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7NEJBQ3RELFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUTs0QkFDL0IsVUFBVSxFQUFFO2dDQUNWLFVBQVUsQ0FBQyxRQUFRO2dDQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQzs2QkFDbkQ7NEJBQ0QsY0FBYyxFQUNaLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWTs0QkFDcEQsb0JBQW9CLEVBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVE7NEJBQ25ELG1CQUFtQixFQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSzs0QkFDekQsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUs7NEJBQzNELGlCQUFpQixFQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSzt5QkFDM0Q7d0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXOzRCQUNsQixDQUFDLENBQUM7Z0NBQ0U7b0NBQ0UsSUFBSSxFQUFFLGVBQWUsQ0FBQyxTQUFTO29DQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxRQUFRLEdBQUcsR0FBRztvQ0FDckQsV0FBVyxFQUFFLFVBQVU7b0NBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUk7b0NBQzFCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0NBQ2pDLG9CQUFvQixFQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRO29DQUNuRCxVQUFVLEVBQUUsSUFBSTtvQ0FDaEIsYUFBYSxFQUFFLEtBQUs7b0NBQ3BCLFNBQVMsRUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRO29DQUNyRCxpQkFBaUIsRUFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQjt3Q0FDL0MsRUFBRSxRQUFRO2lDQUNmO2dDQUNELDZEQUE2RDtnQ0FDN0Qsd0RBQXdEO2dDQUN4RCx5REFBeUQ7Z0NBQ3pELGtFQUFrRTtnQ0FDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO29DQUM5QyxDQUFDLENBQUM7d0NBQ0U7NENBQ0UsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLOzRDQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxXQUFXLEdBQUcsR0FBRzs0Q0FDeEQsV0FBVyxFQUFFLE9BQU87NENBQ3BCLGVBQWUsRUFBRSxJQUFJLENBQUMsbUJBQW1COzRDQUN6QyxLQUFLLEVBQUU7Z0RBQ0wsV0FBVyxFQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLElBQUksSUFBSTtnREFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxJQUFJLElBQUk7NkNBQ2hEOzRDQUNELFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXOzRDQUMxQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDOzRDQUNqQyxTQUFTLEVBQ1Asd0JBQXdCLENBQUMsb0JBQW9COzRDQUMvQyxvQkFBb0IsRUFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUTs0Q0FDbkQsY0FBYyxFQUNaLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsV0FBVzs0Q0FDbkQsU0FBUyxFQUNQLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUztnREFDdkMsRUFBRSxXQUFXOzRDQUNqQixpQkFBaUIsRUFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQjtnREFDL0MsRUFBRSxXQUFXO3lDQUNsQjtxQ0FDRjtvQ0FDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUNQLG1EQUFtRDtnQ0FDbkQsNkRBQTZEO2dDQUM3RCxpRUFBaUU7Z0NBQ2pFLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztvQ0FDaEQsQ0FBQyxDQUFDO3dDQUNFOzRDQUNFLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUzs0Q0FDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHLEdBQUc7NENBQ3BELFdBQVcsRUFBRSxTQUFTOzRDQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksRUFBRTs0Q0FDbkMsNkRBQTZEOzRDQUM3RCxzQ0FBc0M7NENBQ3RDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPOzRDQUN0QyxVQUFVLEVBQUU7Z0RBQ1YsVUFBVSxDQUFDLFFBQVE7Z0RBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQ2xCLHdCQUF3QixDQUFDLGdCQUFnQixDQUMxQzs2Q0FDRjs0Q0FDRCxzREFBc0Q7NENBQ3RELDBEQUEwRDs0Q0FDMUQsU0FBUyxFQUFFLHdCQUF3QixDQUFDLGdCQUFnQjs0Q0FDcEQsb0JBQW9CLEVBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVE7NENBQ25ELGVBQWUsRUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLO2dEQUM1QyxFQUFFLGVBQWU7NENBQ3JCLGNBQWMsRUFDWixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU87NENBQy9DLFFBQVEsRUFBRSxLQUFLOzRDQUNmLGFBQWEsRUFBRSxJQUFJOzRDQUNuQixTQUFTLEVBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTzs0Q0FDcEQsaUJBQWlCLEVBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxpQkFBaUI7Z0RBQy9DLEVBQUUsT0FBTzt5Q0FDZDtxQ0FDRjtvQ0FDSCxDQUFDLENBQUMsRUFBRSxDQUFDOzZCQUNSOzRCQUNILENBQUMsQ0FBQztnQ0FDRTtvQ0FDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7b0NBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxHQUFHO29DQUN0RCxXQUFXLEVBQUUsV0FBVztvQ0FDeEIsVUFBVSxFQUFFO3dDQUNWLFVBQVUsQ0FBQyxRQUFRO3dDQUNuQixVQUFVLENBQUMsT0FBTyxDQUNoQix3QkFBd0IsQ0FBQyxlQUFlLENBQ3pDO3FDQUNGO29DQUNELG9CQUFvQixFQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRO29DQUNuRCxtQkFBbUIsRUFDakIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTzt3Q0FDOUMsRUFBRSxlQUFlO29DQUNyQixTQUFTLEVBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUztvQ0FDdEQsaUJBQWlCLEVBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxpQkFBaUI7d0NBQy9DLEVBQUUsU0FBUztvQ0FDZixjQUFjLEVBQ1osSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxTQUFTO2lDQUNsRDtnQ0FDRDtvQ0FDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7b0NBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFFBQVEsR0FBRyxHQUFHO29DQUNyRCxXQUFXLEVBQUUsVUFBVTtvQ0FDdkIsVUFBVSxFQUFFO3dDQUNWLFVBQVUsQ0FBQyxRQUFRO3dDQUNuQixVQUFVLENBQUMsT0FBTyxDQUNoQix3QkFBd0IsQ0FBQyxlQUFlLENBQ3pDO3FDQUNGO29DQUNELG9CQUFvQixFQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRO29DQUNuRCxtQkFBbUIsRUFDakIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTzt3Q0FDOUMsRUFBRSxlQUFlO29DQUNyQixTQUFTLEVBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtvQ0FDckQsaUJBQWlCLEVBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxpQkFBaUI7d0NBQy9DLEVBQUUsUUFBUTtvQ0FDZCxjQUFjLEVBQ1osSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxRQUFRO2lDQUNqRDtnQ0FDRCwyREFBMkQ7Z0NBQzNELDJEQUEyRDtnQ0FDM0QsNkJBQTZCO2dDQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7b0NBQzlDLENBQUMsQ0FBQzt3Q0FDRTs0Q0FDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7NENBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFdBQVcsR0FBRyxHQUFHOzRDQUN4RCxXQUFXLEVBQUUsT0FBTzs0Q0FDcEIsZUFBZSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7NENBQ3pDLEtBQUssRUFBRTtnREFDTCxXQUFXLEVBQUUsSUFBSTtnREFDakIsV0FBVyxFQUFFLElBQUk7NkNBQ2xCOzRDQUNELFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7NENBQ2pDLFNBQVMsRUFDUCx3QkFBd0IsQ0FBQyxvQkFBb0I7NENBQy9DLG9CQUFvQixFQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFROzRDQUNuRCxjQUFjLEVBQ1osSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxXQUFXOzRDQUNuRCxTQUFTLEVBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxTQUFTO2dEQUN2QyxFQUFFLFdBQVc7NENBQ2pCLGlCQUFpQixFQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCO2dEQUMvQyxFQUFFLFdBQVc7eUNBQ2xCO3FDQUNGO29DQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ1AsZ0VBQWdFO2dDQUNoRSxzQkFBc0I7Z0NBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztvQ0FDaEQsQ0FBQyxDQUFDO3dDQUNFOzRDQUNFLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUzs0Q0FDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHLEdBQUc7NENBQ3BELFdBQVcsRUFBRSxTQUFTOzRDQUN0QixVQUFVLEVBQUU7Z0RBQ1YsVUFBVSxDQUFDLFFBQVE7Z0RBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQ2xCLHdCQUF3QixDQUFDLGdCQUFnQixDQUMxQzs2Q0FDRjs0Q0FDRCxzREFBc0Q7NENBQ3RELDBEQUEwRDs0Q0FDMUQsU0FBUyxFQUFFLHdCQUF3QixDQUFDLGdCQUFnQjs0Q0FDcEQsb0JBQW9CLEVBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVE7NENBQ25ELGVBQWUsRUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLO2dEQUM1QyxFQUFFLGVBQWU7NENBQ3JCLGNBQWMsRUFDWixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU87NENBQy9DLHdEQUF3RDs0Q0FDeEQsNkRBQTZEOzRDQUM3RCw0REFBNEQ7NENBQzVELHdEQUF3RDs0Q0FDeEQsUUFBUSxFQUFFLEtBQUs7NENBQ2YsYUFBYSxFQUFFLElBQUk7NENBQ25CLFNBQVMsRUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPOzRDQUNwRCxpQkFBaUIsRUFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQjtnREFDL0MsRUFBRSxPQUFPO3lDQUNkO3FDQUNGO29DQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7NkJBQ1IsQ0FBQzt3QkFDTjs0QkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLFFBQVE7NEJBQzlCLEtBQUssRUFDSCxJQUFJLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxVQUFVO2dDQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxJQUFJO2dDQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsR0FBRzs0QkFDaEQsV0FBVyxFQUFFLE9BQU87NEJBQ3BCLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUzs0QkFDL0Isb0JBQW9CLEVBQUUsQ0FBQzs0QkFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUk7NEJBQzFELGlCQUFpQixFQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsSUFBSTs0QkFDekQsY0FBYyxFQUNaLElBQUksQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVU7Z0NBQ2pELENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVztvQ0FDbEMsRUFBRSx1QkFBdUI7Z0NBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLElBQUk7NEJBQ2hELG9CQUFvQixFQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFROzRCQUNuRCxVQUFVLEVBQ1IsSUFBSSxDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsVUFBVTtnQ0FDakQsQ0FBQyxDQUFDLEVBQUU7Z0NBQ0osQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzt5QkFDNUI7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxzQkFBc0IsQ0FBQywwQkFJdEI7UUFDQyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDeEIsSUFBSSxDQUFDLHlCQUF5QixDQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN0RDtnQkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGNBQWMsR0FBRyxHQUFHO2dCQUMzRCxXQUFXLEVBQUUsZ0JBQWdCO2dCQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FDL0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNqQixjQUFjLENBQUMsRUFBRTtvQkFDakIsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FDakQ7Z0JBQ0QsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsY0FBYyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsY0FBYztnQkFDcEUsb0JBQW9CLEVBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVE7Z0JBQ25ELFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjO2dCQUNwRSxpQkFBaUIsRUFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGNBQWM7YUFDcEUsQ0FDRixDQUFDO1FBQ0osSUFBSSxDQUFDLHlCQUF5QixDQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN0RDtZQUNFLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTTtZQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxVQUFVLEdBQUcsR0FBRztZQUN2RCxXQUFXLEVBQUUsWUFBWTtZQUN6QixlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUMzQixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2IsVUFBVSxDQUFDLEVBQUUsS0FBSywwQkFBMEIsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUMvRDtZQUNELFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDakMsV0FBVyxFQUFFLEVBQUU7WUFDZixjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVO1lBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVE7WUFDdkUsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVU7WUFDaEUsaUJBQWlCLEVBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxVQUFVO1NBQ2hFLENBQ0YsQ0FBQztRQUNGLGtFQUFrRTtRQUNsRSwyRUFBMkU7UUFDM0UseUVBQXlFO1FBQ3pFLDJFQUEyRTtRQUMzRSxxRUFBcUU7UUFDckUsOEVBQThFO1FBQzlFLDhFQUE4RTtJQUNoRixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCx5QkFBeUIsQ0FDdkIsYUFBcUIsRUFDckIsV0FBd0I7UUFFeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNoRCxhQUFhLEVBQ2IsQ0FBQyxFQUNELFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNsRDtZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxJQUFpQjtRQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1Qix5RUFBeUU7UUFDekUsaUVBQWlFO1FBQ2pFLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLE9BQU87U0FDUjtRQUNELElBQ0UsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxLQUFLLFVBQVUsRUFBRSxPQUFPO1lBQzdELElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxLQUFLLEVBQ3BDO1lBQ0EsSUFBSSxDQUFDLFlBQVk7aUJBQ2QsZUFBZSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDWixJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUU7d0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0gsQ0FBQztnQkFDRCw4REFBOEQ7Z0JBQzlELEtBQUssRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLElBQWlCO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILDhCQUE4QjtRQUM1QixJQUNFLElBQUksQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVU7WUFDbkQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDcEQ7WUFDQSxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNqQyxpQkFBaUIsRUFDakIsSUFBSSxXQUFXLENBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ25FO1lBQ0UsUUFBUSxFQUFFLE1BQU07WUFDaEIsVUFBVSxFQUFFO2dCQUNWLGdDQUFnQyxFQUFFO2dCQUNsQyxhQUFhLENBQ1gsVUFBVSxDQUFDLFNBQVMsQ0FDbEIsd0JBQXdCLENBQUMsNEJBQTRCLENBQ3RELENBQ0Y7Z0JBQ0QsYUFBYSxDQUNYLFVBQVUsQ0FBQyxTQUFTLENBQ2xCLHdCQUF3QixDQUFDLDRCQUE0QixDQUN0RCxDQUNGO2dCQUNELGFBQWEsQ0FDWCxVQUFVLENBQUMsT0FBTyxDQUNoQix3QkFBd0IsQ0FBQyx3QkFBd0IsQ0FDbEQsQ0FDRjthQUNGO1NBQ0YsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLEtBQXFCO1FBQ3ZDLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFZLENBQUMsQ0FBQztTQUNsRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQ3BELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FDOUIsQ0FBQztTQUNIO1FBQ0QsMEVBQTBFO1FBQzFFLCtDQUErQztRQUMvQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQjtZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFDRDs7O09BR0c7SUFDSCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFlBQVk7YUFDZCxrQkFBa0IsRUFBRTthQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDakIsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7d0JBQ3pCLEVBQUUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO3dCQUMzQixJQUFJLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtxQkFDaEMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FDM0IsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixJQUFJLENBQUMsZUFBZSxDQUNyQixDQUFDO1lBQ0osQ0FBQztZQUNELDhEQUE4RDtZQUM5RCxLQUFLLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNEOzs7T0FHRztJQUNILGNBQWM7UUFDWixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztnQkFDckIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsd0JBQXdCLENBQzNCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixPQUFPLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixNQUFNLGlCQUFpQixHQUErQjtZQUNwRCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1NBQzlCLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWTthQUNkLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDO2FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7d0JBQ3ZCLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSzt3QkFDaEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPO3FCQUNyQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsc0VBQXNFO2dCQUN0RSx1RUFBdUU7Z0JBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsOERBQThEO1lBQzlELEtBQUssRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0gsd0JBQXdCLENBQ3RCLGVBQXVCLEVBQ3ZCLHdCQUFnQyxFQUNoQyxPQUF1QjtRQUV2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNoQyxJQUNFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXO2dCQUNqRCxlQUFlO2dCQUNqQixTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLHdCQUF3QixDQUFDO2dCQUUxRCxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsOERBQThEO0lBQzlELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUN0RCxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7Z0JBQzVCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsWUFBWSxFQUNaLFNBQVMsQ0FBQyxLQUFLLEVBQ2YsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FDekIsQ0FBQzthQUNIO1NBQ0Y7YUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7WUFDdEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsSUFBaUI7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHVCQUF1QjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRTtZQUN2QyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDbkQsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsS0FBSyxpQkFBaUIsQ0FBQzthQUMzRCxLQUFLLENBQ0osQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTTtZQUNsRCxVQUFVLEVBQUUsS0FBSyxDQUNwQixDQUFDO0lBQ04sQ0FBQztJQUNEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILHdCQUF3QjtRQUN0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUN2RCxJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQ3ZCLENBQUM7UUFFRiwwRUFBMEU7UUFDMUUseUVBQXlFO1FBQ3pFLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsSUFDRSxJQUFJLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxVQUFVO1lBQ25ELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxNQUFNO2dCQUN0RCxVQUFVLEVBQUUsT0FBTztZQUNyQixJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQ3RDO1lBQ0EsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUNwQjtRQUVELDZFQUE2RTtRQUM3RSxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsVUFBVSxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUVELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CO0lBQ2xCLDhEQUE4RDtJQUM5RCxRQUFhO1FBRWIsSUFBSSxPQUFvRSxDQUFDO1FBQ3pFLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsVUFBVSxFQUFFO1lBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNqRSxPQUFPO29CQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBWTtvQkFDMUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJO2lCQUNyQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUc7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSzt3QkFDdEIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXO29CQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsT0FBaUI7b0JBQy9ELGFBQWEsRUFBRSxnQkFBZ0I7aUJBQ2hDO2FBQ0YsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLGlCQUFpQjtnQkFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUc7b0JBQy9CLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxjQUFjO3dCQUN4QyxDQUFDLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFO3dCQUM5QixDQUFDLENBQUMsRUFBRTtpQkFDUCxDQUFDO1lBQ0osSUFDRSxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBRTFELE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3pEOztZQUNDLE9BQU8sR0FBRztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLO3dCQUN0QixDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVc7b0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFpQjtpQkFDaEU7YUFDRixDQUFDO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1NBQ2hEO2FBQU07WUFDTCxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdkQ7UUFDRCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCw2QkFBNkIsQ0FDM0IsT0FBb0U7SUFDcEUsOERBQThEO0lBQzlELFFBQWE7UUFFYixrRUFBa0U7UUFDbEUsTUFBTSxXQUFXLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQzFDLElBQUksZ0JBQWdCO2dCQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7U0FDM0U7UUFDRCxJQUFJLE9BQU87WUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyx3QkFBd0IsQ0FDM0IsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUNoQyxFQUFFLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0JBQWdCLENBQ2QsT0FBMEIsRUFDMUIsU0FBb0IsRUFDcEIsYUFBdUI7UUFFdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7WUFDN0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsYUFBYSxFQUFFLGFBQWEsSUFBSSxLQUFLO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsV0FBaUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQztRQUN6QyxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUI7WUFDdEIsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDeEIsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsU0FBUztnQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzsrR0E3bENVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHNKQUZ0QixDQUFDLGFBQWEsQ0FBQyxnRkE4RGYsb0JBQW9CLGdEQ2xJakMsdzlFQXNEQSwrMmJETUksWUFBWSxtSUFDWixvQkFBb0IsNG9DQUNwQixlQUFlLCtCQUNmLHVCQUF1Qjs7NEZBT2Qsc0JBQXNCO2tCQWRsQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsdUJBQXVCO3FCQUN4QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsYUFBYSxDQUFDO2lNQThETyxvQkFBb0I7c0JBQXBELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNyQixrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHtcclxuICBGb3JtR3JpZCxcclxuICBGb3JtQ29udHJvbFR5cGUsXHJcbiAgQWxpZ25UeXBlLFxyXG4gIFNlYXJjaFR5cGUsXHJcbiAgQ2hlY2tib3hPcHRpb24sXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG4gIEZvcm1Nb2RlbCxcclxuICBGaWVsZENvbmZpZyxcclxuICBBdXRvQ29tcGxldGVPcHRpb24sXHJcbiAgRHluYW1pY0Zvcm1Db21wb25lbnQsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHtcclxuICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMsXHJcbiAgcmVwcmVzZW50aW5nT3JnUmVxdWlyZWRWYWxpZGF0b3IsXHJcbiAgc2tpcFdoZW5BcnJheSxcclxufSBmcm9tICcuLi8uLi9hc3NldHMvZm9ybS12YWxpZGF0aW9ucyc7XHJcbmltcG9ydCB7IEZvcm1TdGF0dXMsIEFsZXJ0VHlwZSB9IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkLFxyXG4gIEFkZE9yRWRpdFVzZXJQYXlsb2FkLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9hZGQtb3ItZWRpdC11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvb3JnYW5pemF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgT3JnTXVsdGlTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9vcmctbXVsdGktc2VsZWN0L29yZy1tdWx0aS1zZWxlY3QuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgdmlldyBhbmQgZnVuY3Rpb25hbGl0aWVzIHRvIGFkZCBncm91cCB1c2VycyB0byByb3N0ZXIuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWFkZC11c2VyLXJvc3RlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBEeW5hbWljRm9ybUNvbXBvbmVudCxcclxuICAgIE1hdERpYWxvZ01vZHVsZSxcclxuICAgIE9yZ011bHRpU2VsZWN0Q29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC11c2VyLXJvc3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtBbGVydHNTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZFVzZXJSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBzY3JlZW5UZXh0cztcclxuICBhZGRVc2VyUm9zdGVyVGV4dHMgPSB0aGlzLmNvbnN0YW50cz8uYWRkVXNlclJvc3RlcjtcclxuICBsZWZ0QnV0dG9uTGFiZWwgPSB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmxlZnRCdXR0b25MYWJlbDtcclxuICByaWdodEJ1dHRvbkxhYmVsID0gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5yaWdodEJ1dHRvbkxhYmVsO1xyXG4gIGlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICBjb2xXaWR0aDogRm9ybUdyaWQgPSB7IHhzOiAxMiwgeGw6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyIH07XHJcbiAgc2VhcmNoVXNlckZvcm1Hcm91cCE6IEZvcm1Nb2RlbDtcclxuICBhZGRVc2VyRm9ybUdyb3VwITogRm9ybU1vZGVsO1xyXG4gIGFjdGlvbkJ1dHRvbkFsaWduID0gQWxpZ25UeXBlLkxFRlQ7XHJcbiAgYWRkVXNlckZvcm1Hcm91cFJlZiE6IEZvcm1Hcm91cDtcclxuICBpc1NlYXJjaFVzZXJGb3JtID0gdHJ1ZTtcclxuICB1c2VyUm9sZXM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBzZWxlY3RlZFVzZXJSb2xlczogc3RyaW5nW10gPSBbXTtcclxuICB1c2VySW5mbzogVXNlckluZm8gPSB7XHJcbiAgICBlbWFpbDogJycsXHJcbiAgICBuYW1lOiAnJyxcclxuICAgIHVzZXJJZDogJycsXHJcbiAgfTtcclxuICBpc0FkZFVzZXJGb3JtRW1haWxTZWFyY2ggPSBmYWxzZTtcclxuICBjbGFzc2lmaWNhdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgbWVtYmVyVHlwZXM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgb3JnYW5pemF0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBoYXNDbGFzc2lmaWNhdGlvbiA9IGZhbHNlO1xyXG4gIGdyb3VwUm9zdGVyVHlwZSE6IEdyb3VwUm9zdGVyVHlwZTtcclxuICBpc1VzZXJFeGlzdCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkT3JnYW5pemF0aW9uczogQXV0b0NvbXBsZXRlT3B0aW9uW10gPSBbXTtcclxuICBjb3VudHJ5Q2FsbGluZ0NvZGVzOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIC8vIFRlbmFudC1jb25maWd1cmVkIG9wdGlvbmFsIHByb2ZpbGUgZmllbGRzIChlLmcuICdwaG9uZScsICdhZGRyZXNzJykgdG8gc2hvdyBvbiB0aGUgYWRkLXVzZXIgZm9ybS5cclxuICByZXF1aXJlZFByb2ZpbGVGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgdGltZU91dElkITogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgc2VsZWN0ZWQgZ3JvdXAncyByb3N0ZXIgdHlwZSBpcyBJTkRJVklEVUFMICh0aGUgb25seSByb3N0ZXJcclxuICAgKiB0eXBlIHRoYXQgc2hvd3MgdGhlIFJlcHJlc2VudGluZyBPcmdhbml6YXRpb24gZmllbGQpLlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0IGlzSW5kaXZpZHVhbFJvc3RlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnVlIHdoZW4gdGhlIG9yZyBmaWVsZCBob2xkcyBhbiB1bmNvbW1pdHRlZCwgaW52YWxpZCBmcmVlLXRleHQgdG9rZW4uIFVzZWRcclxuICAgKiB0byBrZWVwIFNhdmUgZGlzYWJsZWQgZXZlbiB3aGVuIGEgdmFsaWQgY2hpcCBhbHJlYWR5IGV4aXN0cy5cclxuICAgKi9cclxuICBoYXNJbnZhbGlkT3JnRnJlZVRleHQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgb3JnIGZpZWxkJ3MgaW52YWxpZC1mcmVlLXRleHQgc3RhdGUgYW5kIHJlY29tcHV0ZXMgU2F2ZS1idXR0b25cclxuICAgKiBzdGF0ZSBzbyB0aGUgZm9ybSBjYW5ub3QgYmUgc3VibWl0dGVkIHdoaWxlIGFuIGludmFsaWQgdG9rZW4gcmVtYWlucy5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzSW52YWxpZCAtd2hldGhlciBhbiB1bmNvbW1pdHRlZCBpbnZhbGlkIHRva2VuIGlzIHByZXNlbnQuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbk9yZ0ludmFsaWRGcmVlVGV4dChpc0ludmFsaWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFzSW52YWxpZE9yZ0ZyZWVUZXh0ID0gaXNJbnZhbGlkO1xyXG4gICAgdGhpcy51cGRhdGVTdWJtaXRCdXR0b25TdGF0dXMoKTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZChEeW5hbWljRm9ybUNvbXBvbmVudCkgZHluYW1pY0Zvcm1Db21wb25lbnQhOiBEeW5hbWljRm9ybUNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgc3VibWl0Rm9ybVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCBuby11bnVzZWQtdmFyc1xyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdXNlciByb2xlcyBhbmQgc2VhcmNoVXNlckZvcm1Hcm91cC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VyUm9sZXMgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRHcm91cFR5cGVVc2VyUm9sZXMoKTtcclxuICAgIHRoaXMuY291bnRyeUNhbGxpbmdDb2RlcyA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldENvdW50cnlDYWxsaW5nQ29kZXMoKTtcclxuICAgIHRoaXMuZ2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKCk7XHJcbiAgICBjb25zdCBncm91cFR5cGUgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKTtcclxuICAgIHRoaXMuaGFzQ2xhc3NpZmljYXRpb24gPSBncm91cFR5cGU/Lmhhc0NsYXNzaWZpY2F0aW9uID8/IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPSBncm91cFR5cGU/LnJvc3RlclR5cGUgYXMgR3JvdXBSb3N0ZXJUeXBlO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwUm9zdGVyVHlwZSlcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2xhc3NpZmljYXRpb24pIHRoaXMuZ2V0Q2xhc3NpZmljYXRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3JlYXRlU2VhcmNoVXNlckZvcm1Hcm91cCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuaXNBbGVydENsb3NlZFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlzQ2xvc2VkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzQ2xvc2VkICYmICF0aGlzLmlzU2VhcmNoVXNlckZvcm0pIHtcclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBzZWFyY2ggdXNlciBmb3JtIGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVTZWFyY2hVc2VyRm9ybUdyb3VwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hVc2VyRm9ybUdyb3VwID0ge1xyXG4gICAgICBmb3JtR3JvdXA6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZWdlbmQ6ICcnLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5lbWFpbCArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2VtYWlsQWRkcmVzcycsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIGlzRW1haWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmVtYWlsQWRkcmVzcyxcclxuICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuPy5lbWFpbCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5lbWFpbCksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5lbWFpbCxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmVtYWlsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBmb3JtIHZhbGlkaXR5IGFuZCBzZWFyY2hlcyB0aGUgdXNlciBieSBlbnRlcmVkIGVtYWlsLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU2VhcmNoVXNlckZvcm1TdWJtaXQoZm9ybTogRm9ybUdyb3VwW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoID0gZmFsc2U7XHJcbiAgICBpZiAoZm9ybVswXT8uc3RhdHVzID09PSBGb3JtU3RhdHVzLlZBTElEKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVXNlckJ5RW1haWwoZm9ybVswXS5nZXRSYXdWYWx1ZSgpPy5lbWFpbEFkZHJlc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VhcmNoZXMgdGhlIHVzZXIgYnkgZW50ZXJlZCBlbWFpbCBhbmQgZ2V0cyB0aGUgdXNlciBkZXRhaWxzIHdoZW4gdGhlIGVtYWlsIGlkIGlzIGZvdW5kLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VhcmNoVXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldFVzZXJCeUVtYWlsKGVtYWlsKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChyZXM/LnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJbmZvID0gcmVzPy5ib2R5O1xyXG4gICAgICAgICAgICB0aGlzLmlzVXNlckV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlckluZm8/LnVzZXJJZCkgdGhpcy52YWxpZGF0ZVVzZXJFeGlzdGVuY2UoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLmluaXRpYWxpemVBZGRVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMjAwMScpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hVc2VyRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uTGFiZWwgPVxyXG4gICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uc2F2ZUJ1dHRvbkxhYmVsO1xyXG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoIHx8XHJcbiAgICAgICAgICAgICAgIShcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZi5jb250YWlucygnZmlyc3ROYW1lJykgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZi5jb250YWlucygnbGFzdE5hbWUnKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VySW5mby5lbWFpbCA9IGVtYWlsO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cFZhbHVlcyhcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8udmFsdWUpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LmdldCgnZmlyc3ROYW1lJyk/LnNldFZhbHVlKCcnKTtcclxuICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LmdldCgnbGFzdE5hbWUnKT8uc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgICAgICB0aGlzLmNvbnN0YW50cz8uZXJyb3JzPy5bJzIwMDEnXSxcclxuICAgICAgICAgICAgICBBbGVydFR5cGUuRVJST1JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSB1c2VyIGlzIGV4aXN0cyBpbiB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHRoZW4gY3JlYXRlcyBhZGQgdXNlciBmb3JtIHdoZW4gdGhlIHVzZXIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdmFsaWRhdGVVc2VyRXhpc3RlbmNlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VySW5mbz8udXNlcklkIGFzIHN0cmluZyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBVc2VyRGV0YWlscyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgID8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LlsnMTAyMiddLFxyXG4gICAgICAgICAgICBBbGVydFR5cGUuRVJST1JcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2Rlcz8uaW5jbHVkZXMoJzEwMjYnKSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVBZGRVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBmb3JtIGZpZWxkcyByZXF1aXJlZCBmb3IgYWRkIG5ldyB1c2VyIHRvIHRoZSByb3N0ZXIgYmFzZWQgb24gdGhlIHNlYXJjaGVkIGVtYWlsLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUFkZFVzZXJGb3JtR3JvdXAoKSB7XHJcbiAgICB0aGlzLmlzU2VhcmNoVXNlckZvcm0gPSBmYWxzZTtcclxuICAgIHRoaXMucmlnaHRCdXR0b25MYWJlbCA9IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uc2F2ZUJ1dHRvbkxhYmVsO1xyXG4gICAgY29uc3QgYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXMgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGlmICghdGhpcy5pc0FkZFVzZXJGb3JtRW1haWxTZWFyY2gpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlcyA9IFtdO1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNyZWF0ZUFkZFVzZXJGb3JtR3JvdXAoKTtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwZGF0ZUFkZFVzZXJGb3JtR3JvdXBWYWx1ZXMoYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXMpO1xyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWZcclxuICAgICAgICA/LmdldCgnZW1haWxTZWFyY2gnKVxyXG4gICAgICAgID8uc2V0VmFsdWUodGhpcy51c2VySW5mbz8uZW1haWwpO1xyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LmdldCgnZnVsbE5hbWUnKT8uc2V0VmFsdWUodGhpcy51c2VySW5mbz8ubmFtZSk7XHJcbiAgICAgIGlmICh0aGlzLnRpbWVPdXRJZCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dElkKTtcclxuICAgICAgdGhpcy50aW1lT3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXR1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYWRkIHVzZXIgZm9ybSBncm91cCBhbmQgdXBkYXRlcyBpdCB3aXRoIHByZXYgZm9ybSB2YWx1ZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ2lmaWVkQWRkVXNlckZvcm1QcmV2VmFsdWVzXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVBZGRVc2VyRm9ybUdyb3VwVmFsdWVzKGFkZFVzZXJGb3JtVmFsdWVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlQWRkVXNlckZvcm1Hcm91cCh0aGlzLnVzZXJJbmZvPy5lbWFpbCk7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBhZGRVc2VyRm9ybVZhbHVlcyA/IEpTT04ucGFyc2UoYWRkVXNlckZvcm1WYWx1ZXMpIDogJyc7XHJcbiAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cCh7XHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IGZvcm1WYWx1ZXM/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIG1lbWJlclR5cGU6IGZvcm1WYWx1ZXM/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgcmVwcmVzZW50aW5nT3JnOiBmb3JtVmFsdWVzPy5yZXByZXNlbnRpbmdPcmcsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgYWRkIHVzZXIgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2VtYWlsXVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgY3JlYXRlQWRkVXNlckZvcm1Hcm91cChlbWFpbD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwID0ge1xyXG4gICAgICBmb3JtR3JvdXA6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZWdlbmQ6ICcnLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUFSQ0gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZW1haWwgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdlbWFpbFNlYXJjaCcsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaXNVc2VyRXhpc3QgPyB0aGlzLnVzZXJJbmZvPy5lbWFpbCA6IGVtYWlsLFxyXG4gICAgICAgICAgICAgIHNlYXJjaFR5cGU6IFNlYXJjaFR5cGUuT05fQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZW1haWwpLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmVtYWlsQWRkcmVzcyxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVybj8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5lbWFpbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4uKHRoaXMuaXNVc2VyRXhpc3RcclxuICAgICAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5URVhUX0FSRUEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZnVsbE5hbWUgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdmdWxsTmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudXNlckluZm8/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBpc1JlYWRvbmx5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFNdWx0aWxpbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLy8gUGhvbmUgKGNvbWJpbmVkIGNvdW50cnkgY29kZSArIG51bWJlciBpbiBvbmUgZmllbGQpLCBzaG93blxyXG4gICAgICAgICAgICAgICAgICAvLyBvbmx5IHdoZW4gdGhlIHRlbmFudCdzIHJlcXVpcmVkLXByb2ZpbGUtZmllbGRzIGNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0cyBpdC4gUHJlZmlsbGVkIGZyb20gdGhlIHJlc3BvbnNlOyB3aGVuIGEgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgLy8gZXhpc3RzIGl0IHN0YXJ0cyByZWFkLW9ubHkgd2l0aCBhIHBlbmNpbCB0b2dnbGUsIGVsc2UgZWRpdGFibGUuXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLnJlcXVpcmVkUHJvZmlsZUZpZWxkcy5pbmNsdWRlcygncGhvbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlBIT05FLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnBob25lTnVtYmVyICsgJyonLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAncGhvbmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5jb3VudHJ5Q2FsbGluZ0NvZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VySW5mbz8ucGhvbmVDb3VudHJ5Q29kZSA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVOdW1iZXI6IHRoaXMudXNlckluZm8/LnBob25lTnVtYmVyID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRUb2dnbGU6ICEhdGhpcy51c2VySW5mbz8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5waG9uZU51bWJlck1heExlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LnBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgIC8vIEFkZHJlc3MgKGVkaXRhYmxlKSwgc2hvd24gb25seSB3aGVuIHRoZSB0ZW5hbnQnc1xyXG4gICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZC1wcm9maWxlLWZpZWxkcyBjb25maWcgcmVxdWVzdHMgaXQuIFByZWZpbGxlZCB3aGVuXHJcbiAgICAgICAgICAgICAgICAgIC8vIHByZXNlbnQsIGVtcHR5IHdoZW4gbnVsbC4gRml4ZWQtc2l6ZSBib3ggKHNlZSBjb21wb25lbnQgU0NTUykuXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLnJlcXVpcmVkUHJvZmlsZUZpZWxkcy5pbmNsdWRlcygnYWRkcmVzcycpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFkZHJlc3MgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdhZGRyZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51c2VySW5mbz8uYWRkcmVzcyA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGEgdmFsdWUgZXhpc3RzLCBzdGFydCByZWFkLW9ubHkgd2l0aCBhIHBlbmNpbCB0b2dnbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBudWxsLCBzdGFydCBkaXJlY3RseSBlZGl0YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRUb2dnbGU6ICEhdGhpcy51c2VySW5mbz8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5hZGRyZXNzTWF4TGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbGl2ZSBjaGFyYWN0ZXIgY291bnRlciDigJQgZm9sbG93IHRoZSBSZXByZXNlbnRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcmdhbml6YXRpb24gcGF0dGVybjogaGFyZCBtYXhMZW5ndGggKyBlcnJvciBvbiBicmVhY2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuYWRkcmVzc01heExlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFkZHJlc3NNYXhDaGFycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYU11bHRpbGluZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgIDogW1xyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLklOUFVULFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmZpcnN0TmFtZSArICcqJyxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2ZpcnN0TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmZpcnN0T3JMYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZmlyc3RPckxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuSU5QVVQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ubGFzdE5hbWUgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdsYXN0TmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmZpcnN0T3JMYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZmlyc3RPckxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5sYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5sYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIC8vIFBob25lIChjb21iaW5lZCBjb3VudHJ5IGNvZGUgKyBudW1iZXIpLiBOZXcgdXNlcjogYWx3YXlzXHJcbiAgICAgICAgICAgICAgICAgIC8vIGVkaXRhYmxlLiBTaG93biBvbmx5IHdoZW4gdGhlIHRlbmFudCdzIHJlcXVpcmVkLXByb2ZpbGUtXHJcbiAgICAgICAgICAgICAgICAgIC8vIGZpZWxkcyBjb25maWcgcmVxdWVzdHMgaXQuXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLnJlcXVpcmVkUHJvZmlsZUZpZWxkcy5pbmNsdWRlcygncGhvbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlBIT05FLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnBob25lTnVtYmVyICsgJyonLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAncGhvbmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5jb3VudHJ5Q2FsbGluZ0NvZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5waG9uZU51bWJlck1heExlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LnBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgICAgICAgIC8vIEFkZHJlc3MsIHNob3duIG9ubHkgd2hlbiB0aGUgdGVuYW50J3MgcmVxdWlyZWQtcHJvZmlsZS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgLy8gY29uZmlnIHJlcXVlc3RzIGl0LlxyXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5yZXF1aXJlZFByb2ZpbGVGaWVsZHMuaW5jbHVkZXMoJ2FkZHJlc3MnKVxyXG4gICAgICAgICAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlRFWFRfQVJFQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hZGRyZXNzICsgJyonLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnYWRkcmVzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuYWRkcmVzc01heExlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGxpdmUgY2hhcmFjdGVyIGNvdW50ZXIg4oCUIGZvbGxvdyB0aGUgUmVwcmVzZW50aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3JnYW5pemF0aW9uIHBhdHRlcm46IGhhcmQgbWF4TGVuZ3RoICsgZXJyb3Igb24gYnJlYWNoLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aDogR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmFkZHJlc3NNYXhMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZGRyZXNzTWF4Q2hhcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgYm94IGEgZml4ZWQgc2l6ZSAobm8gZHJhZy1yZXNpemUpLiBUaGUgZml4ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWlnaHQgd2l0aCBpbnRlcm5hbCBzY3JvbGwgaXMgZW5mb3JjZWQgdmlhIGNvbXBvbmVudCBTQ1NTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGZpZWxkIGRvZXNuJ3QgZ3JvdyBhcyB0aGUgdXNlciB0eXBlcywgbWF0Y2hpbmcgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiBmaWVsZCdzIGZpeGVkLWJveCBiZWhhdmlvci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYU11bHRpbGluZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUxcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJvbGVcclxuICAgICAgICAgICAgICAgICAgOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJvbGUgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdyb2xlcycsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLnVzZXJSb2xlcyxcclxuICAgICAgICAgICAgICBtaW5TZWxlY3Rpb25SZXF1aXJlZDogMSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5yb2xlLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8ucm9sZSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5yb2xlRm9ySW5kaXZpZHVhbFJvc3RlclxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucm9sZSxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IFtdXHJcbiAgICAgICAgICAgICAgICAgIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgY2xhc3NpZmljYXRpb24sIE1lbWJlciBUeXBlIGFuZCBSZXByZXNlbnRpbmcgT3JnYW5pemF0aW9uIGZvcm0gY29udHJvbHMgd2hpbGUgYWRkaW5nIG5ldyB1c2VyIHRvIGFuIGluZGl2aWR1YWwgZ3JvdXAgcm9zdGVyLlxyXG4gICAqIEBwYXJhbSB7e1xyXG4gICAqICAgICBjbGFzc2lmaWNhdGlvbjogU2VsZWN0T3B0aW9uO1xyXG4gICAqICAgICBtZW1iZXJUeXBlOiBTZWxlY3RPcHRpb247XHJcbiAgICogICAgIHJlcHJlc2VudGluZ09yZzogU2VsZWN0T3B0aW9uO1xyXG4gICAqICAgfX0gW2FkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzXVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlQWRkVXNlckZvcm1Hcm91cChhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcz86IHtcclxuICAgIGNsYXNzaWZpY2F0aW9uOiBTZWxlY3RPcHRpb247XHJcbiAgICBtZW1iZXJUeXBlOiBTZWxlY3RPcHRpb247XHJcbiAgICByZXByZXNlbnRpbmdPcmc6IFNlbGVjdE9wdGlvbjtcclxuICB9KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbilcclxuICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUNvbnRyb2xzKFxyXG4gICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cC5mb3JtR3JvdXBbMF0uY29udHJvbHMubGVuZ3RoIC0gMSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uY2xhc3NpZmljYXRpb24gKyAnKicsXHJcbiAgICAgICAgICBjb250cm9sTmFtZTogJ2NsYXNzaWZpY2F0aW9uJyxcclxuICAgICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5jbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5jbGFzc2lmaWNhdGlvbnM/LmZpbmQoXHJcbiAgICAgICAgICAgIChjbGFzc2lmaWNhdGlvbikgPT5cclxuICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbi5pZCA9PT1cclxuICAgICAgICAgICAgICBhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcz8uY2xhc3NpZmljYXRpb24/LmlkXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Db250cm9scyhcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5sZW5ndGggLSAxLFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlNFTEVDVCxcclxuICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5tZW1iZXJUeXBlICsgJyonLFxyXG4gICAgICAgIGNvbnRyb2xOYW1lOiAnbWVtYmVyVHlwZScsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLm1lbWJlclR5cGVzLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLm1lbWJlclR5cGVzPy5maW5kKFxyXG4gICAgICAgICAgKG1lbWJlclR5cGUpID0+XHJcbiAgICAgICAgICAgIG1lbWJlclR5cGUuaWQgPT09IGFkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzPy5tZW1iZXJUeXBlPy5pZFxyXG4gICAgICAgICksXHJcbiAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5tZW1iZXJUeXBlLFxyXG4gICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5tZW1iZXJUeXBlLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgLy8gVGhlIFwiUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvblwiIGZpZWxkIGlzIHJlbmRlcmVkIGJ5IHRoZSBjdXN0b21cclxuICAgIC8vIE9yZ011bHRpU2VsZWN0Q29tcG9uZW50IGluIHRoZSB0ZW1wbGF0ZSAobm90IGJ5IHRoZSBkeW5hbWljIGZvcm0pLCBzbyB3ZVxyXG4gICAgLy8gbm8gbG9uZ2VyIGFkZCBhIE1VTFRJX1NFTEVDVF9BVVRPX0NPTVBMRVRFIGNvbnRyb2wgdG8gdGhlIGR5bmFtaWMtZm9ybVxyXG4gICAgLy8gY29uZmlnIGhlcmUuIFRoZSByZWFjdGl2ZSBgcmVwcmVzZW50aW5nT3JnYCBjb250cm9sIGlzIHJlZ2lzdGVyZWQgb24gdGhlXHJcbiAgICAvLyBjYXB0dXJlZCBmb3JtIGdyb3VwIHJlZiBpbiByZWdpc3RlclJlcHJlc2VudGluZ09yZ0NvbnRyb2woKSBzbyBhbGxcclxuICAgIC8vIGV4aXN0aW5nIHN1Ym1pdC9TYXZlLWJ1dHRvbiBsb2dpYyAod2hpY2ggcmVhZHMgZm9ybS5nZXQoJ3JlcHJlc2VudGluZ09yZycpKVxyXG4gICAgLy8ga2VlcHMgd29ya2luZyB1bmNoYW5nZWQuIEl0cyB2YWx1ZSBzdGF5cyBpbiBzeW5jIHZpYSBzZWxlY3RlZE9yZ2FuaXphdGlvbnMuXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGFkZCB1c2VyIGZvcm0gZ3JvdXAgY29udHJvbHMgYnkgYWRkaW5nIGZpZWxkQ29uZmlnIGF0IHJlcXVpcmVkIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHtGaWVsZENvbmZpZ30gZmllbGRDb25maWdcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUFkZFVzZXJGb3JtQ29udHJvbHMoXHJcbiAgICBpbmRleFBvc2l0aW9uOiBudW1iZXIsXHJcbiAgICBmaWVsZENvbmZpZzogRmllbGRDb25maWdcclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cC5mb3JtR3JvdXBbMF0uY29udHJvbHMuc3BsaWNlKFxyXG4gICAgICBpbmRleFBvc2l0aW9uLFxyXG4gICAgICAwLFxyXG4gICAgICBmaWVsZENvbmZpZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWRkIHVzZXIgZm9ybSBlbWFpbCBzZWFyY2hcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGZvcm1TZWFyY2hBcHBseShlbWFpbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQWRkVXNlckZvcm1FbWFpbFNlYXJjaCA9IHRydWU7XHJcbiAgICBpZiAoZW1haWwudHJpbSgpKSB0aGlzLnNlYXJjaFVzZXJCeUVtYWlsKGVtYWlsLnRyaW0oKSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51c2VySW5mby5uYW1lID0gJyc7XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdmdWxsTmFtZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3NpZ25zIHJvbGUgdG8gdXNlciBvbiBmb3JtIHN1Ym1pc3Npb24uXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRVc2VyRm9ybVN1Ym1pdChmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgZm9ybVswXT8ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgLy8gQmxvY2sgc3VibWl0IGlmIGFuIHVuY29tbWl0dGVkLCBpbnZhbGlkIGZyZWUtdGV4dCB0b2tlbiByZW1haW5zIGluIHRoZVxyXG4gICAgLy8gb3JnIGZpZWxkIGV2ZW4gd2hlbiBvdGhlciBjb250cm9scyAvIHNlbGVjdGVkIGNoaXBzIGFyZSB2YWxpZC5cclxuICAgIGlmICh0aGlzLmhhc0ludmFsaWRPcmdGcmVlVGV4dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIChmb3JtWzBdLmdldCgncmVwcmVzZW50aW5nT3JnJyk/LnN0YXR1cyA9PT0gRm9ybVN0YXR1cz8uSU5WQUxJRCAmJlxyXG4gICAgICAgIHRoaXMuaXNBbGxPdGhlckNvbnRyb2xzVmFsaWQoKSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgIGZvcm1bMF0uc3RhdHVzID09PSBGb3JtU3RhdHVzPy5WQUxJRFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgICAgLmFkZE5ld0dyb3VwVXNlcih0aGlzLmdldEFkZE5ld1VzZXJQYXlsb2FkKGZvcm1bMF0/LmdldFJhd1ZhbHVlKCkpKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFkZCB1c2VyIGZvcm0gZ3JvdXAgcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEFkZFVzZXJGb3JtR3JvdXBSZWYoZm9ybTogRm9ybUdyb3VwW10pIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgICB0aGlzLnJlZ2lzdGVyUmVwcmVzZW50aW5nT3JnQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXJzIHRoZSBgcmVwcmVzZW50aW5nT3JnYCByZWFjdGl2ZSBjb250cm9sIG9uIHRoZSBkeW5hbWljIGZvcm0nc1xyXG4gICAqIEZvcm1Hcm91cCBmb3IgSU5ESVZJRFVBTCByb3N0ZXJzLiBUaGUgZmllbGQgaXRzZWxmIGlzIHJlbmRlcmVkIGJ5IHRoZSBjdXN0b21cclxuICAgKiBPcmdNdWx0aVNlbGVjdENvbXBvbmVudCAobm90IHRoZSBkeW5hbWljIGZvcm0pLCBidXQga2VlcGluZyB0aGlzIGNvbnRyb2wgb25cclxuICAgKiB0aGUgc2FtZSBGb3JtR3JvdXAg4oCUIHdpdGggdGhlIG9yaWdpbmFsIHZhbGlkYXRvcnMg4oCUIG1lYW5zIGFsbCBleGlzdGluZ1xyXG4gICAqIHN1Ym1pdC9TYXZlLWJ1dHRvbiBsb2dpYyB0aGF0IHJlYWRzIGBmb3JtLmdldCgncmVwcmVzZW50aW5nT3JnJylgIGtlZXBzXHJcbiAgICogd29ya2luZyB1bmNoYW5nZWQuIEl0cyB2YWx1ZSBpcyB0aGUgc2VsZWN0ZWQtb3JnYW5pemF0aW9ucyBhcnJheSwga2VwdCBpblxyXG4gICAqIHN5bmMgYnkgZ2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zKCkuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICByZWdpc3RlclJlcHJlc2VudGluZ09yZ0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlICE9PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCB8fFxyXG4gICAgICAhdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmIHx8XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZi5jb250YWlucygncmVwcmVzZW50aW5nT3JnJylcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWYuYWRkQ29udHJvbChcclxuICAgICAgJ3JlcHJlc2VudGluZ09yZycsXHJcbiAgICAgIG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3JnYW5pemF0aW9ucy5sZW5ndGggPyB0aGlzLnNlbGVjdGVkT3JnYW5pemF0aW9ucyA6ICcnLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVwZGF0ZU9uOiAnYmx1cicsXHJcbiAgICAgICAgICB2YWxpZGF0b3JzOiBbXHJcbiAgICAgICAgICAgIHJlcHJlc2VudGluZ09yZ1JlcXVpcmVkVmFsaWRhdG9yKCksXHJcbiAgICAgICAgICAgIHNraXBXaGVuQXJyYXkoXHJcbiAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgICAgICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMucmVwcmVzZW50aW5nT3JnTmFtZU1heExlbmd0aFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgc2tpcFdoZW5BcnJheShcclxuICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aChcclxuICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdOYW1lTWluTGVuZ3RoXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBza2lwV2hlbkFycmF5KFxyXG4gICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcclxuICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdXNlciByb2xlIHNlbGVjdGlvbiBpbiBhZGQgdXNlciBmb3JtLlxyXG4gICAqIEBwYXJhbSB7Q2hlY2tib3hPcHRpb259IGV2ZW50XHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblVzZXJSb2xlU2VsZWN0aW9uKGV2ZW50OiBDaGVja2JveE9wdGlvbik6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50Py5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXM/LnB1c2goZXZlbnQuaWQgYXMgc3RyaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXMgPSB0aGlzLnNlbGVjdGVkVXNlclJvbGVzLmZpbHRlcihcclxuICAgICAgICAodmFsdWUpID0+IHZhbHVlICE9PSBldmVudC5pZFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gUmVjb21wdXRlIHRocm91Z2ggdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggc28gcm9sZSBzZWxlY3Rpb24gYW5kIGZvcm1cclxuICAgIC8vIHZhbGlkaXR5IHN0YXkgaW4gc3luYyBmb3IgYm90aCByb3N0ZXIgdHlwZXMuXHJcbiAgICB0aGlzLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXR1cygpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyBmb3JtIGNhbmNlbCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRm9ybUNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRlbmFudCdzIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIHNvIHRoZSBhZGQtdXNlciBmb3JtIG9ubHkgc2hvd3NcclxuICAgKiB0aGUgcGhvbmUvYWRkcmVzcyBmaWVsZHMgdGhlIHRlbmFudCBoYXMgY29uZmlndXJlZCBhcyByZXF1aXJlZC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFJlcXVpcmVkUHJvZmlsZUZpZWxkcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWlyZWRQcm9maWxlRmllbGRzID1cclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKCkgPz8gW107XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNsYXNzaWZpY2F0aW9ucyBmcm9tIG1hc3RlciBkYXRhLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldENsYXNzaWZpY2F0aW9ucygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NpZmljYXRpb25zPy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogb3B0aW9uLmNsYXNzaWZpY2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLmNsYXNzaWZpY2F0aW9uRGVzYyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAgICAgICAnY2xhc3NpZmljYXRpb24nLFxyXG4gICAgICAgICAgICAnZHJvcGRvd25PcHRpb25zJyxcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtZW1iZXIgdHlwZXMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVtYmVyVHlwZXMgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgbWVtYmVyVHlwZXM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLm1lbWJlclR5cGVzPy5wdXNoKHtcclxuICAgICAgICBpZDogb3B0aW9uLnJvbGVJZCxcclxuICAgICAgICBuYW1lOiBvcHRpb24ucm9sZU5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgJ21lbWJlclR5cGUnLFxyXG4gICAgICAnZHJvcGRvd25PcHRpb25zJyxcclxuICAgICAgdGhpcy5tZW1iZXJUeXBlc1xyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ05hbWVcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMob3JnTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbnMgPSBbXTtcclxuICAgIG9yZ05hbWUgPSBvcmdOYW1lPy50cmltU3RhcnQoKTtcclxuICAgIGlmICghb3JnTmFtZSkgcmV0dXJuO1xyXG4gICAgY29uc3Qgb3JnUmVxdWVzdFBheWxvYWQ6IE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7IG9yZ05hbWU6IG9yZ05hbWUgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0T3JnYW5pemF0aW9ucyhvcmdSZXF1ZXN0UGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24ub3JnSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm9yZ05hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyB0aGlzLm9yZ2FuaXphdGlvbnMgaXMgYm91bmQgdG8gdGhlIGN1c3RvbSBPcmdNdWx0aVNlbGVjdENvbXBvbmVudCdzXHJcbiAgICAgICAgICAvLyBbb3B0aW9uc10gaW5wdXQ7IGFzc2lnbmluZyBhIG5ldyBhcnJheSByZWZlcmVuY2Ugb3BlbnMgaXRzIGRyb3Bkb3duLlxyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25zID0gWy4uLnRoaXMub3JnYW5pemF0aW9uc107XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGRyb3Bkb3duIG9wdGlvbnMgb2YgQ2xhc3NpZmljYXRpb24sIE1lbWJlciBUeXBlIGFuZCBSZXByZXNlbnRpbmcgT3JnYW5pemF0aW9uIGZvcm0gZmllbGRzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtQ29udHJvbE5hbWVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybUNvbnRyb2xJbnB1dFByb3BlcnR5XHJcbiAgICogQHBhcmFtIHtTZWxlY3RPcHRpb25bXX0gb3B0aW9uc1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICBmb3JtQ29udHJvbElucHV0UHJvcGVydHk6IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5keW5hbWljRm9ybUNvbXBvbmVudD8uZm9ybUZpZWxkcz8udG9BcnJheSgpO1xyXG4gICAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmb3JtRmllbGQ/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmNvbmZpZz8uY29udHJvbE5hbWUgPT09XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWUgJiZcclxuICAgICAgICBmb3JtRmllbGQ/LmNvbXBvbmVudD8uaW5zdGFuY2U/Lltmb3JtQ29udHJvbElucHV0UHJvcGVydHldXHJcbiAgICAgIClcclxuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Lmluc3RhbmNlW2Zvcm1Db250cm9sSW5wdXRQcm9wZXJ0eV0gPSBvcHRpb25zO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjdXN0b20gZXJyb3JzIHdoaWxlIHNlYXJjaGluZyB1c2VyIGJ5IGVtYWlsLCB2YWxpZGF0aW5nIHVzZXIgZXhpc3RlbmNlIGFuZCBhZGRpbmcgbmV3IHVzZXIgdG8gcm9zdGVyLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3JcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaGFuZGxlRXJyb3JzKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSAmJiAhZXJyb3I/LmVycm9yPy5zdGF0dXMpIHtcclxuICAgICAgaWYgKGVycm9yQ29kZXNbMF0gIT09ICczMDA0Jykge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgIEFsZXJ0VHlwZS5FUlJPUixcclxuICAgICAgICAgIGVycm9yQ29kZXNbMF0gPT09ICcyMDI0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICB0aGlzLmdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGFkZCB1c2VyIGZvcm0gY2hhbmdlIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uQWRkVXNlckZvcm1DaGFuZ2UoZm9ybTogRm9ybUdyb3VwW10pOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgICB0aGlzLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFsbCBvdGhlciBjb250cm9sIGV4Y2VwdCByZXByZXNlbnRpbmdPcmcgYXJlIHZhbGlkLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBpc0FsbE90aGVyQ29udHJvbHNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5jb250cm9scykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmLmNvbnRyb2xzKVxyXG4gICAgICA/LmZpbHRlcigoY29udHJvbE5hbWUpID0+IGNvbnRyb2xOYW1lICE9PSAncmVwcmVzZW50aW5nT3JnJylcclxuICAgICAgLmV2ZXJ5KFxyXG4gICAgICAgIChjb250cm9sTmFtZSkgPT5cclxuICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KGNvbnRyb2xOYW1lKT8uc3RhdHVzID09PVxyXG4gICAgICAgICAgRm9ybVN0YXR1cz8uVkFMSURcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIFNhdmUgYnV0dG9uIGVuYWJsZWQvZGlzYWJsZWQgc3RhdGUuXHJcbiAgICpcclxuICAgKiBDb21iaW5lcyBib3RoIGlucHV0cyB0aGF0IGdhdGUgdGhlIGZvcm0gc28gZXZlcnkgY2FsbGJhY2sgKGZvcm0gY2hhbmdlLFxyXG4gICAqIHJvbGUgc2VsZWN0aW9uLCBvcmcgc2VsZWN0aW9uKSBjb21wdXRlcyB0aGUgc2FtZSByZXN1bHQg4oCUIG1pcnJvcmluZyB0aGVcclxuICAgKiBlZGl0LXVzZXItcm9sZXMgZmxvdzpcclxuICAgKiAxLiBCYXNlIHZhbGlkaXR5IHZpYSBHcm91cHNTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQsIHdoaWNoIGFjY291bnRzXHJcbiAgICogICAgZm9yIHRoZSByZWFjdGl2ZSBmb3JtIHN0YXR1cyBBTkQgKGZvciBTWVNURU1fVVNFUikgdGhlIHNlbGVjdGVkIHJvbGVzLFxyXG4gICAqICAgIHNpbmNlIHJvbGVzIGxpdmUgaW4gYHNlbGVjdGVkVXNlclJvbGVzYCwgbm90IHRoZSBmb3JtLlxyXG4gICAqIDIuIEZvciBJTkRJVklEVUFMIG9ubHk6IHRoZSBgcmVwcmVzZW50aW5nT3JnYCBjb250cm9sIHN0YXlzIElOVkFMSUQgYmVjYXVzZVxyXG4gICAqICAgIGl0cyB2YWx1ZSBpcyBoZWxkIGluIGBzZWxlY3RlZE9yZ2FuaXphdGlvbnNgIChhIG11bHRpc2VsZWN0IGF1dG9jb21wbGV0ZSksXHJcbiAgICogICAgbm90IHRoZSBjb250cm9sLiBTbyBhbHNvIGVuYWJsZSB3aGVuIGV2ZXJ5IG90aGVyIGNvbnRyb2wgaXMgdmFsaWQgYW5kIGF0XHJcbiAgICogICAgbGVhc3Qgb25lIG9yZ2FuaXphdGlvbiBpcyBzZWxlY3RlZCwgZXZlbiB0aG91Z2ggdGhlIGZvcm0gc3RhdHVzIGlzXHJcbiAgICogICAgSU5WQUxJRC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXR1cygpOiB2b2lkIHtcclxuICAgIGxldCBpc0Rpc2FibGVkID0gdGhpcy5ncm91cFNlcnZpY2UuaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUsXHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uc3RhdHVzLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEZvciBJTkRJVklEVUFMLCB0aGUgYHJlcHJlc2VudGluZ09yZ2AgY29udHJvbCBzdGF5cyBJTlZBTElEIGJlY2F1c2UgaXRzXHJcbiAgICAvLyB2YWx1ZSBpcyBoZWxkIGluIGBzZWxlY3RlZE9yZ2FuaXphdGlvbnNgIChhIG11bHRpc2VsZWN0IGF1dG9jb21wbGV0ZSksXHJcbiAgICAvLyBub3QgdGhlIGNvbnRyb2wuIFNvIGVuYWJsZSB3aGVuIGV2ZXJ5IG90aGVyIGNvbnRyb2wgaXMgdmFsaWQgYW5kIGF0IGxlYXN0XHJcbiAgICAvLyBvbmUgb3JnYW5pemF0aW9uIGlzIHNlbGVjdGVkIOKAlCBldmVuIHRob3VnaCB0aGUgZm9ybSBzdGF0dXMgaXMgSU5WQUxJRC5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMICYmXHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdyZXByZXNlbnRpbmdPcmcnKT8uc3RhdHVzID09PVxyXG4gICAgICAgIEZvcm1TdGF0dXM/LklOVkFMSUQgJiZcclxuICAgICAgdGhpcy5pc0FsbE90aGVyQ29udHJvbHNWYWxpZCgpICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zPy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFuIHVuY29tbWl0dGVkLCBpbnZhbGlkIGZyZWUtdGV4dCB0b2tlbiBpbiB0aGUgb3JnIGZpZWxkIG11c3QgYmxvY2sgc3VibWl0XHJcbiAgICAvLyByZWdhcmRsZXNzIG9mIGFueSB2YWxpZCBjaGlwcyBhbHJlYWR5IHNlbGVjdGVkLlxyXG4gICAgaWYgKHRoaXMuaGFzSW52YWxpZE9yZ0ZyZWVUZXh0KSB7XHJcbiAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIGFkZCBuZXcgdXNlciBwYXlsb2FkIGZyb20gdGhlIGZvcm0gZGF0YSBkZXBlbmRzIG9uIHRoZSBHcm91cFJvc3RlclR5cGUgYW5kIHJldHVybnMuXHJcbiAgICogQHBhcmFtIHsqfSBmb3JtRGF0YVxyXG4gICAqIEByZXR1cm4geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9XHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRBZGROZXdVc2VyUGF5bG9hZChcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmb3JtRGF0YTogYW55XHJcbiAgKTogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQge1xyXG4gICAgbGV0IHBheWxvYWQ6IEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMubWFwKChvcHRpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3JnSWQ6IG9wdGlvbi5pZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdOYW1lOiBvcHRpb24ubmFtZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICBlbWFpbDogdGhpcy5pc1VzZXJFeGlzdFxyXG4gICAgICAgICAgICA/IHRoaXMudXNlckluZm8/LmVtYWlsXHJcbiAgICAgICAgICAgIDogZm9ybURhdGE/LmVtYWlsU2VhcmNoLFxyXG4gICAgICAgICAgcm9sZXM6IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXMsXHJcbiAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdhbml6YXRpb25zOiBmb3JtYXR0ZWRPcHRpb25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICAgIHBheWxvYWQucGF5bG9hZC5jbGFzc2lmaWNhdGlvbiA9IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uSWQ6IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICA/IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvbj8uaWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZm9ybURhdGE/Lm1lbWJlclR5cGUgJiZcclxuICAgICAgICAhcGF5bG9hZC5wYXlsb2FkLnJvbGVzPy5pbmNsdWRlcyhmb3JtRGF0YT8ubWVtYmVyVHlwZT8uaWQpXHJcbiAgICAgIClcclxuICAgICAgICBwYXlsb2FkLnBheWxvYWQucm9sZXM/LnB1c2goZm9ybURhdGE/Lm1lbWJlclR5cGU/LmlkKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLmlzVXNlckV4aXN0XHJcbiAgICAgICAgICAgID8gdGhpcy51c2VySW5mbz8uZW1haWxcclxuICAgICAgICAgICAgOiBmb3JtRGF0YT8uZW1haWxTZWFyY2gsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5zZWxlY3RlZFVzZXJSb2xlcyxcclxuICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLnNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgaWYgKHRoaXMuaXNVc2VyRXhpc3QpIHtcclxuICAgICAgcGF5bG9hZC5wYXlsb2FkLnVzZXJJZCA9IHRoaXMudXNlckluZm8/LnVzZXJJZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5maXJzdE5hbWUgPSBmb3JtRGF0YT8uZmlyc3ROYW1lPy50cmltKCk7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5sYXN0TmFtZSA9IGZvcm1EYXRhPy5sYXN0TmFtZT8udHJpbSgpO1xyXG4gICAgfVxyXG4gICAgLy8gT3B0aW9uYWwgY29udGFjdCBmaWVsZHMg4oCUIGFwcGx5IHRvIGJvdGggbmV3IGFuZCBleGlzdGluZyB1c2Vycy5cclxuICAgIHRoaXMuYXBwZW5kQ29udGFjdERldGFpbHNUb1BheWxvYWQocGF5bG9hZCwgZm9ybURhdGEpO1xyXG4gICAgcmV0dXJuIHBheWxvYWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBlbmRzIHRoZSBvcHRpb25hbCBjb250YWN0IGZpZWxkcyAocGhvbmUgY291bnRyeSBjb2RlLCBwaG9uZSBudW1iZXIgYW5kXHJcbiAgICogYWRkcmVzcykgdG8gdGhlIHBheWxvYWQuIFRoZSBjb3VudHJ5IGNvZGUgaXMgc2VudCBvbmx5IHdoZW4gYSBwaG9uZSBudW1iZXJcclxuICAgKiBpcyBwcm92aWRlZDsgcGhvbmUgbnVtYmVyIGFuZCBhZGRyZXNzIGFyZSBpbmNsdWRlZCBvbmx5IHdoZW4gdGhlIHVzZXJcclxuICAgKiBlbnRlcmVkIGEgdmFsdWUgKHNvIG51bGxzL2VtcHRpZXMgYXJlIG5vdCBzZW50IHRvIHRoZSBiYWNrZW5kKS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9IHBheWxvYWRcclxuICAgKiBAcGFyYW0geyp9IGZvcm1EYXRhXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBhcHBlbmRDb250YWN0RGV0YWlsc1RvUGF5bG9hZChcclxuICAgIHBheWxvYWQ6IEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZvcm1EYXRhOiBhbnlcclxuICApOiB2b2lkIHtcclxuICAgIC8vIFRoZSBjb21iaW5lZCBQSE9ORSBjb250cm9sIHN0b3JlcyB7IGNvdW50cnlDb2RlLCBwaG9uZU51bWJlciB9LlxyXG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBmb3JtRGF0YT8ucGhvbmU/LnBob25lTnVtYmVyPy50cmltKCk7XHJcbiAgICBjb25zdCBwaG9uZUNvdW50cnlDb2RlID0gZm9ybURhdGE/LnBob25lPy5jb3VudHJ5Q29kZTtcclxuICAgIGNvbnN0IGFkZHJlc3MgPSBmb3JtRGF0YT8uYWRkcmVzcz8udHJpbSgpO1xyXG4gICAgaWYgKHBob25lTnVtYmVyKSB7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5waG9uZU51bWJlciA9IHBob25lTnVtYmVyO1xyXG4gICAgICBpZiAocGhvbmVDb3VudHJ5Q29kZSkgcGF5bG9hZC5wYXlsb2FkLnBob25lQ291bnRyeUNvZGUgPSBwaG9uZUNvdW50cnlDb2RlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFkZHJlc3MpIHBheWxvYWQucGF5bG9hZC5hZGRyZXNzID0gYWRkcmVzcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2FibGVzIGZvcm0gc3VibWl0IGJ1dHRvbiB3aGVuIG9yZyBuYW1lIGxlbmd0aCBpcyBsZXNzIHRoYW4gbWluQ2hhclRvU2VhcmNoIGFuZCBncmVhdGVyIHRoYW4gemVyby5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRpc2FibGVTdWJtaXRCdXR0b24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAgICdyZXByZXNlbnRpbmdPcmcnLFxyXG4gICAgICAgICdtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnMnLFxyXG4gICAgICAgIFtdXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGFsZXJ0cyBmb3IgZXJyb3IsIHdhcm5pbmcuXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBtZXNzYWdlIC1lcnJvciBvciB3YXJuaW5nIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0ge0FsZXJ0VHlwZX0gYWxlcnRUeXBlXHJcbiAgICogQHJldHVybiAtcmV0dXJucyBub3RoaW5nXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgbWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sXHJcbiAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZSxcclxuICAgIGlzSHRtbENvbnRlbnQ/OiBib29sZWFuXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZT8uc2hvd01lc3NhZ2Uoe1xyXG4gICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICBhbGVydFR5cGU6IGFsZXJ0VHlwZSxcclxuICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgaXNIdG1sQ29udGVudDogaXNIdG1sQ29udGVudCA/PyBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBzZWxlY3RlZCBvcmdhbml6YXRpb25zLlxyXG4gICAqIEBwYXJhbSB7QXV0b0NvbXBsZXRlT3B0aW9uW119IHNlbGVjdGVkT3JnXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoc2VsZWN0ZWRPcmc6IEF1dG9Db21wbGV0ZU9wdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkT3JnYW5pemF0aW9ucyA9IHNlbGVjdGVkT3JnO1xyXG4gICAgLy8gS2VlcCB0aGUgcmVhY3RpdmUgY29udHJvbCdzIHZhbHVlIGluIHN5bmMgd2l0aCB0aGUgc2VsZWN0aW9uIHNvIHRoZVxyXG4gICAgLy8gcmVxdWlyZWQgdmFsaWRhdG9yIGFuZCBzdWJtaXQvU2F2ZS1idXR0b24gbG9naWMgc3RheSBhY2N1cmF0ZS5cclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZlxyXG4gICAgICA/LmdldCgncmVwcmVzZW50aW5nT3JnJylcclxuICAgICAgPy5zZXRWYWx1ZShzZWxlY3RlZE9yZz8ubGVuZ3RoID8gc2VsZWN0ZWRPcmcgOiAnJyk7XHJcbiAgICAvLyBSZWNvbXB1dGUgdGhyb3VnaCB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBzbyB0aGUgcmVwcmVzZW50aW5nT3JnXHJcbiAgICAvLyBleGNlcHRpb24gKG9yZyBzZWxlY3RlZCB3aGlsZSB0aGUgY29udHJvbCBpcyBJTlZBTElEKSBpcyBhcHBsaWVkLlxyXG4gICAgdGhpcy51cGRhdGVTdWJtaXRCdXR0b25TdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVzdHJveSQpIHtcclxuICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIGlmICh0aGlzLnRpbWVPdXRJZCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dElkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGllZWVzYS1keW5hbWljLWZvcm1cclxuICAqbmdJZj1cInNlYXJjaFVzZXJGb3JtR3JvdXAgJiYgaXNTZWFyY2hVc2VyRm9ybVwiXHJcbiAgY2xhc3M9XCJpZWVlc2Etc2VhcmNoLXVzZXItZm9ybVwiXHJcbiAgW2xlZnRCdXR0b25MYWJlbF09XCJsZWZ0QnV0dG9uTGFiZWxcIlxyXG4gIFtyaWdodEJ1dHRvbkxhYmVsXT1cInJpZ2h0QnV0dG9uTGFiZWxcIlxyXG4gIFtpc0xlZ2VuZFZpc2libGVdPVwiZmFsc2VcIlxyXG4gIFtjb2xXaWR0aF09XCJjb2xXaWR0aFwiXHJcbiAgW2FjdGlvbkJ1dHRvbkFsaWduXT1cImFjdGlvbkJ1dHRvbkFsaWduXCJcclxuICBbZm9ybUdyb3Vwc109XCJzZWFyY2hVc2VyRm9ybUdyb3VwXCJcclxuICBbaXNMZWZ0QnV0dG9uTmVlZGVkXT1cInRydWVcIlxyXG4gIChmb3JtU3VibWl0KT1cIm9uU2VhcmNoVXNlckZvcm1TdWJtaXQoJGV2ZW50KVwiXHJcbiAgKGZvcm1MZWZ0QnV0dG9uQ2xpY2tlZCk9XCJvbkZvcm1DYW5jZWwoKVwiXHJcbj48L2llZWVzYS1keW5hbWljLWZvcm0+XHJcblxyXG48aWVlZXNhLWR5bmFtaWMtZm9ybVxyXG4gICpuZ0lmPVwiYWRkVXNlckZvcm1Hcm91cCAmJiAhaXNTZWFyY2hVc2VyRm9ybVwiXHJcbiAgY2xhc3M9XCJpZWVlc2EtYWRkLXVzZXItZm9ybVwiXHJcbiAgW2xlZnRCdXR0b25MYWJlbF09XCJsZWZ0QnV0dG9uTGFiZWxcIlxyXG4gIFtyaWdodEJ1dHRvbkxhYmVsXT1cInJpZ2h0QnV0dG9uTGFiZWxcIlxyXG4gIFtpc0xlZ2VuZFZpc2libGVdPVwiZmFsc2VcIlxyXG4gIFtpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkXT1cImlzU3VibWl0QnV0dG9uRGlzYWJsZWRcIlxyXG4gIFtjb2xXaWR0aF09XCJjb2xXaWR0aFwiXHJcbiAgW2FjdGlvbkJ1dHRvbkFsaWduXT1cImFjdGlvbkJ1dHRvbkFsaWduXCJcclxuICBbZm9ybUdyb3Vwc109XCJhZGRVc2VyRm9ybUdyb3VwXCJcclxuICBbaXNMZWZ0QnV0dG9uTmVlZGVkXT1cInRydWVcIlxyXG4gIChmb3JtU3VibWl0KT1cIm9uQWRkVXNlckZvcm1TdWJtaXQoJGV2ZW50KVwiXHJcbiAgKGZvcm1TZWFyY2hBcHBseSk9XCJmb3JtU2VhcmNoQXBwbHkoJGV2ZW50KVwiXHJcbiAgKGZvcm1MZWZ0QnV0dG9uQ2xpY2tlZCk9XCJvbkZvcm1DYW5jZWwoKVwiXHJcbiAgKGZvcm1Hcm91cHNSZWZlcmVuY2UpPVwiZ2V0QWRkVXNlckZvcm1Hcm91cFJlZigkZXZlbnQpXCJcclxuICAoZm9ybUNoZWNrYm94U2VsZWN0aW9uKT1cIm9uVXNlclJvbGVTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgKGZvcm1DaGFuZ2UpPVwib25BZGRVc2VyRm9ybUNoYW5nZSgkZXZlbnQpXCJcclxuPlxyXG4gIDwhLS1cclxuICAgIFJlcHJlc2VudGluZyBPcmdhbml6YXRpb24gKElORElWSURVQUwgcm9zdGVycyBvbmx5KS4gUHJvamVjdGVkIGludG8gdGhlXHJcbiAgICBkeW5hbWljIGZvcm0ncyBbY29tcG9uZW50XSBzbG90IHNvIGl0IHJlbmRlcnMgYWZ0ZXIgdGhlIG90aGVyIGZpZWxkcyBidXRcclxuICAgIEJFRk9SRSB0aGUgU2F2ZS9DYW5jZWwgYWN0aW9uIGJ1dHRvbnMuIFVzZXMgdGhlIGN1c3RvbSBtdWx0aS1zZWxlY3QgZmllbGQgc29cclxuICAgIG11bHRpcGxlIG9yZ3MgY2FuIGJlIHBpY2tlZCBmcm9tIGFuIG9wZW4gZHJvcGRvd24gd2l0aG91dCB0aGUgTWF0ZXJpYWxcclxuICAgIGF1dG9jb21wbGV0ZSBjbG9zaW5nIG9yIGNsZWFyaW5nIHRoZSB0eXBlZCB0ZXh0LiBJdHMgdmFsdWUgc3RheXMgc3luY2VkIHRvXHJcbiAgICB0aGUgcmVhY3RpdmUgYHJlcHJlc2VudGluZ09yZ2AgY29udHJvbCB2aWEgZ2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zKCkuXHJcbiAgLS0+XHJcbiAgPGllZWVzYS1vcmctbXVsdGktc2VsZWN0XHJcbiAgICBjb21wb25lbnRcclxuICAgICpuZ0lmPVwiYWRkVXNlckZvcm1Hcm91cCAmJiAhaXNTZWFyY2hVc2VyRm9ybSAmJiBpc0luZGl2aWR1YWxSb3N0ZXJcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtYWRkLXVzZXItZm9ybV9fb3JnXCJcclxuICAgIFtsYWJlbF09XCJhZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24gKyAnKidcIlxyXG4gICAgW2FyaWFMYWJlbF09XCJhZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvblwiXHJcbiAgICBbc3VwcG9ydE1lc3NhZ2VdPVwiYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uXCJcclxuICAgIFtvcHRpb25zXT1cIm9yZ2FuaXphdGlvbnNcIlxyXG4gICAgW3NlbGVjdGVkT3B0aW9uc109XCJzZWxlY3RlZE9yZ2FuaXphdGlvbnNcIlxyXG4gICAgKHNlYXJjaCk9XCJnZXRPcmdhbml6YXRpb25zKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAoaW52YWxpZEZyZWVUZXh0KT1cIm9uT3JnSW52YWxpZEZyZWVUZXh0KCRldmVudClcIlxyXG4gID48L2llZWVzYS1vcmctbXVsdGktc2VsZWN0PlxyXG48L2llZWVzYS1keW5hbWljLWZvcm0+XHJcbiJdfQ==
|