tango-app-ui-auth 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/esm2022/lib/components/tango-auth/tango-auth.component.mjs +3 -3
  2. package/esm2022/lib/components/tango-auth-signup/step/modal-content/modal-content.component.mjs +49 -0
  3. package/esm2022/lib/components/tango-auth-signup/step/services/conversion.service.mjs +27 -0
  4. package/esm2022/lib/components/tango-auth-signup/step/step1/step1.component.mjs +172 -0
  5. package/esm2022/lib/components/tango-auth-signup/step/step2/step2.component.mjs +247 -0
  6. package/esm2022/lib/components/tango-auth-signup/step/step3/step3.component.mjs +162 -0
  7. package/esm2022/lib/components/tango-auth-signup/tango-auth-signup.component.mjs +51 -5
  8. package/esm2022/lib/components/tango-auth-signup/vertical/vertical.component.mjs +54 -0
  9. package/esm2022/lib/components/tango-auth-signup/wizards/wizards.component.mjs +12 -0
  10. package/esm2022/lib/services/auth.service.mjs +39 -4
  11. package/esm2022/lib/tango-auth.module.mjs +34 -7
  12. package/fesm2022/tango-app-ui-auth.mjs +815 -32
  13. package/fesm2022/tango-app-ui-auth.mjs.map +1 -1
  14. package/lib/components/tango-auth-signup/step/modal-content/modal-content.component.d.ts +15 -0
  15. package/lib/components/tango-auth-signup/step/services/conversion.service.d.ts +12 -0
  16. package/lib/components/tango-auth-signup/step/step1/step1.component.d.ts +31 -0
  17. package/lib/components/tango-auth-signup/step/step2/step2.component.d.ts +50 -0
  18. package/lib/components/tango-auth-signup/step/step3/step3.component.d.ts +39 -0
  19. package/lib/components/tango-auth-signup/tango-auth-signup.component.d.ts +15 -1
  20. package/lib/components/tango-auth-signup/vertical/vertical.component.d.ts +19 -0
  21. package/lib/components/tango-auth-signup/wizards/wizards.component.d.ts +5 -0
  22. package/lib/services/auth.service.d.ts +16 -1
  23. package/lib/tango-auth.module.d.ts +11 -3
  24. package/package.json +1 -1
