@snabcentr/client-ui 0.23.0 → 0.26.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/auth/index.d.ts +2 -1
  2. package/auth/interfaces/{ApiErrorResponse.d.ts → api-error-response.d.ts} +1 -3
  3. package/auth/interfaces/index.d.ts +3 -0
  4. package/auth/interfaces/sc-bank-account-form-group.d.ts +11 -0
  5. package/auth/interfaces/sc-contact-form-group.d.ts +10 -0
  6. package/auth/sc-auth.module.d.ts +13 -8
  7. package/auth/sign-up-form/sc-sign-up-form.component.d.ts +141 -0
  8. package/contacts/add-contact-dialog/sc-add-contact-dialog.component.d.ts +3 -3
  9. package/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.d.ts +2 -2
  10. package/contragents/new-contragent-form/sc-new-contragent-form.component.d.ts +22 -15
  11. package/directives/carousel-item-hidden/sc-carousel-item-hidden.directive.d.ts +4 -4
  12. package/directives/index.d.ts +2 -0
  13. package/directives/next-input-focus/sc-next-input-focus.directive.d.ts +20 -0
  14. package/directives/next-input-focus/sc-next-input-focus.module.d.ts +10 -0
  15. package/esm2020/auth/index.mjs +3 -2
  16. package/esm2020/auth/interfaces/api-error-response.mjs +2 -0
  17. package/esm2020/auth/interfaces/index.mjs +4 -0
  18. package/esm2020/auth/interfaces/sc-bank-account-form-group.mjs +2 -0
  19. package/esm2020/auth/interfaces/sc-contact-form-group.mjs +2 -0
  20. package/esm2020/auth/sc-auth.module.mjs +51 -13
  21. package/esm2020/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +13 -7
  22. package/esm2020/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +13 -7
  23. package/esm2020/auth/sign-up-form/sc-sign-up-form.component.mjs +264 -0
  24. package/esm2020/catalog/price-card/sc-price-card.component.mjs +1 -1
  25. package/esm2020/catalog/price-history/sc-price-history.component.mjs +1 -1
  26. package/esm2020/contacts/add-contact-dialog/sc-add-contact-dialog.component.mjs +20 -12
  27. package/esm2020/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.mjs +21 -13
  28. package/esm2020/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.mjs +19 -17
  29. package/esm2020/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +29 -20
  30. package/esm2020/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +1 -1
  31. package/esm2020/directives/carousel-item-hidden/sc-carousel-item-hidden.directive.mjs +2 -2
  32. package/esm2020/directives/carousel-item-hidden/sc-carousel-item-hidden.module.mjs +2 -2
  33. package/esm2020/directives/index.mjs +3 -1
  34. package/esm2020/directives/next-input-focus/sc-next-input-focus.directive.mjs +40 -0
  35. package/esm2020/directives/next-input-focus/sc-next-input-focus.module.mjs +19 -0
  36. package/esm2020/files/directives/tree-top.directive.mjs +10 -10
  37. package/esm2020/form-fields/suggestion-field/sc-suggestion-field.component.mjs +1 -1
  38. package/esm2020/user/index.mjs +2 -1
  39. package/esm2020/user/sc-user.module.mjs +19 -12
  40. package/esm2020/user/user-managers/sc-user-managers.component.mjs +38 -0
  41. package/esm2020/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.mjs +18 -12
  42. package/esm2020/validators/index.mjs +2 -2
  43. package/esm2020/validators/sc-password-confirm-matching-validator.mjs +17 -0
  44. package/esm2020/verification/verification-phone-check-form/sc-verification-phone-check-form.component.mjs +39 -27
  45. package/fesm2015/snabcentr-client-ui.mjs +2820 -2401
  46. package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
  47. package/fesm2020/snabcentr-client-ui.mjs +2819 -2402
  48. package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
  49. package/package.json +1 -1
  50. package/styles/tailwind/tailwind.scss +17 -0
  51. package/user/index.d.ts +1 -0
  52. package/user/sc-user.module.d.ts +9 -8
  53. package/user/user-managers/sc-user-managers.component.d.ts +26 -0
  54. package/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.d.ts +2 -2
  55. package/validators/index.d.ts +1 -1
  56. package/validators/{scPasswordConfirmMatchingValidator.d.ts → sc-password-confirm-matching-validator.d.ts} +1 -1
  57. package/verification/verification-phone-check-form/sc-verification-phone-check-form.component.d.ts +17 -17
  58. package/esm2020/auth/interfaces/ApiErrorResponse.mjs +0 -2
  59. package/esm2020/validators/scPasswordConfirmMatchingValidator.mjs +0 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snabcentr/client-ui",
