@snabcentr/client-ui 1.0.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/auth/sign-up-form/sc-sign-up-form.component.d.ts +7 -1
- package/brands-list/index.d.ts +2 -0
- package/brands-list/sc-brands-list.component.d.ts +15 -0
- package/brands-list/sc-brands-list.module.d.ts +12 -0
- package/contragents/new-contragent-form/sc-new-contragent-form.component.d.ts +5 -1
- package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +48 -4
- package/delivery-address/sc-delivery-address.module.d.ts +2 -1
- package/esm2020/auth/sign-up-form/sc-sign-up-form.component.mjs +38 -6
- package/esm2020/brands-list/index.mjs +3 -0
- package/esm2020/brands-list/sc-brands-list.component.mjs +24 -0
- package/esm2020/brands-list/sc-brands-list.module.mjs +22 -0
- package/esm2020/contacts/new-contact-form/sc-new-contact-form.component.mjs +1 -1
- package/esm2020/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.mjs +1 -1
- package/esm2020/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +1 -1
- package/esm2020/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +15 -5
- package/esm2020/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +97 -11
- package/esm2020/delivery-address/sc-delivery-address.module.mjs +18 -5
- package/esm2020/form-fields/suggestion-field/sc-suggestion-field.component.mjs +10 -3
- package/esm2020/public-api.mjs +2 -1
- package/esm2020/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +1 -1
- package/fesm2015/snabcentr-client-ui.mjs +205 -21
- package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
- package/fesm2020/snabcentr-client-ui.mjs +201 -21
- package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
- package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +6 -2
- package/package.json +2 -1
- package/public-api.d.ts +1 -0
- package/styles/tailwind/tailwind.scss +86 -0
@@ -1,10 +1,12 @@
|
|
1
|
+
import { __decorate } from "tslib";
|
1
2
|
/* eslint-disable class-methods-use-this,@typescript-eslint/no-explicit-any,@typescript-eslint/unbound-method,no-restricted-syntax */
|
2
3
|
import { HttpErrorResponse } from '@angular/common/http';
|
3
4
|
import { ChangeDetectionStrategy, Component, Output } from '@angular/core';
|
4
5
|
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
6
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
5
7
|
import { ScISuggestionType, ScOpfList, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
|
6
8
|
import { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';
|
7
|
-
import { catchError, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
|
9
|
+
import { catchError, distinctUntilChanged, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
|
8
10
|
import { scBicValidator, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator } from '../../validators';
|
9
11
|
import * as i0 from "@angular/core";
|
10
12
|
import * as i1 from "@snabcentr/client-core";
|
@@ -22,7 +24,7 @@ import * as i12 from "../../contacts/new-contact-form/sc-new-contact-form.compon
|
|
22
24
|
/**
|
23
25
|
* Компонент формы регистрация пользователя.
|
24
26
|
*/
|
25
|
-
|
27
|
+
let ScSignUpFormComponent = class ScSignUpFormComponent {
|
26
28
|
/**
|
27
29
|
* Инициализирует экземпляр класса {@link ScSignUpFormComponent}.
|
28
30
|
*
|
@@ -105,6 +107,10 @@ export class ScSignUpFormComponent {
|
|
105
107
|
* Сигнал события аутентификации после успешной регистрации.
|
106
108
|
*/
|
107
109
|
this.successAuth = this.authService.getAuthChange().pipe(filter((state) => state));
|
110
|
+
this.opfControl.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this)).subscribe(() => {
|
111
|
+
this.form.patchValue({ name: '' });
|
112
|
+
this.form.controls.name.markAsUntouched();
|
113
|
+
});
|
108
114
|
}
|
109
115
|
/**
|
110
116
|
* Список групп полей банковских реквизитов.
|
@@ -238,6 +244,28 @@ export class ScSignUpFormComponent {
|
|
238
244
|
position: new FormControl(null),
|
239
245
|
});
|
240
246
|
}
|
247
|
+
/**
|
248
|
+
* Обработчик выбора адреса доставки.
|
249
|
+
*
|
250
|
+
* @param suggestion Объект подсказки ареса.
|
251
|
+
*/
|
252
|
+
onSelectedOrganization(suggestion) {
|
253
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
254
|
+
if (this.form.controls.contragent && 'inn' in suggestion && !('bic' in suggestion)) {
|
255
|
+
this.form.controls.contragent.patchValue({
|
256
|
+
name: suggestion.name,
|
257
|
+
inn: suggestion.inn,
|
258
|
+
kpp: suggestion.kpp,
|
259
|
+
okpo: suggestion.okpo,
|
260
|
+
directorName: suggestion.directorName,
|
261
|
+
directorPosition: suggestion.directorPosition,
|
262
|
+
legalAddress: suggestion.legalAddress,
|
263
|
+
postalAddress: suggestion.postalAddress,
|
264
|
+
actualAddress: suggestion.actualAddress,
|
265
|
+
});
|
266
|
+
tuiMarkControlAsTouchedAndValidate(this.form.controls.contragent);
|
267
|
+
}
|
268
|
+
}
|
241
269
|
/**
|
242
270
|
* Добавляет контактное лицо контрагента.
|
243
271
|
*/
|
@@ -252,13 +280,17 @@ export class ScSignUpFormComponent {
|
|
252
280
|
removeContactGroup(index) {
|
253
281
|
this.contacts.removeAt(index);
|
254
282
|
}
|
255
|
-
}
|
283
|
+
};
|
256
284
|
ScSignUpFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignUpFormComponent, deps: [{ token: i1.ScUserService }, { token: i1.ScAuthService }, { token: i1.ScReferencesService }, { token: i1.ScConvertersService }, { token: i1.ScUserMetrikaService }], target: i0.ɵɵFactoryTarget.Component });
|
257
|
-
ScSignUpFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignUpFormComponent, selector: "sc-sign-up-form", outputs: { successAuth: "successAuth" }, ngImport: i0, template: "<form\n *tuiLet=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"!!selectOpf && opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n <tui-elastic-container>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel=\"\u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\">\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n <label [tuiLabel]=\"isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F'\">\n <tui-input formControlName=\"name\">\n {{ isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' }}\n <ng-container *ngIf=\"!isIndividual\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <sc-verification-phone-check-form\n [shouldBeBusy]=\"false\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <label\n tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n class=\"w-full\"\n >\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n\n <sc-addresses-selection-field></sc-addresses-selection-field>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <label\n tuiLabel=\"\u041F\u0430\u0440\u043E\u043B\u044C\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel=\"\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"passwordConfirm\">\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n ></tui-error>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <tui-checkbox-labeled\n formControlName=\"getNews\"\n class=\"w-full\"\n >\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </tui-checkbox-labeled>\n <tui-checkbox-labeled\n required=\"true\"\n formControlName=\"acceptRules\"\n class=\"w-full\"\n >\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [pseudo]=\"true\"\n >\u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B</a\n >.\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </tui-checkbox-labeled>\n </div>\n </div>\n <ng-container *ngIf=\"!isIndividual\">\n <sc-new-contragent-form [class.!hidden]=\"stepIndex !== 1\"></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n </div>\n </ng-container>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [showLoader]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep()\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n </ng-template>\n </div>\n </ng-container>\n</form>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TuiInputPasswordComponent, selector: "tui-input-password" }, { kind: "directive", type: i4.TuiInputPasswordDirective, selector: "tui-input-password" }, { kind: "component", type: i5.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i5.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i5.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i5.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i5.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i7.ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange"] }, { kind: "component", type: i8.ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field" }, { kind: "component", type: i9.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"] }, { kind: "component", type: i5.TuiDataListComponent, selector: "tui-data-list", inputs: ["role", "emptyContent", "size"] }, { kind: "component", type: i5.TuiOptionComponent, selector: "button[tuiOption], a[tuiOption]", inputs: ["size", "role", "disabled", "value"] }, { kind: "directive", type: i5.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i4.TuiCheckboxLabeledComponent, selector: "tui-checkbox-labeled", inputs: ["size"] }, { kind: "component", type: i4.TuiElasticContainerComponent, selector: "tui-elastic-container" }, { kind: "component", type: i4.TuiSelectComponent, selector: "tui-select", inputs: ["stringify", "identityMatcher", "valueContent"] }, { kind: "directive", type: i4.TuiSelectDirective, selector: "tui-select" }, { kind: "component", type: i10.ScNewContragentBankAccountsFormComponent, selector: "sc-new-contragent-bank-account-form", inputs: ["form"] }, { kind: "component", type: i11.ScNewContragentFormComponent, selector: "sc-new-contragent-form" }, { kind: "component", type: i12.ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: ["form"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
285
|
+
ScSignUpFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignUpFormComponent, selector: "sc-sign-up-form", outputs: { successAuth: "successAuth" }, ngImport: i0, template: "<form\n *tuiLet=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"!!selectOpf && opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n <tui-elastic-container>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel=\"\u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\">\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n <label [tuiLabel]=\"isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F'\">\n <tui-input formControlName=\"name\">\n {{ isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' }}\n <ng-container *ngIf=\"!isIndividual\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n ></sc-suggestion-field>\n </ng-container>\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <sc-verification-phone-check-form\n [shouldBeBusy]=\"false\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <label\n tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n class=\"w-full\"\n >\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n\n <sc-addresses-selection-field></sc-addresses-selection-field>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <label\n tuiLabel=\"\u041F\u0430\u0440\u043E\u043B\u044C\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel=\"\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"passwordConfirm\">\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n ></tui-error>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <tui-checkbox-labeled\n formControlName=\"getNews\"\n class=\"w-full\"\n >\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </tui-checkbox-labeled>\n <tui-checkbox-labeled\n required=\"true\"\n formControlName=\"acceptRules\"\n class=\"w-full\"\n >\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [pseudo]=\"true\"\n >\u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B</a\n >.\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </tui-checkbox-labeled>\n </div>\n </div>\n <ng-container *ngIf=\"!isIndividual\">\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n ></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n </div>\n </ng-container>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [showLoader]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep()\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n </ng-template>\n </div>\n </ng-container>\n</form>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TuiInputPasswordComponent, selector: "tui-input-password" }, { kind: "directive", type: i4.TuiInputPasswordDirective, selector: "tui-input-password" }, { kind: "component", type: i5.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i5.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i5.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i5.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i5.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i7.ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange"] }, { kind: "component", type: i8.ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field" }, { kind: "component", type: i9.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i5.TuiDataListComponent, selector: "tui-data-list", inputs: ["role", "emptyContent", "size"] }, { kind: "component", type: i5.TuiOptionComponent, selector: "button[tuiOption], a[tuiOption]", inputs: ["size", "role", "disabled", "value"] }, { kind: "directive", type: i5.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i4.TuiCheckboxLabeledComponent, selector: "tui-checkbox-labeled", inputs: ["size"] }, { kind: "component", type: i4.TuiElasticContainerComponent, selector: "tui-elastic-container" }, { kind: "component", type: i4.TuiSelectComponent, selector: "tui-select", inputs: ["stringify", "identityMatcher", "valueContent"] }, { kind: "directive", type: i4.TuiSelectDirective, selector: "tui-select" }, { kind: "component", type: i10.ScNewContragentBankAccountsFormComponent, selector: "sc-new-contragent-bank-account-form", inputs: ["form"] }, { kind: "component", type: i11.ScNewContragentFormComponent, selector: "sc-new-contragent-form", inputs: ["opfControl"] }, { kind: "component", type: i12.ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: ["form"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
286
|
+
ScSignUpFormComponent = __decorate([
|
287
|
+
UntilDestroy({ checkProperties: true })
|
288
|
+
], ScSignUpFormComponent);
|
289
|
+
export { ScSignUpFormComponent };
|
258
290
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignUpFormComponent, decorators: [{
|
259
291
|
type: Component,
|
260
|
-
args: [{ selector: 'sc-sign-up-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n *tuiLet=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"!!selectOpf && opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n <tui-elastic-container>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel=\"\u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\">\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n <label [tuiLabel]=\"isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F'\">\n <tui-input formControlName=\"name\">\n {{ isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' }}\n <ng-container *ngIf=\"!isIndividual\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <sc-verification-phone-check-form\n [shouldBeBusy]=\"false\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <label\n tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n class=\"w-full\"\n >\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n\n <sc-addresses-selection-field></sc-addresses-selection-field>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <label\n tuiLabel=\"\u041F\u0430\u0440\u043E\u043B\u044C\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel=\"\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"passwordConfirm\">\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n ></tui-error>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <tui-checkbox-labeled\n formControlName=\"getNews\"\n class=\"w-full\"\n >\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </tui-checkbox-labeled>\n <tui-checkbox-labeled\n required=\"true\"\n formControlName=\"acceptRules\"\n class=\"w-full\"\n >\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [pseudo]=\"true\"\n >\u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B</a\n >.\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </tui-checkbox-labeled>\n </div>\n </div>\n <ng-container *ngIf=\"!isIndividual\">\n <sc-new-contragent-form [class.!hidden]=\"stepIndex !== 1\"></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n </div>\n </ng-container>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [showLoader]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep()\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n </ng-template>\n </div>\n </ng-container>\n</form>\n" }]
|
292
|
+
args: [{ selector: 'sc-sign-up-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n *tuiLet=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"!!selectOpf && opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n <tui-elastic-container>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel=\"\u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\">\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n <label [tuiLabel]=\"isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F'\">\n <tui-input formControlName=\"name\">\n {{ isIndividual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' }}\n <ng-container *ngIf=\"!isIndividual\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n ></sc-suggestion-field>\n </ng-container>\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <sc-verification-phone-check-form\n [shouldBeBusy]=\"false\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <label\n tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n class=\"w-full\"\n >\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n\n <sc-addresses-selection-field></sc-addresses-selection-field>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <label\n tuiLabel=\"\u041F\u0430\u0440\u043E\u043B\u044C\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel=\"\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\"\n class=\"w-full\"\n >\n <tui-input-password formControlName=\"passwordConfirm\">\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <input\n tuiTextfield\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n ></tui-error>\n\n <div class=\"flex flex-col items-start gap-5 sm:flex-row\">\n <tui-checkbox-labeled\n formControlName=\"getNews\"\n class=\"w-full\"\n >\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </tui-checkbox-labeled>\n <tui-checkbox-labeled\n required=\"true\"\n formControlName=\"acceptRules\"\n class=\"w-full\"\n >\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [pseudo]=\"true\"\n >\u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B</a\n >.\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </tui-checkbox-labeled>\n </div>\n </div>\n <ng-container *ngIf=\"!isIndividual\">\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n ></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n icon=\"tuiIconTrash2Large\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n icon=\"tuiIconPlusLarge\"\n [appearance]=\"'secondary'\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n </div>\n </ng-container>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [showLoader]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep()\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n </ng-template>\n </div>\n </ng-container>\n</form>\n" }]
|
261
293
|
}], ctorParameters: function () { return [{ type: i1.ScUserService }, { type: i1.ScAuthService }, { type: i1.ScReferencesService }, { type: i1.ScConvertersService }, { type: i1.ScUserMetrikaService }]; }, propDecorators: { successAuth: [{
|
262
294
|
type: Output
|
263
295
|
}] } });
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2lnbi11cC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NpZ24tdXAtZm9ybS9zYy1zaWduLXVwLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2F1dGgvc2lnbi11cC1mb3JtL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxSUFBcUk7QUFFckksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFhLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUtILGlCQUFpQixFQUVqQixTQUFTLEVBRVQsc0JBQXNCLEdBR3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUcsT0FBTyxFQUFFLGNBQWMsRUFBRSwrQkFBK0IsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUd2SDs7R0FFRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUFrRzlCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDcUIsV0FBMEIsRUFDMUIsV0FBMEIsRUFDMUIsaUJBQXNDLEVBQ3RDLGlCQUFzQyxFQUN0QyxrQkFBd0M7UUFK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QUFhO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O2tIQXRSUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixnR0NoQ2xDLDRsYUE0UEE7MkZENU5hLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxpQkFBaUIsbUJBRVYsdUJBQXVCLENBQUMsTUFBTTt1T0FrRy9CLFdBQVc7c0JBRDFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzLEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kLG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG5cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgSUF1dGhUb2tlbixcbiAgICBTY0F1dGhTZXJ2aWNlLFxuICAgIFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgU2NJUmVmZXJlbmNlc1R5cGVzLFxuICAgIFNjSVN1Z2dlc3Rpb25UeXBlLFxuICAgIFNjSVVzZXJPbkRhdGFDcmVhdGUsXG4gICAgU2NPcGZMaXN0LFxuICAgIFNjUmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSxcbiAgICBTY1VzZXJNZXRyaWthU2VydmljZSxcbiAgICBTY1VzZXJTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUlzRmFsc3ksIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgc2NCaWNWYWxpZGF0b3IsIHNjQ29ycmVzcG9uZGVudEFjY291bnRWYWxpZGF0b3IsIHNjUGFzc3dvcmRDb25maXJtTWF0Y2hpbmdWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IEFwaUVycm9yUmVzcG9uc2UsIFNjQmFua0FjY291bnRGb3JtR3JvdXAsIFNjQ29udGFjdEZvcm1Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRhNC+0YDQvNGLINGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLXNpZ24tdXAtZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjU2lnblVwRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICog0J/QvtC70LUg0LLQstC+0LTQsCDQvtGA0LPQsNC90LjQt9Cw0YbQuNC+0L3QvdC+LdC/0YDQsNCy0L7QstGL0YUg0YTQvtGA0LwuXG4gICAgICovXG4gICAgcHVibGljIG9wZkNvbnRyb2w6IEZvcm1Db250cm9sPGtleW9mIHR5cGVvZiBTY09wZkxpc3QgfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbDxrZXlvZiB0eXBlb2YgU2NPcGZMaXN0PignaW5kaXZpZHVhbCcsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINC/0L7Qu9C10Lkg0LLQstC+0LTQsCDQtNC70Y8g0YTQvtGA0LzRiyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKV0pLFxuICAgICAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pLFxuICAgICAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSksXG4gICAgICAgICAgICBjaXR5SWQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpXSksXG4gICAgICAgICAgICBwYXNzd29yZENvbmZpcm06IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldKSxcbiAgICAgICAgICAgIGdldE5ld3M6IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPihmYWxzZSksXG4gICAgICAgICAgICBhY2NlcHRSdWxlczogbmV3IEZvcm1Db250cm9sPGJvb2xlYW4+KGZhbHNlLCBWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZSksXG4gICAgICAgICAgICBjb250cmFnZW50OiBuZXcgRm9ybUdyb3VwPGFueT4oe30pLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiBzY1Bhc3N3b3JkQ29uZmlybU1hdGNoaW5nVmFsaWRhdG9yKCdwYXNzd29yZCcsICdwYXNzd29yZENvbmZpcm0nKSxcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC+0L3QvdC+LdC/0YDQsNCy0L7QstGL0YUg0YTQvtGA0LwuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZkxpc3RFbnVtOiB0eXBlb2YgU2NPcGZMaXN0ID0gU2NPcGZMaXN0O1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC00LDQvdC90YvRhSDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQgPSB0aGlzLm9uU3VibWl0LnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICB0dWlNYXJrQ29udHJvbEFzVG91Y2hlZEFuZFZhbGlkYXRlKHRoaXMuZm9ybSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lVc2VyT25EYXRhQ3JlYXRlKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVCYXNlQ29udHJhZ2VudCh2YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5zaWduVXAkKHRoaXMuY29udmVydGVyc1NlcnZpY2UucmVtb3ZlTnVsbFJlY3Vyc2l2ZSh2YWx1ZSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYXV0aFNlcnZpY2UuZ2V0U2lnbkluJCh7IGxvZ2luOiB2YWx1ZS5lbWFpbCwgcGFzc3dvcmQ6IHZhbHVlLnBhc3N3b3JkIH0pKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IGVycm9yLmVycm9yIGFzIEFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKGVycm9ycywga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvcnNba2V5XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3JzICYmIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9IGFzIElBdXRoVG9rZW4pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QtNC10LrRgSDRjdGC0LDQv9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGVwSW5kZXg6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUobWFwKHR1aUlzRmFsc3kpKTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDRgdC+0LHRi9GC0LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7RgdC70LUg0YPRgdC/0LXRiNC90L7QuSDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBzdWNjZXNzQXV0aDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aENoYW5nZSgpLnBpcGUoZmlsdGVyKChzdGF0ZSkgPT4gc3RhdGUpKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NTaWduVXBGb3JtQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VzU2VydmljZSDQodC10YDQstC40YEg0YHQv9GA0LDQstC+0YfQvdC40LrQvtCyLlxuICAgICAqIEBwYXJhbSB1c2VyU2VydmljZSDQodC10YDQstC40YEg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C1LlxuICAgICAqIEBwYXJhbSBhdXRoU2VydmljZSDQodC10YDQstC40YEg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqIEBwYXJhbSB1c2VyTWV0cmlrYVNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJTZXJ2aWNlOiBTY1VzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBTY0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlZmVyZW5jZXNTZXJ2aWNlOiBTY1JlZmVyZW5jZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJNZXRyaWthU2VydmljZTogU2NVc2VyTWV0cmlrYVNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LPRgNGD0L/QvyDQv9C+0LvQtdC5INCx0LDQvdC60L7QstGB0LrQuNGFINGA0LXQutCy0LjQt9C40YLQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYmFua0FjY291bnRzKCk6IEZvcm1BcnJheTxSZXR1cm5UeXBlPFNjU2lnblVwRm9ybUNvbXBvbmVudFsnY3JlYXRlQmFua0FjY291bnRHcm91cCddPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuZ2V0KCdiYW5rQWNjb3VudHMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INCz0YDRg9C/0L8g0L/QvtC70LXQuSDQutC+0L3RgtCw0LrRgtC90YvRhSDQu9C40YYuXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250YWN0cygpOiBGb3JtQXJyYXk8UmV0dXJuVHlwZTxTY1NpZ25VcEZvcm1Db21wb25lbnRbJ2NyZWF0ZUNvbnRhY3RHcm91cCddPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuZ2V0KCdjb250YWN0cycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdjb250cmFnZW50Jyk7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaWduVXBTaG93LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIsINC80L7QttC10YIg0LvQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0L/QtdGA0LXQudGC0Lgg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YjQsNCz0YMg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zINCS0YvQstC+0LTQuNGCINC30L3QsNGH0LXQvdC40LUgYGJvb2xlYW5gINC90LAg0L7RgdC90L7QstCw0L3QuNC4IHtAbGluayBzdGVwSW5kZXh9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjYW5OZXh0U3RlcCgpOiBib29sZWFuIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0ZXBJbmRleCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZm9ybS5jb250cm9scykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZm9ybS5jb250cm9scywga2V5KSAmJiBrZXkgIT09ICdjb250cmFnZW50JyAmJiB0aGlzLmZvcm0uZ2V0KGtleSk/LmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5jb250cm9scywga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkodGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuY29udHJvbHNba2V5XS52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LmNvbnRyb2xzW2tleV0uaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5jb250cm9sc1snY29udGFjdHMnXS52YWxpZDtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuY29udHJvbHNbJ2JhbmtBY2NvdW50cyddLnZhbGlkO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDQvdCw0LLQuNCz0LDRhtC40Y4g0L/QviDRhNC+0YDQvNC1INGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsdGEg0JfQvdCw0YfQtdC90LjQtSwg0L3QsCDQutC+0YLQvtGA0L7QtSDQvdC10L7QsdGF0L7QtNC40LzQviDQstGL0L/QvtC70L3QuNGC0Ywg0L3QsNCy0LjQs9Cw0YbQuNGOLlxuICAgICAqL1xuICAgIHB1YmxpYyBuYXZpZ2F0ZShkZWx0YTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RlcEluZGV4ID0gKHRoaXMuc3RlcEluZGV4ICsgZGVsdGEpICUgNDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQsdCw0LfQvtCy0L7Qs9C+INC60L7QvdGC0YDQsNCz0LXQvdGC0LAg0LTQu9GPINC60LvQuNC10L3RgtCwINGE0LjQt9C40YfQtdGB0LrQvtCz0L4g0LvQuNGG0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9ybVZhbHVlINCX0L3QsNGH0LXQvdC40LUg0YTQvtGA0LzRiyDQv9GA0Lgg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuFxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQmFzZUNvbnRyYWdlbnQoZm9ybVZhbHVlOiBTY1NpZ25VcEZvcm1Db21wb25lbnRbJ2Zvcm0nXVsndmFsdWUnXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQgfHwgdGhpcy5vcGZDb250cm9sLnZhbHVlICE9PSAnaW5kaXZpZHVhbCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBmb3JtVmFsdWUuY29udHJhZ2VudCA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZm9ybS5jb250cm9scy5uYW1lLnZhbHVlLFxuICAgICAgICAgICAgb3BmOiAnaW5kaXZpZHVhbCcsXG4gICAgICAgICAgICBzYWxlc0RpcmVjdGlvbklkOiAxLFxuICAgICAgICAgICAgY29udGFjdHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZm9ybS5jb250cm9scy5uYW1lLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogdGhpcy5mb3JtLmNvbnRyb2xzLnBob25lLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy5mb3JtLmNvbnRyb2xzLmVtYWlsLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDRgdC/0LjRgdC+0Log0L7RgNCz0LDQvdC40LfQsNGG0LjQvtC90L3Qvi3Qv9GA0LDQstC+0LLRi9GFINGE0L7RgNC8LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPcGYkKCk6IE9ic2VydmFibGU8QXJyYXk8U2NJUmVmZXJlbmNlc1R5cGVzPFNjT3BmTGlzdCwgdHlwZW9mIFNjT3BmTGlzdD4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXNTZXJ2aWNlLm9wZiQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC+0YDQs9Cw0L3QuNC30LDRhtC40L7QvdC90L4t0L/RgNCw0LLQvtCy0L7QuSDRhNC+0YDQvNGLLCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40Lkg0YHQuNC80LLQvtC70YzQvdC+0LzRgyDQvtCx0L7Qt9C90LDRh9C10L3QuNGOIChzbHVnKSDQvdCwINCy0YXQvtC00LUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2x1ZyDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T3BmQnlTbHVnJChzbHVnOiBrZXlvZiB0eXBlb2YgU2NPcGZMaXN0KTogT2JzZXJ2YWJsZTxTY0lSZWZlcmVuY2VzVHlwZXM8U2NPcGZMaXN0LCB0eXBlb2YgU2NPcGZMaXN0PiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VzU2VydmljZS5nZXRPcGZCeVNsdWckKHNsdWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINCz0YDRg9C/0L/RgyDQv9C+0LvQtdC5INCx0LDQvdC60L7QstGB0LrQuNGFINGA0LXQutCy0LjQt9C40YLQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQmFua0FjY291bnRHcm91cCgpOiBTY0JhbmtBY2NvdW50Rm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgYmFua05hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIGJpYzogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg5KSwgc2NCaWNWYWxpZGF0b3JdKSxcbiAgICAgICAgICAgIGFjY291bnROdW1iZXI6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMjApXSksXG4gICAgICAgICAgICBjb3JyZXNwb25kZW50QWNjb3VudDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyMCksIHNjQ29ycmVzcG9uZGVudEFjY291bnRWYWxpZGF0b3JdKSxcbiAgICAgICAgICAgIGN1cnJlbmN5SWQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINCR0LDQvdC60L7QstGB0LrQuNC1INGA0LXQutCy0LjQt9C40YLRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQmFua0FjY291bnRHcm91cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYW5rQWNjb3VudHMucHVzaCh0aGlzLmNyZWF0ZUJhbmtBY2NvdW50R3JvdXAoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0LHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4INCY0L3QtNC10LrRgSDQsdCw0L3QutC+0LLRgdC60LjRhSDRgNC10LrQstC40LfQuNGC0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlQmFua0FjY291bnRHcm91cChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFua0FjY291bnRzLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQs9GA0YPQv9C/0YMg0L/QvtC70LXQuSDQutC+0L3RgtCw0LrRgtC90L7Qs9C+INC70LjRhtCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVDb250YWN0R3JvdXAoKTogU2NDb250YWN0Rm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMuZW1haWwpLFxuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINC60L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICovXG4gICAgcHVibGljIGFkZENvbnRhY3RHcm91cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWN0cy5wdXNoKHRoaXMuY3JlYXRlQ29udGFjdEdyb3VwKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINC60L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXgg0JjQvdC00LXQutGBINC60L7QvdGC0LDQutGC0L3QvtCz0L4g0LvQuNGG0LAuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUNvbnRhY3RHcm91cChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFjdHMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cbn1cbiIsIjxmb3JtXG4gICAgKnR1aUxldD1cIm9wZkNvbnRyb2wudmFsdWUgYXMgc2VsZWN0T3BmXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdC5uZXh0KClcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqdHVpTGV0PVwiISFzZWxlY3RPcGYgJiYgb3BmTGlzdEVudW1bc2VsZWN0T3BmXSA9PT0gb3BmTGlzdEVudW0uaW5kaXZpZHVhbCBhcyBpc0luZGl2aWR1YWxcIj5cbiAgICAgICAgPHR1aS1lbGFzdGljLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJzdGVwSW5kZXggIT09IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0KLQuNC/INC60LvQuNC10L3RgtCwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib3BmQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cIm9wZkNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICDQotC40L8g0LrQu9C40LXQvdGC0LBcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktZGF0YS1saXN0ICp0dWlEYXRhTGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE9wZiQoKSB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90dWktZGF0YS1saXN0PlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI29wZkNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1kYXRhXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgKGdldE9wZkJ5U2x1ZyQoZGF0YSkgfCBhc3luYyk/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbdHVpTGFiZWxdPVwiaXNJbmRpdmlkdWFsID8gJ9CkLtCYLtCeLicgOiAn0J3QsNC30LLQsNC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4INC40LvQuCDQmNCfJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzSW5kaXZpZHVhbCA/ICfQpC7QmC7Qni4nIDogJ9Cd0LDQt9Cy0LDQvdC40LUg0L7RgNCz0LDQvdC40LfQsNGG0LjQuCDQuNC70Lgg0JjQnycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNJbmRpdmlkdWFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLm9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYy12ZXJpZmljYXRpb24tcGhvbmUtY2hlY2stZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3VsZEJlQnVzeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NjLXZlcmlmaWNhdGlvbi1waG9uZS1jaGVjay1mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxhYmVsPVwi0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NjLXN1Z2dlc3Rpb24tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzYy1hZGRyZXNzZXMtc2VsZWN0aW9uLWZpZWxkPjwvc2MtYWRkcmVzc2VzLXNlbGVjdGlvbi1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGFiZWw9XCLQn9Cw0YDQvtC70YxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0J/QsNGA0L7Qu9GMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlMYWJlbD1cItCf0L7QstGC0L7RgCDQv9Cw0YDQvtC70Y9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkQ29uZmlybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCf0L7QstGC0L7RgCDQv9Cw0YDQvtC70Y9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0LXBhc3N3b3JkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkQ29uZmlybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktY2hlY2tib3gtbGFiZWxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2V0TmV3c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgINCvINGF0L7Rh9GDINC/0L7Qu9GD0YfQsNGC0Ywg0YDQsNGB0YHRi9C70LrRgyDQodC90LDQsdGG0LXQvdGC0YAg0L4g0YHQutC40LTQutCw0YUg0Lgg0L3QvtCy0L7RgdGC0Y/RhSDQv9C+INGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLQtS5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktY2hlY2tib3gtbGFiZWxlZD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1jaGVja2JveC1sYWJlbGVkXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXB0UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICDQoNC10LPQuNGB0YLRgNC40YDRg9GP0YHRjCDQvdCwINGB0LDQudGC0LUsINGPINGB0L7Qs9C70LDRiNCw0Y7RgdGMINGBXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHNldWRvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID7QlNC+0LPQvtCy0L7RgNC+0Lwg0L7RhNC10YDRgtGLPC9hXG4gICAgICAgICAgICAgICAgICAgICAgICA+LlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjY2VwdFJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1jaGVja2JveC1sYWJlbGVkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzSW5kaXZpZHVhbFwiPlxuICAgICAgICAgICAgICAgIDxzYy1uZXctY29udHJhZ2VudC1mb3JtIFtjbGFzcy4haGlkZGVuXT1cInN0ZXBJbmRleCAhPT0gMVwiPjwvc2MtbmV3LWNvbnRyYWdlbnQtZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLiFoaWRkZW5dPVwic3RlcEluZGV4ICE9PSAyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGFjdHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01IHBiLTFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgZm9udC1ib2xkXCI+0JrQvtC90YLQsNC60YLRizwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGFjdCBvZiBjb250YWN0cy5jb250cm9sczsgbGV0IGluZGV4ID0gaW5kZXg7IGxldCBjb3VudCA9IGNvdW50OyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkXCI+0JrQvtC90YLQsNC60YLQvdC+0LUg0LvQuNGG0L4g4oSWe3sgaW5kZXggKyAxIH19OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb3VudCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ29udGFjdEdyb3VwKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHVpSWNvblRyYXNoMkxhcmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1uZXctY29udGFjdC1mb3JtIFtmb3JtXT1cImNvbnRhY3RcIj48L3NjLW5ldy1jb250YWN0LWZvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtcHggdy1mdWxsIGJnLXR1aS1iYXNlLTA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25QbHVzTGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cIidzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ29udGFjdEdyb3VwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0LrQvtC90YLQsNC60YJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLiFoaWRkZW5dPVwic3RlcEluZGV4ICE9PSAzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmFua0FjY291bnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNSBwYi0xXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPtCR0LDQvdC60L7QstGB0LrQuNC1INGA0LXQutCy0LjQt9C40YLRizwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYmFua0FjY291bnQgb2YgYmFua0FjY291bnRzLmNvbnRyb2xzOyBsZXQgaW5kZXggPSBpbmRleDsgbGV0IGNvdW50ID0gY291bnQ7IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTEyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWJvbGRcIj7QkdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0Ysg4oSWe3sgaW5kZXggKyAxIH19OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb3VudCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQmFua0FjY291bnRHcm91cChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25UcmFzaDJMYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2MtbmV3LWNvbnRyYWdlbnQtYmFuay1hY2NvdW50LWZvcm0gW2Zvcm1dPVwiYmFua0FjY291bnRcIj48L3NjLW5ldy1jb250cmFnZW50LWJhbmstYWNjb3VudC1mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLXB4IHctZnVsbCBiZy10dWktYmFzZS0wNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uUGx1c0xhcmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEJhbmtBY2NvdW50R3JvdXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjCDQsdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0YtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3R1aS1lbGFzdGljLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0ZXBJbmRleCA+IDBcIlxuICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZSgtMSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCd0LDQt9Cw0LRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbmRpdmlkdWFsIHx8IChzdGVwSW5kZXggPT09IDIgJiYgIWZvcm0uY29udHJvbHMuY29udHJhZ2VudC5jb250cm9sc1snYmFua0FjY291bnRzJ10pIHx8IHN0ZXBJbmRleCA9PT0gMzsgZWxzZSBuZXh0SW5kZXhCdG5cIlxuICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cIiEhKGxvYWRpbmckIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDQl9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0YLRjNGB0Y9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNuZXh0SW5kZXhCdG4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuTmV4dFN0ZXAoKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZSgxKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQlNCw0LvQtdC1XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZm9ybT5cbiJdfQ==
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2lnbi11cC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NpZ24tdXAtZm9ybS9zYy1zaWduLXVwLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2F1dGgvc2lnbi11cC1mb3JtL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUlBQXFJO0FBRXJJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBYSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUtILGlCQUFpQixFQUVqQixTQUFTLEVBR1Qsc0JBQXNCLEdBR3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEksT0FBTyxFQUFFLGNBQWMsRUFBRSwrQkFBK0IsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUd2SDs7R0FFRztBQU9JLElBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXFCO0lBa0c5Qjs7Ozs7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QUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7a0hBblRRLHFCQUFxQjtzR0FBckIscUJBQXFCLGdHQ25DbEMseTZhQW9RQTtBRGpPYSxxQkFBcUI7SUFEakMsWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO0dBQzNCLHFCQUFxQixDQW9UakM7U0FwVFkscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksaUJBQWlCLG1CQUVWLHVCQUF1QixDQUFDLE1BQU07dU9BbUcvQixXQUFXO3NCQUQxQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCxuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG4gICAgSUF1dGhUb2tlbixcbiAgICBTY0F1dGhTZXJ2aWNlLFxuICAgIFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgU2NJUmVmZXJlbmNlc1R5cGVzLFxuICAgIFNjSVN1Z2dlc3Rpb25UeXBlLFxuICAgIFNjSVVzZXJPbkRhdGFDcmVhdGUsXG4gICAgU2NPcGZMaXN0LFxuICAgIFNjUmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgU2NTdWdnZXN0aW9uLFxuICAgIFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sXG4gICAgU2NVc2VyTWV0cmlrYVNlcnZpY2UsXG4gICAgU2NVc2VyU2VydmljZSxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyB0dWlJc0ZhbHN5LCB0dWlNYXJrQ29udHJvbEFzVG91Y2hlZEFuZFZhbGlkYXRlIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBzY0JpY1ZhbGlkYXRvciwgc2NDb3JyZXNwb25kZW50QWNjb3VudFZhbGlkYXRvciwgc2NQYXNzd29yZENvbmZpcm1NYXRjaGluZ1ZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgQXBpRXJyb3JSZXNwb25zZSwgU2NCYW5rQWNjb3VudEZvcm1Hcm91cCwgU2NDb250YWN0Rm9ybUdyb3VwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGE0L7RgNC80Ysg0YDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2Mtc2lnbi11cC1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtc2lnbi11cC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5AVW50aWxEZXN0cm95KHsgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgU2NTaWduVXBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINC+0YDQs9Cw0L3QuNC30LDRhtC40L7QvdC90L4t0L/RgNCw0LLQvtCy0YvRhSDRhNC+0YDQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3BmQ29udHJvbDogRm9ybUNvbnRyb2w8a2V5b2YgdHlwZW9mIFNjT3BmTGlzdCB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPGtleW9mIHR5cGVvZiBTY09wZkxpc3Q+KCdpbmRpdmlkdWFsJywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQstCy0L7QtNCwINC00LvRjyDRhNC+0YDQvNGLINGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIGZvcm0gPSBuZXcgRm9ybUdyb3VwKFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpXSksXG4gICAgICAgICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSksXG4gICAgICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKSxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNvZGU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildKSxcbiAgICAgICAgICAgIGNpdHlJZDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldKSxcbiAgICAgICAgICAgIHBhc3N3b3JkQ29uZmlybTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pLFxuICAgICAgICAgICAgZ2V0TmV3czogbmV3IEZvcm1Db250cm9sPGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgICAgIGFjY2VwdFJ1bGVzOiBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlKSxcbiAgICAgICAgICAgIGNvbnRyYWdlbnQ6IG5ldyBGb3JtR3JvdXA8YW55Pih7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHNjUGFzc3dvcmRDb25maXJtTWF0Y2hpbmdWYWxpZGF0b3IoJ3Bhc3N3b3JkJywgJ3Bhc3N3b3JkQ29uZmlybScpLFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXRh9C40YHQu9C10L3QuNC1INC+0YDQs9Cw0L3QuNC30LDRhtC40L7QvdC90L4t0L/RgNCw0LLQvtCy0YvRhSDRhNC+0YDQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3BmTGlzdEVudW06IHR5cGVvZiBTY09wZkxpc3QgPSBTY09wZkxpc3Q7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0YHQvtCx0YvRgtC40Y8g0L7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvblN1Ym1pdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LTQsNC90L3Ri9GFINGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0JCA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUodGhpcy5mb3JtKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5mb3JtLnZhbHVlIGFzIFNjSVVzZXJPbkRhdGFDcmVhdGUpLFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUJhc2VDb250cmFnZW50KHZhbHVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNpZ25VcCQodGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsUmVjdXJzaXZlKHZhbHVlKSkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hdXRoU2VydmljZS5nZXRTaWduSW4kKHsgbG9naW46IHZhbHVlLmVtYWlsLCBwYXNzd29yZDogdmFsdWUucGFzc3dvcmQgfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oZXJyb3JzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcnMgJiYgbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe30gYXMgSUF1dGhUb2tlbik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC00LXQutGBINGN0YLQsNC/0LAuXG4gICAgICovXG4gICAgcHVibGljIHN0ZXBJbmRleDogbnVtYmVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucmVxdWVzdCQucGlwZShtYXAodHVpSXNGYWxzeSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQuNCz0L3QsNC7INGB0L7QsdGL0YLQuNGPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtGB0LvQtSDRg9GB0L/QtdGI0L3QvtC5INGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Y2Nlc3NBdXRoOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoQ2hhbmdlKCkucGlwZShmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSkpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1NpZ25VcEZvcm1Db21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZXNTZXJ2aWNlINCh0LXRgNCy0LjRgSDRgdC/0YDQsNCy0L7Rh9C90LjQutC+0LIuXG4gICAgICogQHBhcmFtIHVzZXJTZXJ2aWNlINCh0LXRgNCy0LjRgSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICogQHBhcmFtIGF1dGhTZXJ2aWNlINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqIEBwYXJhbSBjb252ZXJ0ZXJzU2VydmljZSDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICogQHBhcmFtIHVzZXJNZXRyaWthU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclNlcnZpY2U6IFNjVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IFNjQXV0aFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmZXJlbmNlc1NlcnZpY2U6IFNjUmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLm9wZkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IG5hbWU6ICcnIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQs9GA0YPQv9C/INC/0L7Qu9C10Lkg0LHQsNC90LrQvtCy0YHQutC40YUg0YDQtdC60LLQuNC30LjRgtC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGdldCBiYW5rQWNjb3VudHMoKTogRm9ybUFycmF5PFJldHVyblR5cGU8U2NTaWduVXBGb3JtQ29tcG9uZW50WydjcmVhdGVCYW5rQWNjb3VudEdyb3VwJ10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5nZXQoJ2JhbmtBY2NvdW50cycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LPRgNGD0L/QvyDQv9C+0LvQtdC5INC60L7QvdGC0LDQutGC0L3Ri9GFINC70LjRhi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRhY3RzKCk6IEZvcm1BcnJheTxSZXR1cm5UeXBlPFNjU2lnblVwRm9ybUNvbXBvbmVudFsnY3JlYXRlQ29udGFjdEdyb3VwJ10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5nZXQoJ2NvbnRhY3RzJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgKHRoaXMuZm9ybSBhcyBGb3JtR3JvdXApLnJlbW92ZUNvbnRyb2woJ2NvbnRyYWdlbnQnKTtcbiAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnNpZ25VcFNob3csXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiwg0LzQvtC20LXRgiDQu9C4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQv9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDRiNCw0LPRgyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqXG4gICAgICogQHJldHVybnMg0JLRi9Cy0L7QtNC40YIg0LfQvdCw0YfQtdC90LjQtSBgYm9vbGVhbmAg0L3QsCDQvtGB0L3QvtCy0LDQvdC40Lgge0BsaW5rIHN0ZXBJbmRleH0uXG4gICAgICovXG4gICAgcHVibGljIGNhbk5leHRTdGVwKCk6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RlcEluZGV4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5mb3JtLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5mb3JtLmNvbnRyb2xzLCBrZXkpICYmIGtleSAhPT0gJ2NvbnRyYWdlbnQnICYmIHRoaXMuZm9ybS5nZXQoa2V5KT8uaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LmNvbnRyb2xzLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5jb250cm9sc1trZXldLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuY29udHJvbHNba2V5XS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LmNvbnRyb2xzWydjb250YWN0cyddLnZhbGlkO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5jb250cm9sc1snYmFua0FjY291bnRzJ10udmFsaWQ7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC90LDQstC40LPQsNGG0LjRjiDQv9C+INGE0L7RgNC80LUg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWx0YSDQl9C90LDRh9C10L3QuNC1LCDQvdCwINC60L7RgtC+0YDQvtC1INC90LXQvtCx0YXQvtC00LjQvNC+INCy0YvQv9C+0LvQvdC40YLRjCDQvdCw0LLQuNCz0LDRhtC40Y4uXG4gICAgICovXG4gICAgcHVibGljIG5hdmlnYXRlKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAodGhpcy5zdGVwSW5kZXggKyBkZWx0YSkgJSA0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINCx0LDQt9C+0LLQvtCz0L4g0LrQvtC90YLRgNCw0LPQtdC90YLQsCDQtNC70Y8g0LrQu9C40LXQvdGC0LAg0YTQuNC30LjRh9C10YHQutC+0LPQviDQu9C40YbQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JtVmFsdWUg0JfQvdCw0YfQtdC90LjQtSDRhNC+0YDQvNGLINC/0YDQuCDRgNC10LPQuNGB0YLRgNCw0YbQuNC4XG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNlQ29udHJhZ2VudChmb3JtVmFsdWU6IFNjU2lnblVwRm9ybUNvbXBvbmVudFsnZm9ybSddWyd2YWx1ZSddKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCB8fCB0aGlzLm9wZkNvbnRyb2wudmFsdWUgIT09ICdpbmRpdmlkdWFsJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGZvcm1WYWx1ZS5jb250cmFnZW50ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUudmFsdWUsXG4gICAgICAgICAgICBvcGY6ICdpbmRpdmlkdWFsJyxcbiAgICAgICAgICAgIHNhbGVzRGlyZWN0aW9uSWQ6IDEsXG4gICAgICAgICAgICBjb250YWN0czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBob25lOiB0aGlzLmZvcm0uY29udHJvbHMucGhvbmUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB0aGlzLmZvcm0uY29udHJvbHMuZW1haWwudmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0L7QuiDQvtGA0LPQsNC90LjQt9Cw0YbQuNC+0L3QvdC+LdC/0YDQsNCy0L7QstGL0YUg0YTQvtGA0LwuXG4gICAgICovXG4gICAgcHVibGljIGdldE9wZiQoKTogT2JzZXJ2YWJsZTxBcnJheTxTY0lSZWZlcmVuY2VzVHlwZXM8U2NPcGZMaXN0LCB0eXBlb2YgU2NPcGZMaXN0Pj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlc1NlcnZpY2Uub3BmJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0L7RgNCz0LDQvdC40LfQsNGG0LjQvtC90L3Qvi3Qv9GA0LDQstC+0LLQvtC5INGE0L7RgNC80YssINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQuSDRgdC40LzQstC+0LvRjNC90L7QvNGDINC+0LHQvtC30L3QsNGH0LXQvdC40Y4gKHNsdWcpINC90LAg0LLRhdC+0LTQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbHVnINCh0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPcGZCeVNsdWckKHNsdWc6IGtleW9mIHR5cGVvZiBTY09wZkxpc3QpOiBPYnNlcnZhYmxlPFNjSVJlZmVyZW5jZXNUeXBlczxTY09wZkxpc3QsIHR5cGVvZiBTY09wZkxpc3Q+IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXNTZXJ2aWNlLmdldE9wZkJ5U2x1ZyQoc2x1Zyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LPRgNGD0L/Qv9GDINC/0L7Qu9C10Lkg0LHQsNC90LrQvtCy0YHQutC40YUg0YDQtdC60LLQuNC30LjRgtC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVCYW5rQWNjb3VudEdyb3VwKCk6IFNjQmFua0FjY291bnRGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBiYW5rTmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgYmljOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDkpLCBzY0JpY1ZhbGlkYXRvcl0pLFxuICAgICAgICAgICAgYWNjb3VudE51bWJlcjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyMCldKSxcbiAgICAgICAgICAgIGNvcnJlc3BvbmRlbnRBY2NvdW50OiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIwKSwgc2NDb3JyZXNwb25kZW50QWNjb3VudFZhbGlkYXRvcl0pLFxuICAgICAgICAgICAgY3VycmVuY3lJZDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQlNC+0LHQsNCy0LvRj9C10YIg0JHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRCYW5rQWNjb3VudEdyb3VwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhbmtBY2NvdW50cy5wdXNoKHRoaXMuY3JlYXRlQmFua0FjY291bnRHcm91cCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQsdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXgg0JjQvdC00LXQutGBINCx0LDQvdC60L7QstGB0LrQuNGFINGA0LXQutCy0LjQt9C40YLQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVCYW5rQWNjb3VudEdyb3VwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5iYW5rQWNjb3VudHMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINCz0YDRg9C/0L/RgyDQv9C+0LvQtdC5INC60L7QvdGC0LDQutGC0L3QvtCz0L4g0LvQuNGG0LAuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUNvbnRhY3RHcm91cCgpOiBTY0NvbnRhY3RGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKSxcbiAgICAgICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5lbWFpbCksXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQstGL0LHQvtGA0LAg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbiDQntCx0YrQtdC60YIg0L/QvtC00YHQutCw0LfQutC4INCw0YDQtdGB0LAuXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0ZWRPcmdhbml6YXRpb24oc3VnZ2VzdGlvbjogU2NTdWdnZXN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudCAmJiAnaW5uJyBpbiBzdWdnZXN0aW9uICYmICEoJ2JpYycgaW4gc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpbm46IHN1Z2dlc3Rpb24uaW5uLFxuICAgICAgICAgICAgICAgIGtwcDogc3VnZ2VzdGlvbi5rcHAsXG4gICAgICAgICAgICAgICAgb2twbzogc3VnZ2VzdGlvbi5va3BvLFxuICAgICAgICAgICAgICAgIGRpcmVjdG9yTmFtZTogc3VnZ2VzdGlvbi5kaXJlY3Rvck5hbWUsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3JQb3NpdGlvbjogc3VnZ2VzdGlvbi5kaXJlY3RvclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGxlZ2FsQWRkcmVzczogc3VnZ2VzdGlvbi5sZWdhbEFkZHJlc3MsXG4gICAgICAgICAgICAgICAgcG9zdGFsQWRkcmVzczogc3VnZ2VzdGlvbi5wb3N0YWxBZGRyZXNzLFxuICAgICAgICAgICAgICAgIGFjdHVhbEFkZHJlc3M6IHN1Z2dlc3Rpb24uYWN0dWFsQWRkcmVzcyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0dWlNYXJrQ29udHJvbEFzVG91Y2hlZEFuZFZhbGlkYXRlKHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCU0L7QsdCw0LLQu9GP0LXRgiDQutC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQviDQutC+0L3RgtGA0LDQs9C10L3RgtCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb250YWN0R3JvdXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFjdHMucHVzaCh0aGlzLmNyZWF0ZUNvbnRhY3RHcm91cCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQutC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQviDQutC+0L3RgtGA0LDQs9C10L3RgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4INCY0L3QtNC10LrRgSDQutC+0L3RgtCw0LrRgtC90L7Qs9C+INC70LjRhtCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVDb250YWN0R3JvdXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhY3RzLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG59XG4iLCI8Zm9ybVxuICAgICp0dWlMZXQ9XCJvcGZDb250cm9sLnZhbHVlIGFzIHNlbGVjdE9wZlwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKnR1aUxldD1cIiEhc2VsZWN0T3BmICYmIG9wZkxpc3RFbnVtW3NlbGVjdE9wZl0gPT09IG9wZkxpc3RFbnVtLmluZGl2aWR1YWwgYXMgaXNJbmRpdmlkdWFsXCI+XG4gICAgICAgIDx0dWktZWxhc3RpYy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzLiFoaWRkZW5dPVwic3RlcEluZGV4ICE9PSAwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCi0LjQvyDQutC70LjQtdC90YLQsFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wZkNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlQ29udGVudF09XCJvcGZDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAg0KLQuNC/INC60LvQuNC10L3RgtCwXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWRhdGEtbGlzdCAqdHVpRGF0YUxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRPcGYkKCkgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uc2x1Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLWRhdGEtbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNvcGZDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZGF0YVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IChnZXRPcGZCeVNsdWckKGRhdGEpIHwgYXN5bmMpPy5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW3R1aUxhYmVsXT1cImlzSW5kaXZpZHVhbCA/ICfQpC7QmC7Qni4nIDogJ9Cd0LDQt9Cy0LDQvdC40LUg0L7RgNCz0LDQvdC40LfQsNGG0LjQuCDQuNC70Lgg0JjQnydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0luZGl2aWR1YWwgPyAn0KQu0Jgu0J4uJyA6ICfQndCw0LfQstCw0L3QuNC1INC+0YDQs9Cw0L3QuNC30LDRhtC40Lgg0LjQu9C4INCY0J8nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzSW5kaXZpZHVhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5vcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDbGljayk9XCJvblNlbGVjdGVkT3JnYW5pemF0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NjLXN1Z2dlc3Rpb24tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYy12ZXJpZmljYXRpb24tcGhvbmUtY2hlY2stZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3VsZEJlQnVzeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NjLXZlcmlmaWNhdGlvbi1waG9uZS1jaGVjay1mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxhYmVsPVwi0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NjLXN1Z2dlc3Rpb24tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzYy1hZGRyZXNzZXMtc2VsZWN0aW9uLWZpZWxkPjwvc2MtYWRkcmVzc2VzLXNlbGVjdGlvbi1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGFiZWw9XCLQn9Cw0YDQvtC70YxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0J/QsNGA0L7Qu9GMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlMYWJlbD1cItCf0L7QstGC0L7RgCDQv9Cw0YDQvtC70Y9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkQ29uZmlybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCf0L7QstGC0L7RgCDQv9Cw0YDQvtC70Y9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0LXBhc3N3b3JkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkQ29uZmlybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3R1aS1lcnJvcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktY2hlY2tib3gtbGFiZWxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2V0TmV3c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgINCvINGF0L7Rh9GDINC/0L7Qu9GD0YfQsNGC0Ywg0YDQsNGB0YHRi9C70LrRgyDQodC90LDQsdGG0LXQvdGC0YAg0L4g0YHQutC40LTQutCw0YUg0Lgg0L3QvtCy0L7RgdGC0Y/RhSDQv9C+INGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLQtS5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktY2hlY2tib3gtbGFiZWxlZD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1jaGVja2JveC1sYWJlbGVkXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXB0UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICDQoNC10LPQuNGB0YLRgNC40YDRg9GP0YHRjCDQvdCwINGB0LDQudGC0LUsINGPINGB0L7Qs9C70LDRiNCw0Y7RgdGMINGBXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHNldWRvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID7QlNC+0LPQvtCy0L7RgNC+0Lwg0L7RhNC10YDRgtGLPC9hXG4gICAgICAgICAgICAgICAgICAgICAgICA+LlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjY2VwdFJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1jaGVja2JveC1sYWJlbGVkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzSW5kaXZpZHVhbFwiPlxuICAgICAgICAgICAgICAgIDxzYy1uZXctY29udHJhZ2VudC1mb3JtXG4gICAgICAgICAgICAgICAgICAgIFtvcGZDb250cm9sXT1cIm9wZkNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJzdGVwSW5kZXggIT09IDFcIlxuICAgICAgICAgICAgICAgID48L3NjLW5ldy1jb250cmFnZW50LWZvcm0+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy4haGlkZGVuXT1cInN0ZXBJbmRleCAhPT0gMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRhY3RzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNSBwYi0xXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0Ys8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRhY3Qgb2YgY29udGFjdHMuY29udHJvbHM7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgY291bnQgPSBjb3VudDsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+IOKElnt7IGluZGV4ICsgMSB9fTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY291bnQgLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbnRhY3RHcm91cChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25UcmFzaDJMYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2MtbmV3LWNvbnRhY3QtZm9ybSBbZm9ybV09XCJjb250YWN0XCI+PC9zYy1uZXctY29udGFjdC1mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLXB4IHctZnVsbCBiZy10dWktYmFzZS0wNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uUGx1c0xhcmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbnRhY3RHcm91cCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQlNC+0LHQsNCy0LjRgtGMINC60L7QvdGC0LDQutGCXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy4haGlkZGVuXT1cInN0ZXBJbmRleCAhPT0gM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJhbmtBY2NvdW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTUgcGItMVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBmb250LWJvbGRcIj7QkdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0Ys8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJhbmtBY2NvdW50IG9mIGJhbmtBY2NvdW50cy5jb250cm9sczsgbGV0IGluZGV4ID0gaW5kZXg7IGxldCBjb3VudCA9IGNvdW50OyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xMiBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkXCI+0JHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLIOKElnt7IGluZGV4ICsgMSB9fTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY291bnQgLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUJhbmtBY2NvdW50R3JvdXAoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uVHJhc2gyTGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjLW5ldy1jb250cmFnZW50LWJhbmstYWNjb3VudC1mb3JtIFtmb3JtXT1cImJhbmtBY2NvdW50XCI+PC9zYy1uZXctY29udHJhZ2VudC1iYW5rLWFjY291bnQtZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC1weCB3LWZ1bGwgYmctdHVpLWJhc2UtMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHVpSWNvblBsdXNMYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ3NlY29uZGFyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRCYW5rQWNjb3VudEdyb3VwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0LHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90dWktZWxhc3RpYy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdGVwSW5kZXggPiAwXCJcbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUoLTEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDQndCw0LfQsNC0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzSW5kaXZpZHVhbCB8fCAoc3RlcEluZGV4ID09PSAyICYmICFmb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQuY29udHJvbHNbJ2JhbmtBY2NvdW50cyddKSB8fCBzdGVwSW5kZXggPT09IDM7IGVsc2UgbmV4dEluZGV4QnRuXCJcbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCIhIShsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0JfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNGC0YzRgdGPXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbmV4dEluZGV4QnRuPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbk5leHRTdGVwKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUoMSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0JTQsNC70LXQtVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Zvcm0+XG4iXX0=
|
@@ -0,0 +1,3 @@
|
|
1
|
+
export * from './sc-brands-list.component';
|
2
|
+
export * from './sc-brands-list.module';
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvYnJhbmRzLWxpc3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zYy1icmFuZHMtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1icmFuZHMtbGlzdC5tb2R1bGUnO1xuIl19
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
import * as i1 from "@angular/common";
|
4
|
+
import * as i2 from "@taiga-ui/cdk";
|
5
|
+
/**
|
6
|
+
* Компонент списка брэндов.
|
7
|
+
*/
|
8
|
+
export class ScBrandsListComponent {
|
9
|
+
constructor() {
|
10
|
+
/**
|
11
|
+
* Список элементов брендов.
|
12
|
+
*/
|
13
|
+
this.items = [];
|
14
|
+
}
|
15
|
+
}
|
16
|
+
ScBrandsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScBrandsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
17
|
+
ScBrandsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScBrandsListComponent, selector: "sc-brands-list", inputs: { items: "items" }, ngImport: i0, template: "<!-- TODO: TASK:[#9893] \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0442\u0440\u043E\u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u043F\u0440\u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0438 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0440\u0435\u043D\u0434\u043E\u0432. -->\n<div class=\"flex flex-col gap-4\">\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block size-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow scroll-slow-revert flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of items.length - (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index + (items.length - (items.length % 2)) / 2].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block size-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block size-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block size-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n</div>\n", styles: [".scroll-slow-revert{animation-direction:reverse!important;animation-delay:-15s!important}@keyframes scroll-slow{0%{transform:translate(0)}to{transform:translate(calc(-100% - 3rem))}}.animate-scroll-slow{animation:scroll-slow 30s linear infinite}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScBrandsListComponent, decorators: [{
|
19
|
+
type: Component,
|
20
|
+
args: [{ selector: 'sc-brands-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- TODO: TASK:[#9893] \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0442\u0440\u043E\u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u043F\u0440\u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0438 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0440\u0435\u043D\u0434\u043E\u0432. -->\n<div class=\"flex flex-col gap-4\">\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block size-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow scroll-slow-revert flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of items.length - (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index + (items.length - (items.length % 2)) / 2].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block size-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block size-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block size-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n</div>\n", styles: [".scroll-slow-revert{animation-direction:reverse!important;animation-delay:-15s!important}@keyframes scroll-slow{0%{transform:translate(0)}to{transform:translate(calc(-100% - 3rem))}}.animate-scroll-slow{animation:scroll-slow 30s linear infinite}\n"] }]
|
21
|
+
}], propDecorators: { items: [{
|
22
|
+
type: Input
|
23
|
+
}] } });
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYnJhbmRzLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2JyYW5kcy1saXN0L3NjLWJyYW5kcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9icmFuZHMtbGlzdC9zYy1icmFuZHMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUUxRTs7R0FFRztBQU9ILE1BQU0sT0FBTyxxQkFBcUI7SUFObEM7UUFPSTs7V0FFRztRQUVJLFVBQUssR0FHUCxFQUFFLENBQUM7S0FDWDs7a0hBVFkscUJBQXFCO3NHQUFyQixxQkFBcUIsa0ZDWGxDLDBoRkEyQ0E7MkZEaENhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTs4QkFPeEMsS0FBSztzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YHQv9C40YHQutCwINCx0YDRjdC90LTQvtCyLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLWJyYW5kcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYnJhbmRzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLWJyYW5kcy1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQnJhbmRzTGlzdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7QsiDQsdGA0LXQvdC00L7Qsi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtczogQXJyYXk8e1xuICAgICAgICBzcmM6IHN0cmluZztcbiAgICAgICAgYWx0OiBzdHJpbmc7XG4gICAgfT4gPSBbXTtcbn1cbiIsIjwhLS0gVE9ETzogVEFTSzpbIzk4OTNdINCU0L7QsdCw0LLQuNGC0Ywg0YDQsNC30LTQtdC70LXQvdC40LUg0L3QsCDQvdC10YHQutC+0LvRjNC60L4g0YHRgtGA0L7QuiDQuNC30L7QsdGA0LDQttC10L3QuNC5LCDQv9GA0Lgg0YPQstC10LvQuNGH0LXQvdC40Lgg0LrQvtC70LjRh9C10YHRgtCy0LAg0LHRgNC10L3QtNC+0LIuIC0tPlxuPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIC1sZWZ0LTEgdG9wLTAgei0xMCBibG9jayBzaXplLTEyIGJnLWdyYWRpZW50LXRvLXIgZnJvbS10dWktYmFzZS0wMSB0by10cmFuc3BhcmVudFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEyIG92ZXJmbG93LWhpZGRlbiBjb250cmFzdC0xNTAgc2F0dXJhdGUtMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFuaW1hdGUtc2Nyb2xsLXNsb3cgc2Nyb2xsLXNsb3ctcmV2ZXJ0IGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGdhcC0xNlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqdHVpUmVwZWF0VGltZXM9XCJsZXQgaW5kZXggb2YgaXRlbXMubGVuZ3RoIC0gKGl0ZW1zLmxlbmd0aCAtIChpdGVtcy5sZW5ndGggJSAyKSkgLyAyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW1zW2luZGV4ICsgKGl0ZW1zLmxlbmd0aCAtIChpdGVtcy5sZW5ndGggJSAyKSkgLyAyXS5zcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtc1tpbmRleF0uYWx0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIC1yaWdodC0xIHRvcC0wIHotMTAgYmxvY2sgc2l6ZS0xMiBiZy1ncmFkaWVudC10by1yIGZyb20tdHJhbnNwYXJlbnQgdG8tdHVpLWJhc2UtMDFcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIC1sZWZ0LTEgdG9wLTAgei0xMCBibG9jayBzaXplLTEyIGJnLWdyYWRpZW50LXRvLXIgZnJvbS10dWktYmFzZS0wMSB0by10cmFuc3BhcmVudFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEyIG92ZXJmbG93LWhpZGRlbiBjb250cmFzdC0xNTAgc2F0dXJhdGUtMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFuaW1hdGUtc2Nyb2xsLXNsb3cgZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTE2XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICp0dWlSZXBlYXRUaW1lcz1cImxldCBpbmRleCBvZiAoaXRlbXMubGVuZ3RoIC0gKGl0ZW1zLmxlbmd0aCAlIDIpKSAvIDJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbXNbaW5kZXhdLnNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cIml0ZW1zW2luZGV4XS5hbHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgLXJpZ2h0LTEgdG9wLTAgei0xMCBibG9jayBzaXplLTEyIGJnLWdyYWRpZW50LXRvLXIgZnJvbS10cmFuc3BhcmVudCB0by10dWktYmFzZS0wMVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
2
|
+
import { NgModule } from '@angular/core';
|
3
|
+
import { TuiRepeatTimesModule } from '@taiga-ui/cdk';
|
4
|
+
import { ScBrandsListComponent } from './sc-brands-list.component';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
/**
|
7
|
+
* Модуль списка брэндов.
|
8
|
+
*/
|
9
|
+
export class ScBrandsListModule {
|
10
|
+
}
|
11
|
+
ScBrandsListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScBrandsListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
12
|
+
ScBrandsListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScBrandsListModule, declarations: [ScBrandsListComponent], imports: [CommonModule, TuiRepeatTimesModule], exports: [ScBrandsListComponent] });
|
13
|
+
ScBrandsListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScBrandsListModule, imports: [CommonModule, TuiRepeatTimesModule] });
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScBrandsListModule, decorators: [{
|
15
|
+
type: NgModule,
|
16
|
+
args: [{
|
17
|
+
imports: [CommonModule, TuiRepeatTimesModule],
|
18
|
+
declarations: [ScBrandsListComponent],
|
19
|
+
exports: [ScBrandsListComponent],
|
20
|
+
}]
|
21
|
+
}] });
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYnJhbmRzLWxpc3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2JyYW5kcy1saXN0L3NjLWJyYW5kcy1saXN0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRW5FOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjs7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLGlCQUhaLHFCQUFxQixhQUQxQixZQUFZLEVBQUUsb0JBQW9CLGFBRWxDLHFCQUFxQjtnSEFFdEIsa0JBQWtCLFlBSmpCLFlBQVksRUFBRSxvQkFBb0I7MkZBSW5DLGtCQUFrQjtrQkFMOUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUM7b0JBQzdDLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFR1aVJlcGVhdFRpbWVzTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5cbmltcG9ydCB7IFNjQnJhbmRzTGlzdENvbXBvbmVudCB9IGZyb20gJy4vc2MtYnJhbmRzLWxpc3QuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0YHQv9C40YHQutCwINCx0YDRjdC90LTQvtCyLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFR1aVJlcGVhdFRpbWVzTW9kdWxlXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtTY0JyYW5kc0xpc3RDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtTY0JyYW5kc0xpc3RDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTY0JyYW5kc0xpc3RNb2R1bGUge31cbiJdfQ==
|
@@ -18,7 +18,7 @@ export class ScNewContactFormComponent {
|
|
18
18
|
}
|
19
19
|
}
|
20
20
|
ScNewContactFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNewContactFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
21
|
-
ScNewContactFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: { form: "form" }, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"flex flex-col gap-3\">\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.fio\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"name\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.email\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"email\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430 </tui-input>\n <tui-error formControlName=\"position\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"] }, { kind: "directive", type: i3.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i3.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i4.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["countryCode", "phoneMaskAfterCountryCode", "allowText", "search"], outputs: ["searchChange"] }, { kind: "directive", type: i4.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "component", type: i3.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
21
|
+
ScNewContactFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: { form: "form" }, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"flex flex-col gap-3\">\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.fio\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"name\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.email\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"email\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430 </tui-input>\n <tui-error formControlName=\"position\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "directive", type: i3.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i3.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i4.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["countryCode", "phoneMaskAfterCountryCode", "allowText", "search"], outputs: ["searchChange"] }, { kind: "directive", type: i4.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "component", type: i3.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
22
22
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNewContactFormComponent, decorators: [{
|
23
23
|
type: Component,
|
24
24
|
args: [{ selector: 'sc-new-contact-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [formGroup]=\"form\" class=\"flex flex-col gap-3\">\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.fio\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"name\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.email\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"email\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430 </tui-input>\n <tui-error formControlName=\"position\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n</div>\n" }]
|