@@ -0,0 +1,172 @@
1
+ import { Component } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../services/conversion.service";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "../../../../services/auth.service";
7
+ import * as i4 from "@angular/common";
8
+ export class Step1Component {
9
+ setterservice;
10
+ fb;
11
+ authService;
12
+ cd;
13
+ aboutForm;
14
+ passwordStrength = '0%';
15
+ confirmPasswordStrength = '0%';
16
+ isClientNameTaken;
17
+ isEmailTaken;
18
+ isMobileTaken;
19
+ constructor(setterservice, fb, authService, cd) {
20
+ this.setterservice = setterservice;
21
+ this.fb = fb;
22
+ this.authService = authService;
23
+ this.cd = cd;
24
+ this.initForm();
25
+ }
26
+ initForm() {
27
+ this.aboutForm = this.fb.group({
28
+ clientName: ['', Validators.compose([
29
+ Validators.required,
30
+ Validators.minLength(3),
31
+ Validators.maxLength(100),
32
+ ]),
33
+ ],
34
+ firstName: ['', Validators.compose([
35
+ Validators.required,
36
+ Validators.minLength(3),
37
+ Validators.maxLength(50),
38
+ ]),
39
+ ],
40
+ lastName: ['', Validators.compose([
41
+ // Validators.required,
42
+ Validators.minLength(3),
43
+ Validators.maxLength(50),
44
+ ]),
45
+ ],
46
+ corporateEmail: ['', Validators.compose([
47
+ Validators.required,
48
+ Validators.pattern("^[a-zA-Z0-9]+([.-_]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([.-_]?[a-zA-Z]+)*[.]{1}[a-zA-Z]{2,}$"),
49
+ Validators.minLength(3),
50
+ Validators.maxLength(100),
51
+ ]),
52
+ ],
53
+ countryCode: ['+91', Validators.compose([
54
+ Validators.required
55
+ ]),
56
+ ],
57
+ mobileNumber: ['', Validators.compose([
58
+ Validators.required,
59
+ Validators.pattern("^[5-9][0-9]{9}$")
60
+ ]),
61
+ ],
62
+ password: ['', Validators.compose([
63
+ Validators.required,
64
+ Validators.minLength(8),
65
+ Validators.maxLength(320),
66
+ Validators.pattern(/^(?=.*[A-Z])(?=.*\d).{8,}$/),
67
+ ]),
68
+ ],
69
+ confirmPassword: ['', Validators.compose([
70
+ Validators.required,
71
+ Validators.minLength(8),
72
+ Validators.maxLength(320),
73
+ Validators.pattern(/^(?=.*[A-Z])(?=.*\d).{8,}$/),
74
+ this.validateAreEqual.bind(this),
75
+ ]),
76
+ ,
77
+ ],
78
+ });
79
+ }
80
+ validateAreEqual(fieldControl) {
81
+ return fieldControl?.value === this.aboutForm?.get('password').value ? null : {
82
+ NotEqual: true,
83
+ };
84
+ }
85
+ async checkPasswordStrength(val) {
86
+ const numbers = new Promise((resolve, reject) => {
87
+ if (/[0-9]/g.test(val)) {
88
+ resolve({ mesage: 'numbers passed' });
89
+ }
90
+ else {
91
+ reject({ mesage: 'numbers failed' });
92
+ }
93
+ });
94
+ const capital = new Promise((resolve, reject) => {
95
+ if (/[a-z]/g.test(val)) {
96
+ resolve({ mesage: 'capital passed' });
97
+ }
98
+ else {
99
+ reject({ mesage: 'capital failed' });
100
+ }
101
+ });
102
+ const small = new Promise((resolve, reject) => {
103
+ if (/[A-Z]/g.test(val)) {
104
+ resolve({ mesage: 'small passed' });
105
+ }
106
+ else {
107
+ reject({ mesage: 'small failed' });
108
+ }
109
+ });
110
+ const length = new Promise((resolve, reject) => {
111
+ if (val.length > 7) {
112
+ resolve({ mesage: 'length passed' });
113
+ }
114
+ else {
115
+ reject({ mesage: 'length failed' });
116
+ }
117
+ });
118
+ const percentage = await Promise.allSettled([numbers, capital, small, length])
119
+ .then((res) => {
120
+ var percentage = 0;
121
+ res.forEach((element) => {
122
+ if (element.status === 'fulfilled') {
123
+ percentage += 25;
124
+ }
125
+ });
126
+ return percentage;
127
+ });
128
+ return percentage + '%';
129
+ }
130
+ async onPasswordChange(event) {
131
+ this.passwordStrength = await this.checkPasswordStrength(event.target.value);
132
+ }
133
+ async onConfirmPasswordChange(event) {
134
+ this.confirmPasswordStrength = await this.checkPasswordStrength(event.target.value);
135
+ }
136
+ onClientNameBlur() {
137
+ this.authService.isClientnameTaken(this.aboutForm?.get('clientName')?.value).subscribe({
138
+ next: (res) => {
139
+ this.isClientNameTaken = res.data.isExists;
140
+ this.cd.detectChanges();
141
+ }
142
+ });
143
+ }
144
+ onEmailBlur() {
145
+ this.authService.isEmailTaken(this.aboutForm?.get('corporateEmail')?.value).subscribe({
146
+ next: (res) => {
147
+ this.isEmailTaken = res.data.isExists;
148
+ this.cd.detectChanges();
149
+ }
150
+ });
151
+ }
152
+ onMobileNumberBlur() {
153
+ this.authService.isMobileTaken(this.aboutForm?.get('mobileNumber')?.value).subscribe({
154
+ next: (res) => {
155
+ this.isMobileTaken = res.data.isExists;
156
+ this.cd.detectChanges();
157
+ }
158
+ });
159
+ }
160
+ nextStep() {
161
+ delete this.aboutForm.value.confirmPassword;
162
+ this.authService.aboutFormData.next(this.aboutForm.value);
163
+ this.setterservice.completeStepper({ step: 2 });
164
+ }
165
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: Step1Component, deps: [{ token: i1.ConversionService }, { token: i2.FormBuilder }, { token: i3.AuthService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: Step1Component, selector: "lib-step1", ngImport: i0, template: "<div class=\"card mt-10 mx-15\">\r\n <div class=\"h-100 px-10 mx-5 my-7\">\r\n <!-- <div>\r\n <img class=\"bubble\" src=\"../../../../../../../assets/Icons/Signup-bubble-icon.svg\"\r\n alt=\"\" srcset=\"\"> -->\r\n <div class=\"mobileshow\">\r\n <h3 class=\"title1 pt-4\">AI co-pilot to boost your sales conversion</h3>\r\n <p class=\"subtext pb-4\">Join the leading global brands in understanding footfall and shopper behavior to\r\n boost\r\n sales.</p>\r\n\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/Lenskart-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/nykaa-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/giva-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/Duroflex-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/loccitone-logo.svg\" alt=\"\">\r\n </div>\r\n <div class=\"me-20\">\r\n <h4 style=\"font-size: 20px; \r\n font-weight: 500;\r\n color: #7E8299;\">30 +</h4>\r\n </div>\r\n\r\n </div>\r\n <div class=\"mt-12\">\r\n <h6 class=\"card-label mb-7\">Create an Account</h6>\r\n <form [formGroup]=\"aboutForm\" novalidate=\"novalidate\">\r\n <div class=\"row px-0\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"Brand\" class=\"form-label\">Brand Name <span class=\"alert-required\">*</span></label>\r\n <input (blur)=\"onClientNameBlur()\" (input)=\"isClientNameTaken = 0\" formControlName=\"clientName\" type=\"type\" class=\"form-control\" id=\"Brand\" [ngClass]=\"{ 'is-invalid': aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('required') }\" >\r\n \r\n \r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('minlength')\">\r\n Brand name must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('maxlength')\">\r\n Brand name must be maximum of 100 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('required')\">\r\n Brand name is required\r\n </small>\r\n <small \r\n *ngIf=\"isClientNameTaken\">\r\n Brand name is already taken\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row px-0\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"firstname\" class=\"form-label\">First Name <span class=\"alert-required\">*</span></label>\r\n <input formControlName=\"firstName\" type=\"type\" class=\"form-control\" id=\"firstname\" [ngClass]=\"{ 'is-invalid': aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('required') }\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('minlength')\">\r\n First name must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('maxlength')\">\r\n First name must be maximum of 50 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('required')\">\r\n First name is required\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"lastname\" class=\"form-label\">Last Name</label>\r\n <input formControlName=\"lastName\" type=\"type\" class=\"form-control\" id=\"lastname\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('lastName')?.touched && aboutForm.get('lastName')?.hasError('minlength')\">\r\n Last name must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('lastName')?.touched && aboutForm.get('lastName')?.hasError('maxlength')\">\r\n Last name must be maximum of 50 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('lastName')?.touched && aboutForm.get('lastName')?.hasError('required')\">\r\n Last name is required\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"email\" class=\"form-label\">Corporate Email <span class=\"alert-required\">*</span></label>\r\n <input (blur)=\"onEmailBlur()\" (input)=\"isEmailTaken = 0\" formControlName=\"corporateEmail\" type=\"email\" class=\"form-control\" id=\"email\" [ngClass]=\"{ 'is-invalid': aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('required') }\"\r\n autocomplete=\"off\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('minlength')\">\r\n Corporate email must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('maxlength')\">\r\n Corporate email must be maximum of 50 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('required')\">\r\n Corporate email is required\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('pattern')\">\r\n Enter a valid email\r\n </small>\r\n <small \r\n *ngIf=\"isEmailTaken\">\r\n Email is already taken\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n\r\n <label for=\"phonenumber\" class=\"form-label\">Phone number <span class=\"alert-required\">*</span></label>\r\n <div class=\"input-group mb-3\">\r\n <div class=\"input-group-append\">\r\n <select formControlName=\"countryCode\" class=\"form-select select-radius ms-4 me-5\" [ngClass]=\"{ 'country-is-invalid': aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required') }\"\r\n id=\"inputGroupSelect01\">\r\n <option class=\"mx-2\" value=\"+91\">In</option>\r\n <option class=\"mx-2\" value=\"+93\">Af</option>\r\n <option class=\"mx-2\" value=\"+355\">Al</option>\r\n </select>\r\n </div>\r\n <input [value]=\"aboutForm.get('countryCode')?.value\" type=\"text\" [ngClass]=\"{ 'code-is-invalid': aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required') }\"\r\n class=\"form-control border-disabled\" readonly>\r\n <input (blur)=\"onMobileNumberBlur()\" (input)=\"isMobileTaken = 0\" formControlName=\"mobileNumber\" type=\"type\" class=\"form-control border-new\" [ngClass]=\"{ 'mobile-is-invalid is-invalid': aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required') }\"\r\n id=\"phonenumber\" autocomplete=\"off\">\r\n </div>\r\n <small \r\n *ngIf=\"aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required')\">\r\n Phone number is required\r\n </small>\r\n <small \r\n *ngIf=\"aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('pattern')\">\r\n Enter a valid phone number\r\n </small>\r\n <small \r\n *ngIf=\"isMobileTaken\">\r\n Mobile number already taken\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"password\" class=\"form-label\">Password <span class=\"alert-required\">*</span></label>\r\n <input (input)=\"onPasswordChange($event)\" formControlName=\"password\" type=\"password\" [ngClass]=\"{ 'is-invalid': aboutForm.get('password')?.touched && aboutForm.get('password')?.hasError('required') }\"\r\n class=\"form-control\" id=\"password\" autocomplete=\"new-password\">\r\n\r\n <div class=\"progressbar-wrapper\">\r\n <span [style.width]=\"passwordStrength\"\r\n [ngStyle]=\"{'background-color': passwordStrength === '0%' ? '' : (passwordStrength === '25%' ? 'red' : (passwordStrength === '50%' ? 'orange': (passwordStrength === '75%' ? 'yellow' : (passwordStrength === '100%' ? 'green' : '')))) }\"\r\n class=\"progressbar-inner\"></span>\r\n </div>\r\n <div>\r\n <small \r\n *ngIf=\"aboutForm.get('password')?.hasError('required') && aboutForm.get('password')?.touched\">Password is required</small>\r\n <small \r\n *ngIf=\"aboutForm.get('password')?.hasError('pattern')\">Use\r\n 8 or more characters with a mix of letters, numbers & symbols.</small>\r\n <small \r\n *ngIf=\"aboutForm.get('password')?.touched && aboutForm.get('password')?.invalid\"></small>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"confirm\" class=\"form-label\">Confirm Password <span class=\"alert-required\">*</span></label>\r\n <input (input)=\"onConfirmPasswordChange($event)\" formControlName=\"confirmPassword\" type=\"password\" class=\"form-control\" [ngClass]=\"{ 'is-invalid': aboutForm.get('confirmPassword')?.touched && aboutForm.get('confirmPassword')?.hasError('required') }\"\r\n id=\"confirm\">\r\n <div class=\"progressbar-wrapper\">\r\n <span [style.width]=\"confirmPasswordStrength\"\r\n [ngStyle]=\"{'background-color': confirmPasswordStrength === '0%' ? '' : (confirmPasswordStrength === '25%' ? 'red' : (confirmPasswordStrength === '50%' ? 'orange': (confirmPasswordStrength === '75%' ? 'yellow' : (confirmPasswordStrength === '100%' ? 'green' : '')))) }\"\r\n class=\"progressbar-inner\"></span>\r\n </div>\r\n <div>\r\n <small *ngIf=\"aboutForm.get('confirmPassword')?.hasError('pattern')\">The password must contain atleast one capital letter and number.</small>\r\n <small \r\n *ngIf=\"aboutForm.get('confirmPassword')?.touched && aboutForm.get('confirmPassword')?.invalid\">Password\r\n does not match</small>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <!-- <ng-container *ngIf=\"currentStep$.value == 1\"> -->\r\n <div class=\"text-end\">\r\n <button [disabled]=\"aboutForm.invalid || isMobileTaken || isEmailTaken || isClientNameTaken\" type=\"button\" class=\"btn btn-lg btn-primary\" (click)=\"nextStep()\">\r\n <span class=\"indicator-label px-5\">\r\n <ng-container>\r\n Next <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M7.5 15L12.5 10L7.5 5\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-container>\r\n\r\n </span>\r\n </button>\r\n </div>\r\n <!-- </ng-container> -->\r\n </div>\r\n\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n</div>", styles: [".logo{width:16%;height:73px!important;margin-top:150px;margin-left:44%}.heading{margin-left:41%}.title1{color:var(--Gray-700, #344054)!important;font-size:24px!important;font-weight:600!important;line-height:32px}.subtext{color:var(--Gray-400, #98A2B3)!important;font-size:18px!important;font-weight:500!important;line-height:28px}.submit{padding-bottom:2%}.point{background:#ddd;border-radius:2px;display:inline-block;height:5px;width:85px}.form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1rem;font-weight:500;line-height:1}input,button,select,optgroup,textarea{margin:5px 0}.form-control{display:block;font-size:1.1rem;font-weight:600;line-height:1.5;color:#181c32;-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-select{font-size:1.1rem;font-weight:600;line-height:2.35;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important}.form-label{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.card-label{font-weight:600;font-size:20px}.me-n2{margin-right:3.5rem!important}.font{font-family:Inter!important}.phone{flex:0 0 auto;width:62.666667%}@media (min-width: 1024px) and (max-width: 1299px){.title1{text-shadow:1px 1px 1px #096dd7;font-weight:600;font-size:21px!important;line-height:34px;text-align:center;color:#464e5f}.subtext{font-family:Inter;font-size:18px;font-weight:600;line-height:37px;letter-spacing:0em;text-align:center;color:#7e8299}.imgsrc{width:100px}}@media (min-width: 1300px) and (max-width: 1400px){.title1{text-shadow:1px 1px 1px #096dd7;font-weight:600;font-size:21px!important;line-height:34px;text-align:center;color:#464e5f}.subtext{font-family:Inter;font-size:18px;font-weight:600;line-height:37px;letter-spacing:0em;text-align:center;color:#7e8299}.imgsrc{width:100px}}small{color:var(--Gray-500, #667085)!important;font-size:10px!important;font-style:normal;font-weight:400!important;line-height:normal;text-transform:capitalize}.border-new{border-radius:0 8px 8px 0!important;border-left:none!important}.border-disabled{padding:5px 0;max-width:10%;border-radius:0!important;border-right:none!important;border-left:none!important}.select-radius{padding:5px 0 5px 15px;border-radius:8px 0 0 8px!important;border-right:none!important}.progressbar-wrapper{height:4px;width:100%;background-color:#f2f4f7;border-radius:4px;position:relative}.progressbar-inner{height:100%;position:absolute;border-radius:4px}.invalid-feedback,small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;text-transform:capitalize}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.mobile-is-invalid{border-radius:0 8px 8px 0!important;border-left:none!important}.code-is-invalid{padding:5px 0;max-width:10%;border-radius:0!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;border-right:none!important;border-left:none!important}.country-is-invalid{padding:5px 0 5px 15px;border-radius:8px 0 0 8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;border-right:none!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
167
+ }
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: Step1Component, decorators: [{
169
+ type: Component,
170
+ args: [{ selector: 'lib-step1', template: "<div class=\"card mt-10 mx-15\">\r\n <div class=\"h-100 px-10 mx-5 my-7\">\r\n <!-- <div>\r\n <img class=\"bubble\" src=\"../../../../../../../assets/Icons/Signup-bubble-icon.svg\"\r\n alt=\"\" srcset=\"\"> -->\r\n <div class=\"mobileshow\">\r\n <h3 class=\"title1 pt-4\">AI co-pilot to boost your sales conversion</h3>\r\n <p class=\"subtext pb-4\">Join the leading global brands in understanding footfall and shopper behavior to\r\n boost\r\n sales.</p>\r\n\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/Lenskart-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/nykaa-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/giva-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/Duroflex-logo.svg\" alt=\"\">\r\n </div>\r\n <div>\r\n <img class=\"imgsrc\" src=\"./assets/tango/Icons/loccitone-logo.svg\" alt=\"\">\r\n </div>\r\n <div class=\"me-20\">\r\n <h4 style=\"font-size: 20px; \r\n font-weight: 500;\r\n color: #7E8299;\">30 +</h4>\r\n </div>\r\n\r\n </div>\r\n <div class=\"mt-12\">\r\n <h6 class=\"card-label mb-7\">Create an Account</h6>\r\n <form [formGroup]=\"aboutForm\" novalidate=\"novalidate\">\r\n <div class=\"row px-0\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"Brand\" class=\"form-label\">Brand Name <span class=\"alert-required\">*</span></label>\r\n <input (blur)=\"onClientNameBlur()\" (input)=\"isClientNameTaken = 0\" formControlName=\"clientName\" type=\"type\" class=\"form-control\" id=\"Brand\" [ngClass]=\"{ 'is-invalid': aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('required') }\" >\r\n \r\n \r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('minlength')\">\r\n Brand name must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('maxlength')\">\r\n Brand name must be maximum of 100 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('clientName')?.touched && aboutForm.get('clientName')?.hasError('required')\">\r\n Brand name is required\r\n </small>\r\n <small \r\n *ngIf=\"isClientNameTaken\">\r\n Brand name is already taken\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row px-0\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"firstname\" class=\"form-label\">First Name <span class=\"alert-required\">*</span></label>\r\n <input formControlName=\"firstName\" type=\"type\" class=\"form-control\" id=\"firstname\" [ngClass]=\"{ 'is-invalid': aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('required') }\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('minlength')\">\r\n First name must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('maxlength')\">\r\n First name must be maximum of 50 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('firstName')?.touched && aboutForm.get('firstName')?.hasError('required')\">\r\n First name is required\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"lastname\" class=\"form-label\">Last Name</label>\r\n <input formControlName=\"lastName\" type=\"type\" class=\"form-control\" id=\"lastname\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('lastName')?.touched && aboutForm.get('lastName')?.hasError('minlength')\">\r\n Last name must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('lastName')?.touched && aboutForm.get('lastName')?.hasError('maxlength')\">\r\n Last name must be maximum of 50 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('lastName')?.touched && aboutForm.get('lastName')?.hasError('required')\">\r\n Last name is required\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"email\" class=\"form-label\">Corporate Email <span class=\"alert-required\">*</span></label>\r\n <input (blur)=\"onEmailBlur()\" (input)=\"isEmailTaken = 0\" formControlName=\"corporateEmail\" type=\"email\" class=\"form-control\" id=\"email\" [ngClass]=\"{ 'is-invalid': aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('required') }\"\r\n autocomplete=\"off\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('minlength')\">\r\n Corporate email must be minimum of 3 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('maxlength')\">\r\n Corporate email must be maximum of 50 letters\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('required')\">\r\n Corporate email is required\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"aboutForm.get('corporateEmail')?.touched && aboutForm.get('corporateEmail')?.hasError('pattern')\">\r\n Enter a valid email\r\n </small>\r\n <small \r\n *ngIf=\"isEmailTaken\">\r\n Email is already taken\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n\r\n <label for=\"phonenumber\" class=\"form-label\">Phone number <span class=\"alert-required\">*</span></label>\r\n <div class=\"input-group mb-3\">\r\n <div class=\"input-group-append\">\r\n <select formControlName=\"countryCode\" class=\"form-select select-radius ms-4 me-5\" [ngClass]=\"{ 'country-is-invalid': aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required') }\"\r\n id=\"inputGroupSelect01\">\r\n <option class=\"mx-2\" value=\"+91\">In</option>\r\n <option class=\"mx-2\" value=\"+93\">Af</option>\r\n <option class=\"mx-2\" value=\"+355\">Al</option>\r\n </select>\r\n </div>\r\n <input [value]=\"aboutForm.get('countryCode')?.value\" type=\"text\" [ngClass]=\"{ 'code-is-invalid': aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required') }\"\r\n class=\"form-control border-disabled\" readonly>\r\n <input (blur)=\"onMobileNumberBlur()\" (input)=\"isMobileTaken = 0\" formControlName=\"mobileNumber\" type=\"type\" class=\"form-control border-new\" [ngClass]=\"{ 'mobile-is-invalid is-invalid': aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required') }\"\r\n id=\"phonenumber\" autocomplete=\"off\">\r\n </div>\r\n <small \r\n *ngIf=\"aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('required')\">\r\n Phone number is required\r\n </small>\r\n <small \r\n *ngIf=\"aboutForm.get('mobileNumber')?.touched && aboutForm.get('mobileNumber')?.hasError('pattern')\">\r\n Enter a valid phone number\r\n </small>\r\n <small \r\n *ngIf=\"isMobileTaken\">\r\n Mobile number already taken\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"password\" class=\"form-label\">Password <span class=\"alert-required\">*</span></label>\r\n <input (input)=\"onPasswordChange($event)\" formControlName=\"password\" type=\"password\" [ngClass]=\"{ 'is-invalid': aboutForm.get('password')?.touched && aboutForm.get('password')?.hasError('required') }\"\r\n class=\"form-control\" id=\"password\" autocomplete=\"new-password\">\r\n\r\n <div class=\"progressbar-wrapper\">\r\n <span [style.width]=\"passwordStrength\"\r\n [ngStyle]=\"{'background-color': passwordStrength === '0%' ? '' : (passwordStrength === '25%' ? 'red' : (passwordStrength === '50%' ? 'orange': (passwordStrength === '75%' ? 'yellow' : (passwordStrength === '100%' ? 'green' : '')))) }\"\r\n class=\"progressbar-inner\"></span>\r\n </div>\r\n <div>\r\n <small \r\n *ngIf=\"aboutForm.get('password')?.hasError('required') && aboutForm.get('password')?.touched\">Password is required</small>\r\n <small \r\n *ngIf=\"aboutForm.get('password')?.hasError('pattern')\">Use\r\n 8 or more characters with a mix of letters, numbers & symbols.</small>\r\n <small \r\n *ngIf=\"aboutForm.get('password')?.touched && aboutForm.get('password')?.invalid\"></small>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"confirm\" class=\"form-label\">Confirm Password <span class=\"alert-required\">*</span></label>\r\n <input (input)=\"onConfirmPasswordChange($event)\" formControlName=\"confirmPassword\" type=\"password\" class=\"form-control\" [ngClass]=\"{ 'is-invalid': aboutForm.get('confirmPassword')?.touched && aboutForm.get('confirmPassword')?.hasError('required') }\"\r\n id=\"confirm\">\r\n <div class=\"progressbar-wrapper\">\r\n <span [style.width]=\"confirmPasswordStrength\"\r\n [ngStyle]=\"{'background-color': confirmPasswordStrength === '0%' ? '' : (confirmPasswordStrength === '25%' ? 'red' : (confirmPasswordStrength === '50%' ? 'orange': (confirmPasswordStrength === '75%' ? 'yellow' : (confirmPasswordStrength === '100%' ? 'green' : '')))) }\"\r\n class=\"progressbar-inner\"></span>\r\n </div>\r\n <div>\r\n <small *ngIf=\"aboutForm.get('confirmPassword')?.hasError('pattern')\">The password must contain atleast one capital letter and number.</small>\r\n <small \r\n *ngIf=\"aboutForm.get('confirmPassword')?.touched && aboutForm.get('confirmPassword')?.invalid\">Password\r\n does not match</small>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <!-- <ng-container *ngIf=\"currentStep$.value == 1\"> -->\r\n <div class=\"text-end\">\r\n <button [disabled]=\"aboutForm.invalid || isMobileTaken || isEmailTaken || isClientNameTaken\" type=\"button\" class=\"btn btn-lg btn-primary\" (click)=\"nextStep()\">\r\n <span class=\"indicator-label px-5\">\r\n <ng-container>\r\n Next <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M7.5 15L12.5 10L7.5 5\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-container>\r\n\r\n </span>\r\n </button>\r\n </div>\r\n <!-- </ng-container> -->\r\n </div>\r\n\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n</div>", styles: [".logo{width:16%;height:73px!important;margin-top:150px;margin-left:44%}.heading{margin-left:41%}.title1{color:var(--Gray-700, #344054)!important;font-size:24px!important;font-weight:600!important;line-height:32px}.subtext{color:var(--Gray-400, #98A2B3)!important;font-size:18px!important;font-weight:500!important;line-height:28px}.submit{padding-bottom:2%}.point{background:#ddd;border-radius:2px;display:inline-block;height:5px;width:85px}.form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1rem;font-weight:500;line-height:1}input,button,select,optgroup,textarea{margin:5px 0}.form-control{display:block;font-size:1.1rem;font-weight:600;line-height:1.5;color:#181c32;-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-select{font-size:1.1rem;font-weight:600;line-height:2.35;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important}.form-label{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.card-label{font-weight:600;font-size:20px}.me-n2{margin-right:3.5rem!important}.font{font-family:Inter!important}.phone{flex:0 0 auto;width:62.666667%}@media (min-width: 1024px) and (max-width: 1299px){.title1{text-shadow:1px 1px 1px #096dd7;font-weight:600;font-size:21px!important;line-height:34px;text-align:center;color:#464e5f}.subtext{font-family:Inter;font-size:18px;font-weight:600;line-height:37px;letter-spacing:0em;text-align:center;color:#7e8299}.imgsrc{width:100px}}@media (min-width: 1300px) and (max-width: 1400px){.title1{text-shadow:1px 1px 1px #096dd7;font-weight:600;font-size:21px!important;line-height:34px;text-align:center;color:#464e5f}.subtext{font-family:Inter;font-size:18px;font-weight:600;line-height:37px;letter-spacing:0em;text-align:center;color:#7e8299}.imgsrc{width:100px}}small{color:var(--Gray-500, #667085)!important;font-size:10px!important;font-style:normal;font-weight:400!important;line-height:normal;text-transform:capitalize}.border-new{border-radius:0 8px 8px 0!important;border-left:none!important}.border-disabled{padding:5px 0;max-width:10%;border-radius:0!important;border-right:none!important;border-left:none!important}.select-radius{padding:5px 0 5px 15px;border-radius:8px 0 0 8px!important;border-right:none!important}.progressbar-wrapper{height:4px;width:100%;background-color:#f2f4f7;border-radius:4px;position:relative}.progressbar-inner{height:100%;position:absolute;border-radius:4px}.invalid-feedback,small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;text-transform:capitalize}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.mobile-is-invalid{border-radius:0 8px 8px 0!important;border-left:none!important}.code-is-invalid{padding:5px 0;max-width:10%;border-radius:0!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;border-right:none!important;border-left:none!important}.country-is-invalid{padding:5px 0 5px 15px;border-radius:8px 0 0 8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;border-right:none!important}\n"] }]
171
+ }], ctorParameters: () => [{ type: i1.ConversionService }, { type: i2.FormBuilder }, { type: i3.AuthService }, { type: i0.ChangeDetectorRef }] });
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcDEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1zaWdudXAvc3RlcC9zdGVwMS9zdGVwMS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLXNpZ251cC9zdGVwL3N0ZXAxL3N0ZXAxLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBd0QsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU9sRyxNQUFNLE9BQU8sY0FBYztJQU9MO0lBQTBDO0lBQXlCO0lBQWlDO0lBTnhILFNBQVMsQ0FBVztJQUNwQixnQkFBZ0IsR0FBVyxJQUFJLENBQUE7SUFDL0IsdUJBQXVCLEdBQVcsSUFBSSxDQUFBO0lBQ3RDLGlCQUFpQixDQUFNO0lBQ3ZCLFlBQVksQ0FBTTtJQUNsQixhQUFhLENBQU07SUFDbkIsWUFBb0IsYUFBZ0MsRUFBVSxFQUFlLEVBQVUsV0FBdUIsRUFBVSxFQUFvQjtRQUF4SCxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUMxSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDakIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzdCLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO29CQUNsQyxVQUFV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U0FBUyxDQUFDO1lBQ3BGLElBQUksRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7Z0JBQ3JDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDekIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25GLElBQUksRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7Z0JBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDekIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNILENBQUM7SUFJRixRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUE7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQWhLVSxjQUFjOzJGQUFkLGNBQWMsaURDVDNCLDY2ZUFpTk07OzJGRHhNTyxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29udmVyc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdGVwMScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAxLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3RlcDEuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdGVwMUNvbXBvbmVudCB7XHJcbiAgYWJvdXRGb3JtOiBGb3JtR3JvdXBcclxuICBwYXNzd29yZFN0cmVuZ3RoOnN0cmluZyAgPSAnMCUnXHJcbiAgY29uZmlybVBhc3N3b3JkU3RyZW5ndGg6c3RyaW5nICA9ICcwJSdcclxuICBpc0NsaWVudE5hbWVUYWtlbjogYW55O1xyXG4gIGlzRW1haWxUYWtlbjogYW55O1xyXG4gIGlzTW9iaWxlVGFrZW46IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNldHRlcnNlcnZpY2U6IENvbnZlcnNpb25TZXJ2aWNlLCBwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBhdXRoU2VydmljZTpBdXRoU2VydmljZSwgcHJpdmF0ZSBjZDpDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpXHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybSgpIHtcclxuICAgIHRoaXMuYWJvdXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGNsaWVudE5hbWU6IFsnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxyXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCksXHJcbiAgICAgIF0pLFxyXG4gICAgXSxcclxuICAgICAgZmlyc3ROYW1lOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcclxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCksXHJcbiAgICAgIF0pLFxyXG4gICAgICBdLFxyXG4gICAgICBsYXN0TmFtZTogWycnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgIC8vIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksXHJcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApLFxyXG4gICAgICBdKSxcclxuICAgICAgXSxcclxuICAgICAgY29ycG9yYXRlRW1haWw6IFsnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bYS16QS1aMC05XSsoWy4tX10/W2EtekEtWjAtOV0rKSpAW2EtekEtWjAtOV0rKFsuLV9dP1thLXpBLVpdKykqWy5dezF9W2EtekEtWl17Mix9JFwiKSxcclxuICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcclxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApLFxyXG4gICAgICBdKSxcclxuICAgICAgXSxcclxuICAgICAgY291bnRyeUNvZGU6IFsnKzkxJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgIF0pLFxyXG4gICAgICBdLFxyXG4gICAgICBtb2JpbGVOdW1iZXI6IFsnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihcIl5bNS05XVswLTldezl9JFwiKVxyXG4gICAgICBdKSxcclxuICAgICAgXSxcclxuICAgICAgcGFzc3dvcmQ6IFsnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxyXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMyMCksXHJcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKD89LipbQS1aXSkoPz0uKlxcZCkuezgsfSQvKSxcclxuICAgICAgXSksXHJcbiAgICAgIF0sXHJcbiAgICAgIGNvbmZpcm1QYXNzd29yZDogWycnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXHJcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIwKSxcclxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oL14oPz0uKltBLVpdKSg/PS4qXFxkKS57OCx9JC8pLFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVBcmVFcXVhbC5iaW5kKHRoaXMpLFxyXG4gICAgICBdKSxcclxuICAgICAgICAsXHJcbiAgICAgIF0sXHJcblxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVBcmVFcXVhbChmaWVsZENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnk+KSB7XHJcbiAgICByZXR1cm4gZmllbGRDb250cm9sPy52YWx1ZSA9PT0gdGhpcy5hYm91dEZvcm0/LmdldCgncGFzc3dvcmQnKSEudmFsdWUgPyBudWxsIDoge1xyXG4gICAgICBOb3RFcXVhbDogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuIGFzeW5jIGNoZWNrUGFzc3dvcmRTdHJlbmd0aCh2YWw6c3RyaW5nKXsgIFxyXG4gICAgY29uc3QgbnVtYmVycyA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XHJcbiAgICAgIGlmKC9bMC05XS9nLnRlc3QodmFsKSl7XHJcbiAgICAgICAgcmVzb2x2ZSh7bWVzYWdlOidudW1iZXJzIHBhc3NlZCd9KVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZWplY3Qoe21lc2FnZTonbnVtYmVycyBmYWlsZWQnfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGNvbnN0IGNhcGl0YWwgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xyXG4gICAgICBpZigvW2Etel0vZy50ZXN0KHZhbCkpe1xyXG4gICAgICAgIHJlc29sdmUoe21lc2FnZTonY2FwaXRhbCBwYXNzZWQnfSlcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcmVqZWN0KHttZXNhZ2U6J2NhcGl0YWwgZmFpbGVkJ30pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBjb25zdCBzbWFsbCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XHJcbiAgICAgIGlmKC9bQS1aXS9nLnRlc3QodmFsKSl7XHJcbiAgICAgICAgcmVzb2x2ZSh7bWVzYWdlOidzbWFsbCBwYXNzZWQnfSlcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcmVqZWN0KHttZXNhZ2U6J3NtYWxsIGZhaWxlZCd9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgY29uc3QgbGVuZ3RoID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcclxuICAgICAgaWYodmFsLmxlbmd0aCA+IDcpe1xyXG4gICAgICAgIHJlc29sdmUoe21lc2FnZTonbGVuZ3RoIHBhc3NlZCd9KVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZWplY3Qoe21lc2FnZTonbGVuZ3RoIGZhaWxlZCd9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIFxyXG4gIGNvbnN0IHBlcmNlbnRhZ2UgPSAgYXdhaXQgKFByb21pc2UgYXMgYW55KS5hbGxTZXR0bGVkKFtudW1iZXJzLCBjYXBpdGFsLCBzbWFsbCwgbGVuZ3RoXSlcclxuICAgIC50aGVuKChyZXM6YW55KT0+e1xyXG4gICAgICB2YXIgcGVyY2VudGFnZSA9IDBcclxuICAgICAgcmVzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoZWxlbWVudC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKXtcclxuICAgICAgICAgIHBlcmNlbnRhZ2UrPTI1XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHBlcmNlbnRhZ2VcclxuICAgIH0pICAgIFxyXG5cclxuICAgIHJldHVybiBwZXJjZW50YWdlICsgJyUnXHJcbiAgfVxyXG5cclxuIGFzeW5jIG9uUGFzc3dvcmRDaGFuZ2UoZXZlbnQ6YW55KXtcclxuICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoID0gYXdhaXQgdGhpcy5jaGVja1Bhc3N3b3JkU3RyZW5ndGgoZXZlbnQudGFyZ2V0LnZhbHVlKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Db25maXJtUGFzc3dvcmRDaGFuZ2UoZXZlbnQ6YW55KXtcclxuICAgIHRoaXMuY29uZmlybVBhc3N3b3JkU3RyZW5ndGggPSBhd2FpdCB0aGlzLmNoZWNrUGFzc3dvcmRTdHJlbmd0aChldmVudC50YXJnZXQudmFsdWUpXHJcbiAgIH1cclxuXHJcbiAgIG9uQ2xpZW50TmFtZUJsdXIoKXtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuaXNDbGllbnRuYW1lVGFrZW4odGhpcy5hYm91dEZvcm0/LmdldCgnY2xpZW50TmFtZScpPy52YWx1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzKT0+e1xyXG4gICAgICAgIHRoaXMuaXNDbGllbnROYW1lVGFrZW4gPSByZXMuZGF0YS5pc0V4aXN0c1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgIH1cclxuXHJcbiAgIG9uRW1haWxCbHVyKCl7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmlzRW1haWxUYWtlbih0aGlzLmFib3V0Rm9ybT8uZ2V0KCdjb3Jwb3JhdGVFbWFpbCcpPy52YWx1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoocmVzKT0+e1xyXG4gICAgICAgIHRoaXMuaXNFbWFpbFRha2VuID0gcmVzLmRhdGEuaXNFeGlzdHNcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICB9XHJcblxyXG4gICBvbk1vYmlsZU51bWJlckJsdXIoKXtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuaXNNb2JpbGVUYWtlbih0aGlzLmFib3V0Rm9ybT8uZ2V0KCdtb2JpbGVOdW1iZXInKT8udmFsdWUpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlcyk9PntcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVGFrZW4gPSByZXMuZGF0YS5pc0V4aXN0c1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgIH1cclxuXHJcblxyXG5cclxuICBuZXh0U3RlcCgpIHtcclxuICAgIGRlbGV0ZSB0aGlzLmFib3V0Rm9ybS52YWx1ZS5jb25maXJtUGFzc3dvcmRcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuYWJvdXRGb3JtRGF0YS5uZXh0KHRoaXMuYWJvdXRGb3JtLnZhbHVlKVxyXG4gICAgdGhpcy5zZXR0ZXJzZXJ2aWNlLmNvbXBsZXRlU3RlcHBlcih7IHN0ZXA6IDIgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIG10LTEwIG14LTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgcHgtMTAgbXgtNSAgbXktN1wiPlxyXG4gICAgICAgIDwhLS0gPGRpdj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwiYnViYmxlXCIgc3JjPVwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXNzZXRzL0ljb25zL1NpZ251cC1idWJibGUtaWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgYWx0PVwiXCIgc3Jjc2V0PVwiXCI+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGVzaG93XCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cInRpdGxlMSBwdC00XCI+QUkgY28tcGlsb3QgdG8gYm9vc3QgeW91ciBzYWxlcyBjb252ZXJzaW9uPC9oMz5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzdWJ0ZXh0IHBiLTRcIj5Kb2luIHRoZSBsZWFkaW5nIGdsb2JhbCBicmFuZHMgaW4gdW5kZXJzdGFuZGluZyBmb290ZmFsbCBhbmQgc2hvcHBlciBiZWhhdmlvciB0b1xyXG4gICAgICAgICAgICAgICAgYm9vc3RcclxuICAgICAgICAgICAgICAgIHNhbGVzLjwvcD5cclxuXHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWdzcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9MZW5za2FydC1sb2dvLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWdzcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9ueWthYS1sb2dvLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWdzcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9naXZhLWxvZ28uc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZ3NyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL0R1cm9mbGV4LWxvZ28uc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZ3NyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL2xvY2NpdG9uZS1sb2dvLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDQgc3R5bGU9XCJmb250LXNpemU6IDIwcHg7IFxyXG4gICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICBjb2xvcjogIzdFODI5OTtcIj4zMCArPC9oND5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1sYWJlbCBtYi03XCI+Q3JlYXRlIGFuIEFjY291bnQ8L2g2PlxyXG4gICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhYm91dEZvcm1cIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiQnJhbmRcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5CcmFuZCBOYW1lIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKGJsdXIpPVwib25DbGllbnROYW1lQmx1cigpXCIgKGlucHV0KT1cImlzQ2xpZW50TmFtZVRha2VuID0gMFwiIGZvcm1Db250cm9sTmFtZT1cImNsaWVudE5hbWVcIiB0eXBlPVwidHlwZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJCcmFuZFwiIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBhYm91dEZvcm0uZ2V0KCdjbGllbnROYW1lJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnY2xpZW50TmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKSB9XCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnY2xpZW50TmFtZScpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ2NsaWVudE5hbWUnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmQgbmFtZSBtdXN0IGJlIG1pbmltdW0gb2YgMyBsZXR0ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhYm91dEZvcm0uZ2V0KCdjbGllbnROYW1lJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnY2xpZW50TmFtZScpPy5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuZCBuYW1lIG11c3QgYmUgbWF4aW11bSBvZiAxMDAgbGV0dGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnY2xpZW50TmFtZScpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ2NsaWVudE5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuZCBuYW1lIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNDbGllbnROYW1lVGFrZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuZCBuYW1lIGlzIGFscmVhZHkgdGFrZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlyc3RuYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Rmlyc3QgTmFtZSAgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiB0eXBlPVwidHlwZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmaXJzdG5hbWVcIiBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogYWJvdXRGb3JtLmdldCgnZmlyc3ROYW1lJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnZmlyc3ROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnZmlyc3ROYW1lJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnZmlyc3ROYW1lJyk/Lmhhc0Vycm9yKCdtaW5sZW5ndGgnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcnN0IG5hbWUgbXVzdCBiZSBtaW5pbXVtIG9mIDMgbGV0dGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnZmlyc3ROYW1lJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnZmlyc3ROYW1lJyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcnN0IG5hbWUgbXVzdCBiZSBtYXhpbXVtIG9mIDUwIGxldHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFib3V0Rm9ybS5nZXQoJ2ZpcnN0TmFtZScpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ2ZpcnN0TmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcnN0IG5hbWUgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibGFzdG5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5MYXN0IE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCIgdHlwZT1cInR5cGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwibGFzdG5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnbGFzdE5hbWUnKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdsYXN0TmFtZScpPy5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXN0IG5hbWUgbXVzdCBiZSBtaW5pbXVtIG9mIDMgbGV0dGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnbGFzdE5hbWUnKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdsYXN0TmFtZScpPy5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXN0IG5hbWUgbXVzdCBiZSBtYXhpbXVtIG9mIDUwIGxldHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFib3V0Rm9ybS5nZXQoJ2xhc3ROYW1lJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnbGFzdE5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXN0IG5hbWUgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Db3Jwb3JhdGUgRW1haWwgIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKGJsdXIpPVwib25FbWFpbEJsdXIoKVwiIChpbnB1dCk9XCJpc0VtYWlsVGFrZW4gPSAwXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29ycG9yYXRlRW1haWxcIiB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogYWJvdXRGb3JtLmdldCgnY29ycG9yYXRlRW1haWwnKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdjb3Jwb3JhdGVFbWFpbCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCAgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFib3V0Rm9ybS5nZXQoJ2NvcnBvcmF0ZUVtYWlsJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnY29ycG9yYXRlRW1haWwnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycG9yYXRlIGVtYWlsIG11c3QgYmUgbWluaW11bSBvZiAzIGxldHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFib3V0Rm9ybS5nZXQoJ2NvcnBvcmF0ZUVtYWlsJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnY29ycG9yYXRlRW1haWwnKT8uaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycG9yYXRlIGVtYWlsIG11c3QgYmUgbWF4aW11bSBvZiA1MCBsZXR0ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhYm91dEZvcm0uZ2V0KCdjb3Jwb3JhdGVFbWFpbCcpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ2NvcnBvcmF0ZUVtYWlsJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycG9yYXRlIGVtYWlsIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhYm91dEZvcm0uZ2V0KCdjb3Jwb3JhdGVFbWFpbCcpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ2NvcnBvcmF0ZUVtYWlsJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlciBhIHZhbGlkIGVtYWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFbWFpbFRha2VuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1haWwgaXMgYWxyZWFkeSB0YWtlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgY29sLXhsLTYgY29sLXh4bC02IG1iLTdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVudW1iZXJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaG9uZSBudW1iZXIgIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb3VudHJ5Q29kZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3Qgc2VsZWN0LXJhZGl1cyBtcy00IG1lLTVcIiBbbmdDbGFzc109XCJ7ICdjb3VudHJ5LWlzLWludmFsaWQnOiBhYm91dEZvcm0uZ2V0KCdtb2JpbGVOdW1iZXInKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdtb2JpbGVOdW1iZXInKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImlucHV0R3JvdXBTZWxlY3QwMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBjbGFzcz1cIm14LTJcIiB2YWx1ZT1cIis5MVwiPkluPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGNsYXNzPVwibXgtMlwiIHZhbHVlPVwiKzkzXCI+QWY8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gY2xhc3M9XCJteC0yXCIgdmFsdWU9XCIrMzU1XCI+QWw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFt2YWx1ZV09XCJhYm91dEZvcm0uZ2V0KCdjb3VudHJ5Q29kZScpPy52YWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgIFtuZ0NsYXNzXT1cInsgJ2NvZGUtaXMtaW52YWxpZCc6IGFib3V0Rm9ybS5nZXQoJ21vYmlsZU51bWJlcicpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ21vYmlsZU51bWJlcicpPy5oYXNFcnJvcigncmVxdWlyZWQnKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm9yZGVyLWRpc2FibGVkXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IChibHVyKT1cIm9uTW9iaWxlTnVtYmVyQmx1cigpXCIgKGlucHV0KT1cImlzTW9iaWxlVGFrZW4gPSAwXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9iaWxlTnVtYmVyXCIgdHlwZT1cInR5cGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBib3JkZXItbmV3XCIgIFtuZ0NsYXNzXT1cInsgJ21vYmlsZS1pcy1pbnZhbGlkIGlzLWludmFsaWQnOiBhYm91dEZvcm0uZ2V0KCdtb2JpbGVOdW1iZXInKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdtb2JpbGVOdW1iZXInKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicGhvbmVudW1iZXJcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnbW9iaWxlTnVtYmVyJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnbW9iaWxlTnVtYmVyJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmUgbnVtYmVyIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgnbW9iaWxlTnVtYmVyJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgnbW9iaWxlTnVtYmVyJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlciBhIHZhbGlkIHBob25lIG51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTW9iaWxlVGFrZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2JpbGUgbnVtYmVyIGFscmVhZHkgdGFrZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QYXNzd29yZCAgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAoaW5wdXQpPVwib25QYXNzd29yZENoYW5nZSgkZXZlbnQpXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIiAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IGFib3V0Rm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnRvdWNoZWQgJiYgYWJvdXRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJwcm9ncmVzc2Jhci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlLndpZHRoXT1cInBhc3N3b3JkU3RyZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOiBwYXNzd29yZFN0cmVuZ3RoID09PSAnMCUnID8gJycgOiAocGFzc3dvcmRTdHJlbmd0aCA9PT0gJzI1JScgPyAncmVkJyA6IChwYXNzd29yZFN0cmVuZ3RoID09PSAnNTAlJyA/ICdvcmFuZ2UnOiAocGFzc3dvcmRTdHJlbmd0aCA9PT0gJzc1JScgPyAneWVsbG93JyA6IChwYXNzd29yZFN0cmVuZ3RoID09PSAnMTAwJScgPyAnZ3JlZW4nIDogJycpKSkpIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzYmFyLWlubmVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFib3V0Rm9ybS5nZXQoJ3Bhc3N3b3JkJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGFib3V0Rm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnRvdWNoZWRcIj5QYXNzd29yZCBpcyByZXF1aXJlZDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWJvdXRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IG9yIG1vcmUgY2hhcmFjdGVycyB3aXRoIGEgbWl4IG9mIGxldHRlcnMsIG51bWJlcnMgJiBzeW1ib2xzLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhYm91dEZvcm0uZ2V0KCdwYXNzd29yZCcpPy50b3VjaGVkICYmIGFib3V0Rm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LmludmFsaWRcIj48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY29uZmlybVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbmZpcm0gUGFzc3dvcmQgIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKGlucHV0KT1cIm9uQ29uZmlybVBhc3N3b3JkQ2hhbmdlKCRldmVudClcIiBmb3JtQ29udHJvbE5hbWU9XCJjb25maXJtUGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBhYm91dEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb25maXJtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NiYXItd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZS53aWR0aF09XCJjb25maXJtUGFzc3dvcmRTdHJlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGNvbmZpcm1QYXNzd29yZFN0cmVuZ3RoID09PSAnMCUnID8gJycgOiAoY29uZmlybVBhc3N3b3JkU3RyZW5ndGggPT09ICcyNSUnID8gJ3JlZCcgOiAoY29uZmlybVBhc3N3b3JkU3RyZW5ndGggPT09ICc1MCUnID8gJ29yYW5nZSc6IChjb25maXJtUGFzc3dvcmRTdHJlbmd0aCA9PT0gJzc1JScgPyAneWVsbG93JyA6IChjb25maXJtUGFzc3dvcmRTdHJlbmd0aCA9PT0gJzEwMCUnID8gJ2dyZWVuJyA6ICcnKSkpKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzc2Jhci1pbm5lclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJhYm91dEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlRoZSBwYXNzd29yZCBtdXN0IGNvbnRhaW4gYXRsZWFzdCBvbmUgY2FwaXRhbCBsZXR0ZXIgYW5kIG51bWJlci48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhYm91dEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8udG91Y2hlZCAmJiBhYm91dEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaW52YWxpZFwiPlBhc3N3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IG1hdGNoPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSA9PSAxXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiYWJvdXRGb3JtLmludmFsaWQgfHwgaXNNb2JpbGVUYWtlbiB8fCBpc0VtYWlsVGFrZW4gfHwgaXNDbGllbnROYW1lVGFrZW5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxnIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm5leHRTdGVwKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmRpY2F0b3ItbGFiZWwgcHgtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0IDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuNSAxNUwxMi41IDEwTDcuNSA1XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=