@maplander/components 0.19.14 → 0.20.2
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/_theming.scss +4 -0
- package/bundles/maplander-components.umd.js +171 -39
- package/bundles/maplander-components.umd.js.map +1 -1
- package/bundles/maplander-components.umd.min.js +2 -2
- package/bundles/maplander-components.umd.min.js.map +1 -1
- package/esm2015/lib/components/filters/filters.component.js +8 -5
- package/esm2015/lib/components/filters/filters.module.js +3 -1
- package/esm2015/lib/components/property/components/details/details.component.js +3 -3
- package/esm2015/lib/components/property/components/editor/editor.component.js +13 -3
- package/esm2015/lib/components/property/components/multimedia-uploader/multimedia-uploader.component.js +7 -1
- package/esm2015/lib/components/property/components/property/property.component.js +12 -4
- package/esm2015/lib/components/property/validators/currency-filter-validator.js +36 -0
- package/esm2015/lib/components/property-card/property-card.component.js +70 -3
- package/esm5/lib/components/filters/filters.component.js +8 -5
- package/esm5/lib/components/filters/filters.module.js +3 -1
- package/esm5/lib/components/property/components/details/details.component.js +3 -3
- package/esm5/lib/components/property/components/editor/editor.component.js +13 -3
- package/esm5/lib/components/property/components/multimedia-uploader/multimedia-uploader.component.js +7 -1
- package/esm5/lib/components/property/components/property/property.component.js +12 -4
- package/esm5/lib/components/property/validators/currency-filter-validator.js +36 -0
- package/esm5/lib/components/property-card/property-card.component.js +84 -3
- package/fesm2015/maplander-components.js +158 -40
- package/fesm2015/maplander-components.js.map +1 -1
- package/fesm5/maplander-components.js +172 -40
- package/fesm5/maplander-components.js.map +1 -1
- package/lib/components/property/components/editor/editor.component.d.ts +1 -0
- package/lib/components/property/components/property/property.component.d.ts +3 -1
- package/lib/components/property/validators/currency-filter-validator.d.ts +2 -0
- package/lib/components/property-card/property-card.component.d.ts +7 -2
- package/maplander-components.metadata.json +1 -1
- package/package.json +12 -12
|
@@ -47,6 +47,7 @@ export class EditorComponent {
|
|
|
47
47
|
this.REGEX_ONLY_INTEGERS = new RegExp(/^[0-9]\d*$/);
|
|
48
48
|
this.REGEX_MIDDLE_NUMBER = new RegExp(/^[0-9]*(\.[5])?$/);
|
|
49
49
|
this.REGEX_WEBSITE = new RegExp(/(http|https):\/\/(\w+:?\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@\-\/]))?/);
|
|
50
|
+
this.REGEX_ALPHA_NUMBER = new RegExp(/[A-Za-z0-9_]/);
|
|
50
51
|
this.editorInstance = new EventEmitter();
|
|
51
52
|
this.selectAddress = new EventEmitter();
|
|
52
53
|
this._subscription = new Subscription();
|
|
@@ -72,10 +73,12 @@ export class EditorComponent {
|
|
|
72
73
|
parkingSpaces: [Validators.pattern(this.REGEX_ONLY_INTEGERS)],
|
|
73
74
|
mainArea: [],
|
|
74
75
|
secondaryArea: [],
|
|
75
|
-
externalLink: [Validators.pattern(this.REGEX_WEBSITE)]
|
|
76
|
+
externalLink: [Validators.pattern(this.REGEX_WEBSITE)],
|
|
77
|
+
sku: [Validators.pattern(this.REGEX_ALPHA_NUMBER)]
|
|
76
78
|
};
|
|
77
79
|
this.propertyForm = this._formBuilder.group({
|
|
78
80
|
offering: [OfferingTypeEnum.SALE],
|
|
81
|
+
sku: [null, this._validators.sku],
|
|
79
82
|
consumerReporting: [],
|
|
80
83
|
consumerReportingOption: [1],
|
|
81
84
|
currency: ['MXN'],
|
|
@@ -307,6 +310,7 @@ export class EditorComponent {
|
|
|
307
310
|
updateFormByProperty() {
|
|
308
311
|
this.propertyForm.patchValue({
|
|
309
312
|
offering: this._property.offering,
|
|
313
|
+
sku: this._property.sku,
|
|
310
314
|
consumerReporting: this._property.propertyInfo.consumerReporting && this._property.propertyInfo.consumerReporting !== 0,
|
|
311
315
|
consumerReportingOption: this._property.propertyInfo.consumerReporting,
|
|
312
316
|
currency: this._property.currency,
|
|
@@ -359,6 +363,7 @@ export class EditorComponent {
|
|
|
359
363
|
updatePropertyByForm(data) {
|
|
360
364
|
this._property.type = this.propertyType;
|
|
361
365
|
this._property.offering = data.offering;
|
|
366
|
+
this._property.sku = data.sku;
|
|
362
367
|
this._property.propertyInfo.consumerReporting = data.consumerReporting ? data.consumerReportingOption : null;
|
|
363
368
|
this._property.currency = data.currency;
|
|
364
369
|
this._property.propertyInfo.lowestPrice = data.minPrice ? Number(data.minPrice) : null;
|
|
@@ -531,7 +536,7 @@ export class EditorComponent {
|
|
|
531
536
|
EditorComponent.decorators = [
|
|
532
537
|
{ type: Component, args: [{
|
|
533
538
|
selector: 'lib-property-editor',
|
|
534
|
-
template: "<form class=\"editor\" [formGroup]=\"propertyForm\" autocomplete=\"off\">\r\n <div class=\"offering\">\r\n <p class=\"section_label\"><span>Tipo de oferta</span> <span>Informaci\u00F3n P\u00FAblica</span></p>\r\n <mat-button-toggle-group class=\"offering__toggle\" formControlName=\"offering\">\r\n <ng-container *ngFor=\"let offering of offeringTypeList\">\r\n <mat-button-toggle\r\n [disabled]=\"(propertyType === 'ROOM' && offering.value === 'SALE') || (propertyType === 'INVESTMENT' && offering.value === 'RENT')\"\r\n [value]=\"offering.value\">{{offering.name}}</mat-button-toggle>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <ng-template [ngIf]=\"propertyForm.controls['offering'].value === 'RENT'\">\r\n <div class=\"direct-debit\">\r\n <mat-checkbox class=\"direct-debit__check-box\" formControlName=\"consumerReporting\">Domiciliaci\u00F3n</mat-checkbox>\r\n <mat-radio-group class=\"direct-debit__radio-group\" aria-label=\"Select an option\"\r\n formControlName=\"consumerReportingOption\"\r\n *ngIf=\"propertyForm.controls['consumerReporting'].value\">\r\n <mat-radio-button class=\"direct-debit__radio-button\" [value]=\"1\">Requerir certificado <br> de fiabilidad\r\n </mat-radio-button>\r\n <mat-radio-button class=\"direct-debit__radio-button\" [value]=\"2\">Requerir poliza <br> de arrendamiento\r\n </mat-radio-button>\r\n <p>\r\n Para mayor informaci\u00F3n de este servicio visite <br>\r\n <a href=\"https://www.burorentas.mx\">\r\n www.burorentas.mx\r\n </a>\r\n </p>\r\n <mat-error *ngIf=\"propertyForm.controls['consumerReportingOption'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-radio-group>\r\n </div>\r\n </ng-template>\r\n <div class=\"pricing\">\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\">\r\n <mat-label>Moneda</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\">{{currency.type}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"propertyForm.controls['currency'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\">\r\n <mat-label>Precio deseado</mat-label>\r\n <input libFormatPrice autocomplete=\"off\" matInput=\"\" type=\"text\" title=\"Max price\" formControlName=\"price\"\r\n [control]=\"propertyForm.controls['price']\" [currency]=\"propertyForm.get('currency').value\">\r\n <mat-error *ngIf=\"propertyForm.controls['price'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['price'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\">\r\n <mat-label>Precio m\u00EDnimo</mat-label>\r\n <input libFormatPrice autocomplete=\"off\" matInput=\"\" type=\"text\" title=\"Min price\" formControlName=\"minPrice\"\r\n [control]=\"propertyForm.controls['minPrice']\" [currency]=\"propertyForm.get('currency').value\">\r\n <mat-error *ngIf=\"propertyForm.controls['minPrice'].hasError('minPriceInvalid')\">\r\n Este valor debe ser menor al precio deseado\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['minPrice'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n </mat-form-field>\r\n <div class=\"pricing__maintenance-fee\" *ngIf=\"propertyType !== 'INVESTMENT' && propertyType !== 'LAND'\">\r\n <mat-checkbox formControlName=\"maintenance\">Tiene cuota de mantenimiento\r\n </mat-checkbox>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\"\r\n *ngIf=\"propertyForm.controls['maintenance'].value\">\r\n <mat-label>Cuota de mantenimiento</mat-label>\r\n <input autocomplete=\"off\" matInput type=\"text\" libFormatPrice title=\"Price\"\r\n [control]=\"propertyForm.controls['maintenancePrice']\"\r\n [currency]=\"propertyForm.get('currency').value\"\r\n formControlName=\"maintenancePrice\">\r\n <mat-error *ngIf=\"propertyForm.controls['maintenancePrice'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['maintenancePrice'].hasError('required')\">\r\n Esta campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <ng-template [ngIf]=\"propertyForm.controls['offering'].value === 'RENT' && propertyType !== 'INVESTMENT'\">\r\n <div class=\"pricing__maintenance-fee\" *ngIf=\"propertyType !== 'ROOM'\">\r\n <mat-checkbox formControlName=\"transfer\">Traspaso\r\n </mat-checkbox>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\"\r\n *ngIf=\"propertyForm.controls['transfer'].value\">\r\n <mat-label>Monto por traspaso</mat-label>\r\n <input autocomplete=\"off\" matInput type=\"text\" libFormatPrice\r\n title=\"Price\" [control]=\"propertyForm.controls['transferPrice']\"\r\n [currency]=\"propertyForm.get('currency').value\"\r\n formControlName=\"transferPrice\">\r\n <mat-error *ngIf=\"propertyForm.controls['transferPrice'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['transferPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <hr>\r\n <div class=\"address\" formGroupName=\"address\">\r\n <p class=\"section_label\">\r\n Direcci\u00F3n\r\n <button mat-flat-button=\"\" type=\"button\" color=\"primary\" (click)=\"goToSelectAddress()\"\r\n class=\"address__label-button\">\r\n COLOCAR UBICACI\u00D3N EN EL MAPA\r\n </button>\r\n </p>\r\n <div class=\"address__body\">\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Pa\u00EDs</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Country\" formControlName=\"country\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>C\u00F3digo postal</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Postal code\" formControlName=\"postalCode\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Entidad Federativa</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"State\" formControlName=\"state\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Ciudad</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"City\" formControlName=\"city\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Alcaldia/Municipio</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Township\" formControlName=\"township\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Colonia</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Colony\" formControlName=\"colony\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Vialidad</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Street\" formControlName=\"street\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>N\u00FAmero exterior</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"No exterior\" formControlName=\"extNumber\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>N\u00FAmero interior</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"No interior\" formControlName=\"intNumber\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Manzana</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Mz\" formControlName=\"mz\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Lote</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Lt\" formControlName=\"lt\" type=\"number\">\r\n </mat-form-field>\r\n <div class=\"address__visibility\">\r\n <p class=\"section_label\">\r\n Ubicaci\u00F3n en el mapa\r\n </p>\r\n <div class=\"address__visibility-body\">\r\n <mat-radio-group formControlName=\"visible\" class=\"address__visibility-radio-group\">\r\n <mat-radio-button class=\"visibility-radio-group__button\" [value]=\"true\">\r\n Mostrar direcci\u00F3n exacta\r\n </mat-radio-button>\r\n <mat-radio-button class=\"visibility-radio-group__button\" [value]=\"false\">\r\n Mostrar direcci\u00F3n aproximada\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <p class=\"visibility__about\">\r\n <span class=\"visibility__about-label\" [ngStyle]=\"{'font-weight': propertyForm.get('address.visible').value ? 'bold' : 'normal'}\">\r\n Mostrar direcci\u00F3n exacta: muestra el <br> lugar preciso en el mapa con un marcador.\r\n </span>\r\n <span class=\"visibility__about-label\" [ngStyle]=\"{'font-weight': !propertyForm.get('address.visible').value ? 'bold' : 'normal'}\">\r\n Mostrar direcci\u00F3n aproximada: reacomoda la ubicaci\u00F3n en un radio de 50 metros, ocultando calle y n\u00FAmero.\r\n </span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- Features [START], Only visible for all property types except INVESTMENT -->\r\n <div class=\"features\">\r\n <p class=\"section_label\">Caracteristicas</p>\r\n <div class=\"features__body\">\r\n <div class=\"features__item\" *ngIf=\"propertyType === 'HOUSE' || propertyType === 'APARTMENT'\">\r\n <span class=\"label__icon ic-features-bedroom\"></span>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Habitaciones</mat-label>\r\n <input autocomplete=\"off\" matInput title=\"Bedrooms\" formControlName=\"bedrooms\" type=\"number\">\r\n <mat-error *ngIf=\"propertyForm.controls['bedrooms'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['bedrooms'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"features__item features-item-bathrooms\"\r\n *ngIf=\"propertyType === 'HOUSE' || propertyType === 'APARTMENT' || propertyType === 'ROOM'\">\r\n <span class=\"label__icon ic-features-bathroom\"></span>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Ba\u00F1os</mat-label>\r\n <input autocomplete=\"off\" title=\"Bathrooms\" matInput formControlName=\"bathrooms\" type=\"number\">\r\n <mat-error *ngIf=\"propertyForm.controls['bathrooms'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['bathrooms'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"features__item features-item-parking-spaces\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <span class=\"label__icon ic-features-parking\"></span>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Estacionamientos</mat-label>\r\n <input autocomplete=\"off\" title=\"Parking spaces\" matInput formControlName=\"parkingSpaces\" type=\"number\">\r\n <mat-error *ngIf=\"propertyForm.controls['parkingSpaces'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!-- Surfaces [START] Only visible for property type distinct INVESTMENT-->\r\n <div class=\"features__item features-item-surface\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <p class=\"features-item__label\">\r\n <span class=\"label__icon ic-features-surface\"></span>\r\n Superficie\r\n </p>\r\n <mat-radio-group class=\"features-item__radio-group\" formControlName=\"unit\">\r\n <mat-radio-button class=\"features-item__radio-button\" [value]=\"'M2'\">m<sup>2</sup></mat-radio-button>\r\n <mat-radio-button class=\"features-item__radio-button\" [value]=\"'FT2'\">sq ft</mat-radio-button>\r\n </mat-radio-group>\r\n <!--\r\n Build area [START]\r\n Only visible for HOUSE, APARTMENT, ROOM, OFFICE, RETAIL, WAREHOUSE and LAND property types\r\n -->\r\n <mat-form-field appearance=\"outline\"\r\n *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <mat-label>\r\n <ng-container [ngSwitch]=\"propertyType\">\r\n <span *ngSwitchDefault>Construida</span>\r\n <span *ngSwitchCase=\"'OFFICE'\">De Oficinas</span>\r\n <span *ngSwitchCase=\"'LAND'\">De Terreno</span>\r\n </ng-container>\r\n </mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Surface build\" formControlName=\"mainArea\" type=\"number\">\r\n <span matSuffix>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'M2'\">m<sup>2</sup></span>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'FT2'\">sq ft</span>\r\n </span>\r\n <mat-error *ngIf=\"propertyForm.controls['mainArea'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['mainArea'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Build area [END] -->\r\n <!--\r\n Secondary build area [START]\r\n Only visible for HOUSE, and WAREHOUSE\r\n -->\r\n <mat-form-field appearance=\"outline\"\r\n *ngIf=\"propertyType === 'HOUSE' || propertyType === 'WAREHOUSE'\">\r\n <mat-label>\r\n <ng-container [ngSwitch]=\"propertyType\">\r\n <span *ngSwitchCase=\"'HOUSE'\">De terreno</span>\r\n <span *ngSwitchCase=\"'WAREHOUSE'\">De oficinas</span>\r\n </ng-container>\r\n </mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Surface land build\" formControlName=\"secondaryArea\" type=\"number\">\r\n <span matSuffix>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'M2'\">m<sup>2</sup></span>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'FT2'\">sq ft</span>\r\n </span>\r\n <mat-error *ngIf=\"propertyForm.controls['secondaryArea'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Secondary build area [END]-->\r\n </div>\r\n <!-- Surfaces [END]-->\r\n <!-- Year build [START], Only visible for HOUSE, APARTMENT, ROOM, OFFICE, RETAIL and WAREHOUSE property types -->\r\n <div class=\"features__item\"\r\n *ngIf=\"propertyType === 'HOUSE' || propertyType === 'APARTMENT' || propertyType === 'ROOM' || propertyType === 'OFFICE' || propertyType === 'RETAIL' || propertyType === 'WAREHOUSE'\">\r\n <p class=\"features-item__label\">\r\n <span class=\"label__icon\"><mat-icon>event</mat-icon></span>\r\n A\u00F1o de construcci\u00F3n\r\n </p>\r\n <lib-property-custom-datepicker formControlName=\"buildIn\"></lib-property-custom-datepicker>\r\n </div>\r\n <!-- Year build [END] -->\r\n <!-- Land use [START], Only for LAND property type -->\r\n <div class=\"features__item\" *ngIf=\"propertyType === 'LAND'\">\r\n <p class=\"features-item__label\">\r\n <span class=\"label__icon ic-features-land-use\"></span>\r\n Uso de suelo\r\n </p>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select formControlName=\"landUse\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let use of landUseList\">\r\n <mat-option [value]=\"use.value\">\r\n {{use.name}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <!-- Land use [END] -->\r\n </div>\r\n </div>\r\n <!-- Features [END] -->\r\n <hr>\r\n <div class=\"agreement\">\r\n <p class=\"section_label\">Contrato</p>\r\n <div class=\"agreement__body\">\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\">\r\n <mat-label>Fecha de inicio</mat-label>\r\n <input autocomplete=\"off\" matInput formControlName=\"agreementDate\" [matDatepicker]=\"dp2\"\r\n placeholder=\"Seleccione una fecha\"\r\n title=\"Chose a date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"dp2\"></mat-datepicker-toggle>\r\n <mat-datepicker #dp2 [disabled]=\"false\"></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\">\r\n <mat-label>Duraci\u00F3n</mat-label>\r\n <mat-select formControlName=\"duration\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let time of durationList\">\r\n <mat-option [value]=\"time\">\r\n <ng-container [ngSwitch]=\"time\">\r\n <span *ngSwitchCase=\"365\">1 a\u00F1o</span>\r\n <span *ngSwitchCase=\"180\">6 meses</span>\r\n <span *ngSwitchDefault>{{time}} d\u00EDas</span>\r\n </ng-container>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\">\r\n <mat-label>Comisi\u00F3n</mat-label>\r\n <mat-select formControlName=\"commission\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let commission of commissionList\">\r\n <mat-option [value]=\"commission\">\r\n <span *ngIf=\"propertyForm.controls['offering'].value === 'RENT'\">\r\n <ng-container [ngSwitch]=\"commission\">\r\n <span *ngSwitchCase=\"1\">1 mes = {{propertyForm.controls['price'].value * commission | currency : '' : 'symbol' : '1.0-0'}}</span>\r\n <span *ngSwitchDefault>\r\n {{commission}} meses = {{propertyForm.controls['price'].value * commission | currency : '' : 'symbol' : '1.0-0'}}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"propertyForm.controls['offering'].value === 'SALE'\">\r\n <span>{{commission * 100 | currency: '' : '': '1.1-1'}}\r\n % = {{propertyForm.controls['price'].value * commission | currency : '' : 'symbol' : '1.0-0'}}</span>\r\n </span>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"propertyForm.controls['commission'].hasError('commissionInvalid')\">\r\n Es necesario ingresar el precio deseado\r\n </mat-error>\r\n </mat-form-field>\r\n <ng-template [ngIf]=\"propertyType === 'INVESTMENT'\">\r\n <mat-form-field appearance=\"outline\" class=\"investment-return__form-field\">\r\n <mat-label>Retorno de Inversi\u00F3n</mat-label>\r\n <input autocomplete=\"off\" matInput title=\"Investment return\" formControlName=\"roi\" type=\"number\">\r\n <span matSuffix>%</span>\r\n </mat-form-field>\r\n </ng-template>\r\n <mat-checkbox class=\"agreement__body-check-box\" formControlName=\"exclusivity\">Contrato con exclusividad\r\n </mat-checkbox>\r\n <mat-checkbox class=\"agreement__body-check-box\" formControlName=\"mlm\">Quiero compartir en el {{mlsLabel || 'MLS'}}</mat-checkbox>\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\" *ngIf=\"propertyForm.controls['mlm'].value\">\r\n <mat-label>Monto de comisi\u00F3n compartida</mat-label>\r\n <mat-select formControlName=\"sharedCommission\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let commission of sharedCommissionList\">\r\n <mat-option [value]=\"commission\">\r\n {{commission * 100}}% de mi comisi\u00F3n\r\n = {{propertyForm.controls['price'].value * propertyForm.controls['commission'].value * commission | currency : '' : 'symbol' : '1.0-0'}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"propertyForm.controls['sharedCommission'].hasError('sharedCommissionInvalid')\">\r\n Debe seleccionar su comisi\u00F3n\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['sharedCommission'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"description\">\r\n <p class=\"section_label\">Descripci\u00F3n</p>\r\n <mat-form-field appearance=\"outline\" class=\"description__form-field\">\r\n <textarea matInput=\"\" cdkTextareaAutosize title=\"Description\" formControlName=\"description\"></textarea>\r\n <mat-hint align=\"end\"><span>N\u00FAmero de caracteres ideal: 3500</span>\r\n Actuales: {{propertyForm.controls['description'].value ? propertyForm.controls['description'].value.length : 0}}\r\n </mat-hint>\r\n <mat-error *ngIf=\"propertyForm.controls['description'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"external-link\">\r\n <p class=\"section_label\">Tour virtual</p>\r\n <mat-form-field appearance=\"outline\" class=\"external-link__form-field\">\r\n <input matInput=\"\" title=\"externalLink\" formControlName=\"externalLink\">\r\n <mat-error *ngIf=\"propertyForm.controls['externalLink'].hasError('pattern')\">\r\n Url invalida\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"notes\">\r\n <p class=\"section_label\">Notas</p>\r\n <mat-form-field appearance=\"outline\" class=\"notes__form-field\">\r\n <textarea matInput=\"\" cdkTextareaAutosize title=\"Notes\" formControlName=\"notes\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <hr *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <div class=\"amenities\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <p class=\"section_label\">Amenidades</p>\r\n <p class=\"amenities__list-amenities\">\r\n <ng-container *ngFor=\"let amenity of amenitiesList\">\r\n <span matRipple class=\"list-amenities__amenity\" (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity__icon-active': amenity.checked}\"></span>\r\n <span class=\"amenity__text\">{{amenity.name}}</span>\r\n </span>\r\n </ng-container>\r\n </p>\r\n </div>\r\n <div class=\"attributes\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <p class=\"section_label\">Caracteristicas de ubicaci\u00F3n</p>\r\n <p class=\"amenities__list-amenities\">\r\n <ng-container *ngFor=\"let feature of featuresList\">\r\n <span matRipple class=\"list-amenities__amenity\" (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity__icon-active': feature.checked}\"></span>\r\n <span class=\"amenity__text\">{{feature.name}}</span>\r\n </span>\r\n </ng-container>\r\n </p>\r\n </div>\r\n <button type=\"submit\" class=\"button-submit\" mat-button #btnSubmit>Enviar</button>\r\n</form>\r\n",
|
|
539
|
+
template: "<form class=\"editor\" [formGroup]=\"propertyForm\" autocomplete=\"off\">\r\n <div class=\"offering\">\r\n <p class=\"section_label\"><span>Tipo de oferta</span> <span>Informaci\u00F3n P\u00FAblica</span></p>\r\n <mat-button-toggle-group class=\"offering__toggle\" formControlName=\"offering\">\r\n <ng-container *ngFor=\"let offering of offeringTypeList\">\r\n <mat-button-toggle\r\n [disabled]=\"(propertyType === 'ROOM' && offering.value === 'SALE') || (propertyType === 'INVESTMENT' && offering.value === 'RENT')\"\r\n [value]=\"offering.value\">{{offering.name}}</mat-button-toggle>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <ng-template [ngIf]=\"propertyForm.controls['offering'].value === 'RENT'\">\r\n <div class=\"direct-debit\">\r\n <mat-checkbox class=\"direct-debit__check-box\" formControlName=\"consumerReporting\">Domiciliaci\u00F3n</mat-checkbox>\r\n <mat-radio-group class=\"direct-debit__radio-group\" aria-label=\"Select an option\"\r\n formControlName=\"consumerReportingOption\"\r\n *ngIf=\"propertyForm.controls['consumerReporting'].value\">\r\n <mat-radio-button class=\"direct-debit__radio-button\" [value]=\"1\">Requerir certificado <br> de fiabilidad\r\n </mat-radio-button>\r\n <mat-radio-button class=\"direct-debit__radio-button\" [value]=\"2\">Requerir poliza <br> de arrendamiento\r\n </mat-radio-button>\r\n <p>\r\n Para mayor informaci\u00F3n de este servicio visite <br>\r\n <a href=\"https://www.burorentas.mx\">\r\n www.burorentas.mx\r\n </a>\r\n </p>\r\n <mat-error *ngIf=\"propertyForm.controls['consumerReportingOption'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-radio-group>\r\n </div>\r\n </ng-template>\r\n <div class=\"pricing\">\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\">\r\n <mat-label>Moneda</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\">{{currency.type}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"propertyForm.controls['currency'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\">\r\n <mat-label>Precio deseado</mat-label>\r\n <input libFormatPrice autocomplete=\"off\" matInput=\"\" type=\"text\" title=\"Max price\" formControlName=\"price\"\r\n [control]=\"propertyForm.controls['price']\" [currency]=\"propertyForm.get('currency').value\">\r\n <mat-error *ngIf=\"propertyForm.controls['price'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['price'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\">\r\n <mat-label>Precio m\u00EDnimo</mat-label>\r\n <input libFormatPrice autocomplete=\"off\" matInput=\"\" type=\"text\" title=\"Min price\" formControlName=\"minPrice\"\r\n [control]=\"propertyForm.controls['minPrice']\" [currency]=\"propertyForm.get('currency').value\">\r\n <mat-error *ngIf=\"propertyForm.controls['minPrice'].hasError('minPriceInvalid')\">\r\n Este valor debe ser menor al precio deseado\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['minPrice'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n </mat-form-field>\r\n <div class=\"pricing__maintenance-fee\" *ngIf=\"propertyType !== 'INVESTMENT' && propertyType !== 'LAND'\">\r\n <mat-checkbox formControlName=\"maintenance\">Tiene cuota de mantenimiento\r\n </mat-checkbox>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\"\r\n *ngIf=\"propertyForm.controls['maintenance'].value\">\r\n <mat-label>Cuota de mantenimiento</mat-label>\r\n <input autocomplete=\"off\" matInput type=\"text\" libFormatPrice title=\"Price\"\r\n [control]=\"propertyForm.controls['maintenancePrice']\"\r\n [currency]=\"propertyForm.get('currency').value\"\r\n formControlName=\"maintenancePrice\">\r\n <mat-error *ngIf=\"propertyForm.controls['maintenancePrice'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['maintenancePrice'].hasError('required')\">\r\n Esta campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"sku__maintenance-fee\">\r\n <mat-form-field appearance=\"outline\" class=\"sku__form-field\">\r\n <mat-label>SKU</mat-label>\r\n <input matInput=\"\" title=\"SKU\" formControlName=\"sku\">\r\n <mat-error *ngIf=\"propertyForm.controls['sku'].hasError('pattern')\">\r\n SKU invalida\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <ng-template [ngIf]=\"propertyForm.controls['offering'].value === 'RENT' && propertyType !== 'INVESTMENT'\">\r\n <div class=\"pricing__maintenance-fee\" *ngIf=\"propertyType !== 'ROOM'\">\r\n <mat-checkbox formControlName=\"transfer\">Traspaso\r\n </mat-checkbox>\r\n <mat-form-field appearance=\"outline\" class=\"pricing__form-field\"\r\n *ngIf=\"propertyForm.controls['transfer'].value\">\r\n <mat-label>Monto por traspaso</mat-label>\r\n <input autocomplete=\"off\" matInput type=\"text\" libFormatPrice\r\n title=\"Price\" [control]=\"propertyForm.controls['transferPrice']\"\r\n [currency]=\"propertyForm.get('currency').value\"\r\n formControlName=\"transferPrice\">\r\n <mat-error *ngIf=\"propertyForm.controls['transferPrice'].hasError('format')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['transferPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <hr>\r\n <div class=\"address\" formGroupName=\"address\">\r\n <p class=\"section_label\">\r\n Direcci\u00F3n\r\n <button mat-flat-button=\"\" type=\"button\" color=\"primary\" (click)=\"goToSelectAddress()\"\r\n class=\"address__label-button\">\r\n COLOCAR UBICACI\u00D3N EN EL MAPA\r\n </button>\r\n </p>\r\n <div class=\"address__body\">\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Pa\u00EDs</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Country\" formControlName=\"country\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>C\u00F3digo postal</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Postal code\" formControlName=\"postalCode\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Entidad Federativa</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"State\" formControlName=\"state\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Ciudad</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"City\" formControlName=\"city\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Alcaldia/Municipio</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Township\" formControlName=\"township\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Colonia</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Colony\" formControlName=\"colony\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Vialidad</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Street\" formControlName=\"street\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>N\u00FAmero exterior</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"No exterior\" formControlName=\"extNumber\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>N\u00FAmero interior</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"No interior\" formControlName=\"intNumber\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Manzana</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Mz\" formControlName=\"mz\" type=\"number\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"address__form-field\">\r\n <mat-label>Lote</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Lt\" formControlName=\"lt\" type=\"number\">\r\n </mat-form-field>\r\n <div class=\"address__visibility\">\r\n <p class=\"section_label\">\r\n Ubicaci\u00F3n en el mapa\r\n </p>\r\n <div class=\"address__visibility-body\">\r\n <mat-radio-group formControlName=\"visible\" class=\"address__visibility-radio-group\">\r\n <mat-radio-button class=\"visibility-radio-group__button\" [value]=\"true\">\r\n Mostrar direcci\u00F3n exacta\r\n </mat-radio-button>\r\n <mat-radio-button class=\"visibility-radio-group__button\" [value]=\"false\">\r\n Mostrar direcci\u00F3n aproximada\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <p class=\"visibility__about\">\r\n <span class=\"visibility__about-label\" [ngStyle]=\"{'font-weight': propertyForm.get('address.visible').value ? 'bold' : 'normal'}\">\r\n Mostrar direcci\u00F3n exacta: muestra el <br> lugar preciso en el mapa con un marcador.\r\n </span>\r\n <span class=\"visibility__about-label\" [ngStyle]=\"{'font-weight': !propertyForm.get('address.visible').value ? 'bold' : 'normal'}\">\r\n Mostrar direcci\u00F3n aproximada: reacomoda la ubicaci\u00F3n en un radio de 50 metros, ocultando calle y n\u00FAmero.\r\n </span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- Features [START], Only visible for all property types except INVESTMENT -->\r\n <div class=\"features\">\r\n <p class=\"section_label\">Caracteristicas</p>\r\n <div class=\"features__body\">\r\n <div class=\"features__item\" *ngIf=\"propertyType === 'HOUSE' || propertyType === 'APARTMENT'\">\r\n <span class=\"label__icon ic-features-bedroom\"></span>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Habitaciones</mat-label>\r\n <input autocomplete=\"off\" matInput title=\"Bedrooms\" formControlName=\"bedrooms\" type=\"number\">\r\n <mat-error *ngIf=\"propertyForm.controls['bedrooms'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['bedrooms'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"features__item features-item-bathrooms\"\r\n *ngIf=\"propertyType === 'HOUSE' || propertyType === 'APARTMENT' || propertyType === 'ROOM'\">\r\n <span class=\"label__icon ic-features-bathroom\"></span>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Ba\u00F1os</mat-label>\r\n <input autocomplete=\"off\" title=\"Bathrooms\" matInput formControlName=\"bathrooms\" type=\"number\">\r\n <mat-error *ngIf=\"propertyForm.controls['bathrooms'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['bathrooms'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"features__item features-item-parking-spaces\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <span class=\"label__icon ic-features-parking\"></span>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Estacionamientos</mat-label>\r\n <input autocomplete=\"off\" title=\"Parking spaces\" matInput formControlName=\"parkingSpaces\" type=\"number\">\r\n <mat-error *ngIf=\"propertyForm.controls['parkingSpaces'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!-- Surfaces [START] Only visible for property type distinct INVESTMENT-->\r\n <div class=\"features__item features-item-surface\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <p class=\"features-item__label\">\r\n <span class=\"label__icon ic-features-surface\"></span>\r\n Superficie\r\n </p>\r\n <mat-radio-group class=\"features-item__radio-group\" formControlName=\"unit\">\r\n <mat-radio-button class=\"features-item__radio-button\" [value]=\"'M2'\">m<sup>2</sup></mat-radio-button>\r\n <mat-radio-button class=\"features-item__radio-button\" [value]=\"'FT2'\">sq ft</mat-radio-button>\r\n </mat-radio-group>\r\n <!--\r\n Build area [START]\r\n Only visible for HOUSE, APARTMENT, ROOM, OFFICE, RETAIL, WAREHOUSE and LAND property types\r\n -->\r\n <mat-form-field appearance=\"outline\"\r\n *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <mat-label>\r\n <ng-container [ngSwitch]=\"propertyType\">\r\n <span *ngSwitchDefault>Construida</span>\r\n <span *ngSwitchCase=\"'OFFICE'\">De Oficinas</span>\r\n <span *ngSwitchCase=\"'LAND'\">De Terreno</span>\r\n </ng-container>\r\n </mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Surface build\" formControlName=\"mainArea\" type=\"number\">\r\n <span matSuffix>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'M2'\">m<sup>2</sup></span>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'FT2'\">sq ft</span>\r\n </span>\r\n <mat-error *ngIf=\"propertyForm.controls['mainArea'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['mainArea'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Build area [END] -->\r\n <!--\r\n Secondary build area [START]\r\n Only visible for HOUSE, and WAREHOUSE\r\n -->\r\n <mat-form-field appearance=\"outline\"\r\n *ngIf=\"propertyType === 'HOUSE' || propertyType === 'WAREHOUSE'\">\r\n <mat-label>\r\n <ng-container [ngSwitch]=\"propertyType\">\r\n <span *ngSwitchCase=\"'HOUSE'\">De terreno</span>\r\n <span *ngSwitchCase=\"'WAREHOUSE'\">De oficinas</span>\r\n </ng-container>\r\n </mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" title=\"Surface land build\" formControlName=\"secondaryArea\" type=\"number\">\r\n <span matSuffix>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'M2'\">m<sup>2</sup></span>\r\n <span *ngIf=\"propertyForm.controls['unit'].value === 'FT2'\">sq ft</span>\r\n </span>\r\n <mat-error *ngIf=\"propertyForm.controls['secondaryArea'].hasError('pattern')\">\r\n Valor invalido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Secondary build area [END]-->\r\n </div>\r\n <!-- Surfaces [END]-->\r\n <!-- Year build [START], Only visible for HOUSE, APARTMENT, ROOM, OFFICE, RETAIL and WAREHOUSE property types -->\r\n <div class=\"features__item\"\r\n *ngIf=\"propertyType === 'HOUSE' || propertyType === 'APARTMENT' || propertyType === 'ROOM' || propertyType === 'OFFICE' || propertyType === 'RETAIL' || propertyType === 'WAREHOUSE'\">\r\n <p class=\"features-item__label\">\r\n <span class=\"label__icon\"><mat-icon>event</mat-icon></span>\r\n A\u00F1o de construcci\u00F3n\r\n </p>\r\n <lib-property-custom-datepicker formControlName=\"buildIn\"></lib-property-custom-datepicker>\r\n </div>\r\n <!-- Year build [END] -->\r\n <!-- Land use [START], Only for LAND property type -->\r\n <div class=\"features__item\" *ngIf=\"propertyType === 'LAND'\">\r\n <p class=\"features-item__label\">\r\n <span class=\"label__icon ic-features-land-use\"></span>\r\n Uso de suelo\r\n </p>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select formControlName=\"landUse\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let use of landUseList\">\r\n <mat-option [value]=\"use.value\">\r\n {{use.name}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <!-- Land use [END] -->\r\n </div>\r\n </div>\r\n <!-- Features [END] -->\r\n <hr>\r\n <div class=\"agreement\">\r\n <p class=\"section_label\">Contrato</p>\r\n <div class=\"agreement__body\">\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\">\r\n <mat-label>Fecha de inicio</mat-label>\r\n <input autocomplete=\"off\" matInput formControlName=\"agreementDate\" [matDatepicker]=\"dp2\"\r\n placeholder=\"Seleccione una fecha\"\r\n title=\"Chose a date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"dp2\"></mat-datepicker-toggle>\r\n <mat-datepicker #dp2 [disabled]=\"false\"></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\">\r\n <mat-label>Duraci\u00F3n</mat-label>\r\n <mat-select formControlName=\"duration\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let time of durationList\">\r\n <mat-option [value]=\"time\">\r\n <ng-container [ngSwitch]=\"time\">\r\n <span *ngSwitchCase=\"365\">1 a\u00F1o</span>\r\n <span *ngSwitchCase=\"180\">6 meses</span>\r\n <span *ngSwitchDefault>{{time}} d\u00EDas</span>\r\n </ng-container>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\">\r\n <mat-label>Comisi\u00F3n</mat-label>\r\n <mat-select formControlName=\"commission\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let commission of commissionList\">\r\n <mat-option [value]=\"commission\">\r\n <span *ngIf=\"propertyForm.controls['offering'].value === 'RENT'\">\r\n <ng-container [ngSwitch]=\"commission\">\r\n <span *ngSwitchCase=\"1\">1 mes = {{propertyForm.controls['price'].value * commission | currency : '' : 'symbol' : '1.0-0'}}</span>\r\n <span *ngSwitchDefault>\r\n {{commission}} meses = {{propertyForm.controls['price'].value * commission | currency : '' : 'symbol' : '1.0-0'}}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"propertyForm.controls['offering'].value === 'SALE'\">\r\n <span>{{commission * 100 | currency: '' : '': '1.1-1'}}\r\n % = {{propertyForm.controls['price'].value * commission | currency : '' : 'symbol' : '1.0-0'}}</span>\r\n </span>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"propertyForm.controls['commission'].hasError('commissionInvalid')\">\r\n Es necesario ingresar el precio deseado\r\n </mat-error>\r\n </mat-form-field>\r\n <ng-template [ngIf]=\"propertyType === 'INVESTMENT'\">\r\n <mat-form-field appearance=\"outline\" class=\"investment-return__form-field\">\r\n <mat-label>Retorno de Inversi\u00F3n</mat-label>\r\n <input autocomplete=\"off\" matInput title=\"Investment return\" formControlName=\"roi\" type=\"number\">\r\n <span matSuffix>%</span>\r\n </mat-form-field>\r\n </ng-template>\r\n <mat-checkbox class=\"agreement__body-check-box\" formControlName=\"exclusivity\">Contrato con exclusividad\r\n </mat-checkbox>\r\n <mat-checkbox class=\"agreement__body-check-box\" formControlName=\"mlm\">Quiero compartir en el {{mlsLabel || 'MLS'}}</mat-checkbox>\r\n <mat-form-field appearance=\"outline\" class=\"agreement__form-field\" *ngIf=\"propertyForm.controls['mlm'].value\">\r\n <mat-label>Monto de comisi\u00F3n compartida</mat-label>\r\n <mat-select formControlName=\"sharedCommission\">\r\n <mat-option [value]=\"null\">\r\n Seleccione una opci\u00F3n\r\n </mat-option>\r\n <ng-container *ngFor=\"let commission of sharedCommissionList\">\r\n <mat-option [value]=\"commission\">\r\n {{commission * 100}}% de mi comisi\u00F3n\r\n = {{propertyForm.controls['price'].value * propertyForm.controls['commission'].value * commission | currency : '' : 'symbol' : '1.0-0'}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"propertyForm.controls['sharedCommission'].hasError('sharedCommissionInvalid')\">\r\n Debe seleccionar su comisi\u00F3n\r\n </mat-error>\r\n <mat-error *ngIf=\"propertyForm.controls['sharedCommission'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"description\">\r\n <p class=\"section_label\">Descripci\u00F3n</p>\r\n <mat-form-field appearance=\"outline\" class=\"description__form-field\">\r\n <textarea matInput=\"\" cdkTextareaAutosize title=\"Description\" formControlName=\"description\"></textarea>\r\n <mat-hint align=\"end\"><span>N\u00FAmero de caracteres ideal: 3500</span>\r\n Actuales: {{propertyForm.controls['description'].value ? propertyForm.controls['description'].value.length : 0}}\r\n </mat-hint>\r\n <mat-error *ngIf=\"propertyForm.controls['description'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"external-link\">\r\n <p class=\"section_label\">Tour virtual</p>\r\n <mat-form-field appearance=\"outline\" class=\"external-link__form-field\">\r\n <input matInput=\"\" title=\"externalLink\" formControlName=\"externalLink\">\r\n <mat-error *ngIf=\"propertyForm.controls['externalLink'].hasError('pattern')\">\r\n Url invalida\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"notes\">\r\n <p class=\"section_label\">Notas</p>\r\n <mat-form-field appearance=\"outline\" class=\"notes__form-field\">\r\n <textarea matInput=\"\" cdkTextareaAutosize title=\"Notes\" formControlName=\"notes\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <hr *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <div class=\"amenities\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <p class=\"section_label\">Amenidades</p>\r\n <p class=\"amenities__list-amenities\">\r\n <ng-container *ngFor=\"let amenity of amenitiesList\">\r\n <span matRipple class=\"list-amenities__amenity\" (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity__icon-active': amenity.checked}\"></span>\r\n <span class=\"amenity__text\">{{amenity.name}}</span>\r\n </span>\r\n </ng-container>\r\n </p>\r\n </div>\r\n <div class=\"attributes\" *ngIf=\"propertyType !== 'INVESTMENT'\">\r\n <p class=\"section_label\">Caracteristicas de ubicaci\u00F3n</p>\r\n <p class=\"amenities__list-amenities\">\r\n <ng-container *ngFor=\"let feature of featuresList\">\r\n <span matRipple class=\"list-amenities__amenity\" (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity__icon-active': feature.checked}\"></span>\r\n <span class=\"amenity__text\">{{feature.name}}</span>\r\n </span>\r\n </ng-container>\r\n </p>\r\n </div>\r\n <button type=\"submit\" class=\"button-submit\" mat-button #btnSubmit>Enviar</button>\r\n</form>\r\n",
|
|
535
540
|
providers: [
|
|
536
541
|
{ provide: MAT_DATE_LOCALE, useValue: 'es-MX' },
|
|
537
542
|
{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS] },
|
|
@@ -594,6 +599,11 @@ if (false) {
|
|
|
594
599
|
* @private
|
|
595
600
|
*/
|
|
596
601
|
EditorComponent.prototype.REGEX_WEBSITE;
|
|
602
|
+
/**
|
|
603
|
+
* @type {?}
|
|
604
|
+
* @private
|
|
605
|
+
*/
|
|
606
|
+
EditorComponent.prototype.REGEX_ALPHA_NUMBER;
|
|
597
607
|
/**
|
|
598
608
|
* @type {?}
|
|
599
609
|
* @private
|
|
@@ -656,4 +666,4 @@ if (false) {
|
|
|
656
666
|
EditorComponent.prototype._adapter;
|
|
657
667
|
}
|
|
658
668
|
export { ɵ0 };
|
|
659
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYXBsYW5kZXIvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3Byb3BlcnR5L2NvbXBvbmVudHMvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUEwQixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxZQUFZLEVBRVosUUFBUSxFQUdSLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixjQUFjLEVBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBQywrQkFBK0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BHLE9BQU8sS0FBSyxjQUFjLE1BQU0sUUFBUSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7O01BQ2xDLE1BQU0sR0FBRyxjQUFj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QyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUM7b0JBQ3ZELEtBQUs7c0JBQ0wsS0FBSzsyQkFDTCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSzs2QkFDTCxNQUFNOzRCQUNOLE1BQU07Ozs7Ozs7SUFQUCx3Q0FBNEY7O0lBQzVGLGdDQUF3Qjs7SUFDeEIsa0NBQTBCOztJQUMxQix1Q0FBd0M7O0lBQ3hDLG1DQUErQjs7SUFDL0IsbUNBQTBCOztJQUMxQix5Q0FBd0Q7O0lBQ3hELHdDQUE0Qzs7Ozs7Ozs7SUFLNUMsOENBQWdFOzs7OztJQUNoRSw4Q0FBc0U7Ozs7O0lBQ3RFLHdDQUF3SDs7Ozs7SUFDeEgsd0NBQTZDOzs7OztJQUM3QyxzQ0FPRTs7Ozs7SUFDRixvQ0FBK0I7Ozs7O0lBQy9CLDRDQUE0Qzs7Ozs7SUFDNUMsdUNBQStCOztJQUMvQix1Q0FBK0I7O0lBQy9CLDJDQUFxRTs7SUFDckUsdUNBQTJCOztJQUMzQixrQ0FBeUI7O0lBQ3pCLHNDQUEyRDs7SUFDM0Qsd0NBQW9DOztJQUNwQyx1Q0FBbUM7O0lBQ25DLHlDQUFnQzs7SUFDaEMsK0NBQXNDOztJQUN0Qyx1Q0FBOEI7Ozs7O0lBRzVCLHVDQUFpQzs7Ozs7SUFDakMsa0NBQThCOzs7OztJQUM5QixtQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzcyxcclxuICBBbWVuaXRpZXMsXHJcbiAgQXBwVXRpbCxcclxuICBBcmVhVW5pdEVudW0sXHJcbiAgQ0VSLFxyXG4gIEZlYXR1cmVzLFxyXG4gIEdlb1B0LFxyXG4gIExhbmRVc2VFbnVtLFxyXG4gIE5ld1Byb3BlcnR5LFxyXG4gIE9mZmVyaW5nVHlwZUVudW0sXHJcbiAgUHJvcGVydHlJbmZvLFxyXG4gIFByb3BlcnR5VHlwZUVudW0sXHJcbiAgU3RhdHVzVHlwZUVudW1cclxufSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJ0BtYXBsYW5kZXIvc2hhcmVkJztcclxuaW1wb3J0IHtEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLCBNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRJbXBvcnRlZCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZUl0ZW19IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS10eXBlLWl0ZW0nO1xyXG5pbXBvcnQge0FtZW5pdHlJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tb2RlbHMvYW1lbml0eS1pdGVtJztcclxuaW1wb3J0IHtDb25zdGFudHNDb21wb25lbnRzfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdGFudHNDb21wb25lbnRzJztcclxuaW1wb3J0IHtQcm9wZXJ0eUVkaXRvclZhbGlkYXRvcnN9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvcHJvcGVydHktZWRpdG9yLXZhbGlkYXRvcnMnO1xyXG5pbXBvcnQge01EYXRlfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9jbGFzc2VzJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnO1xyXG5jb25zdCBtb21lbnQgPSBtb21lbnRJbXBvcnRlZDtcclxuXHJcbmNvbnN0IE1ZX0ZPUk1BVFMgPSB7XHJcbiAgcGFyc2U6IHtcclxuICAgIGRhdGVJbnB1dDogJ0wnLFxyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnTCcsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ01NTSBZWVlZJyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdMJyxcclxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0gWVlZWScsXHJcbiAgfSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXByb3BlcnR5LWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTUFUX0RBVEVfTE9DQUxFLCB1c2VWYWx1ZTogJ2VzLU1YJ30sXHJcbiAgICB7cHJvdmlkZTogRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBNb21lbnREYXRlQWRhcHRlciwgZGVwczogW01BVF9EQVRFX0xPQ0FMRSwgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OU119LFxyXG4gICAge3Byb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBNWV9GT1JNQVRTfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2J0blN1Ym1pdCcsIHtzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWZ9KSBwcml2YXRlIF9idG5TdWJtaXRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KCkgdXRpbHM6IEFwcFV0aWw7XHJcbiAgQElucHV0KCkgYWRkcmVzczogQWRkcmVzcztcclxuICBASW5wdXQoKSBwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZUVudW07XHJcbiAgQElucHV0KCkgcHJvcGVydHk6IE5ld1Byb3BlcnR5O1xyXG4gIEBJbnB1dCgpIG1sc0xhYmVsOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIGVkaXRvckluc3RhbmNlOiBFdmVudEVtaXR0ZXI8RWRpdG9yQ29tcG9uZW50PjtcclxuICBAT3V0cHV0KCkgc2VsZWN0QWRkcmVzczogRXZlbnRFbWl0dGVyPHZvaWQ+O1xyXG4gIC8qKlxyXG4gICAqIFJFR0VYX09OTFlfSU5URUdFUlNcclxuICAgKiBSZWdleCBwYXR0ZXJuIHRvIG9ubHkgYWNjZXB0IGludGVnZXIgYW5kIHBvc2l0aXZlIG51bWJlcnNcclxuICAgKiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVHRVhfT05MWV9JTlRFR0VSUyA9IG5ldyBSZWdFeHAoL15bMC05XVxcZCokLyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUdFWF9NSURETEVfTlVNQkVSID0gbmV3IFJlZ0V4cCgvXlswLTldKihcXC5bNV0pPyQvKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IFJFR0VYX1dFQlNJVEUgPSBuZXcgUmVnRXhwKC8oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6P1xcdypAKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJUBcXC1cXC9dKSk/Lyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsaWRhdG9yczoge1xyXG4gICAgYmVkcm9vbXM6IFZhbGlkYXRvckZuW10sXHJcbiAgICBiYXRocm9vbXM6IFZhbGlkYXRvckZuW10sXHJcbiAgICBwYXJraW5nU3BhY2VzOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgbWFpbkFyZWE6IFZhbGlkYXRvckZuW10sXHJcbiAgICBzZWNvbmRhcnlBcmVhOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgZXh0ZXJuYWxMaW5rOiBWYWxpZGF0b3JGbltdXHJcbiAgfTtcclxuICBwcml2YXRlIF9wcm9wZXJ0eTogTmV3UHJvcGVydHk7XHJcbiAgcHJpdmF0ZSBfcHJvcGVydHlUeXBlSXRlbTogUHJvcGVydHlUeXBlSXRlbTtcclxuICBwcml2YXRlIF9lcnJvckZpZWxkczogc3RyaW5nW107XHJcbiAgcHVibGljIHByb3BlcnR5Rm9ybTogRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBvZmZlcmluZ1R5cGVMaXN0OiB7IG5hbWU6IHN0cmluZywgdmFsdWU6IE9mZmVyaW5nVHlwZUVudW0gfVtdO1xyXG4gIHB1YmxpYyBjdXJyZW5jeUxpc3Q6IENFUltdO1xyXG4gIHB1YmxpYyByb2lMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgbGFuZFVzZUxpc3Q6IHsgbmFtZTogc3RyaW5nLCB2YWx1ZTogTGFuZFVzZUVudW0gfVtdO1xyXG4gIHB1YmxpYyBhbWVuaXRpZXNMaXN0OiBBbWVuaXR5SXRlbVtdO1xyXG4gIHB1YmxpYyBmZWF0dXJlc0xpc3Q6IEFtZW5pdHlJdGVtW107XHJcbiAgcHVibGljIGNvbW1pc3Npb25MaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgc2hhcmVkQ29tbWlzc2lvbkxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBkdXJhdGlvbkxpc3Q6IG51bWJlcltdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX2RpYWxvZzogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FkYXB0ZXI6IERhdGVBZGFwdGVyPGFueT5cclxuICApIHtcclxuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRvckNvbXBvbmVudD4oKTtcclxuICAgIHRoaXMuc2VsZWN0QWRkcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMub2ZmZXJpbmdUeXBlTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuT2ZmZXJpbmdUeXBlTGlzdC5tYXAoZG9jID0+ICh7Li4uZG9jfSkpO1xyXG4gICAgdGhpcy5sYW5kVXNlTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuTGFuZFVzZUxpc3QubWFwKGRvYyA9PiAoey4uLmRvY30pKTtcclxuICAgIHRoaXMuY29tbWlzc2lvbkxpc3QgPSBDb25zdGFudHNDb21wb25lbnRzLkNvbW1pc3Npb25MaXN0W09mZmVyaW5nVHlwZUVudW0uU0FMRV07XHJcbiAgICB0aGlzLnJvaUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLlJPSUxpc3QpO1xyXG4gICAgdGhpcy5kdXJhdGlvbkxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLkR1cmF0aW9uTGlzdCk7XHJcbiAgICB0aGlzLnNoYXJlZENvbW1pc3Npb25MaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5TaGFyZWRDb21taXNzaW9uTGlzdCk7XHJcbiAgICB0aGlzLl9hZGFwdGVyLnNldExvY2FsZSgnZXMnKTtcclxuICAgIHRoaXMuX2Vycm9yRmllbGRzID0gW107XHJcbiAgICB0aGlzLl92YWxpZGF0b3JzID0ge1xyXG4gICAgICBiZWRyb29tczogW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLlJFR0VYX09OTFlfSU5URUdFUlMpXSxcclxuICAgICAgYmF0aHJvb21zOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfTUlERExFX05VTUJFUildLFxyXG4gICAgICBwYXJraW5nU3BhY2VzOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfT05MWV9JTlRFR0VSUyldLFxyXG4gICAgICBtYWluQXJlYTogW10sXHJcbiAgICAgIHNlY29uZGFyeUFyZWE6IFtdLFxyXG4gICAgICBleHRlcm5hbExpbms6IFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5SRUdFWF9XRUJTSVRFKV1cclxuICAgIH07XHJcbiAgICB0aGlzLnByb3BlcnR5Rm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgb2ZmZXJpbmc6IFtPZmZlcmluZ1R5cGVFbnVtLlNBTEVdLFxyXG4gICAgICBjb25zdW1lclJlcG9ydGluZzogW10sXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nT3B0aW9uOiBbMV0sXHJcbiAgICAgIGN1cnJlbmN5OiBbJ01YTiddLFxyXG4gICAgICBtaW5QcmljZTogW10sXHJcbiAgICAgIHByaWNlOiBbXSxcclxuICAgICAgbWFpbnRlbmFuY2U6IFtdLFxyXG4gICAgICBtYWludGVuYW5jZVByaWNlOiBbXSxcclxuICAgICAgdHJhbnNmZXI6IFtdLFxyXG4gICAgICB0cmFuc2ZlclByaWNlOiBbXSxcclxuICAgICAgYmVkcm9vbXM6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLmJlZHJvb21zXSxcclxuICAgICAgYmF0aHJvb21zOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5iYXRocm9vbXNdLFxyXG4gICAgICBwYXJraW5nU3BhY2VzOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5wYXJraW5nU3BhY2VzXSxcclxuICAgICAgbWFpbkFyZWE6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLm1haW5BcmVhXSxcclxuICAgICAgc2Vjb25kYXJ5QXJlYTogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMuc2Vjb25kYXJ5QXJlYV0sXHJcbiAgICAgIHVuaXQ6IFtBcmVhVW5pdEVudW0uTTJdLFxyXG4gICAgICBidWlsZEluOiBbXSxcclxuICAgICAgbGFuZFVzZTogW10sXHJcbiAgICAgIGV4Y2x1c2l2aXR5OiBbXSxcclxuICAgICAgbWxtOiBbXSxcclxuICAgICAgc2hhcmVkQ29tbWlzc2lvbjogW10sXHJcbiAgICAgIGFncmVlbWVudERhdGU6IFt7dmFsdWU6IG51bGwsIGRpc2FibGVkOiB0cnVlfV0sXHJcbiAgICAgIGR1cmF0aW9uOiBbXSxcclxuICAgICAgY29tbWlzc2lvbjogW10sXHJcbiAgICAgIHJvaTogW10sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbXSxcclxuICAgICAgZXh0ZXJuYWxMaW5rOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5leHRlcm5hbExpbmtdLFxyXG4gICAgICBub3RlczogW10sXHJcbiAgICAgIGFkZHJlc3M6IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBjb3VudHJ5OiBbXSxcclxuICAgICAgICBwb3N0YWxDb2RlOiBbXSxcclxuICAgICAgICBzdGF0ZTogW10sXHJcbiAgICAgICAgY2l0eTogW10sXHJcbiAgICAgICAgdG93bnNoaXA6IFtdLFxyXG4gICAgICAgIGNvbG9ueTogW10sXHJcbiAgICAgICAgc3RyZWV0OiBbXSxcclxuICAgICAgICBleHROdW1iZXI6IFtdLFxyXG4gICAgICAgIGludE51bWJlcjogW10sXHJcbiAgICAgICAgbXo6IFtdLFxyXG4gICAgICAgIGx0OiBbXSxcclxuICAgICAgICB2aXNpYmxlOiBbdHJ1ZV0sXHJcbiAgICAgIH0pLFxyXG4gICAgfSwge1xyXG4gICAgICB2YWxpZGF0b3JzOiBQcm9wZXJ0eUVkaXRvclZhbGlkYXRvcnMudmFsaWRhdG9yXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdlb1B0R2VuZXJhdG9yKGdlb1B0OiBHZW9QdCwgbWluRGlzdGFuY2U6IG51bWJlciwgbWF4RGlzdGFuY2U6IG51bWJlcik6IEdlb1B0IHtcclxuICAgIGNvbnN0IEVBUlRIX1JBRElVU19NRVRFUlMgPSA2MzcxMDEwLjA7XHJcbiAgICBjb25zdCBsID0gTWF0aC5yYW5kb20oKSAqIChtYXhEaXN0YW5jZSAtIG1pbkRpc3RhbmNlKSArIG1pbkRpc3RhbmNlO1xyXG4gICAgY29uc3QgYWxwaGEgPSBNYXRoLnJhbmRvbSgpICogTWF0aC5QSSAvIDI7XHJcbiAgICBjb25zdCBzeCA9IChNYXRoLnJhbmRvbSgpIDwgMC41KSA/IGwgKiBNYXRoLmNvcyhhbHBoYSkgOiAtbCAqIE1hdGguY29zKGFscGhhKTtcclxuICAgIGNvbnN0IHN5ID0gKE1hdGgucmFuZG9tKCkgPCAwLjUpID8gbCAqIE1hdGguc2luKGFscGhhKSA6IC1sICogTWF0aC5zaW4oYWxwaGEpO1xyXG4gICAgY29uc3QgZGVsdGFMYXQgPSBzeSAvIEVBUlRIX1JBRElVU19NRVRFUlMgKiAxODAgLyBNYXRoLlBJO1xyXG4gICAgY29uc3QgbGF0ID0gZ2VvUHQubGF0aXR1ZGUgKyBkZWx0YUxhdDtcclxuICAgIGNvbnN0IGRlbHRhTG9uZyA9IHN4IC8gRUFSVEhfUkFESVVTX01FVEVSUyAvIE1hdGguY29zKGxhdCAqIE1hdGguUEkgLyAxODApICogMTgwIC8gTWF0aC5QSTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxhdGl0dWRlOiBsYXQsXHJcbiAgICAgIGxvbmdpdHVkZTogZ2VvUHQubG9uZ2l0dWRlICsgZGVsdGFMb25nXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxpc3RlbkNoYW5nZXNPbkZvcm0oKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWyd1dGlscyddICYmIGNoYW5nZXNbJ3V0aWxzJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVuY3lMaXN0ID0gY2hhbmdlc1sndXRpbHMnXS5jdXJyZW50VmFsdWUuY2VycztcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydwcm9wZXJ0eVR5cGUnXSAmJiBjaGFuZ2VzWydwcm9wZXJ0eVR5cGUnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5wcm9wZXJ0eVR5cGUgPSBjaGFuZ2VzWydwcm9wZXJ0eVR5cGUnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMuc2VhcmNoQW1lbml0aWVzQnlQcm9wZXJ0eVR5cGUoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydwcm9wZXJ0eSddICYmIGNoYW5nZXNbJ3Byb3BlcnR5J10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlUHJvcGVydHkoY2hhbmdlc1sncHJvcGVydHknXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2FkZHJlc3MnXSAmJiBjaGFuZ2VzWydhZGRyZXNzJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQWRkcmVzc0Zvcm0oY2hhbmdlc1snYWRkcmVzcyddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvckluc3RhbmNlLmVtaXQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvcGVydHkoKTogTmV3UHJvcGVydHkge1xyXG4gICAgdGhpcy5zZXRWYWxpZGF0b3JPbkZpZWxkcyh0aGlzLl9lcnJvckZpZWxkcywgdHJ1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVByb3BlcnR5QnlGb3JtKHRoaXMucHJvcGVydHlGb3JtLmdldFJhd1ZhbHVlKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVGb3JtSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHRoaXMuc2V0VmFsaWRhdG9yT25GaWVsZHModGhpcy5fZXJyb3JGaWVsZHMsIHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlGb3JtLmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBbWVuaXR5KGFtZW5pdHk6IEFtZW5pdHlJdGVtKTogdm9pZCB7XHJcbiAgICBhbWVuaXR5LmNoZWNrZWQgPSAhYW1lbml0eS5jaGVja2VkO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYW1lbml0aWVzW2FtZW5pdHkudmFsdWVdID0gYW1lbml0eS5jaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1NlbGVjdEFkZHJlc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdEFkZHJlc3MuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RXJyb3JzT25GaWVsZHMoZXJyb3JzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXJyb3JGaWVsZHMgPSBlcnJvcnM7XHJcbiAgICB0aGlzLnNldFZhbGlkYXRvck9uRmllbGRzKHRoaXMuX2Vycm9yRmllbGRzKTtcclxuICAgIHRoaXMuX2J0blN1Ym1pdFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUFkZHJlc3NGb3JtKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICBhZGRyZXNzOiB7XHJcbiAgICAgICAgY291bnRyeTogYWRkcmVzcy5jb3VudHJ5LFxyXG4gICAgICAgIHN0YXRlOiBhZGRyZXNzLnN0YXRlLFxyXG4gICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSxcclxuICAgICAgICB0b3duc2hpcDogYWRkcmVzcy50b3duc2hpcCxcclxuICAgICAgICBjb2xvbnk6IGFkZHJlc3MuY29sb255LFxyXG4gICAgICAgIHN0cmVldDogYWRkcmVzcy5zdHJlZXQsXHJcbiAgICAgICAgcG9zdGFsQ29kZTogYWRkcmVzcy5wb3N0YWxDb2RlLFxyXG4gICAgICAgIGV4dE51bWJlcjogYWRkcmVzcy5vdXRkb29yTnVtYmVyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25BbWVuaXRpZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtZW5pdGllc0xpc3QuZm9yRWFjaCgoYW1lbml0eSkgPT4ge1xyXG4gICAgICBhbWVuaXR5LmNoZWNrZWQgPSB0aGlzLl9wcm9wZXJ0eS5hbWVuaXRpZXNbYW1lbml0eS52YWx1ZV07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNzaWduTG9jYXRpb25GZWF0dXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmVhdHVyZXNMaXN0LmZvckVhY2goKGFtZW5pdHkpID0+IHtcclxuICAgICAgYW1lbml0eS5jaGVja2VkID0gdGhpcy5fcHJvcGVydHkuYW1lbml0aWVzW2FtZW5pdHkudmFsdWVdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkNvbW1pc3Npb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbW1pc3Npb25MaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Db21taXNzaW9uTGlzdFt0aGlzLl9wcm9wZXJ0eS5vZmZlcmluZ107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkJ1c2luZXNzUnVsZXMoKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMucHJvcGVydHlUeXBlKSB7XHJcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlRW51bS5ST09NOlxyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgb2ZmZXJpbmc6IE9mZmVyaW5nVHlwZUVudW0uUkVOVFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZUVudW0uSU5WRVNUTUVOVDpcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtLlNBTEVcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9wcm9wZXJ0eS5zdGF0dXMgPT09IFN0YXR1c1R5cGVFbnVtLkFOTk9VTkNFRCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBVdGlscy5saXN0RXJyb3JzQnlQcm9wZXJ0eVR5cGVGb3JQdWJsaXNoKHRoaXMuX3Byb3BlcnR5LnR5cGUpO1xyXG4gICAgICB0aGlzLnNldFZhbGlkYXRvck9uRmllbGRzKGVycm9ycyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1CeVByb3BlcnR5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIG9mZmVyaW5nOiB0aGlzLl9wcm9wZXJ0eS5vZmZlcmluZyxcclxuICAgICAgY29uc3VtZXJSZXBvcnRpbmc6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb25zdW1lclJlcG9ydGluZyAmJiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcgIT09IDAsXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nT3B0aW9uOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcsXHJcbiAgICAgIGN1cnJlbmN5OiB0aGlzLl9wcm9wZXJ0eS5jdXJyZW5jeSxcclxuICAgICAgbWluUHJpY2U6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sb3dlc3RQcmljZSxcclxuICAgICAgcHJpY2U6IHRoaXMuX3Byb3BlcnR5LnByaWNlLFxyXG4gICAgICBtYWludGVuYW5jZTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSAmJiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5jb25kb21pbml1bUZlZVByaWNlICE9PSAwLFxyXG4gICAgICBtYWludGVuYW5jZVByaWNlOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5jb25kb21pbml1bUZlZVByaWNlLFxyXG4gICAgICB0cmFuc2ZlcjogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSAmJiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGVhc2VUcmFuc2ZlclByaWNlICE9PSAwLFxyXG4gICAgICB0cmFuc2ZlclByaWNlOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGVhc2VUcmFuc2ZlclByaWNlLFxyXG4gICAgICBiZWRyb29tczogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmVkcm9vbXMsXHJcbiAgICAgIGJhdGhyb29tczogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmF0aHJvb21zLFxyXG4gICAgICBwYXJraW5nU3BhY2VzOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5wYXJraW5nU3BhY2VzLFxyXG4gICAgICBtYWluQXJlYTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMubWFpbkFyZWEsXHJcbiAgICAgIHNlY29uZGFyeUFyZWE6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnNlY29uZGFyeUFyZWEsXHJcbiAgICAgIHVuaXQ6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmFyZWFVbml0LFxyXG4gICAgICBidWlsZEluOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5idWlsdEluID8gbmV3IERhdGUodGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYnVpbHRJbiwgMSwgMSkgOiBudWxsLFxyXG4gICAgICBsYW5kVXNlOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5sYW5kVXNlLFxyXG4gICAgICBleGNsdXNpdml0eTogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmV4Y2x1c2l2aXR5LFxyXG4gICAgICBtbG06IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5tbHMsXHJcbiAgICAgIHNoYXJlZENvbW1pc3Npb246IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5zaGFyZWRDb21taXNzaW9uLFxyXG4gICAgICBhZ3JlZW1lbnREYXRlOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFN0YXJ0RGF0ZSA/XHJcbiAgICAgICAgbW9tZW50KG5ldyBNRGF0ZSh0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFN0YXJ0RGF0ZSkudG9EYXRlKCkpIDogbnVsbCxcclxuICAgICAgZHVyYXRpb246IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5saXN0aW5nQWdyZWVtZW50VGltZSxcclxuICAgICAgY29tbWlzc2lvbjogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbW1pc3Npb24sXHJcbiAgICAgIHJvaTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucm9pLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5fcHJvcGVydHkuZGVzY3JpcHRpb24sXHJcbiAgICAgIGV4dGVybmFsTGluazogdGhpcy5fcHJvcGVydHkuZXh0ZXJuYWxMaW5rLFxyXG4gICAgICBub3RlczogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLm5vdGVzLFxyXG4gICAgICBhZGRyZXNzOiB7XHJcbiAgICAgICAgY291bnRyeTogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5jb3VudHJ5LFxyXG4gICAgICAgIHN0YXRlOiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnN0YXRlLFxyXG4gICAgICAgIGNpdHk6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY2l0eSxcclxuICAgICAgICB0b3duc2hpcDogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy50b3duc2hpcCxcclxuICAgICAgICBjb2xvbnk6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY29sb255LFxyXG4gICAgICAgIHBvc3RhbENvZGU6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MucG9zdGFsQ29kZSxcclxuICAgICAgICBzdHJlZXQ6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Muc3RyZWV0LFxyXG4gICAgICAgIGV4dE51bWJlcjogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5vdXRkb29yTnVtYmVyLFxyXG4gICAgICAgIGludE51bWJlcjogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5pbnRlcmlvck51bWJlcixcclxuICAgICAgICBtejogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5teixcclxuICAgICAgICBsdDogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5sdCxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnZpc2libGUgfHwgZmFsc2UsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQcm9wZXJ0eUJ5Rm9ybShkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnR5cGUgPSB0aGlzLnByb3BlcnR5VHlwZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5Lm9mZmVyaW5nID0gZGF0YS5vZmZlcmluZztcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb25zdW1lclJlcG9ydGluZyA9IGRhdGEuY29uc3VtZXJSZXBvcnRpbmcgPyBkYXRhLmNvbnN1bWVyUmVwb3J0aW5nT3B0aW9uIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmN1cnJlbmN5ID0gZGF0YS5jdXJyZW5jeTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sb3dlc3RQcmljZSA9IGRhdGEubWluUHJpY2UgPyBOdW1iZXIoZGF0YS5taW5QcmljZSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJpY2UgPSBkYXRhLnByaWNlID8gTnVtYmVyKGRhdGEucHJpY2UpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmNvbmRvbWluaXVtRmVlUHJpY2UgPSBkYXRhLm1haW50ZW5hbmNlID8gTnVtYmVyKGRhdGEubWFpbnRlbmFuY2VQcmljZSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSA9IGRhdGEudHJhbnNmZXIgPyBOdW1iZXIoZGF0YS50cmFuc2ZlclByaWNlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5iZWRyb29tcyA9IGRhdGEuYmVkcm9vbXMgPyBOdW1iZXIoZGF0YS5iZWRyb29tcykgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmF0aHJvb21zID0gZGF0YS5iYXRocm9vbXMgPyBOdW1iZXIoZGF0YS5iYXRocm9vbXMpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnBhcmtpbmdTcGFjZXMgPSBkYXRhLnBhcmtpbmdTcGFjZXMgPyBOdW1iZXIoZGF0YS5wYXJraW5nU3BhY2VzKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5tYWluQXJlYSA9IGRhdGEubWFpbkFyZWEgPyBOdW1iZXIoZGF0YS5tYWluQXJlYSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuc2Vjb25kYXJ5QXJlYSA9IGRhdGEuc2Vjb25kYXJ5QXJlYSA/IE51bWJlcihkYXRhLnNlY29uZGFyeUFyZWEpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmFyZWFVbml0ID0gZGF0YS51bml0O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYnVpbHRJbiA9IGRhdGEuYnVpbGRJbiA/IGRhdGEuYnVpbGRJbi5nZXRGdWxsWWVhcigpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmxhbmRVc2UgPSBkYXRhLmxhbmRVc2U7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uZXhjbHVzaXZpdHkgPSBkYXRhLmV4Y2x1c2l2aXR5O1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLm1scyA9IGRhdGEubWxtO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLnNoYXJlZENvbW1pc3Npb24gPSBkYXRhLm1sbSA/IE51bWJlcihkYXRhLnNoYXJlZENvbW1pc3Npb24pIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5saXN0aW5nQWdyZWVtZW50U3RhcnREYXRlID1cclxuICAgICAgZGF0YS5hZ3JlZW1lbnREYXRlID8gTURhdGUuZ2V0VGltZXN0YW1wKGRhdGEuYWdyZWVtZW50RGF0ZS50b0RhdGUoKSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRUaW1lID0gZGF0YS5kdXJhdGlvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb21taXNzaW9uID0gZGF0YS5jb21taXNzaW9uO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucm9pID0gZGF0YS5yb2k7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5leHRlcm5hbExpbmsgPSBkYXRhLmV4dGVybmFsTGluaztcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5ub3RlcyA9IGRhdGEubm90ZXM7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNvdW50cnkgPSBkYXRhLmFkZHJlc3MuY291bnRyeTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Muc3RhdGUgPSBkYXRhLmFkZHJlc3Muc3RhdGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNpdHkgPSBkYXRhLmFkZHJlc3MuY2l0eTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MudG93bnNoaXAgPSBkYXRhLmFkZHJlc3MudG93bnNoaXA7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNvbG9ueSA9IGRhdGEuYWRkcmVzcy5jb2xvbnk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnBvc3RhbENvZGUgPSBkYXRhLmFkZHJlc3MucG9zdGFsQ29kZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Muc3RyZWV0ID0gZGF0YS5hZGRyZXNzLnN0cmVldDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Mub3V0ZG9vck51bWJlciA9IGRhdGEuYWRkcmVzcy5leHROdW1iZXI7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmludGVyaW9yTnVtYmVyID0gZGF0YS5hZGRyZXNzLmludE51bWJlcjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubXogPSBkYXRhLmFkZHJlc3MubXo7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmx0ID0gZGF0YS5hZGRyZXNzLmx0O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5sb2NhdGlvbiA9IHRoaXMuYWRkcmVzcy5sb2NhdGlvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MucHVibGljTG9jYXRpb24gPSAhZGF0YS5hZGRyZXNzLnZpc2libGUgP1xyXG4gICAgICBFZGl0b3JDb21wb25lbnQuZ2VvUHRHZW5lcmF0b3IodGhpcy5hZGRyZXNzLmxvY2F0aW9uLCAyMDAsIDQwMCkgOiB0aGlzLmFkZHJlc3MubG9jYXRpb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnZpc2libGUgPSBkYXRhLmFkZHJlc3MudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoQW1lbml0aWVzQnlQcm9wZXJ0eVR5cGUoKTogdm9pZCB7XHJcbiAgICBDb25zdGFudHNDb21wb25lbnRzLlByb3BlcnR5VHlwZUxpc3QuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgaWYgKHR5cGUudmFsdWUgPT09IHRoaXMucHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvcGVydHlUeXBlSXRlbSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5hbWVuaXRpZXNMaXN0ID0gdHlwZS5hbWVuaXRpZXMubWFwKGl0ZW0gPT4gKHsuLi5pdGVtfSkpO1xyXG4gICAgICAgIHRoaXMuZmVhdHVyZXNMaXN0ID0gdHlwZS5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoey4uLml0ZW19KSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5DaGFuZ2VzT25Gb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICB0aGlzLmNvbW1pc3Npb25MaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Db21taXNzaW9uTGlzdFt2YWx1ZV07XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBtaW5QcmljZTogbnVsbCxcclxuICAgICAgICAgIG1heFByaWNlOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ3ByaWNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgTnVtYmVyKHZhbHVlKSA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIG1pblByaWNlOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ21sbSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydzaGFyZWRDb21taXNzaW9uJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ21haW50ZW5hbmNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ21haW50ZW5hbmNlUHJpY2UnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1sndHJhbnNmZXInXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1sndHJhbnNmZXJQcmljZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydjb25zdW1lclJlcG9ydGluZyddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydjb25zdW1lclJlcG9ydGluZ09wdGlvbiddLnNldFZhbHVlKDEpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUHJvcGVydHkocHJvcGVydHk/OiBOZXdQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJvcGVydHkgPSBuZXcgTmV3UHJvcGVydHkocHJvcGVydHkgfHwgbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS50eXBlID0gdGhpcy5wcm9wZXJ0eVR5cGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8gPSBuZXcgUHJvcGVydHlJbmZvKHByb3BlcnR5ID8gcHJvcGVydHkucHJvcGVydHlJbmZvIDogbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcyA9IG5ldyBGZWF0dXJlcyhwcm9wZXJ0eSA/IHByb3BlcnR5LmZlYXR1cmVzIDogbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzID0gbmV3IEFkZHJlc3MocHJvcGVydHkgPyBwcm9wZXJ0eS5hZGRyZXNzIDogbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hbWVuaXRpZXMgPSBuZXcgQW1lbml0aWVzKHByb3BlcnR5ID8gcHJvcGVydHkuYW1lbml0aWVzIDogbnVsbCk7XHJcbiAgICB0aGlzLmFzc2lnbkJ1c2luZXNzUnVsZXMoKTtcclxuICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5pZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1CeVByb3BlcnR5KCk7XHJcbiAgICAgIHRoaXMuYXNzaWduQW1lbml0aWVzKCk7XHJcbiAgICAgIHRoaXMuYXNzaWduTG9jYXRpb25GZWF0dXJlcygpO1xyXG4gICAgICB0aGlzLmFzc2lnbkNvbW1pc3Npb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9yT25GaWVsZHMoZXJyb3JzOiBzdHJpbmdbXSwgcmVtb3ZlPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXJyb3JzLmZvckVhY2goZXJyb3IgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS5zZXRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnNbZXJyb3JdID8gdGhpcy5fdmFsaWRhdG9yc1tlcnJvcl0gOiBbXSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnNldFZhbGlkYXRvcnMoXHJcbiAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzW2Vycm9yXSA/IHRoaXMuX3ZhbGlkYXRvcnNbZXJyb3JdLmNvbmNhdChWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
669
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYXBsYW5kZXIvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3Byb3BlcnR5L2NvbXBvbmVudHMvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUEwQixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxZQUFZLEVBRVosUUFBUSxFQUdSLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixjQUFjLEVBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBQywrQkFBK0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BHLE9BQU8sS0FBSyxjQUFjLE1BQU0sUUFBUSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7O01BQ2xDLE1BQU0sR0FBRyxjQUFj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aXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzcyxcclxuICBBbWVuaXRpZXMsXHJcbiAgQXBwVXRpbCxcclxuICBBcmVhVW5pdEVudW0sXHJcbiAgQ0VSLFxyXG4gIEZlYXR1cmVzLFxyXG4gIEdlb1B0LFxyXG4gIExhbmRVc2VFbnVtLFxyXG4gIE5ld1Byb3BlcnR5LFxyXG4gIE9mZmVyaW5nVHlwZUVudW0sXHJcbiAgUHJvcGVydHlJbmZvLFxyXG4gIFByb3BlcnR5VHlwZUVudW0sXHJcbiAgU3RhdHVzVHlwZUVudW1cclxufSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJ0BtYXBsYW5kZXIvc2hhcmVkJztcclxuaW1wb3J0IHtEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLCBNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRJbXBvcnRlZCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZUl0ZW19IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS10eXBlLWl0ZW0nO1xyXG5pbXBvcnQge0FtZW5pdHlJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tb2RlbHMvYW1lbml0eS1pdGVtJztcclxuaW1wb3J0IHtDb25zdGFudHNDb21wb25lbnRzfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdGFudHNDb21wb25lbnRzJztcclxuaW1wb3J0IHtQcm9wZXJ0eUVkaXRvclZhbGlkYXRvcnN9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvcHJvcGVydHktZWRpdG9yLXZhbGlkYXRvcnMnO1xyXG5pbXBvcnQge01EYXRlfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9jbGFzc2VzJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnO1xyXG5jb25zdCBtb21lbnQgPSBtb21lbnRJbXBvcnRlZDtcclxuXHJcbmNvbnN0IE1ZX0ZPUk1BVFMgPSB7XHJcbiAgcGFyc2U6IHtcclxuICAgIGRhdGVJbnB1dDogJ0wnLFxyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnTCcsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ01NTSBZWVlZJyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdMJyxcclxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0gWVlZWScsXHJcbiAgfSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXByb3BlcnR5LWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTUFUX0RBVEVfTE9DQUxFLCB1c2VWYWx1ZTogJ2VzLU1YJ30sXHJcbiAgICB7cHJvdmlkZTogRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBNb21lbnREYXRlQWRhcHRlciwgZGVwczogW01BVF9EQVRFX0xPQ0FMRSwgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OU119LFxyXG4gICAge3Byb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBNWV9GT1JNQVRTfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2J0blN1Ym1pdCcsIHtzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWZ9KSBwcml2YXRlIF9idG5TdWJtaXRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KCkgdXRpbHM6IEFwcFV0aWw7XHJcbiAgQElucHV0KCkgYWRkcmVzczogQWRkcmVzcztcclxuICBASW5wdXQoKSBwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZUVudW07XHJcbiAgQElucHV0KCkgcHJvcGVydHk6IE5ld1Byb3BlcnR5O1xyXG4gIEBJbnB1dCgpIG1sc0xhYmVsOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIGVkaXRvckluc3RhbmNlOiBFdmVudEVtaXR0ZXI8RWRpdG9yQ29tcG9uZW50PjtcclxuICBAT3V0cHV0KCkgc2VsZWN0QWRkcmVzczogRXZlbnRFbWl0dGVyPHZvaWQ+O1xyXG4gIC8qKlxyXG4gICAqIFJFR0VYX09OTFlfSU5URUdFUlNcclxuICAgKiBSZWdleCBwYXR0ZXJuIHRvIG9ubHkgYWNjZXB0IGludGVnZXIgYW5kIHBvc2l0aXZlIG51bWJlcnNcclxuICAgKiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVHRVhfT05MWV9JTlRFR0VSUyA9IG5ldyBSZWdFeHAoL15bMC05XVxcZCokLyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUdFWF9NSURETEVfTlVNQkVSID0gbmV3IFJlZ0V4cCgvXlswLTldKihcXC5bNV0pPyQvKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IFJFR0VYX1dFQlNJVEUgPSBuZXcgUmVnRXhwKC8oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6P1xcdypAKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJUBcXC1cXC9dKSk/Lyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUdFWF9BTFBIQV9OVU1CRVIgPSBuZXcgUmVnRXhwKC9bQS1aYS16MC05X10vKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IF92YWxpZGF0b3JzOiB7XHJcbiAgICBiZWRyb29tczogVmFsaWRhdG9yRm5bXSxcclxuICAgIGJhdGhyb29tczogVmFsaWRhdG9yRm5bXSxcclxuICAgIHBhcmtpbmdTcGFjZXM6IFZhbGlkYXRvckZuW10sXHJcbiAgICBtYWluQXJlYTogVmFsaWRhdG9yRm5bXSxcclxuICAgIHNlY29uZGFyeUFyZWE6IFZhbGlkYXRvckZuW10sXHJcbiAgICBleHRlcm5hbExpbms6IFZhbGlkYXRvckZuW10sXHJcbiAgICBza3U6IFZhbGlkYXRvckZuW11cclxuICB9O1xyXG4gIHByaXZhdGUgX3Byb3BlcnR5OiBOZXdQcm9wZXJ0eTtcclxuICBwcml2YXRlIF9wcm9wZXJ0eVR5cGVJdGVtOiBQcm9wZXJ0eVR5cGVJdGVtO1xyXG4gIHByaXZhdGUgX2Vycm9yRmllbGRzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgcHJvcGVydHlGb3JtOiBGb3JtR3JvdXA7XHJcbiAgcHVibGljIG9mZmVyaW5nVHlwZUxpc3Q6IHsgbmFtZTogc3RyaW5nLCB2YWx1ZTogT2ZmZXJpbmdUeXBlRW51bSB9W107XHJcbiAgcHVibGljIGN1cnJlbmN5TGlzdDogQ0VSW107XHJcbiAgcHVibGljIHJvaUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBsYW5kVXNlTGlzdDogeyBuYW1lOiBzdHJpbmcsIHZhbHVlOiBMYW5kVXNlRW51bSB9W107XHJcbiAgcHVibGljIGFtZW5pdGllc0xpc3Q6IEFtZW5pdHlJdGVtW107XHJcbiAgcHVibGljIGZlYXR1cmVzTGlzdDogQW1lbml0eUl0ZW1bXTtcclxuICBwdWJsaWMgY29tbWlzc2lvbkxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBzaGFyZWRDb21taXNzaW9uTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIGR1cmF0aW9uTGlzdDogbnVtYmVyW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYWRhcHRlcjogRGF0ZUFkYXB0ZXI8YW55PlxyXG4gICkge1xyXG4gICAgdGhpcy5lZGl0b3JJbnN0YW5jZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWRpdG9yQ29tcG9uZW50PigpO1xyXG4gICAgdGhpcy5zZWxlY3RBZGRyZXNzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgdGhpcy5vZmZlcmluZ1R5cGVMaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5PZmZlcmluZ1R5cGVMaXN0Lm1hcChkb2MgPT4gKHsuLi5kb2N9KSk7XHJcbiAgICB0aGlzLmxhbmRVc2VMaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5MYW5kVXNlTGlzdC5tYXAoZG9jID0+ICh7Li4uZG9jfSkpO1xyXG4gICAgdGhpcy5jb21taXNzaW9uTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuQ29tbWlzc2lvbkxpc3RbT2ZmZXJpbmdUeXBlRW51bS5TQUxFXTtcclxuICAgIHRoaXMucm9pTGlzdCA9IE9iamVjdC5hc3NpZ24oW10sIENvbnN0YW50c0NvbXBvbmVudHMuUk9JTGlzdCk7XHJcbiAgICB0aGlzLmR1cmF0aW9uTGlzdCA9IE9iamVjdC5hc3NpZ24oW10sIENvbnN0YW50c0NvbXBvbmVudHMuRHVyYXRpb25MaXN0KTtcclxuICAgIHRoaXMuc2hhcmVkQ29tbWlzc2lvbkxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLlNoYXJlZENvbW1pc3Npb25MaXN0KTtcclxuICAgIHRoaXMuX2FkYXB0ZXIuc2V0TG9jYWxlKCdlcycpO1xyXG4gICAgdGhpcy5fZXJyb3JGaWVsZHMgPSBbXTtcclxuICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSB7XHJcbiAgICAgIGJlZHJvb21zOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfT05MWV9JTlRFR0VSUyldLFxyXG4gICAgICBiYXRocm9vbXM6IFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5SRUdFWF9NSURETEVfTlVNQkVSKV0sXHJcbiAgICAgIHBhcmtpbmdTcGFjZXM6IFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5SRUdFWF9PTkxZX0lOVEVHRVJTKV0sXHJcbiAgICAgIG1haW5BcmVhOiBbXSxcclxuICAgICAgc2Vjb25kYXJ5QXJlYTogW10sXHJcbiAgICAgIGV4dGVybmFsTGluazogW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLlJFR0VYX1dFQlNJVEUpXSxcclxuICAgICAgc2t1OiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfQUxQSEFfTlVNQkVSKV1cclxuICAgIH07XHJcbiAgICB0aGlzLnByb3BlcnR5Rm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgb2ZmZXJpbmc6IFtPZmZlcmluZ1R5cGVFbnVtLlNBTEVdLFxyXG4gICAgICBza3U6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLnNrdV0sXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nOiBbXSxcclxuICAgICAgY29uc3VtZXJSZXBvcnRpbmdPcHRpb246IFsxXSxcclxuICAgICAgY3VycmVuY3k6IFsnTVhOJ10sXHJcbiAgICAgIG1pblByaWNlOiBbXSxcclxuICAgICAgcHJpY2U6IFtdLFxyXG4gICAgICBtYWludGVuYW5jZTogW10sXHJcbiAgICAgIG1haW50ZW5hbmNlUHJpY2U6IFtdLFxyXG4gICAgICB0cmFuc2ZlcjogW10sXHJcbiAgICAgIHRyYW5zZmVyUHJpY2U6IFtdLFxyXG4gICAgICBiZWRyb29tczogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMuYmVkcm9vbXNdLFxyXG4gICAgICBiYXRocm9vbXM6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLmJhdGhyb29tc10sXHJcbiAgICAgIHBhcmtpbmdTcGFjZXM6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLnBhcmtpbmdTcGFjZXNdLFxyXG4gICAgICBtYWluQXJlYTogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMubWFpbkFyZWFdLFxyXG4gICAgICBzZWNvbmRhcnlBcmVhOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5zZWNvbmRhcnlBcmVhXSxcclxuICAgICAgdW5pdDogW0FyZWFVbml0RW51bS5NMl0sXHJcbiAgICAgIGJ1aWxkSW46IFtdLFxyXG4gICAgICBsYW5kVXNlOiBbXSxcclxuICAgICAgZXhjbHVzaXZpdHk6IFtdLFxyXG4gICAgICBtbG06IFtdLFxyXG4gICAgICBzaGFyZWRDb21taXNzaW9uOiBbXSxcclxuICAgICAgYWdyZWVtZW50RGF0ZTogW3t2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRydWV9XSxcclxuICAgICAgZHVyYXRpb246IFtdLFxyXG4gICAgICBjb21taXNzaW9uOiBbXSxcclxuICAgICAgcm9pOiBbXSxcclxuICAgICAgZGVzY3JpcHRpb246IFtdLFxyXG4gICAgICBleHRlcm5hbExpbms6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLmV4dGVybmFsTGlua10sXHJcbiAgICAgIG5vdGVzOiBbXSxcclxuICAgICAgYWRkcmVzczogdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGNvdW50cnk6IFtdLFxyXG4gICAgICAgIHBvc3RhbENvZGU6IFtdLFxyXG4gICAgICAgIHN0YXRlOiBbXSxcclxuICAgICAgICBjaXR5OiBbXSxcclxuICAgICAgICB0b3duc2hpcDogW10sXHJcbiAgICAgICAgY29sb255OiBbXSxcclxuICAgICAgICBzdHJlZXQ6IFtdLFxyXG4gICAgICAgIGV4dE51bWJlcjogW10sXHJcbiAgICAgICAgaW50TnVtYmVyOiBbXSxcclxuICAgICAgICBtejogW10sXHJcbiAgICAgICAgbHQ6IFtdLFxyXG4gICAgICAgIHZpc2libGU6IFt0cnVlXSxcclxuICAgICAgfSksXHJcbiAgICB9LCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFByb3BlcnR5RWRpdG9yVmFsaWRhdG9ycy52YWxpZGF0b3JcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2VvUHRHZW5lcmF0b3IoZ2VvUHQ6IEdlb1B0LCBtaW5EaXN0YW5jZTogbnVtYmVyLCBtYXhEaXN0YW5jZTogbnVtYmVyKTogR2VvUHQge1xyXG4gICAgY29uc3QgRUFSVEhfUkFESVVTX01FVEVSUyA9IDYzNzEwMTAuMDtcclxuICAgIGNvbnN0IGwgPSBNYXRoLnJhbmRvbSgpICogKG1heERpc3RhbmNlIC0gbWluRGlzdGFuY2UpICsgbWluRGlzdGFuY2U7XHJcbiAgICBjb25zdCBhbHBoYSA9IE1hdGgucmFuZG9tKCkgKiBNYXRoLlBJIC8gMjtcclxuICAgIGNvbnN0IHN4ID0gKE1hdGgucmFuZG9tKCkgPCAwLjUpID8gbCAqIE1hdGguY29zKGFscGhhKSA6IC1sICogTWF0aC5jb3MoYWxwaGEpO1xyXG4gICAgY29uc3Qgc3kgPSAoTWF0aC5yYW5kb20oKSA8IDAuNSkgPyBsICogTWF0aC5zaW4oYWxwaGEpIDogLWwgKiBNYXRoLnNpbihhbHBoYSk7XHJcbiAgICBjb25zdCBkZWx0YUxhdCA9IHN5IC8gRUFSVEhfUkFESVVTX01FVEVSUyAqIDE4MCAvIE1hdGguUEk7XHJcbiAgICBjb25zdCBsYXQgPSBnZW9QdC5sYXRpdHVkZSArIGRlbHRhTGF0O1xyXG4gICAgY29uc3QgZGVsdGFMb25nID0gc3ggLyBFQVJUSF9SQURJVVNfTUVURVJTIC8gTWF0aC5jb3MobGF0ICogTWF0aC5QSSAvIDE4MCkgKiAxODAgLyBNYXRoLlBJO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGF0aXR1ZGU6IGxhdCxcclxuICAgICAgbG9uZ2l0dWRlOiBnZW9QdC5sb25naXR1ZGUgKyBkZWx0YUxvbmdcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubGlzdGVuQ2hhbmdlc09uRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3V0aWxzJ10gJiYgY2hhbmdlc1sndXRpbHMnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5jdXJyZW5jeUxpc3QgPSBjaGFuZ2VzWyd1dGlscyddLmN1cnJlbnRWYWx1ZS5jZXJzO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3Byb3BlcnR5VHlwZSddICYmIGNoYW5nZXNbJ3Byb3BlcnR5VHlwZSddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnByb3BlcnR5VHlwZSA9IGNoYW5nZXNbJ3Byb3BlcnR5VHlwZSddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5zZWFyY2hBbWVuaXRpZXNCeVByb3BlcnR5VHlwZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3Byb3BlcnR5J10gJiYgY2hhbmdlc1sncHJvcGVydHknXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5jcmVhdGVQcm9wZXJ0eShjaGFuZ2VzWydwcm9wZXJ0eSddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snYWRkcmVzcyddICYmIGNoYW5nZXNbJ2FkZHJlc3MnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy51cGRhdGVBZGRyZXNzRm9ybShjaGFuZ2VzWydhZGRyZXNzJ10uY3VycmVudFZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UuZW1pdCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eSgpOiBOZXdQcm9wZXJ0eSB7XHJcbiAgICB0aGlzLnNldFZhbGlkYXRvck9uRmllbGRzKHRoaXMuX2Vycm9yRmllbGRzLCB0cnVlKTtcclxuICAgIHRoaXMudXBkYXRlUHJvcGVydHlCeUZvcm0odGhpcy5wcm9wZXJ0eUZvcm0uZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZvcm1JbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5zZXRWYWxpZGF0b3JPbkZpZWxkcyh0aGlzLl9lcnJvckZpZWxkcywgdHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eUZvcm0uaW52YWxpZDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFtZW5pdHkoYW1lbml0eTogQW1lbml0eUl0ZW0pOiB2b2lkIHtcclxuICAgIGFtZW5pdHkuY2hlY2tlZCA9ICFhbWVuaXR5LmNoZWNrZWQ7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hbWVuaXRpZXNbYW1lbml0eS52YWx1ZV0gPSBhbWVuaXR5LmNoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICBnb1RvU2VsZWN0QWRkcmVzcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0QWRkcmVzcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRFcnJvcnNPbkZpZWxkcyhlcnJvcnM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lcnJvckZpZWxkcyA9IGVycm9ycztcclxuICAgIHRoaXMuc2V0VmFsaWRhdG9yT25GaWVsZHModGhpcy5fZXJyb3JGaWVsZHMpO1xyXG4gICAgdGhpcy5fYnRuU3VibWl0UmVmLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQWRkcmVzc0Zvcm0oYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGFkZHJlc3M6IHtcclxuICAgICAgICBjb3VudHJ5OiBhZGRyZXNzLmNvdW50cnksXHJcbiAgICAgICAgc3RhdGU6IGFkZHJlc3Muc3RhdGUsXHJcbiAgICAgICAgY2l0eTogYWRkcmVzcy5jaXR5LFxyXG4gICAgICAgIHRvd25zaGlwOiBhZGRyZXNzLnRvd25zaGlwLFxyXG4gICAgICAgIGNvbG9ueTogYWRkcmVzcy5jb2xvbnksXHJcbiAgICAgICAgc3RyZWV0OiBhZGRyZXNzLnN0cmVldCxcclxuICAgICAgICBwb3N0YWxDb2RlOiBhZGRyZXNzLnBvc3RhbENvZGUsXHJcbiAgICAgICAgZXh0TnVtYmVyOiBhZGRyZXNzLm91dGRvb3JOdW1iZXJcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkFtZW5pdGllcygpOiB2b2lkIHtcclxuICAgIHRoaXMuYW1lbml0aWVzTGlzdC5mb3JFYWNoKChhbWVuaXR5KSA9PiB7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IHRoaXMuX3Byb3BlcnR5LmFtZW5pdGllc1thbWVuaXR5LnZhbHVlXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25Mb2NhdGlvbkZlYXR1cmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mZWF0dXJlc0xpc3QuZm9yRWFjaCgoYW1lbml0eSkgPT4ge1xyXG4gICAgICBhbWVuaXR5LmNoZWNrZWQgPSB0aGlzLl9wcm9wZXJ0eS5hbWVuaXRpZXNbYW1lbml0eS52YWx1ZV07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNzaWduQ29tbWlzc2lvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuY29tbWlzc2lvbkxpc3QgPSBDb25zdGFudHNDb21wb25lbnRzLkNvbW1pc3Npb25MaXN0W3RoaXMuX3Byb3BlcnR5Lm9mZmVyaW5nXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNzaWduQnVzaW5lc3NSdWxlcygpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5wcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGVFbnVtLlJPT006XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBvZmZlcmluZzogT2ZmZXJpbmdUeXBlRW51bS5SRU5UXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlRW51bS5JTlZFU1RNRU5UOlxyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgb2ZmZXJpbmc6IE9mZmVyaW5nVHlwZUVudW0uU0FMRVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3Byb3BlcnR5LnN0YXR1cyA9PT0gU3RhdHVzVHlwZUVudW0uQU5OT1VOQ0VEKSB7XHJcbiAgICAgIGNvbnN0IGVycm9ycyA9IFV0aWxzLmxpc3RFcnJvcnNCeVByb3BlcnR5VHlwZUZvclB1Ymxpc2godGhpcy5fcHJvcGVydHkudHlwZSk7XHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9yT25GaWVsZHMoZXJyb3JzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybUJ5UHJvcGVydHkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgb2ZmZXJpbmc6IHRoaXMuX3Byb3BlcnR5Lm9mZmVyaW5nLFxyXG4gICAgICBza3U6IHRoaXMuX3Byb3BlcnR5LnNrdSxcclxuICAgICAgY29uc3VtZXJSZXBvcnRpbmc6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb25zdW1lclJlcG9ydGluZyAmJiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcgIT09IDAsXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nT3B0aW9uOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcsXHJcbiAgICAgIGN1cnJlbmN5OiB0aGlzLl9wcm9wZXJ0eS5jdXJyZW5jeSxcclxuICAgICAgbWluUHJpY2U6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sb3dlc3RQcmljZSxcclxuICAgICAgcHJpY2U6IHRoaXMuX3Byb3BlcnR5LnByaWNlLFxyXG4gICAgICBtYWludGVuYW5jZTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSAmJiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5jb25kb21pbml1bUZlZVByaWNlICE9PSAwLFxyXG4gICAgICBtYWludGVuYW5jZVByaWNlOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5jb25kb21pbml1bUZlZVByaWNlLFxyXG4gICAgICB0cmFuc2ZlcjogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSAmJiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGVhc2VUcmFuc2ZlclByaWNlICE9PSAwLFxyXG4gICAgICB0cmFuc2ZlclByaWNlOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGVhc2VUcmFuc2ZlclByaWNlLFxyXG4gICAgICBiZWRyb29tczogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmVkcm9vbXMsXHJcbiAgICAgIGJhdGhyb29tczogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmF0aHJvb21zLFxyXG4gICAgICBwYXJraW5nU3BhY2VzOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5wYXJraW5nU3BhY2VzLFxyXG4gICAgICBtYWluQXJlYTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMubWFpbkFyZWEsXHJcbiAgICAgIHNlY29uZGFyeUFyZWE6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnNlY29uZGFyeUFyZWEsXHJcbiAgICAgIHVuaXQ6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmFyZWFVbml0LFxyXG4gICAgICBidWlsZEluOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5idWlsdEluID8gbmV3IERhdGUodGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYnVpbHRJbiwgMSwgMSkgOiBudWxsLFxyXG4gICAgICBsYW5kVXNlOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5sYW5kVXNlLFxyXG4gICAgICBleGNsdXNpdml0eTogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmV4Y2x1c2l2aXR5LFxyXG4gICAgICBtbG06IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5tbHMsXHJcbiAgICAgIHNoYXJlZENvbW1pc3Npb246IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5zaGFyZWRDb21taXNzaW9uLFxyXG4gICAgICBhZ3JlZW1lbnREYXRlOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFN0YXJ0RGF0ZSA/XHJcbiAgICAgICAgbW9tZW50KG5ldyBNRGF0ZSh0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFN0YXJ0RGF0ZSkudG9EYXRlKCkpIDogbnVsbCxcclxuICAgICAgZHVyYXRpb246IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5saXN0aW5nQWdyZWVtZW50VGltZSxcclxuICAgICAgY29tbWlzc2lvbjogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbW1pc3Npb24sXHJcbiAgICAgIHJvaTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucm9pLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5fcHJvcGVydHkuZGVzY3JpcHRpb24sXHJcbiAgICAgIGV4dGVybmFsTGluazogdGhpcy5fcHJvcGVydHkuZXh0ZXJuYWxMaW5rLFxyXG4gICAgICBub3RlczogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLm5vdGVzLFxyXG4gICAgICBhZGRyZXNzOiB7XHJcbiAgICAgICAgY291bnRyeTogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5jb3VudHJ5LFxyXG4gICAgICAgIHN0YXRlOiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnN0YXRlLFxyXG4gICAgICAgIGNpdHk6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY2l0eSxcclxuICAgICAgICB0b3duc2hpcDogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy50b3duc2hpcCxcclxuICAgICAgICBjb2xvbnk6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY29sb255LFxyXG4gICAgICAgIHBvc3RhbENvZGU6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MucG9zdGFsQ29kZSxcclxuICAgICAgICBzdHJlZXQ6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Muc3RyZWV0LFxyXG4gICAgICAgIGV4dE51bWJlcjogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5vdXRkb29yTnVtYmVyLFxyXG4gICAgICAgIGludE51bWJlcjogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5pbnRlcmlvck51bWJlcixcclxuICAgICAgICBtejogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5teixcclxuICAgICAgICBsdDogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5sdCxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnZpc2libGUgfHwgZmFsc2UsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQcm9wZXJ0eUJ5Rm9ybShkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnR5cGUgPSB0aGlzLnByb3BlcnR5VHlwZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5Lm9mZmVyaW5nID0gZGF0YS5vZmZlcmluZztcclxuICAgIHRoaXMuX3Byb3BlcnR5LnNrdSA9IGRhdGEuc2t1O1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbnN1bWVyUmVwb3J0aW5nID0gZGF0YS5jb25zdW1lclJlcG9ydGluZyA/IGRhdGEuY29uc3VtZXJSZXBvcnRpbmdPcHRpb24gOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuY3VycmVuY3kgPSBkYXRhLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxvd2VzdFByaWNlID0gZGF0YS5taW5QcmljZSA/IE51bWJlcihkYXRhLm1pblByaWNlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcmljZSA9IGRhdGEucHJpY2UgPyBOdW1iZXIoZGF0YS5wcmljZSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSA9IGRhdGEubWFpbnRlbmFuY2UgPyBOdW1iZXIoZGF0YS5tYWludGVuYW5jZVByaWNlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGVhc2VUcmFuc2ZlclByaWNlID0gZGF0YS50cmFuc2ZlciA/IE51bWJlcihkYXRhLnRyYW5zZmVyUHJpY2UpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJlZHJvb21zID0gZGF0YS5iZWRyb29tcyA/IE51bWJlcihkYXRhLmJlZHJvb21zKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5iYXRocm9vbXMgPSBkYXRhLmJhdGhyb29tcyA/IE51bWJlcihkYXRhLmJhdGhyb29tcykgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucGFya2luZ1NwYWNlcyA9IGRhdGEucGFya2luZ1NwYWNlcyA/IE51bWJlcihkYXRhLnBhcmtpbmdTcGFjZXMpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLm1haW5BcmVhID0gZGF0YS5tYWluQXJlYSA/IE51bWJlcihkYXRhLm1haW5BcmVhKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5zZWNvbmRhcnlBcmVhID0gZGF0YS5zZWNvbmRhcnlBcmVhID8gTnVtYmVyKGRhdGEuc2Vjb25kYXJ5QXJlYSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYXJlYVVuaXQgPSBkYXRhLnVuaXQ7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5idWlsdEluID0gZGF0YS5idWlsZEluID8gZGF0YS5idWlsZEluLmdldEZ1bGxZZWFyKCkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMubGFuZFVzZSA9IGRhdGEubGFuZFVzZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5leGNsdXNpdml0eSA9IGRhdGEuZXhjbHVzaXZpdHk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubWxzID0gZGF0YS5tbG07XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uc2hhcmVkQ29tbWlzc2lvbiA9IGRhdGEubWxtID8gTnVtYmVyKGRhdGEuc2hhcmVkQ29tbWlzc2lvbikgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRTdGFydERhdGUgPVxyXG4gICAgICBkYXRhLmFncmVlbWVudERhdGUgPyBNRGF0ZS5nZXRUaW1lc3RhbXAoZGF0YS5hZ3JlZW1lbnREYXRlLnRvRGF0ZSgpKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFRpbWUgPSBkYXRhLmR1cmF0aW9uO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbW1pc3Npb24gPSBkYXRhLmNvbW1pc3Npb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5yb2kgPSBkYXRhLnJvaTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmV4dGVybmFsTGluayA9IGRhdGEuZXh0ZXJuYWxMaW5rO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLm5vdGVzID0gZGF0YS5ub3RlcztcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY291bnRyeSA9IGRhdGEuYWRkcmVzcy5jb3VudHJ5O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5zdGF0ZSA9IGRhdGEuYWRkcmVzcy5zdGF0ZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY2l0eSA9IGRhdGEuYWRkcmVzcy5jaXR5O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy50b3duc2hpcCA9IGRhdGEuYWRkcmVzcy50b3duc2hpcDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY29sb255ID0gZGF0YS5hZGRyZXNzLmNvbG9ueTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MucG9zdGFsQ29kZSA9IGRhdGEuYWRkcmVzcy5wb3N0YWxDb2RlO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5zdHJlZXQgPSBkYXRhLmFkZHJlc3Muc3RyZWV0O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5vdXRkb29yTnVtYmVyID0gZGF0YS5hZGRyZXNzLmV4dE51bWJlcjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuaW50ZXJpb3JOdW1iZXIgPSBkYXRhLmFkZHJlc3MuaW50TnVtYmVyO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5teiA9IGRhdGEuYWRkcmVzcy5tejtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubHQgPSBkYXRhLmFkZHJlc3MubHQ7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmxvY2F0aW9uID0gdGhpcy5hZGRyZXNzLmxvY2F0aW9uO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5wdWJsaWNMb2NhdGlvbiA9ICFkYXRhLmFkZHJlc3MudmlzaWJsZSA/XHJcbiAgICAgIEVkaXRvckNvbXBvbmVudC5nZW9QdEdlbmVyYXRvcih0aGlzLmFkZHJlc3MubG9jYXRpb24sIDIwMCwgNDAwKSA6IHRoaXMuYWRkcmVzcy5sb2NhdGlvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MudmlzaWJsZSA9IGRhdGEuYWRkcmVzcy52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2hBbWVuaXRpZXNCeVByb3BlcnR5VHlwZSgpOiB2b2lkIHtcclxuICAgIENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5mb3JFYWNoKHR5cGUgPT4ge1xyXG4gICAgICBpZiAodHlwZS52YWx1ZSA9PT0gdGhpcy5wcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICB0aGlzLl9wcm9wZXJ0eVR5cGVJdGVtID0gdHlwZTtcclxuICAgICAgICB0aGlzLmFtZW5pdGllc0xpc3QgPSB0eXBlLmFtZW5pdGllcy5tYXAoaXRlbSA9PiAoey4uLml0ZW19KSk7XHJcbiAgICAgICAgdGhpcy5mZWF0dXJlc0xpc3QgPSB0eXBlLmZlYXR1cmVzLm1hcChpdGVtID0+ICh7Li4uaXRlbX0pKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNoYW5nZXNPbkZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snb2ZmZXJpbmcnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tbWlzc2lvbkxpc3QgPSBDb25zdGFudHNDb21wb25lbnRzLkNvbW1pc3Npb25MaXN0W3ZhbHVlXTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIG1pblByaWNlOiBudWxsLFxyXG4gICAgICAgICAgbWF4UHJpY2U6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1sncHJpY2UnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiBOdW1iZXIodmFsdWUpID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgbWluUHJpY2U6IG51bGxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snbWxtJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ3NoYXJlZENvbW1pc3Npb24nXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snbWFpbnRlbmFuY2UnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snbWFpbnRlbmFuY2VQcmljZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWyd0cmFuc2ZlciddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWyd0cmFuc2ZlclByaWNlJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ2NvbnN1bWVyUmVwb3J0aW5nJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ2NvbnN1bWVyUmVwb3J0aW5nT3B0aW9uJ10uc2V0VmFsdWUoMSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQcm9wZXJ0eShwcm9wZXJ0eT86IE5ld1Byb3BlcnR5KTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eSA9IG5ldyBOZXdQcm9wZXJ0eShwcm9wZXJ0eSB8fCBudWxsKTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnR5cGUgPSB0aGlzLnByb3BlcnR5VHlwZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mbyA9IG5ldyBQcm9wZXJ0eUluZm8ocHJvcGVydHkgPyBwcm9wZXJ0eS5wcm9wZXJ0eUluZm8gOiBudWxsKTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKHByb3BlcnR5ID8gcHJvcGVydHkuZmVhdHVyZXMgOiBudWxsKTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MgPSBuZXcgQWRkcmVzcyhwcm9wZXJ0eSA/IHByb3BlcnR5LmFkZHJlc3MgOiBudWxsKTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFtZW5pdGllcyA9IG5ldyBBbWVuaXRpZXMocHJvcGVydHkgPyBwcm9wZXJ0eS5hbWVuaXRpZXMgOiBudWxsKTtcclxuICAgIHRoaXMuYXNzaWduQnVzaW5lc3NSdWxlcygpO1xyXG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmlkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybUJ5UHJvcGVydHkoKTtcclxuICAgICAgdGhpcy5hc3NpZ25BbWVuaXRpZXMoKTtcclxuICAgICAgdGhpcy5hc3NpZ25Mb2NhdGlvbkZlYXR1cmVzKCk7XHJcbiAgICAgIHRoaXMuYXNzaWduQ29tbWlzc2lvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWxpZGF0b3JPbkZpZWxkcyhlcnJvcnM6IHN0cmluZ1tdLCByZW1vdmU/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlcnJvcnMuZm9yRWFjaChlcnJvciA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9yc1tlcnJvcl0gPyB0aGlzLl92YWxpZGF0b3JzW2Vycm9yXSA6IFtdKTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0uc2V0VmFsaWRhdG9ycyhcclxuICAgICAgICAgIHRoaXMuX3ZhbGlkYXRvcnNbZXJyb3JdID8gdGhpcy5fdmFsaWRhdG9yc1tlcnJvcl0uY29uY2F0KFZhbGlkYXRvcnMucmVxdWlyZWQpIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -52,6 +52,7 @@ export class MultimediaUploaderComponent {
|
|
|
52
52
|
static getYouTubeID(text) {
|
|
53
53
|
if (text.indexOf('https://youtu.be/') !== -1) {
|
|
54
54
|
text = text.replace('https://youtu.be/', '');
|
|
55
|
+
return text;
|
|
55
56
|
}
|
|
56
57
|
else if (text.indexOf('https://www.youtube.com/') !== -1) {
|
|
57
58
|
text = text.replace('https://www.youtube.com/', '');
|
|
@@ -65,6 +66,11 @@ export class MultimediaUploaderComponent {
|
|
|
65
66
|
else {
|
|
66
67
|
return text = null;
|
|
67
68
|
}
|
|
69
|
+
if (text.indexOf('&')) {
|
|
70
|
+
/** @type {?} */
|
|
71
|
+
const arr = text.split('&');
|
|
72
|
+
text = arr[0];
|
|
73
|
+
}
|
|
68
74
|
return text;
|
|
69
75
|
}
|
|
70
76
|
/**
|
|
@@ -388,4 +394,4 @@ if (false) {
|
|
|
388
394
|
*/
|
|
389
395
|
MultimediaUploaderComponent.prototype._dialog;
|
|
390
396
|
}
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm9wZXJ0eS9jb21wb25lbnRzL211bHRpbWVkaWEtdXBsb2FkZXIvbXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQVksTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUVqRSxxQ0FJQzs7O0lBSEMsNkNBQTJCOztJQUMzQiw0Q0FBb0I7O0lBQ3BCLDBDQUFzQjs7QUFReEIsTUFBTSxPQUFPLDJCQUEyQjs7Ozs7SUFTdEMsWUFDbUMsS0FBNkIsRUFDdEQsT0FBa0c7UUFEekUsVUFBSyxHQUFMLEtBQUssQ0FBd0I7UUFDdEQsWUFBTyxHQUFQLE9BQU8sQ0FBMkY7UUFFMUcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM5QixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVks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QzFCLDZDQUF1Qjs7SUFDdkIsbURBQTRCOzs7OztJQUM1QixnREFBK0I7Ozs7O0lBRzdCLDRDQUE4RDs7Ozs7SUFDOUQsOENBQTBHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtQRmlsZSwgUEZpbGVUeXBlRW51bSwgVXNlck1lZGlhfSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuXHJcbmludGVyZmFjZSBNdWx0aW1lZGlhVXBsb2FkZXJEYXRhIHtcclxuICBjdXJyZW50VHlwZTogUEZpbGVUeXBlRW51bTtcclxuICBtdWx0aW1lZGlhOiBQRmlsZVtdO1xyXG4gIG5ld01lZGlhOiBVc2VyTWVkaWFbXTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcHJvcGVydHktbXVsdGltZWRpYS11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGltZWRpYVVwbG9hZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGZpbGVUeXBlOiAnaW1hZ2UnIHwgJ2ltYWdlMzYwJyB8ICdkb2N1bWVudCc7XHJcbiAgcHVibGljIGltYWdlczogUEZpbGVbXTtcclxuICBwdWJsaWMgaW1hZ2VzMzYwOiBQRmlsZVtdO1xyXG4gIHB1YmxpYyB2aWRlb3M6IFBGaWxlW107XHJcbiAgcHVibGljIGN1cnJlbnRJbmRleDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX25ld01lZGlhOiBVc2VyTWVkaWFbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YTogTXVsdGltZWRpYVVwbG9hZGVyRGF0YSxcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nUmVmPE11bHRpbWVkaWFVcGxvYWRlckNvbXBvbmVudCwgeyBtdWx0aW1lZGlhOiBQRmlsZVtdLCBuZXdNZWRpYTogVXNlck1lZGlhW10gfT5cclxuICApIHtcclxuICAgIHN3aXRjaCAodGhpcy5fZGF0YS5jdXJyZW50VHlwZSkge1xyXG4gICAgICBjYXNlIFBGaWxlVHlwZUVudW0uSU1BR0U6XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9ICdpbWFnZSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFBGaWxlVHlwZUVudW0uU1BIRVJJQzpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2ltYWdlMzYwJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2RvY3VtZW50JztcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmltYWdlcyA9IFtdO1xyXG4gICAgdGhpcy5pbWFnZXMzNjAgPSBbXTtcclxuICAgIHRoaXMudmlkZW9zID0gW107XHJcbiAgICB0aGlzLl9uZXdNZWRpYSA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0WW91VHViZUlEKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGV4dC5pbmRleE9mKCdodHRwczovL3lvdXR1LmJlLycpICE9PSAtMSkge1xyXG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdodHRwczovL3lvdXR1LmJlLycsICcnKTtcclxuICAgIH0gZWxzZSBpZiAodGV4dC5pbmRleE9mKCdodHRwczovL3d3dy55b3V0dWJlLmNvbS8nKSAhPT0gLTEpIHtcclxuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnaHR0cHM6Ly93d3cueW91dHViZS5jb20vJywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRleHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRleHQuaW5kZXhPZignd2F0Y2g/dj0nKSAhPT0gLTEpIHtcclxuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnd2F0Y2g/dj0nLCAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wYXJzZU11bHRpbWVkaWEoKTtcclxuICB9XHJcblxyXG4gIG9uVXBsb2FkSW1hZ2UoZXY6IFVzZXJNZWRpYSB8IFVzZXJNZWRpYVtdKTogdm9pZCB7XHJcbiAgICBpZiAoIWV2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5maWxlVHlwZSkge1xyXG4gICAgICBjYXNlICdpbWFnZSc6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXYpKSB7XHJcbiAgICAgICAgICBldi5mb3JFYWNoKGltYWdlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJbWFnZVBGaWxlKGltYWdlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlUEZpbGUoZXYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaW1hZ2UzNjAnOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSkge1xyXG4gICAgICAgICAgZXYuZm9yRWFjaChpbWFnZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSW1hZ2UzNjBQRmlsZShpbWFnZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVJbWFnZTM2MFBGaWxlKGV2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblRhYkNoYW5nZWQodGFiOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGFiO1xyXG4gICAgc3dpdGNoICh0YWIpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHRoaXMuZmlsZVR5cGUgPSAnaW1hZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9ICdpbWFnZTM2MCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkxpc3RDaGFuZ2VkKGV2OiBQRmlsZVtdKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudEluZGV4KSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikgJiYgZXYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZXYgPSBldi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpbmRleDtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VzID0gZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXYpICYmIGV2Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGV2ID0gZXYubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLnBvc2l0aW9uID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmltYWdlczM2MCA9IGV2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSAmJiBldi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBldiA9IGV2Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wb3NpdGlvbiA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy52aWRlb3MgPSBldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVNZWRpYShldjogUEZpbGUpOiB2b2lkIHtcclxuICAgIGxldCBpID0gLTE7XHJcbiAgICBpZiAoIWV2LmlkKSB7XHJcbiAgICAgIHN3aXRjaCAoZXYudHlwZSkge1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5JTUFHRTpcclxuICAgICAgICAgIHRoaXMuaW1hZ2VzLnNwbGljZSh0aGlzLmltYWdlcy5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uU1BIRVJJQzpcclxuICAgICAgICAgIHRoaXMuaW1hZ2VzMzYwLnNwbGljZSh0aGlzLmltYWdlczM2MC5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uVklERU86XHJcbiAgICAgICAgICB0aGlzLnZpZGVvcy5zcGxpY2UodGhpcy52aWRlb3MuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbmV3TWVkaWEuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS51cmwgPT09IGV2LmZpbGVDUy50aHVtYm5haWwpIHtcclxuICAgICAgICAgIGkgPSBpbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoaSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fbmV3TWVkaWEuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzd2l0Y2ggKGV2LnR5cGUpIHtcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uSU1BR0U6XHJcbiAgICAgICAgICB0aGlzLmltYWdlcy5zcGxpY2UodGhpcy5pbWFnZXMuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM6XHJcbiAgICAgICAgICB0aGlzLmltYWdlczM2MC5zcGxpY2UodGhpcy5pbWFnZXMzNjAuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlZJREVPOlxyXG4gICAgICAgICAgdGhpcy52aWRlb3Muc3BsaWNlKHRoaXMudmlkZW9zLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbllvdVR1YmVJbnB1dFRleHRDaGFuZ2VkKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XHJcbiAgICBpZiAoaW5wdXQudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGlkID0gTXVsdGltZWRpYVVwbG9hZGVyQ29tcG9uZW50LmdldFlvdVR1YmVJRChpbnB1dC52YWx1ZSk7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpZC5sZW5ndGggPj0gMTEpIHtcclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQRmlsZSgpO1xyXG4gICAgICBmaWxlLnR5cGUgPSBQRmlsZVR5cGVFbnVtLlZJREVPO1xyXG4gICAgICBmaWxlLm1lZGlhID0gdHJ1ZTtcclxuICAgICAgZmlsZS5uYW1lID0gYHZpZGVvXyR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcclxuICAgICAgZmlsZS5maWxlQ1MgPSB7XHJcbiAgICAgICAgdGh1bWJuYWlsOiBpZCxcclxuICAgICAgICBibG9iTmFtZTogbnVsbFxyXG4gICAgICB9O1xyXG4gICAgICBmaWxlLnBvc2l0aW9uID0gdGhpcy52aWRlb3MubGVuZ3RoID09PSAwID8gMCA6IHRoaXMudmlkZW9zLmxlbmd0aDtcclxuICAgICAgdGhpcy52aWRlb3MucHVzaChmaWxlKTtcclxuICAgICAgaW5wdXQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjY2VwdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZSh7bXVsdGltZWRpYTogdGhpcy5qb2luTXVsdGltZWRpYVR5cGVzKCksIG5ld01lZGlhOiB0aGlzLl9uZXdNZWRpYX0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2cuY2xvc2UobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUltYWdlUEZpbGUoaW1hZ2U6IFVzZXJNZWRpYSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZSA9IG5ldyBQRmlsZSgpO1xyXG4gICAgZmlsZS50eXBlID0gUEZpbGVUeXBlRW51bS5JTUFHRTtcclxuICAgIGltYWdlLnR5cGUgPSBQRmlsZVR5cGVFbnVtLklNQUdFO1xyXG4gICAgZmlsZS5tZWRpYSA9IHRydWU7XHJcbiAgICBmaWxlLmZpbGVDUyA9IHtcclxuICAgICAgdGh1bWJuYWlsOiBpbWFnZS51cmwsXHJcbiAgICAgIGJsb2JOYW1lOiBudWxsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgaW1hZ2VfJHtEYXRlLm5vdygpfV8ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApfS4ke2ltYWdlLmJsb2IudHlwZS5yZXBsYWNlKCdpbWFnZS8nLCAnJyl9YDtcclxuICAgIGZpbGUubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgaW1hZ2UubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgZmlsZS5wb3NpdGlvbiA9IHRoaXMuaW1hZ2VzLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLmltYWdlcy5sZW5ndGg7XHJcbiAgICB0aGlzLl9uZXdNZWRpYS5wdXNoKGltYWdlKTtcclxuICAgIHRoaXMuaW1hZ2VzLnB1c2goZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUltYWdlMzYwUEZpbGUoaW1hZ2U6IFVzZXJNZWRpYSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZSA9IG5ldyBQRmlsZSgpO1xyXG4gICAgZmlsZS50eXBlID0gUEZpbGVUeXBlRW51bS5TUEhFUklDO1xyXG4gICAgaW1hZ2UudHlwZSA9IFBGaWxlVHlwZUVudW0uU1BIRVJJQztcclxuICAgIGZpbGUubWVkaWEgPSB0cnVlO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgc3BoZXJpY18ke0RhdGUubm93KCl9XyR7TWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCl9LiR7aW1hZ2UuYmxvYi50eXBlLnJlcGxhY2UoJ2ltYWdlLycsICcnKX1gO1xyXG4gICAgZmlsZS5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICBpbWFnZS5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICBmaWxlLmZpbGVDUyA9IHtcclxuICAgICAgdGh1bWJuYWlsOiBpbWFnZS51cmwsXHJcbiAgICAgIGJsb2JOYW1lOiBudWxsXHJcbiAgICB9O1xyXG4gICAgZmlsZS5wb3NpdGlvbiA9IHRoaXMuaW1hZ2VzMzYwLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLmltYWdlczM2MC5sZW5ndGg7XHJcbiAgICB0aGlzLl9uZXdNZWRpYS5wdXNoKGltYWdlKTtcclxuICAgIHRoaXMuaW1hZ2VzMzYwLnB1c2goZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlTXVsdGltZWRpYSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kYXRhKSB7XHJcbiAgICAgIHRoaXMuX2RhdGEubXVsdGltZWRpYS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uSU1BR0U6XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM6XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VzMzYwLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlZJREVPOlxyXG4gICAgICAgICAgICB0aGlzLnZpZGVvcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9uZXdNZWRpYSA9IHRoaXMuX2RhdGEubmV3TWVkaWEgfHwgW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGpvaW5NdWx0aW1lZGlhVHlwZXMoKTogUEZpbGVbXSB7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSBbXTtcclxuICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuY29uY2F0KHRoaXMuaW1hZ2VzKTtcclxuICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuY29uY2F0KHRoaXMuaW1hZ2VzMzYwKTtcclxuICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuY29uY2F0KHRoaXMudmlkZW9zKTtcclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm9wZXJ0eS9jb21wb25lbnRzL211bHRpbWVkaWEtdXBsb2FkZXIvbXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQVksTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUVqRSxxQ0FJQzs7O0lBSEMsNkNBQTJCOztJQUMzQiw0Q0FBb0I7O0lBQ3BCLDBDQUFzQjs7QUFReEIsTUFBTSxPQUFPLDJCQUEyQjs7Ozs7SUFTdEMsWUFDbUMsS0FBNkIsRUFDdEQsT0FBa0c7UUFEekUsVUFBSyxHQUFMLEtBQUssQ0FBd0I7UUFDdEQsWUFBTyxHQUFQLE9BQU8sQ0FBMkY7UUFFMUcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM5QixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVks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LENBQUMsWUFBWSxFQUFFO1lBQ3pCLEtBQUssQ0FBQztnQkFDSixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3RDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRzs7Ozs7b0JBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDLEVBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDbEI7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3RDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRzs7Ozs7b0JBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDLEVBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztpQkFDckI7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3RDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRzs7Ozs7b0JBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDLEVBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDbEI7Z0JB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O0lBQ2xCLENBQUM7OztZQXBRRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtDQUFrQztnQkFDNUMsbzdIQUFtRDs7YUFFcEQ7Ozs7NENBV0ksTUFBTSxTQUFDLGVBQWU7WUF4QkYsWUFBWTs7OztJQWdCbkMsK0NBQW1EOztJQUNuRCw2Q0FBdUI7O0lBQ3ZCLGdEQUEwQjs7SUFDMUIsNkNBQXVCOztJQUN2QixtREFBNEI7Ozs7O0lBQzVCLGdEQUErQjs7Ozs7SUFHN0IsNENBQThEOzs7OztJQUM5RCw4Q0FBMEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1BGaWxlLCBQRmlsZVR5cGVFbnVtLCBVc2VyTWVkaWF9IGZyb20gJ0BtYXBsYW5kZXIvdHlwZXMnO1xyXG5cclxuaW50ZXJmYWNlIE11bHRpbWVkaWFVcGxvYWRlckRhdGEge1xyXG4gIGN1cnJlbnRUeXBlOiBQRmlsZVR5cGVFbnVtO1xyXG4gIG11bHRpbWVkaWE6IFBGaWxlW107XHJcbiAgbmV3TWVkaWE6IFVzZXJNZWRpYVtdO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm9wZXJ0eS1tdWx0aW1lZGlhLXVwbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aW1lZGlhVXBsb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBwdWJsaWMgZmlsZVR5cGU6ICdpbWFnZScgfCAnaW1hZ2UzNjAnIHwgJ2RvY3VtZW50JztcclxuICBwdWJsaWMgaW1hZ2VzOiBQRmlsZVtdO1xyXG4gIHB1YmxpYyBpbWFnZXMzNjA6IFBGaWxlW107XHJcbiAgcHVibGljIHZpZGVvczogUEZpbGVbXTtcclxuICBwdWJsaWMgY3VycmVudEluZGV4OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfbmV3TWVkaWE6IFVzZXJNZWRpYVtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhOiBNdWx0aW1lZGlhVXBsb2FkZXJEYXRhLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2dSZWY8TXVsdGltZWRpYVVwbG9hZGVyQ29tcG9uZW50LCB7IG11bHRpbWVkaWE6IFBGaWxlW10sIG5ld01lZGlhOiBVc2VyTWVkaWFbXSB9PlxyXG4gICkge1xyXG4gICAgc3dpdGNoICh0aGlzLl9kYXRhLmN1cnJlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5JTUFHRTpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2ltYWdlJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5TUEhFUklDOlxyXG4gICAgICAgIHRoaXMuZmlsZVR5cGUgPSAnaW1hZ2UzNjAnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlZJREVPOlxyXG4gICAgICAgIHRoaXMuZmlsZVR5cGUgPSAnZG9jdW1lbnQnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuaW1hZ2VzID0gW107XHJcbiAgICB0aGlzLmltYWdlczM2MCA9IFtdO1xyXG4gICAgdGhpcy52aWRlb3MgPSBbXTtcclxuICAgIHRoaXMuX25ld01lZGlhID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRZb3VUdWJlSUQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0ZXh0LmluZGV4T2YoJ2h0dHBzOi8veW91dHUuYmUvJykgIT09IC0xKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ2h0dHBzOi8veW91dHUuYmUvJywgJycpO1xyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH0gZWxzZSBpZiAodGV4dC5pbmRleE9mKCdodHRwczovL3d3dy55b3V0dWJlLmNvbS8nKSAhPT0gLTEpIHtcclxuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnaHR0cHM6Ly93d3cueW91dHViZS5jb20vJywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRleHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRleHQuaW5kZXhPZignd2F0Y2g/dj0nKSAhPT0gLTEpIHtcclxuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnd2F0Y2g/dj0nLCAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dC5pbmRleE9mKCcmJykpIHtcclxuICAgICAgY29uc3QgYXJyID0gdGV4dC5zcGxpdCgnJicpO1xyXG4gICAgICB0ZXh0ID0gYXJyWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGFyc2VNdWx0aW1lZGlhKCk7XHJcbiAgfVxyXG5cclxuICBvblVwbG9hZEltYWdlKGV2OiBVc2VyTWVkaWEgfCBVc2VyTWVkaWFbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFldikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMuZmlsZVR5cGUpIHtcclxuICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSkge1xyXG4gICAgICAgICAgZXYuZm9yRWFjaChpbWFnZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSW1hZ2VQRmlsZShpbWFnZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVJbWFnZVBGaWxlKGV2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ltYWdlMzYwJzpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikpIHtcclxuICAgICAgICAgIGV2LmZvckVhY2goaW1hZ2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlMzYwUEZpbGUoaW1hZ2UpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlSW1hZ2UzNjBQRmlsZShldik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UYWJDaGFuZ2VkKHRhYjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRhYjtcclxuICAgIHN3aXRjaCAodGFiKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2ltYWdlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuZmlsZVR5cGUgPSAnaW1hZ2UzNjAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25MaXN0Q2hhbmdlZChldjogUEZpbGVbXSk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRJbmRleCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXYpICYmIGV2Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGV2ID0gZXYubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLnBvc2l0aW9uID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmltYWdlcyA9IGV2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSAmJiBldi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBldiA9IGV2Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wb3NpdGlvbiA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZXMzNjAgPSBldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikgJiYgZXYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZXYgPSBldi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpbmRleDtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudmlkZW9zID0gZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTWVkaWEoZXY6IFBGaWxlKTogdm9pZCB7XHJcbiAgICBsZXQgaSA9IC0xO1xyXG4gICAgaWYgKCFldi5pZCkge1xyXG4gICAgICBzd2l0Y2ggKGV2LnR5cGUpIHtcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uSU1BR0U6XHJcbiAgICAgICAgICB0aGlzLmltYWdlcy5zcGxpY2UodGhpcy5pbWFnZXMuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM6XHJcbiAgICAgICAgICB0aGlzLmltYWdlczM2MC5zcGxpY2UodGhpcy5pbWFnZXMzNjAuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlZJREVPOlxyXG4gICAgICAgICAgdGhpcy52aWRlb3Muc3BsaWNlKHRoaXMudmlkZW9zLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX25ld01lZGlhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXJsID09PSBldi5maWxlQ1MudGh1bWJuYWlsKSB7XHJcbiAgICAgICAgICBpID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX25ld01lZGlhLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoIChldi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLklNQUdFOlxyXG4gICAgICAgICAgdGhpcy5pbWFnZXMuc3BsaWNlKHRoaXMuaW1hZ2VzLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5TUEhFUklDOlxyXG4gICAgICAgICAgdGhpcy5pbWFnZXMzNjAuc3BsaWNlKHRoaXMuaW1hZ2VzMzYwLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICAgIHRoaXMudmlkZW9zLnNwbGljZSh0aGlzLnZpZGVvcy5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Zb3VUdWJlSW5wdXRUZXh0Q2hhbmdlZChpbnB1dDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKGlucHV0LnZhbHVlID09PSAnJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpZCA9IE11bHRpbWVkaWFVcGxvYWRlckNvbXBvbmVudC5nZXRZb3VUdWJlSUQoaW5wdXQudmFsdWUpO1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaWQubGVuZ3RoID49IDExKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUEZpbGUoKTtcclxuICAgICAgZmlsZS50eXBlID0gUEZpbGVUeXBlRW51bS5WSURFTztcclxuICAgICAgZmlsZS5tZWRpYSA9IHRydWU7XHJcbiAgICAgIGZpbGUubmFtZSA9IGB2aWRlb18ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XHJcbiAgICAgIGZpbGUuZmlsZUNTID0ge1xyXG4gICAgICAgIHRodW1ibmFpbDogaWQsXHJcbiAgICAgICAgYmxvYk5hbWU6IG51bGxcclxuICAgICAgfTtcclxuICAgICAgZmlsZS5wb3NpdGlvbiA9IHRoaXMudmlkZW9zLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLnZpZGVvcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMudmlkZW9zLnB1c2goZmlsZSk7XHJcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY2NlcHQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2cuY2xvc2Uoe211bHRpbWVkaWE6IHRoaXMuam9pbk11bHRpbWVkaWFUeXBlcygpLCBuZXdNZWRpYTogdGhpcy5fbmV3TWVkaWF9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLmNsb3NlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZVBGaWxlKGltYWdlOiBVc2VyTWVkaWEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBuZXcgUEZpbGUoKTtcclxuICAgIGZpbGUudHlwZSA9IFBGaWxlVHlwZUVudW0uSU1BR0U7XHJcbiAgICBpbWFnZS50eXBlID0gUEZpbGVUeXBlRW51bS5JTUFHRTtcclxuICAgIGZpbGUubWVkaWEgPSB0cnVlO1xyXG4gICAgZmlsZS5maWxlQ1MgPSB7XHJcbiAgICAgIHRodW1ibmFpbDogaW1hZ2UudXJsLFxyXG4gICAgICBibG9iTmFtZTogbnVsbFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gYGltYWdlXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKX0uJHtpbWFnZS5ibG9iLnR5cGUucmVwbGFjZSgnaW1hZ2UvJywgJycpfWA7XHJcbiAgICBmaWxlLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgIGltYWdlLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgIGZpbGUucG9zaXRpb24gPSB0aGlzLmltYWdlcy5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5pbWFnZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5fbmV3TWVkaWEucHVzaChpbWFnZSk7XHJcbiAgICB0aGlzLmltYWdlcy5wdXNoKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZTM2MFBGaWxlKGltYWdlOiBVc2VyTWVkaWEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBuZXcgUEZpbGUoKTtcclxuICAgIGZpbGUudHlwZSA9IFBGaWxlVHlwZUVudW0uU1BIRVJJQztcclxuICAgIGltYWdlLnR5cGUgPSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM7XHJcbiAgICBmaWxlLm1lZGlhID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gYHNwaGVyaWNfJHtEYXRlLm5vdygpfV8ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApfS4ke2ltYWdlLmJsb2IudHlwZS5yZXBsYWNlKCdpbWFnZS8nLCAnJyl9YDtcclxuICAgIGZpbGUubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgaW1hZ2UubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgZmlsZS5maWxlQ1MgPSB7XHJcbiAgICAgIHRodW1ibmFpbDogaW1hZ2UudXJsLFxyXG4gICAgICBibG9iTmFtZTogbnVsbFxyXG4gICAgfTtcclxuICAgIGZpbGUucG9zaXRpb24gPSB0aGlzLmltYWdlczM2MC5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5pbWFnZXMzNjAubGVuZ3RoO1xyXG4gICAgdGhpcy5fbmV3TWVkaWEucHVzaChpbWFnZSk7XHJcbiAgICB0aGlzLmltYWdlczM2MC5wdXNoKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU11bHRpbWVkaWEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZGF0YSkge1xyXG4gICAgICB0aGlzLl9kYXRhLm11bHRpbWVkaWEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLklNQUdFOlxyXG4gICAgICAgICAgICB0aGlzLmltYWdlcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5TUEhFUklDOlxyXG4gICAgICAgICAgICB0aGlzLmltYWdlczM2MC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICAgICAgdGhpcy52aWRlb3MucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5fbmV3TWVkaWEgPSB0aGlzLl9kYXRhLm5ld01lZGlhIHx8IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBqb2luTXVsdGltZWRpYVR5cGVzKCk6IFBGaWxlW10ge1xyXG4gICAgbGV0IHJlc3BvbnNlID0gW107XHJcbiAgICByZXNwb25zZSA9IHJlc3BvbnNlLmNvbmNhdCh0aGlzLmltYWdlcyk7XHJcbiAgICByZXNwb25zZSA9IHJlc3BvbnNlLmNvbmNhdCh0aGlzLmltYWdlczM2MCk7XHJcbiAgICByZXNwb25zZSA9IHJlc3BvbnNlLmNvbmNhdCh0aGlzLnZpZGVvcyk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|