@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.
Files changed (31) hide show
  1. package/_theming.scss +4 -0
  2. package/bundles/maplander-components.umd.js +171 -39
  3. package/bundles/maplander-components.umd.js.map +1 -1
  4. package/bundles/maplander-components.umd.min.js +2 -2
  5. package/bundles/maplander-components.umd.min.js.map +1 -1
  6. package/esm2015/lib/components/filters/filters.component.js +8 -5
  7. package/esm2015/lib/components/filters/filters.module.js +3 -1
  8. package/esm2015/lib/components/property/components/details/details.component.js +3 -3
  9. package/esm2015/lib/components/property/components/editor/editor.component.js +13 -3
  10. package/esm2015/lib/components/property/components/multimedia-uploader/multimedia-uploader.component.js +7 -1
  11. package/esm2015/lib/components/property/components/property/property.component.js +12 -4
  12. package/esm2015/lib/components/property/validators/currency-filter-validator.js +36 -0
  13. package/esm2015/lib/components/property-card/property-card.component.js +70 -3
  14. package/esm5/lib/components/filters/filters.component.js +8 -5
  15. package/esm5/lib/components/filters/filters.module.js +3 -1
  16. package/esm5/lib/components/property/components/details/details.component.js +3 -3
  17. package/esm5/lib/components/property/components/editor/editor.component.js +13 -3
  18. package/esm5/lib/components/property/components/multimedia-uploader/multimedia-uploader.component.js +7 -1
  19. package/esm5/lib/components/property/components/property/property.component.js +12 -4
  20. package/esm5/lib/components/property/validators/currency-filter-validator.js +36 -0
  21. package/esm5/lib/components/property-card/property-card.component.js +84 -3
  22. package/fesm2015/maplander-components.js +158 -40
  23. package/fesm2015/maplander-components.js.map +1 -1
  24. package/fesm5/maplander-components.js +172 -40
  25. package/fesm5/maplander-components.js.map +1 -1
  26. package/lib/components/property/components/editor/editor.component.d.ts +1 -0
  27. package/lib/components/property/components/property/property.component.d.ts +3 -1
  28. package/lib/components/property/validators/currency-filter-validator.d.ts +2 -0
  29. package/lib/components/property-card/property-card.component.d.ts +7 -2
  30. package/maplander-components.metadata.json +1 -1
  31. package/package.json +12 -12
@@ -43,6 +43,7 @@ var EditorComponent = /** @class */ (function () {
43
43
  this.REGEX_ONLY_INTEGERS = new RegExp(/^[0-9]\d*$/);
44
44
  this.REGEX_MIDDLE_NUMBER = new RegExp(/^[0-9]*(\.[5])?$/);
45
45
  this.REGEX_WEBSITE = new RegExp(/(http|https):\/\/(\w+:?\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@\-\/]))?/);
46
+ this.REGEX_ALPHA_NUMBER = new RegExp(/[A-Za-z0-9_]/);
46
47
  this.editorInstance = new EventEmitter();
47
48
  this.selectAddress = new EventEmitter();
48
49
  this._subscription = new Subscription();