3
- "version": "0.23.0",
3
+ "version": "0.26.1",
4
4
  "author": "Snabcentr Ltd.",
5
5
  "repository": "https://gitlab.snabcentr.met/web/angular/snabcentr-client-ui-lib",
6
6
  "license": "Commercial",
@@ -688,6 +688,11 @@ video {
688
688
  margin: 0px;
689
689
  }
690
690
 
691
+ .my-2 {
692
+ margin-top: 0.5rem;
693
+ margin-bottom: 0.5rem;
694
+ }
695
+
691
696
  .my-4 {
692
697
  margin-top: 1rem;
693
698
  margin-bottom: 1rem;
@@ -697,6 +702,10 @@ video {
697
702
  margin-bottom: 0.25rem;
698
703
  }
699
704
 
705
+ .mb-2 {
706
+ margin-bottom: 0.5rem;
707
+ }
708
+
700
709
  .mb-4 {
701
710
  margin-bottom: 1rem;
702
711
  }
@@ -1119,6 +1128,10 @@ video {
1119
1128
  border-width: 1px;
1120
1129
  }
1121
1130
 
1131
+ .border-0 {
1132
+ border-width: 0px;
1133
+ }
1134
+
1122
1135
  .border-b {
1123
1136
  border-bottom-width: 1px;
1124
1137
  }
@@ -1299,6 +1312,10 @@ video {
1299
1312
  font-weight: 700 !important;
1300
1313
  }
1301
1314
 
1315
+ .\!font-medium {
1316
+ font-weight: 500 !important;
1317
+ }
1318
+
1302
1319
  .font-bold {
1303
1320
  font-weight: 700;
1304
1321
  }
package/user/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './reset-user-password/sc-reset-user-password.component';
2
2
  export * from './update-user-info-dialog/sc-update-user-info-dialog.component';
3
+ export * from './user-managers/sc-user-managers.component';
3
4
  export * from './user-phone-approve-dialog/sc-user-phone-approve-dialog.component';
4
5
  export * from './sc-user.module';
@@ -2,18 +2,19 @@ import * as i0 from "@angular/core";
2
2
  import * as i1 from "./reset-user-password/sc-reset-user-password.component";
3
3
  import * as i2 from "./update-user-info-dialog/sc-update-user-info-dialog.component";
4
4
  import * as i3 from "./user-phone-approve-dialog/sc-user-phone-approve-dialog.component";
5
- import * as i4 from "@angular/common";
6
- import * as i5 from "@angular/forms";
7
- import * as i6 from "@taiga-ui/kit";
8
- import * as i7 from "@taiga-ui/core";
9
- import * as i8 from "@taiga-ui/cdk";
10
- import * as i9 from "../verification/sc-verification.module";
11
- import * as i10 from "../form-fields/form-fields.module";
5
+ import * as i4 from "./user-managers/sc-user-managers.component";
6
+ import * as i5 from "@angular/common";
7
+ import * as i6 from "@angular/forms";
8
+ import * as i7 from "@taiga-ui/kit";
9
+ import * as i8 from "@taiga-ui/core";
10
+ import * as i9 from "@taiga-ui/cdk";
11
+ import * as i10 from "../verification/sc-verification.module";
12
+ import * as i11 from "../form-fields/form-fields.module";
12
13
  /**
13
14
  * Модуль компонентов пользователя.
14
15
  */
15
16
  export declare class ScUserModule {
16
17
  static ɵfac: i0.ɵɵFactoryDeclaration<ScUserModule, never>;
17
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScUserModule, [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent], [typeof i4.CommonModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.TuiFieldErrorPipeModule, typeof i6.TuiInputPasswordModule, typeof i7.TuiButtonModule, typeof i7.TuiErrorModule, typeof i7.TuiLabelModule, typeof i7.TuiTextfieldControllerModule, typeof i8.TuiLetModule, typeof i9.ScVerificationModule, typeof i10.ScFormFieldsModule, typeof i7.TuiLoaderModule, typeof i6.TuiInputModule, typeof i6.TuiInputPhoneModule, typeof i6.TuiCheckboxModule, typeof i6.TuiCheckboxLabeledModule, typeof i7.TuiDataListModule, typeof i6.TuiSelectModule, typeof i7.TuiModeModule], [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent]>;
18
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScUserModule, [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiFieldErrorPipeModule, typeof i7.TuiInputPasswordModule, typeof i8.TuiButtonModule, typeof i8.TuiErrorModule, typeof i8.TuiLabelModule, typeof i8.TuiTextfieldControllerModule, typeof i9.TuiLetModule, typeof i10.ScVerificationModule, typeof i11.ScFormFieldsModule, typeof i8.TuiLoaderModule, typeof i7.TuiInputModule, typeof i7.TuiInputPhoneModule, typeof i7.TuiCheckboxModule, typeof i7.TuiCheckboxLabeledModule, typeof i8.TuiDataListModule, typeof i7.TuiSelectModule, typeof i8.TuiModeModule, typeof i8.TuiLinkModule, typeof i8.TuiFormatPhonePipeModule], [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent]>;
18
19
  static ɵinj: i0.ɵɵInjectorDeclaration<ScUserModule>;
19
20
  }
@@ -0,0 +1,26 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { ScIManager, ScUserService } from '@snabcentr/client-core';
3
+ import { Observable } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Компонент персональных менеджеров пользователя.
7
+ */
8
+ export declare class ScUserManagersComponent {
9
+ private readonly userService;
10
+ /**
11
+ * Персональные менеджеры пользователя.
12
+ */
13
+ readonly managers$: Observable<ScIManager[] | undefined>;
14
+ /**
15
+ * Событие нажатия на кнопку QR кода.
16
+ */
17
+ readonly qrClickEvent: EventEmitter<ScIManager>;
18
+ /**
19
+ * Инициализирует экземпляр класса {@link ScUserManagersComponent}.
20
+ *
21
+ * @param userService Сервис информации о пользователе.
22
+ */
23
+ constructor(userService: ScUserService);
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScUserManagersComponent, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScUserManagersComponent, "sc-user-managers", never, {}, { "qrClickEvent": "qrClickEvent"; }, never, never, false>;
26
+ }
@@ -1,7 +1,7 @@
1
- import { FormGroup, FormControl } from '@angular/forms';
2
- import { Subject, Observable } from 'rxjs';
1
+ import { FormControl, FormGroup } from '@angular/forms';
3
2
  import { ScApprovedData, ScUser, ScUserService, ScVerificationService } from '@snabcentr/client-core';
4
3
  import { TuiDialogContext } from '@taiga-ui/core';
4
+ import { Observable, Subject } from 'rxjs';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
7
  * Диалоговое окно подтверждения номера телефона.
@@ -1,4 +1,4 @@
1
1
  export * from './scBicValidator';
2
2
  export * from './scCorrespondentAccountValidator';
3
- export * from './scPasswordConfirmMatchingValidator';
3
+ export * from './sc-password-confirm-matching-validator';
4
4
  export * from './stepValidator';
@@ -3,6 +3,6 @@ import { ValidatorFn } from '@angular/forms';
3
3
  * Проверяет повторный ввод пароля на эквивалентность паролю.
4
4
  *
5
5
  * @param passwordKey Ключ поля ввода пароля.
6
- * @param passwordKey Ключ поля повторного ввода пароля.
6
+ * @param passwordConfirmKey Ключ поля повторного ввода пароля.
7
7
  */
8
8
  export declare function scPasswordConfirmMatchingValidator(passwordKey: string, passwordConfirmKey: string): ValidatorFn | null;
@@ -1,8 +1,8 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
- import { FormGroup, FormControl, FormGroupDirective } from '@angular/forms';
2
+ import { FormControl, FormGroup, FormGroupDirective } from '@angular/forms';
3
3
  import { MaskitoOptions } from '@maskito/core';
4
4
  import { ScVerificationService } from '@snabcentr/client-core';
5
- import { Subject, Observable } from 'rxjs';
5
+ import { Observable, Subject } from 'rxjs';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
8
  * Компонент формы проверки телефона и получения кода подтверждения.
@@ -10,10 +10,6 @@ import * as i0 from "@angular/core";
10
10
  export declare class ScVerificationPhoneCheckFormComponent implements OnInit {
11
11
  private readonly verificationService;
12
12
  private readonly formGroupDirective?;
13
- /**
14
- * Признак, следует ли отображать функционал кода подтверждения.
15
- */
16
- private _showCodeFields;
17
13
  /**
18
14
  * Признак, следует ли отображать функционал кода подтверждения.
19
15
  */
@@ -42,17 +38,6 @@ export declare class ScVerificationPhoneCheckFormComponent implements OnInit {
42
38
  * Событие для обратной привязки наличия кода подтверждения
43
39
  */
44
40
  haveCodeChange: EventEmitter<boolean>;
45
- /**
46
- * Группа полей ввода для формы «Вход на сайт».
47
- */
48
- get form(): FormGroup<{
49
- phone: FormControl<string | null>;
50
- verificationCode: FormControl<string | null>;
51
- }>;
52
- /**
53
- * Поле ввода 'Номер телефона'.
54
- */
55
- get phoneControl(): FormControl<string | null>;
56
41
  /**
57
42
  * {@link Observable} запроса проверки номера телефона.
58
43
  */
@@ -79,6 +64,10 @@ export declare class ScVerificationPhoneCheckFormComponent implements OnInit {
79
64
  * TODO: Вынести таймер в отдельную директиву TASK:[#9260].
80
65
  */
81
66
  readonly timer$: Observable<string | null>;
67
+ /**
68
+ * Признак, следует ли отображать функционал кода подтверждения.
69
+ */
70
+ private _showCodeFields;
82
71
  /**
83
72
  * Инициализирует экземпляр класса {@link ScVerificationPhoneCheckFormComponent}.
84
73
  *
@@ -86,6 +75,17 @@ export declare class ScVerificationPhoneCheckFormComponent implements OnInit {
86
75
  * @param formGroupDirective Директива c `FormGroup` из DOM.
87
76
  */
88
77
  constructor(verificationService: ScVerificationService, formGroupDirective?: FormGroupDirective | undefined);
78
+ /**
79
+ * Группа полей ввода для формы «Вход на сайт».
80
+ */
81
+ get form(): FormGroup<{
82
+ phone: FormControl<string | null>;
83
+ verificationCode: FormControl<string | null>;
84
+ }>;
85
+ /**
86
+ * Поле ввода 'Номер телефона'.
87
+ */
88
+ get phoneControl(): FormControl<string | null>;
89
89
  /** @inheritDoc */
90
90
  ngOnInit(): void;
91
91
  /**
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpRXJyb3JSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL2ludGVyZmFjZXMvQXBpRXJyb3JSZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDQlNCw0L3QvdGL0LUg0L7QsSDQvtGI0LjQsdC60LDRhSDQstCw0LvQuNC00LDRhtC40LggQVBJINC30LDQv9GA0L7RgdC+0LIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRXJyb3JSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICog0J7QsdC+0LHRidGR0L3QvdC+0LUg0YHQvtC+0LHRidC10L3QuNC1INC+0LEg0L7RiNC40LHQutC1LlxuICAgICAqL1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCf0L7QtNGA0L7QsdC90L7QtSDQvtC/0LjRgdCw0L3QuNC1INC60LDQttC00L7QuSDQvtGI0LjQsdC60LguINCh0L7QtNC10YDQttC40YIg0YHQv9C40YHQvtC6INC/0L7Qu9C10Lkg0YEg0LTQtdGC0LDQu9GM0L3Ri9C8INC+0L/QuNGB0LDQvdC40LXQvCDQvtGI0LjQsdC+0Log0LLQsNC70LjQtNCw0YbQuNC4INC00LvRjyDQutCw0LbQtNC+0LPQviDQv9C+0LvRjy5cbiAgICAgKi9cbiAgICBlcnJvcnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gICAgfTtcbn1cbiJdfQ==
@@ -1,17 +0,0 @@
1
- /**
2
- * Проверяет повторный ввод пароля на эквивалентность паролю.
3
- *
4
- * @param passwordKey Ключ поля ввода пароля.
5
- * @param passwordKey Ключ поля повторного ввода пароля.
6
- */
7
- export function scPasswordConfirmMatchingValidator(passwordKey, passwordConfirmKey) {
8
- return (control) => {
9
- const passwordInput = control.get(passwordKey);
10
- const passwordConfirmInput = control.get(passwordConfirmKey);
11
- if (!passwordInput || !passwordConfirmInput || passwordInput.invalid || passwordConfirmInput.invalid || !passwordInput.value || !passwordConfirmInput.value) {
12
- return null;
13
- }
14
- return passwordInput?.value !== passwordConfirmInput?.value ? { passwordNotEquivalent: true } : null;
15
- };
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NQYXNzd29yZENvbmZpcm1NYXRjaGluZ1ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS92YWxpZGF0b3JzL3NjUGFzc3dvcmRDb25maXJtTWF0Y2hpbmdWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0NBQWtDLENBQUMsV0FBbUIsRUFBRSxrQkFBMEI7SUFDOUYsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDekQsTUFBTSxhQUFhLEdBQTBDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEYsTUFBTSxvQkFBb0IsR0FBMEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXBHLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDekosT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sYUFBYSxFQUFFLEtBQUssS0FBSyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqXG4gKiDQn9GA0L7QstC10YDRj9C10YIg0L/QvtCy0YLQvtGA0L3Ri9C5INCy0LLQvtC0INC/0LDRgNC+0LvRjyDQvdCwINGN0LrQstC40LLQsNC70LXQvdGC0L3QvtGB0YLRjCDQv9Cw0YDQvtC70Y4uXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkS2V5INCa0LvRjtGHINC/0L7Qu9GPINCy0LLQvtC00LAg0L/QsNGA0L7Qu9GPLlxuICogQHBhcmFtIHBhc3N3b3JkS2V5INCa0LvRjtGHINC/0L7Qu9GPINC/0L7QstGC0L7RgNC90L7Qs9C+INCy0LLQvtC00LAg0L/QsNGA0L7Qu9GPLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NQYXNzd29yZENvbmZpcm1NYXRjaGluZ1ZhbGlkYXRvcihwYXNzd29yZEtleTogc3RyaW5nLCBwYXNzd29yZENvbmZpcm1LZXk6IHN0cmluZyk6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkSW5wdXQ6IEFic3RyYWN0Q29udHJvbDxzdHJpbmcgfCBudWxsPiB8IG51bGwgPSBjb250cm9sLmdldChwYXNzd29yZEtleSk7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkQ29uZmlybUlucHV0OiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nIHwgbnVsbD4gfCBudWxsID0gY29udHJvbC5nZXQocGFzc3dvcmRDb25maXJtS2V5KTtcblxuICAgICAgICBpZiAoIXBhc3N3b3JkSW5wdXQgfHwgIXBhc3N3b3JkQ29uZmlybUlucHV0IHx8IHBhc3N3b3JkSW5wdXQuaW52YWxpZCB8fCBwYXNzd29yZENvbmZpcm1JbnB1dC5pbnZhbGlkIHx8ICFwYXNzd29yZElucHV0LnZhbHVlIHx8ICFwYXNzd29yZENvbmZpcm1JbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFzc3dvcmRJbnB1dD8udmFsdWUgIT09IHBhc3N3b3JkQ29uZmlybUlucHV0Py52YWx1ZSA/IHsgcGFzc3dvcmROb3RFcXVpdmFsZW50OiB0cnVlIH0gOiBudWxsO1xuICAgIH07XG59XG4iXX0=