@@ -68,10 +69,12 @@ var EditorComponent = /** @class */ (function () {
68
69
  parkingSpaces: [Validators.pattern(this.REGEX_ONLY_INTEGERS)],
69
70
  mainArea: [],
70
71
  secondaryArea: [],
71
- externalLink: [Validators.pattern(this.REGEX_WEBSITE)]
72
+ externalLink: [Validators.pattern(this.REGEX_WEBSITE)],
73
+ sku: [Validators.pattern(this.REGEX_ALPHA_NUMBER)]
72
74
  };
73
75
  this.propertyForm = this._formBuilder.group({
74
76
  offering: [OfferingTypeEnum.SALE],
77
+ sku: [null, this._validators.sku],
75
78
  consumerReporting: [],
76
79
  consumerReportingOption: [1],
77
80
  currency: ['MXN'],
@@ -367,6 +370,7 @@ var EditorComponent = /** @class */ (function () {
367
370
  function () {
368
371
  this.propertyForm.patchValue({
369
372
  offering: this._property.offering,
373
+ sku: this._property.sku,
370
374
  consumerReporting: this._property.propertyInfo.consumerReporting && this._property.propertyInfo.consumerReporting !== 0,
371
375
  consumerReportingOption: this._property.propertyInfo.consumerReporting,
372
376
  currency: this._property.currency,
@@ -424,6 +428,7 @@ var EditorComponent = /** @class */ (function () {
424
428
  function (data) {
425
429
  this._property.type = this.propertyType;
426
430
  this._property.offering = data.offering;
431
+ this._property.sku = data.sku;
427
432
  this._property.propertyInfo.consumerReporting = data.consumerReporting ? data.consumerReportingOption : null;
428
433
  this._property.currency = data.currency;
429
434
  this._property.propertyInfo.lowestPrice = data.minPrice ? Number(data.minPrice) : null;
@@ -617,7 +622,7 @@ var EditorComponent = /** @class */ (function () {
617
622
  EditorComponent.decorators = [
618
623
  { type: Component, args: [{
619
624
  selector: 'lib-property-editor',
620
- 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",
625
+ 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",
621
626
  providers: [
622
627
  { provide: MAT_DATE_LOCALE, useValue: 'es-MX' },
623
628
  { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS] },
@@ -683,6 +688,11 @@ if (false) {
683
688
  * @private
684
689
  */
685
690
  EditorComponent.prototype.REGEX_WEBSITE;
691
+ /**
692
+ * @type {?}
693
+ * @private
694
+ */
695
+ EditorComponent.prototype.REGEX_ALPHA_NUMBER;
686
696
  /**
687
697
  * @type {?}
688
698
  * @private
@@ -745,4 +755,4 @@ if (false) {
745
755
  EditorComponent.prototype._adapter;
746
756
  }
747
757
  export { ɵ0 };
748
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYXBsYW5kZXIvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3Byb3BlcnR5L2NvbXBvbmVudHMvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFdBQVcsRUFBMEIsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBRVQsWUFBWSxFQUVaLFFBQVEsRUFHUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRyxPQUFPLEtBQUssY0FBYyxNQUFNLFFBQVEsQ0FBQztBQUd6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLG1CQUFtQixDQUFDOztJQUNsQyxNQUFNLEdBQUcsY0FB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SUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLCtCQUErQixDQUFDLEVBQUM7d0JBQzdHLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsSUFBWSxFQUFDO3FCQUNsRDs7aUJBQ0Y7Ozs7Z0JBbERPLFdBQVc7Z0JBaUJYLGFBQWE7Z0JBQ2IsV0FBVzs7O2dDQWtDaEIsU0FBUyxTQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQzt3QkFDdkQsS0FBSzswQkFDTCxLQUFLOytCQUNMLEtBQUs7MkJBQ0wsS0FBSzsyQkFDTCxLQUFLO2lDQUNMLE1BQU07Z0NBQ04sTUFBTTs7SUFtWlQsc0JBQUM7Q0FBQSxBQXJhRCxJQXFhQztTQTNaWSxlQUFlOzs7Ozs7SUFDMUIsd0NBQTRGOztJQUM1RixnQ0FBd0I7O0lBQ3hCLGtDQUEwQjs7SUFDMUIsdUNBQXdDOztJQUN4QyxtQ0FBK0I7O0lBQy9CLG1DQUEwQjs7SUFDMUIseUNBQXdEOztJQUN4RCx3Q0FBNEM7Ozs7Ozs7O0lBSzVDLDhDQUFnRTs7Ozs7SUFDaEUsOENBQXNFOzs7OztJQUN0RSx3Q0FBd0g7Ozs7O0lBQ3hILHdDQUE2Qzs7Ozs7SUFDN0Msc0NBT0U7Ozs7O0lBQ0Ysb0NBQStCOzs7OztJQUMvQiw0Q0FBNEM7Ozs7O0lBQzVDLHVDQUErQjs7SUFDL0IsdUNBQStCOztJQUMvQiwyQ0FBcUU7O0lBQ3JFLHVDQUEyQjs7SUFDM0Isa0NBQXlCOztJQUN6QixzQ0FBMkQ7O0lBQzNELHdDQUFvQzs7SUFDcEMsdUNBQW1DOztJQUNuQyx5Q0FBZ0M7O0lBQ2hDLCtDQUFzQzs7SUFDdEMsdUNBQThCOzs7OztJQUc1Qix1Q0FBaUM7Ozs7O0lBQ2pDLGtDQUE4Qjs7Ozs7SUFDOUIsbUNBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQW1lbml0aWVzLFxyXG4gIEFwcFV0aWwsXHJcbiAgQXJlYVVuaXRFbnVtLFxyXG4gIENFUixcclxuICBGZWF0dXJlcyxcclxuICBHZW9QdCxcclxuICBMYW5kVXNlRW51bSxcclxuICBOZXdQcm9wZXJ0eSxcclxuICBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gIFByb3BlcnR5SW5mbyxcclxuICBQcm9wZXJ0eVR5cGVFbnVtLFxyXG4gIFN0YXR1c1R5cGVFbnVtXHJcbn0gZnJvbSAnQG1hcGxhbmRlci90eXBlcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICdAbWFwbGFuZGVyL3NoYXJlZCc7XHJcbmltcG9ydCB7RGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7TUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OUywgTW9tZW50RGF0ZUFkYXB0ZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcclxuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHtQcm9wZXJ0eVR5cGVJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tb2RlbHMvcHJvcGVydHktdHlwZS1pdGVtJztcclxuaW1wb3J0IHtBbWVuaXR5SXRlbX0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbW9kZWxzL2FtZW5pdHktaXRlbSc7XHJcbmltcG9ydCB7Q29uc3RhbnRzQ29tcG9uZW50c30gZnJvbSAnLi4vLi4vLi4vLi4vY29uc3RhbnRzQ29tcG9uZW50cyc7XHJcbmltcG9ydCB7UHJvcGVydHlFZGl0b3JWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3Byb3BlcnR5LWVkaXRvci12YWxpZGF0b3JzJztcclxuaW1wb3J0IHtNRGF0ZX0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY2xhc3Nlcyc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50SW1wb3J0ZWQ7XHJcblxyXG5jb25zdCBNWV9GT1JNQVRTID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdMJyxcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogJ0wnLFxyXG4gICAgbW9udGhZZWFyTGFiZWw6ICdNTU0gWVlZWScsXHJcbiAgICBkYXRlQTExeUxhYmVsOiAnTCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIFlZWVknLFxyXG4gIH0sXHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm9wZXJ0eS1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlVmFsdWU6ICdlcy1NWCd9LFxyXG4gICAge3Byb3ZpZGU6IERhdGVBZGFwdGVyLCB1c2VDbGFzczogTW9tZW50RGF0ZUFkYXB0ZXIsIGRlcHM6IFtNQVRfREFURV9MT0NBTEUsIE1BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlNdfSxcclxuICAgIHtwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogTVlfRk9STUFUU31cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdidG5TdWJtaXQnLCB7c3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmfSkgcHJpdmF0ZSBfYnRuU3VibWl0UmVmOiBFbGVtZW50UmVmO1xyXG4gIEBJbnB1dCgpIHV0aWxzOiBBcHBVdGlsO1xyXG4gIEBJbnB1dCgpIGFkZHJlc3M6IEFkZHJlc3M7XHJcbiAgQElucHV0KCkgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtO1xyXG4gIEBJbnB1dCgpIHByb3BlcnR5OiBOZXdQcm9wZXJ0eTtcclxuICBASW5wdXQoKSBtbHNMYWJlbDogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBlZGl0b3JJbnN0YW5jZTogRXZlbnRFbWl0dGVyPEVkaXRvckNvbXBvbmVudD47XHJcbiAgQE91dHB1dCgpIHNlbGVjdEFkZHJlc3M6IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuICAvKipcclxuICAgKiBSRUdFWF9PTkxZX0lOVEVHRVJTXHJcbiAgICogUmVnZXggcGF0dGVybiB0byBvbmx5IGFjY2VwdCBpbnRlZ2VyIGFuZCBwb3NpdGl2ZSBudW1iZXJzXHJcbiAgICogKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IFJFR0VYX09OTFlfSU5URUdFUlMgPSBuZXcgUmVnRXhwKC9eWzAtOV1cXGQqJC8pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVHRVhfTUlERExFX05VTUJFUiA9IG5ldyBSZWdFeHAoL15bMC05XSooXFwuWzVdKT8kLyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUdFWF9XRUJTSVRFID0gbmV3IFJlZ0V4cCgvKGh0dHB8aHR0cHMpOlxcL1xcLyhcXHcrOj9cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAXFwtXFwvXSkpPy8pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhbGlkYXRvcnM6IHtcclxuICAgIGJlZHJvb21zOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgYmF0aHJvb21zOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgcGFya2luZ1NwYWNlczogVmFsaWRhdG9yRm5bXSxcclxuICAgIG1haW5BcmVhOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgc2Vjb25kYXJ5QXJlYTogVmFsaWRhdG9yRm5bXSxcclxuICAgIGV4dGVybmFsTGluazogVmFsaWRhdG9yRm5bXVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfcHJvcGVydHk6IE5ld1Byb3BlcnR5O1xyXG4gIHByaXZhdGUgX3Byb3BlcnR5VHlwZUl0ZW06IFByb3BlcnR5VHlwZUl0ZW07XHJcbiAgcHJpdmF0ZSBfZXJyb3JGaWVsZHM6IHN0cmluZ1tdO1xyXG4gIHB1YmxpYyBwcm9wZXJ0eUZvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgb2ZmZXJpbmdUeXBlTGlzdDogeyBuYW1lOiBzdHJpbmcsIHZhbHVlOiBPZmZlcmluZ1R5cGVFbnVtIH1bXTtcclxuICBwdWJsaWMgY3VycmVuY3lMaXN0OiBDRVJbXTtcclxuICBwdWJsaWMgcm9pTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIGxhbmRVc2VMaXN0OiB7IG5hbWU6IHN0cmluZywgdmFsdWU6IExhbmRVc2VFbnVtIH1bXTtcclxuICBwdWJsaWMgYW1lbml0aWVzTGlzdDogQW1lbml0eUl0ZW1bXTtcclxuICBwdWJsaWMgZmVhdHVyZXNMaXN0OiBBbWVuaXR5SXRlbVtdO1xyXG4gIHB1YmxpYyBjb21taXNzaW9uTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIHNoYXJlZENvbW1pc3Npb25MaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgZHVyYXRpb25MaXN0OiBudW1iZXJbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hZGFwdGVyOiBEYXRlQWRhcHRlcjxhbnk+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVkaXRvckluc3RhbmNlID0gbmV3IEV2ZW50RW1pdHRlcjxFZGl0b3JDb21wb25lbnQ+KCk7XHJcbiAgICB0aGlzLnNlbGVjdEFkZHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB0aGlzLm9mZmVyaW5nVHlwZUxpc3QgPSBDb25zdGFudHNDb21wb25lbnRzLk9mZmVyaW5nVHlwZUxpc3QubWFwKGRvYyA9PiAoey4uLmRvY30pKTtcclxuICAgIHRoaXMubGFuZFVzZUxpc3QgPSBDb25zdGFudHNDb21wb25lbnRzLkxhbmRVc2VMaXN0Lm1hcChkb2MgPT4gKHsuLi5kb2N9KSk7XHJcbiAgICB0aGlzLmNvbW1pc3Npb25MaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Db21taXNzaW9uTGlzdFtPZmZlcmluZ1R5cGVFbnVtLlNBTEVdO1xyXG4gICAgdGhpcy5yb2lMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5ST0lMaXN0KTtcclxuICAgIHRoaXMuZHVyYXRpb25MaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5EdXJhdGlvbkxpc3QpO1xyXG4gICAgdGhpcy5zaGFyZWRDb21taXNzaW9uTGlzdCA9IE9iamVjdC5hc3NpZ24oW10sIENvbnN0YW50c0NvbXBvbmVudHMuU2hhcmVkQ29tbWlzc2lvbkxpc3QpO1xyXG4gICAgdGhpcy5fYWRhcHRlci5zZXRMb2NhbGUoJ2VzJyk7XHJcbiAgICB0aGlzLl9lcnJvckZpZWxkcyA9IFtdO1xyXG4gICAgdGhpcy5fdmFsaWRhdG9ycyA9IHtcclxuICAgICAgYmVkcm9vbXM6IFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5SRUdFWF9PTkxZX0lOVEVHRVJTKV0sXHJcbiAgICAgIGJhdGhyb29tczogW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLlJFR0VYX01JRERMRV9OVU1CRVIpXSxcclxuICAgICAgcGFya2luZ1NwYWNlczogW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLlJFR0VYX09OTFlfSU5URUdFUlMpXSxcclxuICAgICAgbWFpbkFyZWE6IFtdLFxyXG4gICAgICBzZWNvbmRhcnlBcmVhOiBbXSxcclxuICAgICAgZXh0ZXJuYWxMaW5rOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfV0VCU0lURSldXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wcm9wZXJ0eUZvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIG9mZmVyaW5nOiBbT2ZmZXJpbmdUeXBlRW51bS5TQUxFXSxcclxuICAgICAgY29uc3VtZXJSZXBvcnRpbmc6IFtdLFxyXG4gICAgICBjb25zdW1lclJlcG9ydGluZ09wdGlvbjogWzFdLFxyXG4gICAgICBjdXJyZW5jeTogWydNWE4nXSxcclxuICAgICAgbWluUHJpY2U6IFtdLFxyXG4gICAgICBwcmljZTogW10sXHJcbiAgICAgIG1haW50ZW5hbmNlOiBbXSxcclxuICAgICAgbWFpbnRlbmFuY2VQcmljZTogW10sXHJcbiAgICAgIHRyYW5zZmVyOiBbXSxcclxuICAgICAgdHJhbnNmZXJQcmljZTogW10sXHJcbiAgICAgIGJlZHJvb21zOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5iZWRyb29tc10sXHJcbiAgICAgIGJhdGhyb29tczogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMuYmF0aHJvb21zXSxcclxuICAgICAgcGFya2luZ1NwYWNlczogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMucGFya2luZ1NwYWNlc10sXHJcbiAgICAgIG1haW5BcmVhOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5tYWluQXJlYV0sXHJcbiAgICAgIHNlY29uZGFyeUFyZWE6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLnNlY29uZGFyeUFyZWFdLFxyXG4gICAgICB1bml0OiBbQXJlYVVuaXRFbnVtLk0yXSxcclxuICAgICAgYnVpbGRJbjogW10sXHJcbiAgICAgIGxhbmRVc2U6IFtdLFxyXG4gICAgICBleGNsdXNpdml0eTogW10sXHJcbiAgICAgIG1sbTogW10sXHJcbiAgICAgIHNoYXJlZENvbW1pc3Npb246IFtdLFxyXG4gICAgICBhZ3JlZW1lbnREYXRlOiBbe3ZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZX1dLFxyXG4gICAgICBkdXJhdGlvbjogW10sXHJcbiAgICAgIGNvbW1pc3Npb246IFtdLFxyXG4gICAgICByb2k6IFtdLFxyXG4gICAgICBkZXNjcmlwdGlvbjogW10sXHJcbiAgICAgIGV4dGVybmFsTGluazogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMuZXh0ZXJuYWxMaW5rXSxcclxuICAgICAgbm90ZXM6IFtdLFxyXG4gICAgICBhZGRyZXNzOiB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgY291bnRyeTogW10sXHJcbiAgICAgICAgcG9zdGFsQ29kZTogW10sXHJcbiAgICAgICAgc3RhdGU6IFtdLFxyXG4gICAgICAgIGNpdHk6IFtdLFxyXG4gICAgICAgIHRvd25zaGlwOiBbXSxcclxuICAgICAgICBjb2xvbnk6IFtdLFxyXG4gICAgICAgIHN0cmVldDogW10sXHJcbiAgICAgICAgZXh0TnVtYmVyOiBbXSxcclxuICAgICAgICBpbnROdW1iZXI6IFtdLFxyXG4gICAgICAgIG16OiBbXSxcclxuICAgICAgICBsdDogW10sXHJcbiAgICAgICAgdmlzaWJsZTogW3RydWVdLFxyXG4gICAgICB9KSxcclxuICAgIH0sIHtcclxuICAgICAgdmFsaWRhdG9yczogUHJvcGVydHlFZGl0b3JWYWxpZGF0b3JzLnZhbGlkYXRvclxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZW9QdEdlbmVyYXRvcihnZW9QdDogR2VvUHQsIG1pbkRpc3RhbmNlOiBudW1iZXIsIG1heERpc3RhbmNlOiBudW1iZXIpOiBHZW9QdCB7XHJcbiAgICBjb25zdCBFQVJUSF9SQURJVVNfTUVURVJTID0gNjM3MTAxMC4wO1xyXG4gICAgY29uc3QgbCA9IE1hdGgucmFuZG9tKCkgKiAobWF4RGlzdGFuY2UgLSBtaW5EaXN0YW5jZSkgKyBtaW5EaXN0YW5jZTtcclxuICAgIGNvbnN0IGFscGhhID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgLyAyO1xyXG4gICAgY29uc3Qgc3ggPSAoTWF0aC5yYW5kb20oKSA8IDAuNSkgPyBsICogTWF0aC5jb3MoYWxwaGEpIDogLWwgKiBNYXRoLmNvcyhhbHBoYSk7XHJcbiAgICBjb25zdCBzeSA9IChNYXRoLnJhbmRvbSgpIDwgMC41KSA/IGwgKiBNYXRoLnNpbihhbHBoYSkgOiAtbCAqIE1hdGguc2luKGFscGhhKTtcclxuICAgIGNvbnN0IGRlbHRhTGF0ID0gc3kgLyBFQVJUSF9SQURJVVNfTUVURVJTICogMTgwIC8gTWF0aC5QSTtcclxuICAgIGNvbnN0IGxhdCA9IGdlb1B0LmxhdGl0dWRlICsgZGVsdGFMYXQ7XHJcbiAgICBjb25zdCBkZWx0YUxvbmcgPSBzeCAvIEVBUlRIX1JBRElVU19NRVRFUlMgLyBNYXRoLmNvcyhsYXQgKiBNYXRoLlBJIC8gMTgwKSAqIDE4MCAvIE1hdGguUEk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsYXRpdHVkZTogbGF0LFxyXG4gICAgICBsb25naXR1ZGU6IGdlb1B0LmxvbmdpdHVkZSArIGRlbHRhTG9uZ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5saXN0ZW5DaGFuZ2VzT25Gb3JtKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sndXRpbHMnXSAmJiBjaGFuZ2VzWyd1dGlscyddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbmN5TGlzdCA9IGNoYW5nZXNbJ3V0aWxzJ10uY3VycmVudFZhbHVlLmNlcnM7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sncHJvcGVydHlUeXBlJ10gJiYgY2hhbmdlc1sncHJvcGVydHlUeXBlJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMucHJvcGVydHlUeXBlID0gY2hhbmdlc1sncHJvcGVydHlUeXBlJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlYXJjaEFtZW5pdGllc0J5UHJvcGVydHlUeXBlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sncHJvcGVydHknXSAmJiBjaGFuZ2VzWydwcm9wZXJ0eSddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZVByb3BlcnR5KGNoYW5nZXNbJ3Byb3BlcnR5J10uY3VycmVudFZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydhZGRyZXNzJ10gJiYgY2hhbmdlc1snYWRkcmVzcyddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUFkZHJlc3NGb3JtKGNoYW5nZXNbJ2FkZHJlc3MnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0b3JJbnN0YW5jZS5lbWl0KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldFByb3BlcnR5KCk6IE5ld1Byb3BlcnR5IHtcclxuICAgIHRoaXMuc2V0VmFsaWRhdG9yT25GaWVsZHModGhpcy5fZXJyb3JGaWVsZHMsIHRydWUpO1xyXG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0eUJ5Rm9ybSh0aGlzLnByb3BlcnR5Rm9ybS5nZXRSYXdWYWx1ZSgpKTtcclxuICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybUludmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnNldFZhbGlkYXRvck9uRmllbGRzKHRoaXMuX2Vycm9yRmllbGRzLCB0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Rm9ybS5pbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQW1lbml0eShhbWVuaXR5OiBBbWVuaXR5SXRlbSk6IHZvaWQge1xyXG4gICAgYW1lbml0eS5jaGVja2VkID0gIWFtZW5pdHkuY2hlY2tlZDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFtZW5pdGllc1thbWVuaXR5LnZhbHVlXSA9IGFtZW5pdHkuY2hlY2tlZDtcclxuICB9XHJcblxyXG4gIGdvVG9TZWxlY3RBZGRyZXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RBZGRyZXNzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHNldEVycm9yc09uRmllbGRzKGVycm9yczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2Vycm9yRmllbGRzID0gZXJyb3JzO1xyXG4gICAgdGhpcy5zZXRWYWxpZGF0b3JPbkZpZWxkcyh0aGlzLl9lcnJvckZpZWxkcyk7XHJcbiAgICB0aGlzLl9idG5TdWJtaXRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVBZGRyZXNzRm9ybShhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgYWRkcmVzczoge1xyXG4gICAgICAgIGNvdW50cnk6IGFkZHJlc3MuY291bnRyeSxcclxuICAgICAgICBzdGF0ZTogYWRkcmVzcy5zdGF0ZSxcclxuICAgICAgICBjaXR5OiBhZGRyZXNzLmNpdHksXHJcbiAgICAgICAgdG93bnNoaXA6IGFkZHJlc3MudG93bnNoaXAsXHJcbiAgICAgICAgY29sb255OiBhZGRyZXNzLmNvbG9ueSxcclxuICAgICAgICBzdHJlZXQ6IGFkZHJlc3Muc3RyZWV0LFxyXG4gICAgICAgIHBvc3RhbENvZGU6IGFkZHJlc3MucG9zdGFsQ29kZSxcclxuICAgICAgICBleHROdW1iZXI6IGFkZHJlc3Mub3V0ZG9vck51bWJlclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNzaWduQW1lbml0aWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbWVuaXRpZXNMaXN0LmZvckVhY2goKGFtZW5pdHkpID0+IHtcclxuICAgICAgYW1lbml0eS5jaGVja2VkID0gdGhpcy5fcHJvcGVydHkuYW1lbml0aWVzW2FtZW5pdHkudmFsdWVdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkxvY2F0aW9uRmVhdHVyZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZlYXR1cmVzTGlzdC5mb3JFYWNoKChhbWVuaXR5KSA9PiB7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IHRoaXMuX3Byb3BlcnR5LmFtZW5pdGllc1thbWVuaXR5LnZhbHVlXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25Db21taXNzaW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21taXNzaW9uTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuQ29tbWlzc2lvbkxpc3RbdGhpcy5fcHJvcGVydHkub2ZmZXJpbmddO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25CdXNpbmVzc1J1bGVzKCk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLnByb3BlcnR5VHlwZSkge1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZUVudW0uUk9PTTpcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtLlJFTlRcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGVFbnVtLklOVkVTVE1FTlQ6XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBvZmZlcmluZzogT2ZmZXJpbmdUeXBlRW51bS5TQUxFXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fcHJvcGVydHkuc3RhdHVzID09PSBTdGF0dXNUeXBlRW51bS5BTk5PVU5DRUQpIHtcclxuICAgICAgY29uc3QgZXJyb3JzID0gVXRpbHMubGlzdEVycm9yc0J5UHJvcGVydHlUeXBlRm9yUHVibGlzaCh0aGlzLl9wcm9wZXJ0eS50eXBlKTtcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JPbkZpZWxkcyhlcnJvcnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtQnlQcm9wZXJ0eSgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICBvZmZlcmluZzogdGhpcy5fcHJvcGVydHkub2ZmZXJpbmcsXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcgJiYgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbnN1bWVyUmVwb3J0aW5nICE9PSAwLFxyXG4gICAgICBjb25zdW1lclJlcG9ydGluZ09wdGlvbjogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbnN1bWVyUmVwb3J0aW5nLFxyXG4gICAgICBjdXJyZW5jeTogdGhpcy5fcHJvcGVydHkuY3VycmVuY3ksXHJcbiAgICAgIG1pblByaWNlOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubG93ZXN0UHJpY2UsXHJcbiAgICAgIHByaWNlOiB0aGlzLl9wcm9wZXJ0eS5wcmljZSxcclxuICAgICAgbWFpbnRlbmFuY2U6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmNvbmRvbWluaXVtRmVlUHJpY2UgJiYgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSAhPT0gMCxcclxuICAgICAgbWFpbnRlbmFuY2VQcmljZTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSxcclxuICAgICAgdHJhbnNmZXI6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sZWFzZVRyYW5zZmVyUHJpY2UgJiYgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSAhPT0gMCxcclxuICAgICAgdHJhbnNmZXJQcmljZTogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSxcclxuICAgICAgYmVkcm9vbXM6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJlZHJvb21zLFxyXG4gICAgICBiYXRocm9vbXM6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJhdGhyb29tcyxcclxuICAgICAgcGFya2luZ1NwYWNlczogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucGFya2luZ1NwYWNlcyxcclxuICAgICAgbWFpbkFyZWE6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLm1haW5BcmVhLFxyXG4gICAgICBzZWNvbmRhcnlBcmVhOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5zZWNvbmRhcnlBcmVhLFxyXG4gICAgICB1bml0OiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5hcmVhVW5pdCxcclxuICAgICAgYnVpbGRJbjogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYnVpbHRJbiA/IG5ldyBEYXRlKHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJ1aWx0SW4sIDEsIDEpIDogbnVsbCxcclxuICAgICAgbGFuZFVzZTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMubGFuZFVzZSxcclxuICAgICAgZXhjbHVzaXZpdHk6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5leGNsdXNpdml0eSxcclxuICAgICAgbWxtOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubWxzLFxyXG4gICAgICBzaGFyZWRDb21taXNzaW9uOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uc2hhcmVkQ29tbWlzc2lvbixcclxuICAgICAgYWdyZWVtZW50RGF0ZTogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRTdGFydERhdGUgP1xyXG4gICAgICAgIG1vbWVudChuZXcgTURhdGUodGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRTdGFydERhdGUpLnRvRGF0ZSgpKSA6IG51bGwsXHJcbiAgICAgIGR1cmF0aW9uOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFRpbWUsXHJcbiAgICAgIGNvbW1pc3Npb246IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb21taXNzaW9uLFxyXG4gICAgICByb2k6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnJvaSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuX3Byb3BlcnR5LmRlc2NyaXB0aW9uLFxyXG4gICAgICBleHRlcm5hbExpbms6IHRoaXMuX3Byb3BlcnR5LmV4dGVybmFsTGluayxcclxuICAgICAgbm90ZXM6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5ub3RlcyxcclxuICAgICAgYWRkcmVzczoge1xyXG4gICAgICAgIGNvdW50cnk6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY291bnRyeSxcclxuICAgICAgICBzdGF0ZTogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5zdGF0ZSxcclxuICAgICAgICBjaXR5OiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNpdHksXHJcbiAgICAgICAgdG93bnNoaXA6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MudG93bnNoaXAsXHJcbiAgICAgICAgY29sb255OiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNvbG9ueSxcclxuICAgICAgICBwb3N0YWxDb2RlOiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnBvc3RhbENvZGUsXHJcbiAgICAgICAgc3RyZWV0OiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnN0cmVldCxcclxuICAgICAgICBleHROdW1iZXI6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Mub3V0ZG9vck51bWJlcixcclxuICAgICAgICBpbnROdW1iZXI6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuaW50ZXJpb3JOdW1iZXIsXHJcbiAgICAgICAgbXo6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubXosXHJcbiAgICAgICAgbHQ6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubHQsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy52aXNpYmxlIHx8IGZhbHNlLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUHJvcGVydHlCeUZvcm0oZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS50eXBlID0gdGhpcy5wcm9wZXJ0eVR5cGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5vZmZlcmluZyA9IGRhdGEub2ZmZXJpbmc7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcgPSBkYXRhLmNvbnN1bWVyUmVwb3J0aW5nID8gZGF0YS5jb25zdW1lclJlcG9ydGluZ09wdGlvbiA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5jdXJyZW5jeSA9IGRhdGEuY3VycmVuY3k7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubG93ZXN0UHJpY2UgPSBkYXRhLm1pblByaWNlID8gTnVtYmVyKGRhdGEubWluUHJpY2UpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByaWNlID0gZGF0YS5wcmljZSA/IE51bWJlcihkYXRhLnByaWNlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5jb25kb21pbml1bUZlZVByaWNlID0gZGF0YS5tYWludGVuYW5jZSA/IE51bWJlcihkYXRhLm1haW50ZW5hbmNlUHJpY2UpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sZWFzZVRyYW5zZmVyUHJpY2UgPSBkYXRhLnRyYW5zZmVyID8gTnVtYmVyKGRhdGEudHJhbnNmZXJQcmljZSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmVkcm9vbXMgPSBkYXRhLmJlZHJvb21zID8gTnVtYmVyKGRhdGEuYmVkcm9vbXMpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJhdGhyb29tcyA9IGRhdGEuYmF0aHJvb21zID8gTnVtYmVyKGRhdGEuYmF0aHJvb21zKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5wYXJraW5nU3BhY2VzID0gZGF0YS5wYXJraW5nU3BhY2VzID8gTnVtYmVyKGRhdGEucGFya2luZ1NwYWNlcykgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMubWFpbkFyZWEgPSBkYXRhLm1haW5BcmVhID8gTnVtYmVyKGRhdGEubWFpbkFyZWEpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnNlY29uZGFyeUFyZWEgPSBkYXRhLnNlY29uZGFyeUFyZWEgPyBOdW1iZXIoZGF0YS5zZWNvbmRhcnlBcmVhKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5hcmVhVW5pdCA9IGRhdGEudW5pdDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJ1aWx0SW4gPSBkYXRhLmJ1aWxkSW4gPyBkYXRhLmJ1aWxkSW4uZ2V0RnVsbFllYXIoKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5sYW5kVXNlID0gZGF0YS5sYW5kVXNlO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmV4Y2x1c2l2aXR5ID0gZGF0YS5leGNsdXNpdml0eTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5tbHMgPSBkYXRhLm1sbTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5zaGFyZWRDb21taXNzaW9uID0gZGF0YS5tbG0gPyBOdW1iZXIoZGF0YS5zaGFyZWRDb21taXNzaW9uKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFN0YXJ0RGF0ZSA9XHJcbiAgICAgIGRhdGEuYWdyZWVtZW50RGF0ZSA/IE1EYXRlLmdldFRpbWVzdGFtcChkYXRhLmFncmVlbWVudERhdGUudG9EYXRlKCkpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5saXN0aW5nQWdyZWVtZW50VGltZSA9IGRhdGEuZHVyYXRpb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29tbWlzc2lvbiA9IGRhdGEuY29tbWlzc2lvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnJvaSA9IGRhdGEucm9pO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZGVzY3JpcHRpb24gPSBkYXRhLmRlc2NyaXB0aW9uO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZXh0ZXJuYWxMaW5rID0gZGF0YS5leHRlcm5hbExpbms7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubm90ZXMgPSBkYXRhLm5vdGVzO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5jb3VudHJ5ID0gZGF0YS5hZGRyZXNzLmNvdW50cnk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnN0YXRlID0gZGF0YS5hZGRyZXNzLnN0YXRlO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5jaXR5ID0gZGF0YS5hZGRyZXNzLmNpdHk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnRvd25zaGlwID0gZGF0YS5hZGRyZXNzLnRvd25zaGlwO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5jb2xvbnkgPSBkYXRhLmFkZHJlc3MuY29sb255O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5wb3N0YWxDb2RlID0gZGF0YS5hZGRyZXNzLnBvc3RhbENvZGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnN0cmVldCA9IGRhdGEuYWRkcmVzcy5zdHJlZXQ7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLm91dGRvb3JOdW1iZXIgPSBkYXRhLmFkZHJlc3MuZXh0TnVtYmVyO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5pbnRlcmlvck51bWJlciA9IGRhdGEuYWRkcmVzcy5pbnROdW1iZXI7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLm16ID0gZGF0YS5hZGRyZXNzLm16O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5sdCA9IGRhdGEuYWRkcmVzcy5sdDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubG9jYXRpb24gPSB0aGlzLmFkZHJlc3MubG9jYXRpb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnB1YmxpY0xvY2F0aW9uID0gIWRhdGEuYWRkcmVzcy52aXNpYmxlID9cclxuICAgICAgRWRpdG9yQ29tcG9uZW50Lmdlb1B0R2VuZXJhdG9yKHRoaXMuYWRkcmVzcy5sb2NhdGlvbiwgMjAwLCA0MDApIDogdGhpcy5hZGRyZXNzLmxvY2F0aW9uO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy52aXNpYmxlID0gZGF0YS5hZGRyZXNzLnZpc2libGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaEFtZW5pdGllc0J5UHJvcGVydHlUeXBlKCk6IHZvaWQge1xyXG4gICAgQ29uc3RhbnRzQ29tcG9uZW50cy5Qcm9wZXJ0eVR5cGVMaXN0LmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgIGlmICh0eXBlLnZhbHVlID09PSB0aGlzLnByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgIHRoaXMuX3Byb3BlcnR5VHlwZUl0ZW0gPSB0eXBlO1xyXG4gICAgICAgIHRoaXMuYW1lbml0aWVzTGlzdCA9IHR5cGUuYW1lbml0aWVzLm1hcChpdGVtID0+ICh7Li4uaXRlbX0pKTtcclxuICAgICAgICB0aGlzLmZlYXR1cmVzTGlzdCA9IHR5cGUuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKHsuLi5pdGVtfSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQ2hhbmdlc09uRm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21taXNzaW9uTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuQ29tbWlzc2lvbkxpc3RbdmFsdWVdO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgbWluUHJpY2U6IG51bGwsXHJcbiAgICAgICAgICBtYXhQcmljZTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydwcmljZSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIE51bWJlcih2YWx1ZSkgPT09IDApIHtcclxuICAgICAgICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBtaW5QcmljZTogbnVsbFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydtbG0nXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snc2hhcmVkQ29tbWlzc2lvbiddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydtYWludGVuYW5jZSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydtYWludGVuYW5jZVByaWNlJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ3RyYW5zZmVyJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ3RyYW5zZmVyUHJpY2UnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snY29uc3VtZXJSZXBvcnRpbmcnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1snY29uc3VtZXJSZXBvcnRpbmdPcHRpb24nXS5zZXRWYWx1ZSgxKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVByb3BlcnR5KHByb3BlcnR5PzogTmV3UHJvcGVydHkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Byb3BlcnR5ID0gbmV3IE5ld1Byb3BlcnR5KHByb3BlcnR5IHx8IG51bGwpO1xyXG4gICAgdGhpcy5fcHJvcGVydHkudHlwZSA9IHRoaXMucHJvcGVydHlUeXBlO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvID0gbmV3IFByb3BlcnR5SW5mbyhwcm9wZXJ0eSA/IHByb3BlcnR5LnByb3BlcnR5SW5mbyA6IG51bGwpO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMocHJvcGVydHkgPyBwcm9wZXJ0eS5mZWF0dXJlcyA6IG51bGwpO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcyA9IG5ldyBBZGRyZXNzKHByb3BlcnR5ID8gcHJvcGVydHkuYWRkcmVzcyA6IG51bGwpO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYW1lbml0aWVzID0gbmV3IEFtZW5pdGllcyhwcm9wZXJ0eSA/IHByb3BlcnR5LmFtZW5pdGllcyA6IG51bGwpO1xyXG4gICAgdGhpcy5hc3NpZ25CdXNpbmVzc1J1bGVzKCk7XHJcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuaWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtQnlQcm9wZXJ0eSgpO1xyXG4gICAgICB0aGlzLmFzc2lnbkFtZW5pdGllcygpO1xyXG4gICAgICB0aGlzLmFzc2lnbkxvY2F0aW9uRmVhdHVyZXMoKTtcclxuICAgICAgdGhpcy5hc3NpZ25Db21taXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbGlkYXRvck9uRmllbGRzKGVycm9yczogc3RyaW5nW10sIHJlbW92ZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlbW92ZSkge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0uc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzW2Vycm9yXSA/IHRoaXMuX3ZhbGlkYXRvcnNbZXJyb3JdIDogW10pO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgICAgdGhpcy5fdmFsaWRhdG9yc1tlcnJvcl0gPyB0aGlzLl92YWxpZGF0b3JzW2Vycm9yXS5jb25jYXQoVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
758
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYXBsYW5kZXIvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3Byb3BlcnR5L2NvbXBvbmVudHMvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFdBQVcsRUFBMEIsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBRVQsWUFBWSxFQUVaLFFBQVEsRUFHUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRyxPQUFPLEtBQUssY0FBYyxNQUFNLFFBQVEsQ0FBQztBQUd6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLG1CQUFtQixDQUFDOztJQUNsQyxNQUFNLEdBQUcsY0FB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QiwyQ0FBcUU7O0lBQ3JFLHVDQUEyQjs7SUFDM0Isa0NBQXlCOztJQUN6QixzQ0FBMkQ7O0lBQzNELHdDQUFvQzs7SUFDcEMsdUNBQW1DOztJQUNuQyx5Q0FBZ0M7O0lBQ2hDLCtDQUFzQzs7SUFDdEMsdUNBQThCOzs7OztJQUc1Qix1Q0FBaUM7Ozs7O0lBQ2pDLGtDQUE4Qjs7Ozs7SUFDOUIsbUNBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQW1lbml0aWVzLFxyXG4gIEFwcFV0aWwsXHJcbiAgQXJlYVVuaXRFbnVtLFxyXG4gIENFUixcclxuICBGZWF0dXJlcyxcclxuICBHZW9QdCxcclxuICBMYW5kVXNlRW51bSxcclxuICBOZXdQcm9wZXJ0eSxcclxuICBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gIFByb3BlcnR5SW5mbyxcclxuICBQcm9wZXJ0eVR5cGVFbnVtLFxyXG4gIFN0YXR1c1R5cGVFbnVtXHJcbn0gZnJvbSAnQG1hcGxhbmRlci90eXBlcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICdAbWFwbGFuZGVyL3NoYXJlZCc7XHJcbmltcG9ydCB7RGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7TUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OUywgTW9tZW50RGF0ZUFkYXB0ZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcclxuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHtQcm9wZXJ0eVR5cGVJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tb2RlbHMvcHJvcGVydHktdHlwZS1pdGVtJztcclxuaW1wb3J0IHtBbWVuaXR5SXRlbX0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbW9kZWxzL2FtZW5pdHktaXRlbSc7XHJcbmltcG9ydCB7Q29uc3RhbnRzQ29tcG9uZW50c30gZnJvbSAnLi4vLi4vLi4vLi4vY29uc3RhbnRzQ29tcG9uZW50cyc7XHJcbmltcG9ydCB7UHJvcGVydHlFZGl0b3JWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3Byb3BlcnR5LWVkaXRvci12YWxpZGF0b3JzJztcclxuaW1wb3J0IHtNRGF0ZX0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY2xhc3Nlcyc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50SW1wb3J0ZWQ7XHJcblxyXG5jb25zdCBNWV9GT1JNQVRTID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdMJyxcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogJ0wnLFxyXG4gICAgbW9udGhZZWFyTGFiZWw6ICdNTU0gWVlZWScsXHJcbiAgICBkYXRlQTExeUxhYmVsOiAnTCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIFlZWVknLFxyXG4gIH0sXHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm9wZXJ0eS1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlVmFsdWU6ICdlcy1NWCd9LFxyXG4gICAge3Byb3ZpZGU6IERhdGVBZGFwdGVyLCB1c2VDbGFzczogTW9tZW50RGF0ZUFkYXB0ZXIsIGRlcHM6IFtNQVRfREFURV9MT0NBTEUsIE1BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlNdfSxcclxuICAgIHtwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogTVlfRk9STUFUU31cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdidG5TdWJtaXQnLCB7c3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmfSkgcHJpdmF0ZSBfYnRuU3VibWl0UmVmOiBFbGVtZW50UmVmO1xyXG4gIEBJbnB1dCgpIHV0aWxzOiBBcHBVdGlsO1xyXG4gIEBJbnB1dCgpIGFkZHJlc3M6IEFkZHJlc3M7XHJcbiAgQElucHV0KCkgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtO1xyXG4gIEBJbnB1dCgpIHByb3BlcnR5OiBOZXdQcm9wZXJ0eTtcclxuICBASW5wdXQoKSBtbHNMYWJlbDogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBlZGl0b3JJbnN0YW5jZTogRXZlbnRFbWl0dGVyPEVkaXRvckNvbXBvbmVudD47XHJcbiAgQE91dHB1dCgpIHNlbGVjdEFkZHJlc3M6IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuICAvKipcclxuICAgKiBSRUdFWF9PTkxZX0lOVEVHRVJTXHJcbiAgICogUmVnZXggcGF0dGVybiB0byBvbmx5IGFjY2VwdCBpbnRlZ2VyIGFuZCBwb3NpdGl2ZSBudW1iZXJzXHJcbiAgICogKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IFJFR0VYX09OTFlfSU5URUdFUlMgPSBuZXcgUmVnRXhwKC9eWzAtOV1cXGQqJC8pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVHRVhfTUlERExFX05VTUJFUiA9IG5ldyBSZWdFeHAoL15bMC05XSooXFwuWzVdKT8kLyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBSRUdFWF9XRUJTSVRFID0gbmV3IFJlZ0V4cCgvKGh0dHB8aHR0cHMpOlxcL1xcLyhcXHcrOj9cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAXFwtXFwvXSkpPy8pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVHRVhfQUxQSEFfTlVNQkVSID0gbmV3IFJlZ0V4cCgvW0EtWmEtejAtOV9dLyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsaWRhdG9yczoge1xyXG4gICAgYmVkcm9vbXM6IFZhbGlkYXRvckZuW10sXHJcbiAgICBiYXRocm9vbXM6IFZhbGlkYXRvckZuW10sXHJcbiAgICBwYXJraW5nU3BhY2VzOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgbWFpbkFyZWE6IFZhbGlkYXRvckZuW10sXHJcbiAgICBzZWNvbmRhcnlBcmVhOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgZXh0ZXJuYWxMaW5rOiBWYWxpZGF0b3JGbltdLFxyXG4gICAgc2t1OiBWYWxpZGF0b3JGbltdXHJcbiAgfTtcclxuICBwcml2YXRlIF9wcm9wZXJ0eTogTmV3UHJvcGVydHk7XHJcbiAgcHJpdmF0ZSBfcHJvcGVydHlUeXBlSXRlbTogUHJvcGVydHlUeXBlSXRlbTtcclxuICBwcml2YXRlIF9lcnJvckZpZWxkczogc3RyaW5nW107XHJcbiAgcHVibGljIHByb3BlcnR5Rm9ybTogRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBvZmZlcmluZ1R5cGVMaXN0OiB7IG5hbWU6IHN0cmluZywgdmFsdWU6IE9mZmVyaW5nVHlwZUVudW0gfVtdO1xyXG4gIHB1YmxpYyBjdXJyZW5jeUxpc3Q6IENFUltdO1xyXG4gIHB1YmxpYyByb2lMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgbGFuZFVzZUxpc3Q6IHsgbmFtZTogc3RyaW5nLCB2YWx1ZTogTGFuZFVzZUVudW0gfVtdO1xyXG4gIHB1YmxpYyBhbWVuaXRpZXNMaXN0OiBBbWVuaXR5SXRlbVtdO1xyXG4gIHB1YmxpYyBmZWF0dXJlc0xpc3Q6IEFtZW5pdHlJdGVtW107XHJcbiAgcHVibGljIGNvbW1pc3Npb25MaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgc2hhcmVkQ29tbWlzc2lvbkxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBkdXJhdGlvbkxpc3Q6IG51bWJlcltdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX2RpYWxvZzogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FkYXB0ZXI6IERhdGVBZGFwdGVyPGFueT5cclxuICApIHtcclxuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRvckNvbXBvbmVudD4oKTtcclxuICAgIHRoaXMuc2VsZWN0QWRkcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMub2ZmZXJpbmdUeXBlTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuT2ZmZXJpbmdUeXBlTGlzdC5tYXAoZG9jID0+ICh7Li4uZG9jfSkpO1xyXG4gICAgdGhpcy5sYW5kVXNlTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuTGFuZFVzZUxpc3QubWFwKGRvYyA9PiAoey4uLmRvY30pKTtcclxuICAgIHRoaXMuY29tbWlzc2lvbkxpc3QgPSBDb25zdGFudHNDb21wb25lbnRzLkNvbW1pc3Npb25MaXN0W09mZmVyaW5nVHlwZUVudW0uU0FMRV07XHJcbiAgICB0aGlzLnJvaUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLlJPSUxpc3QpO1xyXG4gICAgdGhpcy5kdXJhdGlvbkxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLkR1cmF0aW9uTGlzdCk7XHJcbiAgICB0aGlzLnNoYXJlZENvbW1pc3Npb25MaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5TaGFyZWRDb21taXNzaW9uTGlzdCk7XHJcbiAgICB0aGlzLl9hZGFwdGVyLnNldExvY2FsZSgnZXMnKTtcclxuICAgIHRoaXMuX2Vycm9yRmllbGRzID0gW107XHJcbiAgICB0aGlzLl92YWxpZGF0b3JzID0ge1xyXG4gICAgICBiZWRyb29tczogW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLlJFR0VYX09OTFlfSU5URUdFUlMpXSxcclxuICAgICAgYmF0aHJvb21zOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfTUlERExFX05VTUJFUildLFxyXG4gICAgICBwYXJraW5nU3BhY2VzOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuUkVHRVhfT05MWV9JTlRFR0VSUyldLFxyXG4gICAgICBtYWluQXJlYTogW10sXHJcbiAgICAgIHNlY29uZGFyeUFyZWE6IFtdLFxyXG4gICAgICBleHRlcm5hbExpbms6IFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5SRUdFWF9XRUJTSVRFKV0sXHJcbiAgICAgIHNrdTogW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLlJFR0VYX0FMUEhBX05VTUJFUildXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wcm9wZXJ0eUZvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIG9mZmVyaW5nOiBbT2ZmZXJpbmdUeXBlRW51bS5TQUxFXSxcclxuICAgICAgc2t1OiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5za3VdLFxyXG4gICAgICBjb25zdW1lclJlcG9ydGluZzogW10sXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nT3B0aW9uOiBbMV0sXHJcbiAgICAgIGN1cnJlbmN5OiBbJ01YTiddLFxyXG4gICAgICBtaW5QcmljZTogW10sXHJcbiAgICAgIHByaWNlOiBbXSxcclxuICAgICAgbWFpbnRlbmFuY2U6IFtdLFxyXG4gICAgICBtYWludGVuYW5jZVByaWNlOiBbXSxcclxuICAgICAgdHJhbnNmZXI6IFtdLFxyXG4gICAgICB0cmFuc2ZlclByaWNlOiBbXSxcclxuICAgICAgYmVkcm9vbXM6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLmJlZHJvb21zXSxcclxuICAgICAgYmF0aHJvb21zOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5iYXRocm9vbXNdLFxyXG4gICAgICBwYXJraW5nU3BhY2VzOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5wYXJraW5nU3BhY2VzXSxcclxuICAgICAgbWFpbkFyZWE6IFtudWxsLCB0aGlzLl92YWxpZGF0b3JzLm1haW5BcmVhXSxcclxuICAgICAgc2Vjb25kYXJ5QXJlYTogW251bGwsIHRoaXMuX3ZhbGlkYXRvcnMuc2Vjb25kYXJ5QXJlYV0sXHJcbiAgICAgIHVuaXQ6IFtBcmVhVW5pdEVudW0uTTJdLFxyXG4gICAgICBidWlsZEluOiBbXSxcclxuICAgICAgbGFuZFVzZTogW10sXHJcbiAgICAgIGV4Y2x1c2l2aXR5OiBbXSxcclxuICAgICAgbWxtOiBbXSxcclxuICAgICAgc2hhcmVkQ29tbWlzc2lvbjogW10sXHJcbiAgICAgIGFncmVlbWVudERhdGU6IFt7dmFsdWU6IG51bGwsIGRpc2FibGVkOiB0cnVlfV0sXHJcbiAgICAgIGR1cmF0aW9uOiBbXSxcclxuICAgICAgY29tbWlzc2lvbjogW10sXHJcbiAgICAgIHJvaTogW10sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbXSxcclxuICAgICAgZXh0ZXJuYWxMaW5rOiBbbnVsbCwgdGhpcy5fdmFsaWRhdG9ycy5leHRlcm5hbExpbmtdLFxyXG4gICAgICBub3RlczogW10sXHJcbiAgICAgIGFkZHJlc3M6IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBjb3VudHJ5OiBbXSxcclxuICAgICAgICBwb3N0YWxDb2RlOiBbXSxcclxuICAgICAgICBzdGF0ZTogW10sXHJcbiAgICAgICAgY2l0eTogW10sXHJcbiAgICAgICAgdG93bnNoaXA6IFtdLFxyXG4gICAgICAgIGNvbG9ueTogW10sXHJcbiAgICAgICAgc3RyZWV0OiBbXSxcclxuICAgICAgICBleHROdW1iZXI6IFtdLFxyXG4gICAgICAgIGludE51bWJlcjogW10sXHJcbiAgICAgICAgbXo6IFtdLFxyXG4gICAgICAgIGx0OiBbXSxcclxuICAgICAgICB2aXNpYmxlOiBbdHJ1ZV0sXHJcbiAgICAgIH0pLFxyXG4gICAgfSwge1xyXG4gICAgICB2YWxpZGF0b3JzOiBQcm9wZXJ0eUVkaXRvclZhbGlkYXRvcnMudmFsaWRhdG9yXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdlb1B0R2VuZXJhdG9yKGdlb1B0OiBHZW9QdCwgbWluRGlzdGFuY2U6IG51bWJlciwgbWF4RGlzdGFuY2U6IG51bWJlcik6IEdlb1B0IHtcclxuICAgIGNvbnN0IEVBUlRIX1JBRElVU19NRVRFUlMgPSA2MzcxMDEwLjA7XHJcbiAgICBjb25zdCBsID0gTWF0aC5yYW5kb20oKSAqIChtYXhEaXN0YW5jZSAtIG1pbkRpc3RhbmNlKSArIG1pbkRpc3RhbmNlO1xyXG4gICAgY29uc3QgYWxwaGEgPSBNYXRoLnJhbmRvbSgpICogTWF0aC5QSSAvIDI7XHJcbiAgICBjb25zdCBzeCA9IChNYXRoLnJhbmRvbSgpIDwgMC41KSA/IGwgKiBNYXRoLmNvcyhhbHBoYSkgOiAtbCAqIE1hdGguY29zKGFscGhhKTtcclxuICAgIGNvbnN0IHN5ID0gKE1hdGgucmFuZG9tKCkgPCAwLjUpID8gbCAqIE1hdGguc2luKGFscGhhKSA6IC1sICogTWF0aC5zaW4oYWxwaGEpO1xyXG4gICAgY29uc3QgZGVsdGFMYXQgPSBzeSAvIEVBUlRIX1JBRElVU19NRVRFUlMgKiAxODAgLyBNYXRoLlBJO1xyXG4gICAgY29uc3QgbGF0ID0gZ2VvUHQubGF0aXR1ZGUgKyBkZWx0YUxhdDtcclxuICAgIGNvbnN0IGRlbHRhTG9uZyA9IHN4IC8gRUFSVEhfUkFESVVTX01FVEVSUyAvIE1hdGguY29zKGxhdCAqIE1hdGguUEkgLyAxODApICogMTgwIC8gTWF0aC5QSTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxhdGl0dWRlOiBsYXQsXHJcbiAgICAgIGxvbmdpdHVkZTogZ2VvUHQubG9uZ2l0dWRlICsgZGVsdGFMb25nXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxpc3RlbkNoYW5nZXNPbkZvcm0oKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWyd1dGlscyddICYmIGNoYW5nZXNbJ3V0aWxzJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVuY3lMaXN0ID0gY2hhbmdlc1sndXRpbHMnXS5jdXJyZW50VmFsdWUuY2VycztcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydwcm9wZXJ0eVR5cGUnXSAmJiBjaGFuZ2VzWydwcm9wZXJ0eVR5cGUnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5wcm9wZXJ0eVR5cGUgPSBjaGFuZ2VzWydwcm9wZXJ0eVR5cGUnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMuc2VhcmNoQW1lbml0aWVzQnlQcm9wZXJ0eVR5cGUoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydwcm9wZXJ0eSddICYmIGNoYW5nZXNbJ3Byb3BlcnR5J10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlUHJvcGVydHkoY2hhbmdlc1sncHJvcGVydHknXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2FkZHJlc3MnXSAmJiBjaGFuZ2VzWydhZGRyZXNzJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQWRkcmVzc0Zvcm0oY2hhbmdlc1snYWRkcmVzcyddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvckluc3RhbmNlLmVtaXQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvcGVydHkoKTogTmV3UHJvcGVydHkge1xyXG4gICAgdGhpcy5zZXRWYWxpZGF0b3JPbkZpZWxkcyh0aGlzLl9lcnJvckZpZWxkcywgdHJ1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVByb3BlcnR5QnlGb3JtKHRoaXMucHJvcGVydHlGb3JtLmdldFJhd1ZhbHVlKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVGb3JtSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHRoaXMuc2V0VmFsaWRhdG9yT25GaWVsZHModGhpcy5fZXJyb3JGaWVsZHMsIHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlGb3JtLmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBbWVuaXR5KGFtZW5pdHk6IEFtZW5pdHlJdGVtKTogdm9pZCB7XHJcbiAgICBhbWVuaXR5LmNoZWNrZWQgPSAhYW1lbml0eS5jaGVja2VkO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYW1lbml0aWVzW2FtZW5pdHkudmFsdWVdID0gYW1lbml0eS5jaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1NlbGVjdEFkZHJlc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdEFkZHJlc3MuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RXJyb3JzT25GaWVsZHMoZXJyb3JzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXJyb3JGaWVsZHMgPSBlcnJvcnM7XHJcbiAgICB0aGlzLnNldFZhbGlkYXRvck9uRmllbGRzKHRoaXMuX2Vycm9yRmllbGRzKTtcclxuICAgIHRoaXMuX2J0blN1Ym1pdFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUFkZHJlc3NGb3JtKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICBhZGRyZXNzOiB7XHJcbiAgICAgICAgY291bnRyeTogYWRkcmVzcy5jb3VudHJ5LFxyXG4gICAgICAgIHN0YXRlOiBhZGRyZXNzLnN0YXRlLFxyXG4gICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSxcclxuICAgICAgICB0b3duc2hpcDogYWRkcmVzcy50b3duc2hpcCxcclxuICAgICAgICBjb2xvbnk6IGFkZHJlc3MuY29sb255LFxyXG4gICAgICAgIHN0cmVldDogYWRkcmVzcy5zdHJlZXQsXHJcbiAgICAgICAgcG9zdGFsQ29kZTogYWRkcmVzcy5wb3N0YWxDb2RlLFxyXG4gICAgICAgIGV4dE51bWJlcjogYWRkcmVzcy5vdXRkb29yTnVtYmVyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3NpZ25BbWVuaXRpZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtZW5pdGllc0xpc3QuZm9yRWFjaCgoYW1lbml0eSkgPT4ge1xyXG4gICAgICBhbWVuaXR5LmNoZWNrZWQgPSB0aGlzLl9wcm9wZXJ0eS5hbWVuaXRpZXNbYW1lbml0eS52YWx1ZV07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXNzaWduTG9jYXRpb25GZWF0dXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmVhdHVyZXNMaXN0LmZvckVhY2goKGFtZW5pdHkpID0+IHtcclxuICAgICAgYW1lbml0eS5jaGVja2VkID0gdGhpcy5fcHJvcGVydHkuYW1lbml0aWVzW2FtZW5pdHkudmFsdWVdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkNvbW1pc3Npb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbW1pc3Npb25MaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Db21taXNzaW9uTGlzdFt0aGlzLl9wcm9wZXJ0eS5vZmZlcmluZ107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzc2lnbkJ1c2luZXNzUnVsZXMoKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMucHJvcGVydHlUeXBlKSB7XHJcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlRW51bS5ST09NOlxyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgb2ZmZXJpbmc6IE9mZmVyaW5nVHlwZUVudW0uUkVOVFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZUVudW0uSU5WRVNUTUVOVDpcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtLlNBTEVcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9wcm9wZXJ0eS5zdGF0dXMgPT09IFN0YXR1c1R5cGVFbnVtLkFOTk9VTkNFRCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBVdGlscy5saXN0RXJyb3JzQnlQcm9wZXJ0eVR5cGVGb3JQdWJsaXNoKHRoaXMuX3Byb3BlcnR5LnR5cGUpO1xyXG4gICAgICB0aGlzLnNldFZhbGlkYXRvck9uRmllbGRzKGVycm9ycyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1CeVByb3BlcnR5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIG9mZmVyaW5nOiB0aGlzLl9wcm9wZXJ0eS5vZmZlcmluZyxcclxuICAgICAgc2t1OiB0aGlzLl9wcm9wZXJ0eS5za3UsXHJcbiAgICAgIGNvbnN1bWVyUmVwb3J0aW5nOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uY29uc3VtZXJSZXBvcnRpbmcgJiYgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbnN1bWVyUmVwb3J0aW5nICE9PSAwLFxyXG4gICAgICBjb25zdW1lclJlcG9ydGluZ09wdGlvbjogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmNvbnN1bWVyUmVwb3J0aW5nLFxyXG4gICAgICBjdXJyZW5jeTogdGhpcy5fcHJvcGVydHkuY3VycmVuY3ksXHJcbiAgICAgIG1pblByaWNlOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubG93ZXN0UHJpY2UsXHJcbiAgICAgIHByaWNlOiB0aGlzLl9wcm9wZXJ0eS5wcmljZSxcclxuICAgICAgbWFpbnRlbmFuY2U6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmNvbmRvbWluaXVtRmVlUHJpY2UgJiYgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSAhPT0gMCxcclxuICAgICAgbWFpbnRlbmFuY2VQcmljZTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuY29uZG9taW5pdW1GZWVQcmljZSxcclxuICAgICAgdHJhbnNmZXI6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sZWFzZVRyYW5zZmVyUHJpY2UgJiYgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSAhPT0gMCxcclxuICAgICAgdHJhbnNmZXJQcmljZTogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSxcclxuICAgICAgYmVkcm9vbXM6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJlZHJvb21zLFxyXG4gICAgICBiYXRocm9vbXM6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJhdGhyb29tcyxcclxuICAgICAgcGFya2luZ1NwYWNlczogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucGFya2luZ1NwYWNlcyxcclxuICAgICAgbWFpbkFyZWE6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLm1haW5BcmVhLFxyXG4gICAgICBzZWNvbmRhcnlBcmVhOiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5zZWNvbmRhcnlBcmVhLFxyXG4gICAgICB1bml0OiB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5hcmVhVW5pdCxcclxuICAgICAgYnVpbGRJbjogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYnVpbHRJbiA/IG5ldyBEYXRlKHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmJ1aWx0SW4sIDEsIDEpIDogbnVsbCxcclxuICAgICAgbGFuZFVzZTogdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMubGFuZFVzZSxcclxuICAgICAgZXhjbHVzaXZpdHk6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5leGNsdXNpdml0eSxcclxuICAgICAgbWxtOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubWxzLFxyXG4gICAgICBzaGFyZWRDb21taXNzaW9uOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uc2hhcmVkQ29tbWlzc2lvbixcclxuICAgICAgYWdyZWVtZW50RGF0ZTogdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRTdGFydERhdGUgP1xyXG4gICAgICAgIG1vbWVudChuZXcgTURhdGUodGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRTdGFydERhdGUpLnRvRGF0ZSgpKSA6IG51bGwsXHJcbiAgICAgIGR1cmF0aW9uOiB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8ubGlzdGluZ0FncmVlbWVudFRpbWUsXHJcbiAgICAgIGNvbW1pc3Npb246IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb21taXNzaW9uLFxyXG4gICAgICByb2k6IHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnJvaSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuX3Byb3BlcnR5LmRlc2NyaXB0aW9uLFxyXG4gICAgICBleHRlcm5hbExpbms6IHRoaXMuX3Byb3BlcnR5LmV4dGVybmFsTGluayxcclxuICAgICAgbm90ZXM6IHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5ub3RlcyxcclxuICAgICAgYWRkcmVzczoge1xyXG4gICAgICAgIGNvdW50cnk6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuY291bnRyeSxcclxuICAgICAgICBzdGF0ZTogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5zdGF0ZSxcclxuICAgICAgICBjaXR5OiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNpdHksXHJcbiAgICAgICAgdG93bnNoaXA6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MudG93bnNoaXAsXHJcbiAgICAgICAgY29sb255OiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNvbG9ueSxcclxuICAgICAgICBwb3N0YWxDb2RlOiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnBvc3RhbENvZGUsXHJcbiAgICAgICAgc3RyZWV0OiB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnN0cmVldCxcclxuICAgICAgICBleHROdW1iZXI6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Mub3V0ZG9vck51bWJlcixcclxuICAgICAgICBpbnROdW1iZXI6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MuaW50ZXJpb3JOdW1iZXIsXHJcbiAgICAgICAgbXo6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubXosXHJcbiAgICAgICAgbHQ6IHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubHQsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5fcHJvcGVydHkuYWRkcmVzcy52aXNpYmxlIHx8IGZhbHNlLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUHJvcGVydHlCeUZvcm0oZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS50eXBlID0gdGhpcy5wcm9wZXJ0eVR5cGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5vZmZlcmluZyA9IGRhdGEub2ZmZXJpbmc7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5za3UgPSBkYXRhLnNrdTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb25zdW1lclJlcG9ydGluZyA9IGRhdGEuY29uc3VtZXJSZXBvcnRpbmcgPyBkYXRhLmNvbnN1bWVyUmVwb3J0aW5nT3B0aW9uIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmN1cnJlbmN5ID0gZGF0YS5jdXJyZW5jeTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5sb3dlc3RQcmljZSA9IGRhdGEubWluUHJpY2UgPyBOdW1iZXIoZGF0YS5taW5QcmljZSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJpY2UgPSBkYXRhLnByaWNlID8gTnVtYmVyKGRhdGEucHJpY2UpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmNvbmRvbWluaXVtRmVlUHJpY2UgPSBkYXRhLm1haW50ZW5hbmNlID8gTnVtYmVyKGRhdGEubWFpbnRlbmFuY2VQcmljZSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxlYXNlVHJhbnNmZXJQcmljZSA9IGRhdGEudHJhbnNmZXIgPyBOdW1iZXIoZGF0YS50cmFuc2ZlclByaWNlKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5iZWRyb29tcyA9IGRhdGEuYmVkcm9vbXMgPyBOdW1iZXIoZGF0YS5iZWRyb29tcykgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYmF0aHJvb21zID0gZGF0YS5iYXRocm9vbXMgPyBOdW1iZXIoZGF0YS5iYXRocm9vbXMpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLnBhcmtpbmdTcGFjZXMgPSBkYXRhLnBhcmtpbmdTcGFjZXMgPyBOdW1iZXIoZGF0YS5wYXJraW5nU3BhY2VzKSA6IG51bGw7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcy5tYWluQXJlYSA9IGRhdGEubWFpbkFyZWEgPyBOdW1iZXIoZGF0YS5tYWluQXJlYSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuc2Vjb25kYXJ5QXJlYSA9IGRhdGEuc2Vjb25kYXJ5QXJlYSA/IE51bWJlcihkYXRhLnNlY29uZGFyeUFyZWEpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmFyZWFVbml0ID0gZGF0YS51bml0O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMuYnVpbHRJbiA9IGRhdGEuYnVpbGRJbiA/IGRhdGEuYnVpbGRJbi5nZXRGdWxsWWVhcigpIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmZlYXR1cmVzLmxhbmRVc2UgPSBkYXRhLmxhbmRVc2U7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8uZXhjbHVzaXZpdHkgPSBkYXRhLmV4Y2x1c2l2aXR5O1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLm1scyA9IGRhdGEubWxtO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLnNoYXJlZENvbW1pc3Npb24gPSBkYXRhLm1sbSA/IE51bWJlcihkYXRhLnNoYXJlZENvbW1pc3Npb24pIDogbnVsbDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5saXN0aW5nQWdyZWVtZW50U3RhcnREYXRlID1cclxuICAgICAgZGF0YS5hZ3JlZW1lbnREYXRlID8gTURhdGUuZ2V0VGltZXN0YW1wKGRhdGEuYWdyZWVtZW50RGF0ZS50b0RhdGUoKSkgOiBudWxsO1xyXG4gICAgdGhpcy5fcHJvcGVydHkucHJvcGVydHlJbmZvLmxpc3RpbmdBZ3JlZW1lbnRUaW1lID0gZGF0YS5kdXJhdGlvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5jb21taXNzaW9uID0gZGF0YS5jb21taXNzaW9uO1xyXG4gICAgdGhpcy5fcHJvcGVydHkuZmVhdHVyZXMucm9pID0gZGF0YS5yb2k7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5leHRlcm5hbExpbmsgPSBkYXRhLmV4dGVybmFsTGluaztcclxuICAgIHRoaXMuX3Byb3BlcnR5LnByb3BlcnR5SW5mby5ub3RlcyA9IGRhdGEubm90ZXM7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNvdW50cnkgPSBkYXRhLmFkZHJlc3MuY291bnRyeTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Muc3RhdGUgPSBkYXRhLmFkZHJlc3Muc3RhdGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNpdHkgPSBkYXRhLmFkZHJlc3MuY2l0eTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MudG93bnNoaXAgPSBkYXRhLmFkZHJlc3MudG93bnNoaXA7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmNvbG9ueSA9IGRhdGEuYWRkcmVzcy5jb2xvbnk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnBvc3RhbENvZGUgPSBkYXRhLmFkZHJlc3MucG9zdGFsQ29kZTtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Muc3RyZWV0ID0gZGF0YS5hZGRyZXNzLnN0cmVldDtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3Mub3V0ZG9vck51bWJlciA9IGRhdGEuYWRkcmVzcy5leHROdW1iZXI7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmludGVyaW9yTnVtYmVyID0gZGF0YS5hZGRyZXNzLmludE51bWJlcjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MubXogPSBkYXRhLmFkZHJlc3MubXo7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLmx0ID0gZGF0YS5hZGRyZXNzLmx0O1xyXG4gICAgdGhpcy5fcHJvcGVydHkuYWRkcmVzcy5sb2NhdGlvbiA9IHRoaXMuYWRkcmVzcy5sb2NhdGlvbjtcclxuICAgIHRoaXMuX3Byb3BlcnR5LmFkZHJlc3MucHVibGljTG9jYXRpb24gPSAhZGF0YS5hZGRyZXNzLnZpc2libGUgP1xyXG4gICAgICBFZGl0b3JDb21wb25lbnQuZ2VvUHRHZW5lcmF0b3IodGhpcy5hZGRyZXNzLmxvY2F0aW9uLCAyMDAsIDQwMCkgOiB0aGlzLmFkZHJlc3MubG9jYXRpb247XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzLnZpc2libGUgPSBkYXRhLmFkZHJlc3MudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoQW1lbml0aWVzQnlQcm9wZXJ0eVR5cGUoKTogdm9pZCB7XHJcbiAgICBDb25zdGFudHNDb21wb25lbnRzLlByb3BlcnR5VHlwZUxpc3QuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgaWYgKHR5cGUudmFsdWUgPT09IHRoaXMucHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvcGVydHlUeXBlSXRlbSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5hbWVuaXRpZXNMaXN0ID0gdHlwZS5hbWVuaXRpZXMubWFwKGl0ZW0gPT4gKHsuLi5pdGVtfSkpO1xyXG4gICAgICAgIHRoaXMuZmVhdHVyZXNMaXN0ID0gdHlwZS5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoey4uLml0ZW19KSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5DaGFuZ2VzT25Gb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICB0aGlzLmNvbW1pc3Npb25MaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Db21taXNzaW9uTGlzdFt2YWx1ZV07XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBtaW5QcmljZTogbnVsbCxcclxuICAgICAgICAgIG1heFByaWNlOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ3ByaWNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgTnVtYmVyKHZhbHVlKSA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIG1pblByaWNlOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ21sbSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydzaGFyZWRDb21taXNzaW9uJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ21haW50ZW5hbmNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbJ21haW50ZW5hbmNlUHJpY2UnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1sndHJhbnNmZXInXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1sndHJhbnNmZXJQcmljZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydjb25zdW1lclJlcG9ydGluZyddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzWydjb25zdW1lclJlcG9ydGluZ09wdGlvbiddLnNldFZhbHVlKDEpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUHJvcGVydHkocHJvcGVydHk/OiBOZXdQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJvcGVydHkgPSBuZXcgTmV3UHJvcGVydHkocHJvcGVydHkgfHwgbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS50eXBlID0gdGhpcy5wcm9wZXJ0eVR5cGU7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5wcm9wZXJ0eUluZm8gPSBuZXcgUHJvcGVydHlJbmZvKHByb3BlcnR5ID8gcHJvcGVydHkucHJvcGVydHlJbmZvIDogbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5mZWF0dXJlcyA9IG5ldyBGZWF0dXJlcyhwcm9wZXJ0eSA/IHByb3BlcnR5LmZlYXR1cmVzIDogbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hZGRyZXNzID0gbmV3IEFkZHJlc3MocHJvcGVydHkgPyBwcm9wZXJ0eS5hZGRyZXNzIDogbnVsbCk7XHJcbiAgICB0aGlzLl9wcm9wZXJ0eS5hbWVuaXRpZXMgPSBuZXcgQW1lbml0aWVzKHByb3BlcnR5ID8gcHJvcGVydHkuYW1lbml0aWVzIDogbnVsbCk7XHJcbiAgICB0aGlzLmFzc2lnbkJ1c2luZXNzUnVsZXMoKTtcclxuICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5pZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1CeVByb3BlcnR5KCk7XHJcbiAgICAgIHRoaXMuYXNzaWduQW1lbml0aWVzKCk7XHJcbiAgICAgIHRoaXMuYXNzaWduTG9jYXRpb25GZWF0dXJlcygpO1xyXG4gICAgICB0aGlzLmFzc2lnbkNvbW1pc3Npb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9yT25GaWVsZHMoZXJyb3JzOiBzdHJpbmdbXSwgcmVtb3ZlPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXJyb3JzLmZvckVhY2goZXJyb3IgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMucHJvcGVydHlGb3JtLmNvbnRyb2xzW2Vycm9yXS5zZXRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnNbZXJyb3JdID8gdGhpcy5fdmFsaWRhdG9yc1tlcnJvcl0gOiBbXSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnByb3BlcnR5Rm9ybS5jb250cm9sc1tlcnJvcl0uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnNldFZhbGlkYXRvcnMoXHJcbiAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzW2Vycm9yXSA/IHRoaXMuX3ZhbGlkYXRvcnNbZXJyb3JdLmNvbmNhdChWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUZvcm0uY29udHJvbHNbZXJyb3JdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -53,6 +53,7 @@ var MultimediaUploaderComponent = /** @class */ (function () {
53
53
  function (text) {
54
54
  if (text.indexOf('https://youtu.be/') !== -1) {
55
55
  text = text.replace('https://youtu.be/', '');
56
+ return text;
56
57
  }
57
58
  else if (text.indexOf('https://www.youtube.com/') !== -1) {
58
59
  text = text.replace('https://www.youtube.com/', '');
@@ -66,6 +67,11 @@ var MultimediaUploaderComponent = /** @class */ (function () {
66
67
  else {
67
68
  return text = null;
68
69
  }
70
+ if (text.indexOf('&')) {
71
+ /** @type {?} */
72
+ var arr = text.split('&');
73
+ text = arr[0];
74
+ }
69
75
  return text;
70
76
  };
71
77
  /**
@@ -440,4 +446,4 @@ if (false) {
440
446
  */
441
447
  MultimediaUploaderComponent.prototype._dialog;
442
448
  }
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm9wZXJ0eS9jb21wb25lbnRzL211bHRpbWVkaWEtdXBsb2FkZXIvbXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQVksTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUVqRSxxQ0FJQzs7O0lBSEMsNkNBQTJCOztJQUMzQiw0Q0FBb0I7O0lBQ3BCLDBDQUFzQjs7QUFHeEI7SUFjRSxxQ0FDbUMsS0FBNkIsRUFDdEQsT0FBa0c7UUFEekUsVUFBSyxHQUFMLEtBQUssQ0FBd0I7UUFDdEQsWUFBTyxHQUFQLE9BQU8sQ0FBMkY7UUFFMUcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM5QixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RC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QTBRckMsa0NBQUM7Q0FBQSxBQWpRRCxJQWlRQztTQTVQWSwyQkFBMkI7OztJQUV0QywrQ0FBbUQ7O0lBQ25ELDZDQUF1Qjs7SUFDdkIsZ0RBQTBCOztJQUMxQiw2Q0FBdUI7O0lBQ3ZCLG1EQUE0Qjs7Ozs7SUFDNUIsZ0RBQStCOzs7OztJQUc3Qiw0Q0FBOEQ7Ozs7O0lBQzlELDhDQUEwRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7UEZpbGUsIFBGaWxlVHlwZUVudW0sIFVzZXJNZWRpYX0gZnJvbSAnQG1hcGxhbmRlci90eXBlcyc7XHJcblxyXG5pbnRlcmZhY2UgTXVsdGltZWRpYVVwbG9hZGVyRGF0YSB7XHJcbiAgY3VycmVudFR5cGU6IFBGaWxlVHlwZUVudW07XHJcbiAgbXVsdGltZWRpYTogUEZpbGVbXTtcclxuICBuZXdNZWRpYTogVXNlck1lZGlhW107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXByb3BlcnR5LW11bHRpbWVkaWEtdXBsb2FkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aW1lZGlhLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aW1lZGlhLXVwbG9hZGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpbWVkaWFVcGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBmaWxlVHlwZTogJ2ltYWdlJyB8ICdpbWFnZTM2MCcgfCAnZG9jdW1lbnQnO1xyXG4gIHB1YmxpYyBpbWFnZXM6IFBGaWxlW107XHJcbiAgcHVibGljIGltYWdlczM2MDogUEZpbGVbXTtcclxuICBwdWJsaWMgdmlkZW9zOiBQRmlsZVtdO1xyXG4gIHB1YmxpYyBjdXJyZW50SW5kZXg6IG51bWJlcjtcclxuICBwcml2YXRlIF9uZXdNZWRpYTogVXNlck1lZGlhW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGE6IE11bHRpbWVkaWFVcGxvYWRlckRhdGEsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZ1JlZjxNdWx0aW1lZGlhVXBsb2FkZXJDb21wb25lbnQsIHsgbXVsdGltZWRpYTogUEZpbGVbXSwgbmV3TWVkaWE6IFVzZXJNZWRpYVtdIH0+XHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuX2RhdGEuY3VycmVudFR5cGUpIHtcclxuICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLklNQUdFOlxyXG4gICAgICAgIHRoaXMuZmlsZVR5cGUgPSAnaW1hZ2UnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM6XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9ICdpbWFnZTM2MCc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFBGaWxlVHlwZUVudW0uVklERU86XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9ICdkb2N1bWVudCc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbWFnZXMgPSBbXTtcclxuICAgIHRoaXMuaW1hZ2VzMzYwID0gW107XHJcbiAgICB0aGlzLnZpZGVvcyA9IFtdO1xyXG4gICAgdGhpcy5fbmV3TWVkaWEgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldFlvdVR1YmVJRCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRleHQuaW5kZXhPZignaHR0cHM6Ly95b3V0dS5iZS8nKSAhPT0gLTEpIHtcclxuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnaHR0cHM6Ly95b3V0dS5iZS8nLCAnJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRleHQuaW5kZXhPZignaHR0cHM6Ly93d3cueW91dHViZS5jb20vJykgIT09IC0xKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tLycsICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0ZXh0LmluZGV4T2YoJ3dhdGNoP3Y9JykgIT09IC0xKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ3dhdGNoP3Y9JywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRleHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGFyc2VNdWx0aW1lZGlhKCk7XHJcbiAgfVxyXG5cclxuICBvblVwbG9hZEltYWdlKGV2OiBVc2VyTWVkaWEgfCBVc2VyTWVkaWFbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFldikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMuZmlsZVR5cGUpIHtcclxuICAgICAgY2FzZSAnaW1hZ2UnOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSkge1xyXG4gICAgICAgICAgZXYuZm9yRWFjaChpbWFnZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSW1hZ2VQRmlsZShpbWFnZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVJbWFnZVBGaWxlKGV2KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ltYWdlMzYwJzpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikpIHtcclxuICAgICAgICAgIGV2LmZvckVhY2goaW1hZ2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlMzYwUEZpbGUoaW1hZ2UpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlSW1hZ2UzNjBQRmlsZShldik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UYWJDaGFuZ2VkKHRhYjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRhYjtcclxuICAgIHN3aXRjaCAodGFiKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2ltYWdlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuZmlsZVR5cGUgPSAnaW1hZ2UzNjAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25MaXN0Q2hhbmdlZChldjogUEZpbGVbXSk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRJbmRleCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXYpICYmIGV2Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGV2ID0gZXYubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLnBvc2l0aW9uID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmltYWdlcyA9IGV2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSAmJiBldi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBldiA9IGV2Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wb3NpdGlvbiA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZXMzNjAgPSBldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikgJiYgZXYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZXYgPSBldi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpbmRleDtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudmlkZW9zID0gZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTWVkaWEoZXY6IFBGaWxlKTogdm9pZCB7XHJcbiAgICBsZXQgaSA9IC0xO1xyXG4gICAgaWYgKCFldi5pZCkge1xyXG4gICAgICBzd2l0Y2ggKGV2LnR5cGUpIHtcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uSU1BR0U6XHJcbiAgICAgICAgICB0aGlzLmltYWdlcy5zcGxpY2UodGhpcy5pbWFnZXMuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM6XHJcbiAgICAgICAgICB0aGlzLmltYWdlczM2MC5zcGxpY2UodGhpcy5pbWFnZXMzNjAuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLlZJREVPOlxyXG4gICAgICAgICAgdGhpcy52aWRlb3Muc3BsaWNlKHRoaXMudmlkZW9zLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX25ld01lZGlhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXJsID09PSBldi5maWxlQ1MudGh1bWJuYWlsKSB7XHJcbiAgICAgICAgICBpID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX25ld01lZGlhLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoIChldi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLklNQUdFOlxyXG4gICAgICAgICAgdGhpcy5pbWFnZXMuc3BsaWNlKHRoaXMuaW1hZ2VzLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5TUEhFUklDOlxyXG4gICAgICAgICAgdGhpcy5pbWFnZXMzNjAuc3BsaWNlKHRoaXMuaW1hZ2VzMzYwLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICAgIHRoaXMudmlkZW9zLnNwbGljZSh0aGlzLnZpZGVvcy5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Zb3VUdWJlSW5wdXRUZXh0Q2hhbmdlZChpbnB1dDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKGlucHV0LnZhbHVlID09PSAnJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpZCA9IE11bHRpbWVkaWFVcGxvYWRlckNvbXBvbmVudC5nZXRZb3VUdWJlSUQoaW5wdXQudmFsdWUpO1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaWQubGVuZ3RoID49IDExKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUEZpbGUoKTtcclxuICAgICAgZmlsZS50eXBlID0gUEZpbGVUeXBlRW51bS5WSURFTztcclxuICAgICAgZmlsZS5tZWRpYSA9IHRydWU7XHJcbiAgICAgIGZpbGUubmFtZSA9IGB2aWRlb18ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XHJcbiAgICAgIGZpbGUuZmlsZUNTID0ge1xyXG4gICAgICAgIHRodW1ibmFpbDogaWQsXHJcbiAgICAgICAgYmxvYk5hbWU6IG51bGxcclxuICAgICAgfTtcclxuICAgICAgZmlsZS5wb3NpdGlvbiA9IHRoaXMudmlkZW9zLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLnZpZGVvcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMudmlkZW9zLnB1c2goZmlsZSk7XHJcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY2NlcHQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2cuY2xvc2Uoe211bHRpbWVkaWE6IHRoaXMuam9pbk11bHRpbWVkaWFUeXBlcygpLCBuZXdNZWRpYTogdGhpcy5fbmV3TWVkaWF9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLmNsb3NlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZVBGaWxlKGltYWdlOiBVc2VyTWVkaWEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBuZXcgUEZpbGUoKTtcclxuICAgIGZpbGUudHlwZSA9IFBGaWxlVHlwZUVudW0uSU1BR0U7XHJcbiAgICBpbWFnZS50eXBlID0gUEZpbGVUeXBlRW51bS5JTUFHRTtcclxuICAgIGZpbGUubWVkaWEgPSB0cnVlO1xyXG4gICAgZmlsZS5maWxlQ1MgPSB7XHJcbiAgICAgIHRodW1ibmFpbDogaW1hZ2UudXJsLFxyXG4gICAgICBibG9iTmFtZTogbnVsbFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gYGltYWdlXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKX0uJHtpbWFnZS5ibG9iLnR5cGUucmVwbGFjZSgnaW1hZ2UvJywgJycpfWA7XHJcbiAgICBmaWxlLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgIGltYWdlLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgIGZpbGUucG9zaXRpb24gPSB0aGlzLmltYWdlcy5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5pbWFnZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5fbmV3TWVkaWEucHVzaChpbWFnZSk7XHJcbiAgICB0aGlzLmltYWdlcy5wdXNoKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZTM2MFBGaWxlKGltYWdlOiBVc2VyTWVkaWEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBuZXcgUEZpbGUoKTtcclxuICAgIGZpbGUudHlwZSA9IFBGaWxlVHlwZUVudW0uU1BIRVJJQztcclxuICAgIGltYWdlLnR5cGUgPSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM7XHJcbiAgICBmaWxlLm1lZGlhID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gYHNwaGVyaWNfJHtEYXRlLm5vdygpfV8ke01hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApfS4ke2ltYWdlLmJsb2IudHlwZS5yZXBsYWNlKCdpbWFnZS8nLCAnJyl9YDtcclxuICAgIGZpbGUubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgaW1hZ2UubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgZmlsZS5maWxlQ1MgPSB7XHJcbiAgICAgIHRodW1ibmFpbDogaW1hZ2UudXJsLFxyXG4gICAgICBibG9iTmFtZTogbnVsbFxyXG4gICAgfTtcclxuICAgIGZpbGUucG9zaXRpb24gPSB0aGlzLmltYWdlczM2MC5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5pbWFnZXMzNjAubGVuZ3RoO1xyXG4gICAgdGhpcy5fbmV3TWVkaWEucHVzaChpbWFnZSk7XHJcbiAgICB0aGlzLmltYWdlczM2MC5wdXNoKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU11bHRpbWVkaWEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZGF0YSkge1xyXG4gICAgICB0aGlzLl9kYXRhLm11bHRpbWVkaWEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLklNQUdFOlxyXG4gICAgICAgICAgICB0aGlzLmltYWdlcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5TUEhFUklDOlxyXG4gICAgICAgICAgICB0aGlzLmltYWdlczM2MC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICAgICAgdGhpcy52aWRlb3MucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5fbmV3TWVkaWEgPSB0aGlzLl9kYXRhLm5ld01lZGlhIHx8IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBqb2luTXVsdGltZWRpYVR5cGVzKCk6IFBGaWxlW10ge1xyXG4gICAgbGV0IHJlc3BvbnNlID0gW107XHJcbiAgICByZXNwb25zZSA9IHJlc3BvbnNlLmNvbmNhdCh0aGlzLmltYWdlcyk7XHJcbiAgICByZXNwb25zZSA9IHJlc3BvbnNlLmNvbmNhdCh0aGlzLmltYWdlczM2MCk7XHJcbiAgICByZXNwb25zZSA9IHJlc3BvbnNlLmNvbmNhdCh0aGlzLnZpZGVvcyk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm9wZXJ0eS9jb21wb25lbnRzL211bHRpbWVkaWEtdXBsb2FkZXIvbXVsdGltZWRpYS11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQVksTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUVqRSxxQ0FJQzs7O0lBSEMsNkNBQTJCOztJQUMzQiw0Q0FBb0I7O0lBQ3BCLDBDQUFzQjs7QUFHeEI7SUFjRSxxQ0FDbUMsS0FBNkIsRUFDdEQsT0FBa0c7UUFEekUsVUFBSyxHQUFMLEtBQUssQ0FBd0I7UUFDdEQsWUFBTyxHQUFQLE9BQU8sQ0FBMkY7UUFFMUcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM5QixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RC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QUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7Z0JBcFFGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxvN0hBQW1EOztpQkFFcEQ7Ozs7Z0RBV0ksTUFBTSxTQUFDLGVBQWU7Z0JBeEJGLFlBQVk7O0lBK1FyQyxrQ0FBQztDQUFBLEFBdFFELElBc1FDO1NBalFZLDJCQUEyQjs7O0lBRXRDLCtDQUFtRDs7SUFDbkQsNkNBQXVCOztJQUN2QixnREFBMEI7O0lBQzFCLDZDQUF1Qjs7SUFDdkIsbURBQTRCOzs7OztJQUM1QixnREFBK0I7Ozs7O0lBRzdCLDRDQUE4RDs7Ozs7SUFDOUQsOENBQTBHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtQRmlsZSwgUEZpbGVUeXBlRW51bSwgVXNlck1lZGlhfSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuXHJcbmludGVyZmFjZSBNdWx0aW1lZGlhVXBsb2FkZXJEYXRhIHtcclxuICBjdXJyZW50VHlwZTogUEZpbGVUeXBlRW51bTtcclxuICBtdWx0aW1lZGlhOiBQRmlsZVtdO1xyXG4gIG5ld01lZGlhOiBVc2VyTWVkaWFbXTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcHJvcGVydHktbXVsdGltZWRpYS11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpbWVkaWEtdXBsb2FkZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGltZWRpYVVwbG9hZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGZpbGVUeXBlOiAnaW1hZ2UnIHwgJ2ltYWdlMzYwJyB8ICdkb2N1bWVudCc7XHJcbiAgcHVibGljIGltYWdlczogUEZpbGVbXTtcclxuICBwdWJsaWMgaW1hZ2VzMzYwOiBQRmlsZVtdO1xyXG4gIHB1YmxpYyB2aWRlb3M6IFBGaWxlW107XHJcbiAgcHVibGljIGN1cnJlbnRJbmRleDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX25ld01lZGlhOiBVc2VyTWVkaWFbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YTogTXVsdGltZWRpYVVwbG9hZGVyRGF0YSxcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nUmVmPE11bHRpbWVkaWFVcGxvYWRlckNvbXBvbmVudCwgeyBtdWx0aW1lZGlhOiBQRmlsZVtdLCBuZXdNZWRpYTogVXNlck1lZGlhW10gfT5cclxuICApIHtcclxuICAgIHN3aXRjaCAodGhpcy5fZGF0YS5jdXJyZW50VHlwZSkge1xyXG4gICAgICBjYXNlIFBGaWxlVHlwZUVudW0uSU1BR0U6XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9ICdpbWFnZSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFBGaWxlVHlwZUVudW0uU1BIRVJJQzpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2ltYWdlMzYwJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2RvY3VtZW50JztcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmltYWdlcyA9IFtdO1xyXG4gICAgdGhpcy5pbWFnZXMzNjAgPSBbXTtcclxuICAgIHRoaXMudmlkZW9zID0gW107XHJcbiAgICB0aGlzLl9uZXdNZWRpYSA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0WW91VHViZUlEKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGV4dC5pbmRleE9mKCdodHRwczovL3lvdXR1LmJlLycpICE9PSAtMSkge1xyXG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdodHRwczovL3lvdXR1LmJlLycsICcnKTtcclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRleHQuaW5kZXhPZignaHR0cHM6Ly93d3cueW91dHViZS5jb20vJykgIT09IC0xKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tLycsICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0ZXh0LmluZGV4T2YoJ3dhdGNoP3Y9JykgIT09IC0xKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ3dhdGNoP3Y9JywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRleHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRleHQuaW5kZXhPZignJicpKSB7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRleHQuc3BsaXQoJyYnKTtcclxuICAgICAgdGV4dCA9IGFyclswXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBhcnNlTXVsdGltZWRpYSgpO1xyXG4gIH1cclxuXHJcbiAgb25VcGxvYWRJbWFnZShldjogVXNlck1lZGlhIHwgVXNlck1lZGlhW10pOiB2b2lkIHtcclxuICAgIGlmICghZXYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLmZpbGVUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikpIHtcclxuICAgICAgICAgIGV2LmZvckVhY2goaW1hZ2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlUEZpbGUoaW1hZ2UpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlSW1hZ2VQRmlsZShldik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbWFnZTM2MCc6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXYpKSB7XHJcbiAgICAgICAgICBldi5mb3JFYWNoKGltYWdlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJbWFnZTM2MFBGaWxlKGltYWdlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlMzYwUEZpbGUoZXYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVGFiQ2hhbmdlZCh0YWI6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSB0YWI7XHJcbiAgICBzd2l0Y2ggKHRhYikge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9ICdpbWFnZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLmZpbGVUeXBlID0gJ2ltYWdlMzYwJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTGlzdENoYW5nZWQoZXY6IFBGaWxlW10pOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50SW5kZXgpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2KSAmJiBldi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBldiA9IGV2Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wb3NpdGlvbiA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZXMgPSBldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldikgJiYgZXYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZXYgPSBldi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpbmRleDtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VzMzYwID0gZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXYpICYmIGV2Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGV2ID0gZXYubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLnBvc2l0aW9uID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnZpZGVvcyA9IGV2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU1lZGlhKGV2OiBQRmlsZSk6IHZvaWQge1xyXG4gICAgbGV0IGkgPSAtMTtcclxuICAgIGlmICghZXYuaWQpIHtcclxuICAgICAgc3dpdGNoIChldi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBQRmlsZVR5cGVFbnVtLklNQUdFOlxyXG4gICAgICAgICAgdGhpcy5pbWFnZXMuc3BsaWNlKHRoaXMuaW1hZ2VzLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5TUEhFUklDOlxyXG4gICAgICAgICAgdGhpcy5pbWFnZXMzNjAuc3BsaWNlKHRoaXMuaW1hZ2VzMzYwLmluZGV4T2YoZXYpLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5WSURFTzpcclxuICAgICAgICAgIHRoaXMudmlkZW9zLnNwbGljZSh0aGlzLnZpZGVvcy5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9uZXdNZWRpYS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnVybCA9PT0gZXYuZmlsZUNTLnRodW1ibmFpbCkge1xyXG4gICAgICAgICAgaSA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgICB0aGlzLl9uZXdNZWRpYS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAoZXYudHlwZSkge1xyXG4gICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5JTUFHRTpcclxuICAgICAgICAgIHRoaXMuaW1hZ2VzLnNwbGljZSh0aGlzLmltYWdlcy5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uU1BIRVJJQzpcclxuICAgICAgICAgIHRoaXMuaW1hZ2VzMzYwLnNwbGljZSh0aGlzLmltYWdlczM2MC5pbmRleE9mKGV2KSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uVklERU86XHJcbiAgICAgICAgICB0aGlzLnZpZGVvcy5zcGxpY2UodGhpcy52aWRlb3MuaW5kZXhPZihldiksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uWW91VHViZUlucHV0VGV4dENoYW5nZWQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaWQgPSBNdWx0aW1lZGlhVXBsb2FkZXJDb21wb25lbnQuZ2V0WW91VHViZUlEKGlucHV0LnZhbHVlKTtcclxuICAgIGlmICghaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlkLmxlbmd0aCA+PSAxMSkge1xyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBGaWxlKCk7XHJcbiAgICAgIGZpbGUudHlwZSA9IFBGaWxlVHlwZUVudW0uVklERU87XHJcbiAgICAgIGZpbGUubWVkaWEgPSB0cnVlO1xyXG4gICAgICBmaWxlLm5hbWUgPSBgdmlkZW9fJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xyXG4gICAgICBmaWxlLmZpbGVDUyA9IHtcclxuICAgICAgICB0aHVtYm5haWw6IGlkLFxyXG4gICAgICAgIGJsb2JOYW1lOiBudWxsXHJcbiAgICAgIH07XHJcbiAgICAgIGZpbGUucG9zaXRpb24gPSB0aGlzLnZpZGVvcy5sZW5ndGggPT09IDAgPyAwIDogdGhpcy52aWRlb3MubGVuZ3RoO1xyXG4gICAgICB0aGlzLnZpZGVvcy5wdXNoKGZpbGUpO1xyXG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWNjZXB0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLmNsb3NlKHttdWx0aW1lZGlhOiB0aGlzLmpvaW5NdWx0aW1lZGlhVHlwZXMoKSwgbmV3TWVkaWE6IHRoaXMuX25ld01lZGlhfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZShudWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2VQRmlsZShpbWFnZTogVXNlck1lZGlhKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gbmV3IFBGaWxlKCk7XHJcbiAgICBmaWxlLnR5cGUgPSBQRmlsZVR5cGVFbnVtLklNQUdFO1xyXG4gICAgaW1hZ2UudHlwZSA9IFBGaWxlVHlwZUVudW0uSU1BR0U7XHJcbiAgICBmaWxlLm1lZGlhID0gdHJ1ZTtcclxuICAgIGZpbGUuZmlsZUNTID0ge1xyXG4gICAgICB0aHVtYm5haWw6IGltYWdlLnVybCxcclxuICAgICAgYmxvYk5hbWU6IG51bGxcclxuICAgIH07XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBpbWFnZV8ke0RhdGUubm93KCl9XyR7TWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCl9LiR7aW1hZ2UuYmxvYi50eXBlLnJlcGxhY2UoJ2ltYWdlLycsICcnKX1gO1xyXG4gICAgZmlsZS5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICBpbWFnZS5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICBmaWxlLnBvc2l0aW9uID0gdGhpcy5pbWFnZXMubGVuZ3RoID09PSAwID8gMCA6IHRoaXMuaW1hZ2VzLmxlbmd0aDtcclxuICAgIHRoaXMuX25ld01lZGlhLnB1c2goaW1hZ2UpO1xyXG4gICAgdGhpcy5pbWFnZXMucHVzaChmaWxlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2UzNjBQRmlsZShpbWFnZTogVXNlck1lZGlhKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gbmV3IFBGaWxlKCk7XHJcbiAgICBmaWxlLnR5cGUgPSBQRmlsZVR5cGVFbnVtLlNQSEVSSUM7XHJcbiAgICBpbWFnZS50eXBlID0gUEZpbGVUeXBlRW51bS5TUEhFUklDO1xyXG4gICAgZmlsZS5tZWRpYSA9IHRydWU7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBzcGhlcmljXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKX0uJHtpbWFnZS5ibG9iLnR5cGUucmVwbGFjZSgnaW1hZ2UvJywgJycpfWA7XHJcbiAgICBmaWxlLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgIGltYWdlLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgIGZpbGUuZmlsZUNTID0ge1xyXG4gICAgICB0aHVtYm5haWw6IGltYWdlLnVybCxcclxuICAgICAgYmxvYk5hbWU6IG51bGxcclxuICAgIH07XHJcbiAgICBmaWxlLnBvc2l0aW9uID0gdGhpcy5pbWFnZXMzNjAubGVuZ3RoID09PSAwID8gMCA6IHRoaXMuaW1hZ2VzMzYwLmxlbmd0aDtcclxuICAgIHRoaXMuX25ld01lZGlhLnB1c2goaW1hZ2UpO1xyXG4gICAgdGhpcy5pbWFnZXMzNjAucHVzaChmaWxlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VNdWx0aW1lZGlhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcclxuICAgICAgdGhpcy5fZGF0YS5tdWx0aW1lZGlhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgUEZpbGVUeXBlRW51bS5JTUFHRTpcclxuICAgICAgICAgICAgdGhpcy5pbWFnZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uU1BIRVJJQzpcclxuICAgICAgICAgICAgdGhpcy5pbWFnZXMzNjAucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBGaWxlVHlwZUVudW0uVklERU86XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX25ld01lZGlhID0gdGhpcy5fZGF0YS5uZXdNZWRpYSB8fCBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgam9pbk11bHRpbWVkaWFUeXBlcygpOiBQRmlsZVtdIHtcclxuICAgIGxldCByZXNwb25zZSA9IFtdO1xyXG4gICAgcmVzcG9uc2UgPSByZXNwb25zZS5jb25jYXQodGhpcy5pbWFnZXMpO1xyXG4gICAgcmVzcG9uc2UgPSByZXNwb25zZS5jb25jYXQodGhpcy5pbWFnZXMzNjApO1xyXG4gICAgcmVzcG9uc2UgPSByZXNwb25zZS5jb25jYXQodGhpcy52aWRlb3MpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbn1cclxuIl19