@idea-ionic/auth 8.2.5 → 8.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/public-api.mjs +11 -3
- package/esm2022/src/auth.routes.mjs +20 -0
- package/esm2022/src/confirmPassword.page.mjs +217 -7
- package/esm2022/src/forgotPassword.page.mjs +134 -7
- package/esm2022/src/mfaChallenge.page.mjs +118 -7
- package/esm2022/src/newPassword.page.mjs +134 -7
- package/esm2022/src/passwordPolicy.component.mjs +7 -7
- package/esm2022/src/resendLink.page.mjs +129 -7
- package/esm2022/src/setupMFA/setupMFAButton.component.mjs +25 -8
- package/esm2022/src/setupMFA/setupMFAModal.component.mjs +105 -7
- package/esm2022/src/setupMFA.page.mjs +64 -8
- package/esm2022/src/signIn.page.mjs +341 -7
- package/esm2022/src/signUp.page.mjs +272 -7
- package/fesm2022/idea-ionic-auth.mjs +1510 -113
- package/fesm2022/idea-ionic-auth.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +10 -2
- package/src/auth.routes.d.ts +2 -0
- package/src/confirmPassword.page.d.ts +1 -1
- package/src/forgotPassword.page.d.ts +1 -1
- package/src/mfaChallenge.page.d.ts +1 -1
- package/src/newPassword.page.d.ts +1 -1
- package/src/passwordPolicy.component.d.ts +1 -1
- package/src/resendLink.page.d.ts +1 -1
- package/src/setupMFA/setupMFAButton.component.d.ts +3 -3
- package/src/setupMFA/setupMFAModal.component.d.ts +3 -3
- package/src/setupMFA.page.d.ts +1 -1
- package/src/signIn.page.d.ts +1 -1
- package/src/signUp.page.d.ts +1 -1
- package/esm2022/src/auth.module.mjs +0 -84
- package/esm2022/src/setupMFA/setupMFA.module.mjs +0 -22
- package/src/auth.module.d.ts +0 -21
- package/src/setupMFA/setupMFA.module.d.ts +0 -12
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
1
2
|
import { Component, inject } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { NavController, IonItem, IonContent, IonCard, IonCardContent, IonImg, IonCardHeader, IonCardTitle, IonCardSubtitle, IonLabel, IonIcon, IonRow, IonCol, IonText, IonButton, IonInput, IonCheckbox } from '@ionic/angular/standalone';
|
|
3
5
|
import { Browser } from '@capacitor/browser';
|
|
4
|
-
import { IDEAEnvironment, IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';
|
|
6
|
+
import { IDEAEnvironment, IDEAMessageService, IDEALoadingService, IDEATranslationsService, IDEATranslatePipe } from '@idea-ionic/common';
|
|
5
7
|
import { IDEAAuthService, LoginOutcomeActions } from './auth.service';
|
|
6
8
|
import * as i0 from "@angular/core";
|
|
7
9
|
import * as i1 from "@angular/forms";
|
|
8
|
-
import * as i2 from "@ionic/angular";
|
|
9
|
-
import * as i3 from "@idea-ionic/common";
|
|
10
10
|
export class IDEASignInPage {
|
|
11
11
|
constructor() {
|
|
12
12
|
this._env = inject(IDEAEnvironment);
|
|
@@ -73,10 +73,344 @@ export class IDEASignInPage {
|
|
|
73
73
|
await Browser.open({ url });
|
|
74
74
|
}
|
|
75
75
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEASignInPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
76
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: IDEASignInPage, selector: "idea-sign-in", ngImport: i0, template: "<ion-content>\n @if (newAccountRegistered) {\n <ion-card color=\"warning\">\n <ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>\n </ion-card>\n }\n <form class=\"flexBox\">\n <div>\n <ion-card class=\"authCard\">\n <ion-img\n [title]=\"'IDEA_AUTH.SERVICE_LOGO' | translate\"\n [src]=\"darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'\"\n />\n <ion-card-header>\n @if (title) {\n <ion-card-title color=\"primary\">{{ title }}</ion-card-title>\n } @if (translationExists('IDEA_VARIABLES.TAGLINE')) {\n <ion-card-subtitle> {{ 'IDEA_VARIABLES.TAGLINE' | translate }} </ion-card-subtitle>\n }\n </ion-card-header>\n <ion-card-content>\n @if (errorMsg) {\n <p class=\"errorBox\"><b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}</p>\n }\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\" />\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"login()\"\n />\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\" />\n </ion-label>\n <ion-input\n id=\"current-password\"\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocomplete=\"current-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.PASSWORD_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"login()\"\n />\n </ion-item>\n @if (!registrationPossible && (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') ||\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))) {\n <ion-row class=\"agreementsAcceptanceRow\">\n <ion-col>\n <ion-checkbox size=\"small\" [ngModelOptions]=\"{ standalone: true }\" [(ngModel)]=\"agreementsCheck\" />\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}: @if\n (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')) {\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n } @if ( translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') &&\n translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') ) {\n <ion-text> & </ion-text>\n } @if (translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')) {\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n }\n </ion-col>\n </ion-row>\n }\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.SIGN_IN_HINT' | translate\"\n (click)=\"login()\"\n >\n {{ 'IDEA_AUTH.SIGN_IN' | translate }}\n </ion-button>\n @if (registrationPossible) {\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"goToRegistration()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n }\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}\n </ion-button>\n @if (hasIntroPage) {\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n color=\"medium\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate\"\n (click)=\"goToIntro()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}\n </ion-button>\n }\n </ion-card-content>\n </ion-card>\n @if (website) {\n <ion-img\n class=\"ideaLogo\"\n [src]=\"darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'\"\n [title]=\"'IDEA_AUTH.IDEA_TAGLINE' | translate\"\n (click)=\"openLink(website)\"\n />\n }\n </div>\n </form>\n</ion-content>\n", styles: [".flexBox{background:var(--idea-auth-background-color, var(--ion-color-white-shade))}.authCard{min-width:400px;max-width:550px;margin:0 10px;padding:20px;background-color:var(--idea-auth-card-background-color, var(--ion-color-white));border:1px solid var(--idea-auth-card-border-color, var(--ion-color-light));border-radius:10px;box-shadow:none;text-align:center}.authCard ion-img{width:150px;display:block;margin:0 auto}.authCard ion-card-title{font-family:auth-title;font-size:3em}.authCard ion-card-subtitle{font-family:auth-title;font-size:1.2em}.authCard ion-card-content{padding-top:16px}.authCard ion-card-content .errorBox{padding-left:10px;margin-bottom:20px;text-align:left;border-left:2px solid var(--ion-color-danger)}.authCard ion-card-content ion-item{--ion-item-background: var(--idea-auth-card-background-color, var(--ion-color-white));--border-color: var(--idea-auth-card-border-color, var(--ion-color-light))}.authCard ion-card-content ion-label[position=inline] ion-icon{padding-top:4px;padding-right:5px;font-size:1.3em}.authCard ion-card-content .agreementsAcceptanceRow{margin-top:15px;font-size:.9em}.authCard ion-card-content .agreementsAcceptanceRow ion-checkbox{vertical-align:bottom;margin-right:3px}.authCard ion-card-content ion-button:not([slot=end]){margin-top:15px}.authCard ion-card-content .smallCaseButton{text-transform:none;letter-spacing:normal;font-size:1em}@media only screen and (max-width: 500px){.authCard{background-color:transparent;border:none}}.ideaLogo{width:65px;margin:40px auto 0;cursor:pointer}.passwordPolicyPopover{--width: 350px}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i2.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }] }); }
|
|
76
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: IDEASignInPage, isStandalone: true, selector: "idea-sign-in", ngImport: i0, template: `
|
|
77
|
+
<ion-content>
|
|
78
|
+
@if (newAccountRegistered) {
|
|
79
|
+
<ion-card color="warning">
|
|
80
|
+
<ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>
|
|
81
|
+
</ion-card>
|
|
82
|
+
}
|
|
83
|
+
<form class="flexBox">
|
|
84
|
+
<div>
|
|
85
|
+
<ion-card class="authCard">
|
|
86
|
+
<ion-img
|
|
87
|
+
[title]="'IDEA_AUTH.SERVICE_LOGO' | translate"
|
|
88
|
+
[src]="darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'"
|
|
89
|
+
/>
|
|
90
|
+
<ion-card-header>
|
|
91
|
+
@if (title) {
|
|
92
|
+
<ion-card-title color="primary">{{ title }}</ion-card-title>
|
|
93
|
+
}
|
|
94
|
+
@if (translationExists('IDEA_VARIABLES.TAGLINE')) {
|
|
95
|
+
<ion-card-subtitle> {{ 'IDEA_VARIABLES.TAGLINE' | translate }} </ion-card-subtitle>
|
|
96
|
+
}
|
|
97
|
+
</ion-card-header>
|
|
98
|
+
<ion-card-content>
|
|
99
|
+
@if (errorMsg) {
|
|
100
|
+
<p class="errorBox">
|
|
101
|
+
<b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}
|
|
102
|
+
</p>
|
|
103
|
+
}
|
|
104
|
+
<ion-item>
|
|
105
|
+
<ion-label position="inline">
|
|
106
|
+
<ion-icon name="person-circle" color="primary" />
|
|
107
|
+
</ion-label>
|
|
108
|
+
<ion-input
|
|
109
|
+
type="email"
|
|
110
|
+
inputmode="email"
|
|
111
|
+
pattern="[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}"
|
|
112
|
+
spellcheck="false"
|
|
113
|
+
autocorrect="off"
|
|
114
|
+
autocomplete="email"
|
|
115
|
+
[placeholder]="'IDEA_AUTH.EMAIL' | translate"
|
|
116
|
+
[title]="'IDEA_AUTH.EMAIL_HINT' | translate"
|
|
117
|
+
[ngModelOptions]="{ standalone: true }"
|
|
118
|
+
[(ngModel)]="email"
|
|
119
|
+
(keyup.enter)="login()"
|
|
120
|
+
/>
|
|
121
|
+
</ion-item>
|
|
122
|
+
<ion-item>
|
|
123
|
+
<ion-label position="inline">
|
|
124
|
+
<ion-icon name="key" color="primary" />
|
|
125
|
+
</ion-label>
|
|
126
|
+
<ion-input
|
|
127
|
+
id="current-password"
|
|
128
|
+
type="password"
|
|
129
|
+
spellcheck="false"
|
|
130
|
+
autocorrect="off"
|
|
131
|
+
autocomplete="current-password"
|
|
132
|
+
[clearOnEdit]="false"
|
|
133
|
+
[placeholder]="'IDEA_AUTH.PASSWORD' | translate"
|
|
134
|
+
[title]="'IDEA_AUTH.PASSWORD_HINT' | translate"
|
|
135
|
+
[ngModelOptions]="{ standalone: true }"
|
|
136
|
+
[(ngModel)]="password"
|
|
137
|
+
(keyup.enter)="login()"
|
|
138
|
+
/>
|
|
139
|
+
</ion-item>
|
|
140
|
+
@if (
|
|
141
|
+
!registrationPossible &&
|
|
142
|
+
(translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') ||
|
|
143
|
+
translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))
|
|
144
|
+
) {
|
|
145
|
+
<ion-row class="agreementsAcceptanceRow">
|
|
146
|
+
<ion-col>
|
|
147
|
+
<ion-checkbox size="small" [ngModelOptions]="{ standalone: true }" [(ngModel)]="agreementsCheck" />
|
|
148
|
+
{{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:
|
|
149
|
+
@if (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')) {
|
|
150
|
+
<a
|
|
151
|
+
ion-text
|
|
152
|
+
color="primary"
|
|
153
|
+
target="_blank"
|
|
154
|
+
[title]="'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate"
|
|
155
|
+
[href]="'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate"
|
|
156
|
+
>
|
|
157
|
+
{{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}
|
|
158
|
+
</a>
|
|
159
|
+
}
|
|
160
|
+
@if (
|
|
161
|
+
translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') &&
|
|
162
|
+
translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')
|
|
163
|
+
) {
|
|
164
|
+
<ion-text> & </ion-text>
|
|
165
|
+
}
|
|
166
|
+
@if (translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')) {
|
|
167
|
+
<a
|
|
168
|
+
ion-text
|
|
169
|
+
color="primary"
|
|
170
|
+
target="_blank"
|
|
171
|
+
[title]="'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate"
|
|
172
|
+
[href]="'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate"
|
|
173
|
+
>
|
|
174
|
+
{{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}
|
|
175
|
+
</a>
|
|
176
|
+
}
|
|
177
|
+
</ion-col>
|
|
178
|
+
</ion-row>
|
|
179
|
+
}
|
|
180
|
+
<ion-button
|
|
181
|
+
expand="block"
|
|
182
|
+
[disabled]="!agreementsCheck"
|
|
183
|
+
[title]="'IDEA_AUTH.SIGN_IN_HINT' | translate"
|
|
184
|
+
(click)="login()"
|
|
185
|
+
>
|
|
186
|
+
{{ 'IDEA_AUTH.SIGN_IN' | translate }}
|
|
187
|
+
</ion-button>
|
|
188
|
+
@if (registrationPossible) {
|
|
189
|
+
<ion-button
|
|
190
|
+
fill="clear"
|
|
191
|
+
expand="block"
|
|
192
|
+
class="smallCaseButton"
|
|
193
|
+
[title]="'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate"
|
|
194
|
+
(click)="goToRegistration()"
|
|
195
|
+
>
|
|
196
|
+
{{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}
|
|
197
|
+
</ion-button>
|
|
198
|
+
}
|
|
199
|
+
<ion-button
|
|
200
|
+
fill="clear"
|
|
201
|
+
expand="block"
|
|
202
|
+
class="smallCaseButton"
|
|
203
|
+
[title]="'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate"
|
|
204
|
+
(click)="goToForgotPassword()"
|
|
205
|
+
>
|
|
206
|
+
{{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}
|
|
207
|
+
</ion-button>
|
|
208
|
+
@if (hasIntroPage) {
|
|
209
|
+
<ion-button
|
|
210
|
+
fill="clear"
|
|
211
|
+
expand="block"
|
|
212
|
+
color="medium"
|
|
213
|
+
class="smallCaseButton"
|
|
214
|
+
[title]="'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate"
|
|
215
|
+
(click)="goToIntro()"
|
|
216
|
+
>
|
|
217
|
+
{{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}
|
|
218
|
+
</ion-button>
|
|
219
|
+
}
|
|
220
|
+
</ion-card-content>
|
|
221
|
+
</ion-card>
|
|
222
|
+
@if (website) {
|
|
223
|
+
<ion-img
|
|
224
|
+
class="ideaLogo"
|
|
225
|
+
[src]="darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'"
|
|
226
|
+
[title]="'IDEA_AUTH.IDEA_TAGLINE' | translate"
|
|
227
|
+
(click)="openLink(website)"
|
|
228
|
+
/>
|
|
229
|
+
}
|
|
230
|
+
</div>
|
|
231
|
+
</form>
|
|
232
|
+
</ion-content>
|
|
233
|
+
`, isInline: true, styles: [".flexBox{background:var(--idea-auth-background-color, var(--ion-color-white-shade))}.authCard{min-width:400px;max-width:550px;margin:0 10px;padding:20px;background-color:var(--idea-auth-card-background-color, var(--ion-color-white));border:1px solid var(--idea-auth-card-border-color, var(--ion-color-light));border-radius:10px;box-shadow:none;text-align:center}.authCard ion-img{width:150px;display:block;margin:0 auto}.authCard ion-card-title{font-family:auth-title;font-size:3em}.authCard ion-card-subtitle{font-family:auth-title;font-size:1.2em}.authCard ion-card-content{padding-top:16px}.authCard ion-card-content .errorBox{padding-left:10px;margin-bottom:20px;text-align:left;border-left:2px solid var(--ion-color-danger)}.authCard ion-card-content ion-item{--ion-item-background: var(--idea-auth-card-background-color, var(--ion-color-white));--border-color: var(--idea-auth-card-border-color, var(--ion-color-light))}.authCard ion-card-content ion-label[position=inline] ion-icon{padding-top:4px;padding-right:5px;font-size:1.3em}.authCard ion-card-content .agreementsAcceptanceRow{margin-top:15px;font-size:.9em}.authCard ion-card-content .agreementsAcceptanceRow ion-checkbox{vertical-align:bottom;margin-right:3px}.authCard ion-card-content ion-button:not([slot=end]){margin-top:15px}.authCard ion-card-content .smallCaseButton{text-transform:none;letter-spacing:normal;font-size:1em}@media only screen and (max-width: 500px){.authCard{background-color:transparent;border:none}}.ideaLogo{width:65px;margin:40px auto 0;cursor:pointer}.passwordPolicyPopover{--width: 350px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }] }); }
|
|
77
234
|
}
|
|
78
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEASignInPage, decorators: [{
|
|
79
236
|
type: Component,
|
|
80
|
-
args: [{ selector: 'idea-sign-in',
|
|
237
|
+
args: [{ selector: 'idea-sign-in', standalone: true, imports: [
|
|
238
|
+
CommonModule,
|
|
239
|
+
FormsModule,
|
|
240
|
+
IDEATranslatePipe,
|
|
241
|
+
IonButton,
|
|
242
|
+
IonText,
|
|
243
|
+
IonCol,
|
|
244
|
+
IonRow,
|
|
245
|
+
IonIcon,
|
|
246
|
+
IonLabel,
|
|
247
|
+
IonCardSubtitle,
|
|
248
|
+
IonCardTitle,
|
|
249
|
+
IonCardHeader,
|
|
250
|
+
IonImg,
|
|
251
|
+
IonCardContent,
|
|
252
|
+
IonCard,
|
|
253
|
+
IonContent,
|
|
254
|
+
IonItem,
|
|
255
|
+
IonInput,
|
|
256
|
+
IonCheckbox
|
|
257
|
+
], template: `
|
|
258
|
+
<ion-content>
|
|
259
|
+
@if (newAccountRegistered) {
|
|
260
|
+
<ion-card color="warning">
|
|
261
|
+
<ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>
|
|
262
|
+
</ion-card>
|
|
263
|
+
}
|
|
264
|
+
<form class="flexBox">
|
|
265
|
+
<div>
|
|
266
|
+
<ion-card class="authCard">
|
|
267
|
+
<ion-img
|
|
268
|
+
[title]="'IDEA_AUTH.SERVICE_LOGO' | translate"
|
|
269
|
+
[src]="darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'"
|
|
270
|
+
/>
|
|
271
|
+
<ion-card-header>
|
|
272
|
+
@if (title) {
|
|
273
|
+
<ion-card-title color="primary">{{ title }}</ion-card-title>
|
|
274
|
+
}
|
|
275
|
+
@if (translationExists('IDEA_VARIABLES.TAGLINE')) {
|
|
276
|
+
<ion-card-subtitle> {{ 'IDEA_VARIABLES.TAGLINE' | translate }} </ion-card-subtitle>
|
|
277
|
+
}
|
|
278
|
+
</ion-card-header>
|
|
279
|
+
<ion-card-content>
|
|
280
|
+
@if (errorMsg) {
|
|
281
|
+
<p class="errorBox">
|
|
282
|
+
<b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}
|
|
283
|
+
</p>
|
|
284
|
+
}
|
|
285
|
+
<ion-item>
|
|
286
|
+
<ion-label position="inline">
|
|
287
|
+
<ion-icon name="person-circle" color="primary" />
|
|
288
|
+
</ion-label>
|
|
289
|
+
<ion-input
|
|
290
|
+
type="email"
|
|
291
|
+
inputmode="email"
|
|
292
|
+
pattern="[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}"
|
|
293
|
+
spellcheck="false"
|
|
294
|
+
autocorrect="off"
|
|
295
|
+
autocomplete="email"
|
|
296
|
+
[placeholder]="'IDEA_AUTH.EMAIL' | translate"
|
|
297
|
+
[title]="'IDEA_AUTH.EMAIL_HINT' | translate"
|
|
298
|
+
[ngModelOptions]="{ standalone: true }"
|
|
299
|
+
[(ngModel)]="email"
|
|
300
|
+
(keyup.enter)="login()"
|
|
301
|
+
/>
|
|
302
|
+
</ion-item>
|
|
303
|
+
<ion-item>
|
|
304
|
+
<ion-label position="inline">
|
|
305
|
+
<ion-icon name="key" color="primary" />
|
|
306
|
+
</ion-label>
|
|
307
|
+
<ion-input
|
|
308
|
+
id="current-password"
|
|
309
|
+
type="password"
|
|
310
|
+
spellcheck="false"
|
|
311
|
+
autocorrect="off"
|
|
312
|
+
autocomplete="current-password"
|
|
313
|
+
[clearOnEdit]="false"
|
|
314
|
+
[placeholder]="'IDEA_AUTH.PASSWORD' | translate"
|
|
315
|
+
[title]="'IDEA_AUTH.PASSWORD_HINT' | translate"
|
|
316
|
+
[ngModelOptions]="{ standalone: true }"
|
|
317
|
+
[(ngModel)]="password"
|
|
318
|
+
(keyup.enter)="login()"
|
|
319
|
+
/>
|
|
320
|
+
</ion-item>
|
|
321
|
+
@if (
|
|
322
|
+
!registrationPossible &&
|
|
323
|
+
(translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') ||
|
|
324
|
+
translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))
|
|
325
|
+
) {
|
|
326
|
+
<ion-row class="agreementsAcceptanceRow">
|
|
327
|
+
<ion-col>
|
|
328
|
+
<ion-checkbox size="small" [ngModelOptions]="{ standalone: true }" [(ngModel)]="agreementsCheck" />
|
|
329
|
+
{{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:
|
|
330
|
+
@if (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')) {
|
|
331
|
+
<a
|
|
332
|
+
ion-text
|
|
333
|
+
color="primary"
|
|
334
|
+
target="_blank"
|
|
335
|
+
[title]="'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate"
|
|
336
|
+
[href]="'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate"
|
|
337
|
+
>
|
|
338
|
+
{{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}
|
|
339
|
+
</a>
|
|
340
|
+
}
|
|
341
|
+
@if (
|
|
342
|
+
translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') &&
|
|
343
|
+
translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')
|
|
344
|
+
) {
|
|
345
|
+
<ion-text> & </ion-text>
|
|
346
|
+
}
|
|
347
|
+
@if (translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')) {
|
|
348
|
+
<a
|
|
349
|
+
ion-text
|
|
350
|
+
color="primary"
|
|
351
|
+
target="_blank"
|
|
352
|
+
[title]="'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate"
|
|
353
|
+
[href]="'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate"
|
|
354
|
+
>
|
|
355
|
+
{{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}
|
|
356
|
+
</a>
|
|
357
|
+
}
|
|
358
|
+
</ion-col>
|
|
359
|
+
</ion-row>
|
|
360
|
+
}
|
|
361
|
+
<ion-button
|
|
362
|
+
expand="block"
|
|
363
|
+
[disabled]="!agreementsCheck"
|
|
364
|
+
[title]="'IDEA_AUTH.SIGN_IN_HINT' | translate"
|
|
365
|
+
(click)="login()"
|
|
366
|
+
>
|
|
367
|
+
{{ 'IDEA_AUTH.SIGN_IN' | translate }}
|
|
368
|
+
</ion-button>
|
|
369
|
+
@if (registrationPossible) {
|
|
370
|
+
<ion-button
|
|
371
|
+
fill="clear"
|
|
372
|
+
expand="block"
|
|
373
|
+
class="smallCaseButton"
|
|
374
|
+
[title]="'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate"
|
|
375
|
+
(click)="goToRegistration()"
|
|
376
|
+
>
|
|
377
|
+
{{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}
|
|
378
|
+
</ion-button>
|
|
379
|
+
}
|
|
380
|
+
<ion-button
|
|
381
|
+
fill="clear"
|
|
382
|
+
expand="block"
|
|
383
|
+
class="smallCaseButton"
|
|
384
|
+
[title]="'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate"
|
|
385
|
+
(click)="goToForgotPassword()"
|
|
386
|
+
>
|
|
387
|
+
{{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}
|
|
388
|
+
</ion-button>
|
|
389
|
+
@if (hasIntroPage) {
|
|
390
|
+
<ion-button
|
|
391
|
+
fill="clear"
|
|
392
|
+
expand="block"
|
|
393
|
+
color="medium"
|
|
394
|
+
class="smallCaseButton"
|
|
395
|
+
[title]="'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate"
|
|
396
|
+
(click)="goToIntro()"
|
|
397
|
+
>
|
|
398
|
+
{{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}
|
|
399
|
+
</ion-button>
|
|
400
|
+
}
|
|
401
|
+
</ion-card-content>
|
|
402
|
+
</ion-card>
|
|
403
|
+
@if (website) {
|
|
404
|
+
<ion-img
|
|
405
|
+
class="ideaLogo"
|
|
406
|
+
[src]="darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'"
|
|
407
|
+
[title]="'IDEA_AUTH.IDEA_TAGLINE' | translate"
|
|
408
|
+
(click)="openLink(website)"
|
|
409
|
+
/>
|
|
410
|
+
}
|
|
411
|
+
</div>
|
|
412
|
+
</form>
|
|
413
|
+
</ion-content>
|
|
414
|
+
`, styles: [".flexBox{background:var(--idea-auth-background-color, var(--ion-color-white-shade))}.authCard{min-width:400px;max-width:550px;margin:0 10px;padding:20px;background-color:var(--idea-auth-card-background-color, var(--ion-color-white));border:1px solid var(--idea-auth-card-border-color, var(--ion-color-light));border-radius:10px;box-shadow:none;text-align:center}.authCard ion-img{width:150px;display:block;margin:0 auto}.authCard ion-card-title{font-family:auth-title;font-size:3em}.authCard ion-card-subtitle{font-family:auth-title;font-size:1.2em}.authCard ion-card-content{padding-top:16px}.authCard ion-card-content .errorBox{padding-left:10px;margin-bottom:20px;text-align:left;border-left:2px solid var(--ion-color-danger)}.authCard ion-card-content ion-item{--ion-item-background: var(--idea-auth-card-background-color, var(--ion-color-white));--border-color: var(--idea-auth-card-border-color, var(--ion-color-light))}.authCard ion-card-content ion-label[position=inline] ion-icon{padding-top:4px;padding-right:5px;font-size:1.3em}.authCard ion-card-content .agreementsAcceptanceRow{margin-top:15px;font-size:.9em}.authCard ion-card-content .agreementsAcceptanceRow ion-checkbox{vertical-align:bottom;margin-right:3px}.authCard ion-card-content ion-button:not([slot=end]){margin-top:15px}.authCard ion-card-content .smallCaseButton{text-transform:none;letter-spacing:normal;font-size:1em}@media only screen and (max-width: 500px){.authCard{background-color:transparent;border:none}}.ideaLogo{width:65px;margin:40px auto 0;cursor:pointer}.passwordPolicyPopover{--width: 350px}\n"] }]
|
|
81
415
|
}], ctorParameters: () => [] });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkluLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25Jbi5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9zaWduSW4ucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRILE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPdEUsTUFBTSxPQUFPLGNBQWM7SUFvQnpCO1FBbkJVLFNBQUksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM3QyxVQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBU3hDLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUU3QixhQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUduRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMs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Q0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVztRQUN4QixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBeEVVLGNBQWM7a0dBQWQsY0FBYyxvRENaM0IsOHFMQWtKQTs7MkZEdElhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XG5pbXBvcnQgeyBJREVBRW52aXJvbm1lbnQsIElERUFNZXNzYWdlU2VydmljZSwgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbmltcG9ydCB7IElERUFBdXRoU2VydmljZSwgTG9naW5PdXRjb21lQWN0aW9ucyB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1zaWduLWluJyxcbiAgdGVtcGxhdGVVcmw6ICdzaWduSW4ucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2F1dGguc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIElERUFTaWduSW5QYWdlIHtcbiAgcHJvdGVjdGVkIF9lbnYgPSBpbmplY3QoSURFQUVudmlyb25tZW50KTtcbiAgcHJpdmF0ZSBfbmF2ID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KElERUFNZXNzYWdlU2VydmljZSk7XG4gIHByaXZhdGUgX2xvYWRpbmcgPSBpbmplY3QoSURFQUxvYWRpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlID0gaW5qZWN0KElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfYXV0aCA9IGluamVjdChJREVBQXV0aFNlcnZpY2UpO1xuXG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblBvc3NpYmxlOiBib29sZWFuO1xuICBoYXNJbnRyb1BhZ2U6IGJvb2xlYW47XG4gIHdlYnNpdGU6IHN0cmluZztcblxuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBhZ3JlZW1lbnRzQ2hlY2sgPSB0cnVlO1xuICBuZXdBY2NvdW50UmVnaXN0ZXJlZCA9IGZhbHNlO1xuICBlcnJvck1zZzogc3RyaW5nO1xuICBkYXJrTW9kZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy5fZW52LmlkZWEuYXV0aC50aXRsZTtcbiAgICB0aGlzLnJlZ2lzdHJhdGlvblBvc3NpYmxlID0gdGhpcy5fZW52LmlkZWEuYXV0aC5yZWdpc3RyYXRpb25Jc1Bvc3NpYmxlO1xuICAgIHRoaXMuaGFzSW50cm9QYWdlID0gdGhpcy5fZW52LmlkZWEuYXV0aC5oYXNJbnRyb1BhZ2U7XG4gICAgdGhpcy53ZWJzaXRlID0gdGhpcy5fZW52LmlkZWEuYXV0aC53ZWJzaXRlO1xuICB9XG4gIGlvblZpZXdEaWRFbnRlcigpOiB2b2lkIHtcbiAgICAvLyBtYW5hZ2UgdGhlIHNjZW5hcmlvIGluIHdoaWNoIHdlIGp1c3QgY3JlYXRlZCBhIG5ldyBhY2NvdW50IChzaG93IGEgZXhwbGFuYXRvcnkgbWVzc2FnZTogZW1haWwgbXVzdCBiZSBjb25maXJtZWQpXG4gICAgdGhpcy5uZXdBY2NvdW50UmVnaXN0ZXJlZCA9ICEhdGhpcy5fYXV0aC5nZXROZXdBY2NvdW50SnVzdFJlZ2lzdGVyZWQoKTtcbiAgICBpZiAodGhpcy5uZXdBY2NvdW50UmVnaXN0ZXJlZCkgdGhpcy5lbWFpbCA9IHRoaXMuX2F1dGguZ2V0TmV3QWNjb3VudEp1c3RSZWdpc3RlcmVkKCk7XG4gIH1cblxuICBhc3luYyBsb2dpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYWdyZWVtZW50c0NoZWNrKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBudWxsO1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZGluZy5zaG93KCk7XG4gICAgICBjb25zdCBsb2dpbkFjdGlvbiA9IGF3YWl0IHRoaXMuX2F1dGgubG9naW4odGhpcy5lbWFpbCwgdGhpcy5wYXNzd29yZCk7XG4gICAgICBpZiAobG9naW5BY3Rpb24gPT09IExvZ2luT3V0Y29tZUFjdGlvbnMuTkVXX1BBU1NXT1JEKSB0aGlzLl9uYXYubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICduZXctcGFzc3dvcmQnXSk7XG4gICAgICBlbHNlIGlmIChsb2dpbkFjdGlvbiA9PT0gTG9naW5PdXRjb21lQWN0aW9ucy5NRkFfQ0hBTExFTkdFKSB0aGlzLl9uYXYubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICdtZmEtY2hhbGxlbmdlJ10pO1xuICAgICAgZWxzZSBpZiAobG9naW5BY3Rpb24gPT09IExvZ2luT3V0Y29tZUFjdGlvbnMuTUZBX1NFVFVQKSB0aGlzLl9uYXYubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICdzZXR1cC1tZmEnXSk7XG4gICAgICBlbHNlIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKChlcnIgYXMgYW55KS5uYW1lID09PSAnVXNlck5vdENvbmZpcm1lZEV4Y2VwdGlvbicpXG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BVVRILkNPTkZJUk1fWU9VUl9FTUFJTF9UT19MT0dJTicpO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIChlcnIgYXMgYW55KS5uYW1lID09PSAnVXNlckxhbWJkYVZhbGlkYXRpb25FeGNlcHRpb24nICYmXG4gICAgICAgIChlcnIgYXMgYW55KS5tZXNzYWdlPy5pbmNsdWRlcygnQElERUFfQ09HTklUT19UUkFOU0lUSU9OJylcbiAgICAgIClcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FVVEguQ0hBTkdFX1lPVVJfUEFTU1dPUkRfVE9fTE9HSU4nKTtcbiAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0lERUFfQVVUSC5BVVRIRU5USUNBVElPTl9GQUlMRUQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub0ludHJvKCk6IHZvaWQge1xuICAgIHRoaXMuX25hdi5uYXZpZ2F0ZUJhY2soWydpbnRybyddKTtcbiAgfVxuICBnb1RvRm9yZ290UGFzc3dvcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fbmF2Lm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgnLCAnZm9yZ290LXBhc3N3b3JkJ10pO1xuICB9XG4gIGdvVG9SZWdpc3RyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fbmF2Lm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgnLCAnc2lnbi11cCddKTtcbiAgfVxuXG4gIHRyYW5zbGF0aW9uRXhpc3RzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fdHJhbnNsYXRlLl8oa2V5KTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5MaW5rKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgQnJvd3Nlci5vcGVuKHsgdXJsIH0pO1xuICB9XG59XG4iLCI8aW9uLWNvbnRlbnQ+XG4gIEBpZiAobmV3QWNjb3VudFJlZ2lzdGVyZWQpIHtcbiAgPGlvbi1jYXJkIGNvbG9yPVwid2FybmluZ1wiPlxuICAgIDxpb24tY2FyZC1jb250ZW50Pnt7ICdJREVBX0FVVEguQ09ORklSTV9ZT1VSX0VNQUlMX1RPX0xPR0lOJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWNhcmQtY29udGVudD5cbiAgPC9pb24tY2FyZD5cbiAgfVxuICA8Zm9ybSBjbGFzcz1cImZsZXhCb3hcIj5cbiAgICA8ZGl2PlxuICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiYXV0aENhcmRcIj5cbiAgICAgICAgPGlvbi1pbWdcbiAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5TRVJWSUNFX0xPR08nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3JjXT1cImRhcmtNb2RlID8gJ2Fzc2V0cy9pY29ucy9pY29uLWF1dGgtYWx0LnN2ZycgOiAnYXNzZXRzL2ljb25zL2ljb24tYXV0aC5zdmcnXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICBAaWYgKHRpdGxlKSB7XG4gICAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNvbG9yPVwicHJpbWFyeVwiPnt7IHRpdGxlIH19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICB9IEBpZiAodHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRBR0xJTkUnKSkge1xuICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT4ge3sgJ0lERUFfVkFSSUFCTEVTLlRBR0xJTkUnIHwgdHJhbnNsYXRlIH19IDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgQGlmIChlcnJvck1zZykge1xuICAgICAgICAgIDxwIGNsYXNzPVwiZXJyb3JCb3hcIj48Yj57eyAnSURFQV9BVVRILldBUk5JTkcnIHwgdHJhbnNsYXRlIH19LjwvYj4ge3sgZXJyb3JNc2cgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwZXJzb24tY2lyY2xlXCIgY29sb3I9XCJwcmltYXJ5XCIgLz5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgIHBhdHRlcm49XCJbQS1aYS16MC05Ll8lKy1dezIsfUBbYS16QS1aLV8uXXsyLH1bLl17MX1bYS16QS1aXXsyLH1cIlxuICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidJREVBX0FVVEguRU1BSUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguRU1BSUxfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvZ2luKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJrZXlcIiBjb2xvcj1cInByaW1hcnlcIiAvPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWlucHV0XG4gICAgICAgICAgICAgIGlkPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgIFtjbGVhck9uRWRpdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInSURFQV9BVVRILlBBU1NXT1JEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlBBU1NXT1JEX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICBAaWYgKCFyZWdpc3RyYXRpb25Qb3NzaWJsZSAmJiAodHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcpIHx8XG4gICAgICAgICAgdHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcpKSkge1xuICAgICAgICAgIDxpb24tcm93IGNsYXNzPVwiYWdyZWVtZW50c0FjY2VwdGFuY2VSb3dcIj5cbiAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94IHNpemU9XCJzbWFsbFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiIFsobmdNb2RlbCldPVwiYWdyZWVtZW50c0NoZWNrXCIgLz5cbiAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5BR1JFRU1FTlRTX0NIRUNLX0xPR0lOJyB8IHRyYW5zbGF0ZSB9fTogQGlmXG4gICAgICAgICAgICAgICh0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJykpIHtcbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBpb24tdGV4dFxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5URVJNU19BTkRfQ09ORElUSU9OU19ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2hyZWZdPVwiJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5URVJNU19BTkRfQ09ORElUSU9OUycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICB9IEBpZiAoIHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKSAmJlxuICAgICAgICAgICAgICB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJykgKSB7XG4gICAgICAgICAgICAgIDxpb24tdGV4dD4gJiA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICB9IEBpZiAodHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcpKSB7XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgaW9uLXRleHRcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1lfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIidJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1knIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWdyZWVtZW50c0NoZWNrXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlNJR05fSU5fSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImxvZ2luKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdJREVBX0FVVEguU0lHTl9JTicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgQGlmIChyZWdpc3RyYXRpb25Qb3NzaWJsZSkge1xuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguQ1JFQVRFX0FOX0FDQ09VTlRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9SZWdpc3RyYXRpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5DUkVBVEVfQU5fQUNDT1VOVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguSV9GT1JHT1RfTVlfUEFTU1dPUkRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9Gb3Jnb3RQYXNzd29yZCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnSURFQV9BVVRILklfRk9SR09UX01ZX1BBU1NXT1JEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICBAaWYgKGhhc0ludHJvUGFnZSkge1xuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguQkFDS19UT19JTlRST19ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ludHJvKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdJREVBX0FVVEguQkFDS19UT19JTlRSTycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICA8L2lvbi1jYXJkPlxuICAgICAgQGlmICh3ZWJzaXRlKSB7XG4gICAgICA8aW9uLWltZ1xuICAgICAgICBjbGFzcz1cImlkZWFMb2dvXCJcbiAgICAgICAgW3NyY109XCJkYXJrTW9kZSA/ICcuL2Fzc2V0cy9pY29ucy9pZGVhLWFsdC5wbmcnIDogJy4vYXNzZXRzL2ljb25zL2lkZWEucG5nJ1wiXG4gICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILklERUFfVEFHTElORScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3Blbkxpbmsod2Vic2l0ZSlcIlxuICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9pb24tY29udGVudD5cbiJdfQ==
|
|
416
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkluLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25Jbi5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLGFBQWEsRUFDYixPQUFPLEVBQ1AsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUNMLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDbEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQTBMdEUsTUFBTSxPQUFPLGNBQWM7SUFvQnpCO1FBbkJVLFNBQUksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENB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WUFBWTt3QkFDWixXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLE1BQU07d0JBQ04sTUFBTTt3QkFDTixPQUFPO3dCQUNQLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsTUFBTTt3QkFDTixjQUFjO3dCQUNkLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixPQUFPO3dCQUNQLFFBQVE7d0JBQ1IsV0FBVztxQkFDWixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkpUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIE5hdkNvbnRyb2xsZXIsXG4gIElvbkl0ZW0sXG4gIElvbkNvbnRlbnQsXG4gIElvbkNhcmQsXG4gIElvbkNhcmRDb250ZW50LFxuICBJb25JbWcsXG4gIElvbkNhcmRIZWFkZXIsXG4gIElvbkNhcmRUaXRsZSxcbiAgSW9uQ2FyZFN1YnRpdGxlLFxuICBJb25MYWJlbCxcbiAgSW9uSWNvbixcbiAgSW9uUm93LFxuICBJb25Db2wsXG4gIElvblRleHQsXG4gIElvbkJ1dHRvbixcbiAgSW9uSW5wdXQsXG4gIElvbkNoZWNrYm94XG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XG5pbXBvcnQge1xuICBJREVBRW52aXJvbm1lbnQsXG4gIElERUFNZXNzYWdlU2VydmljZSxcbiAgSURFQUxvYWRpbmdTZXJ2aWNlLFxuICBJREVBVHJhbnNsYXRpb25zU2VydmljZSxcbiAgSURFQVRyYW5zbGF0ZVBpcGVcbn0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUF1dGhTZXJ2aWNlLCBMb2dpbk91dGNvbWVBY3Rpb25zIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLXNpZ24taW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElERUFUcmFuc2xhdGVQaXBlLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25UZXh0LFxuICAgIElvbkNvbCxcbiAgICBJb25Sb3csXG4gICAgSW9uSWNvbixcbiAgICBJb25MYWJlbCxcbiAgICBJb25DYXJkU3VidGl0bGUsXG4gICAgSW9uQ2FyZFRpdGxlLFxuICAgIElvbkNhcmRIZWFkZXIsXG4gICAgSW9uSW1nLFxuICAgIElvbkNhcmRDb250ZW50LFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25JdGVtLFxuICAgIElvbklucHV0LFxuICAgIElvbkNoZWNrYm94XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1jb250ZW50PlxuICAgICAgQGlmIChuZXdBY2NvdW50UmVnaXN0ZXJlZCkge1xuICAgICAgICA8aW9uLWNhcmQgY29sb3I9XCJ3YXJuaW5nXCI+XG4gICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+e3sgJ0lERUFfQVVUSC5DT05GSVJNX1lPVVJfRU1BSUxfVE9fTE9HSU4nIHwgdHJhbnNsYXRlIH19PC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgfVxuICAgICAgPGZvcm0gY2xhc3M9XCJmbGV4Qm94XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiYXV0aENhcmRcIj5cbiAgICAgICAgICAgIDxpb24taW1nXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlNFUlZJQ0VfTE9HTycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbc3JjXT1cImRhcmtNb2RlID8gJ2Fzc2V0cy9pY29ucy9pY29uLWF1dGgtYWx0LnN2ZycgOiAnYXNzZXRzL2ljb25zL2ljb24tYXV0aC5zdmcnXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICBAaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNvbG9yPVwicHJpbWFyeVwiPnt7IHRpdGxlIH19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5UQUdMSU5FJykpIHtcbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+IHt7ICdJREVBX1ZBUklBQkxFUy5UQUdMSU5FJyB8IHRyYW5zbGF0ZSB9fSA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICBAaWYgKGVycm9yTXNnKSB7XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvckJveFwiPlxuICAgICAgICAgICAgICAgICAgPGI+e3sgJ0lERUFfQVVUSC5XQVJOSU5HJyB8IHRyYW5zbGF0ZSB9fS48L2I+IHt7IGVycm9yTXNnIH19XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHBvc2l0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlcnNvbi1jaXJjbGVcIiBjb2xvcj1cInByaW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpb24taW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiW0EtWmEtejAtOS5fJSstXXsyLH1AW2EtekEtWi1fLl17Mix9Wy5dezF9W2EtekEtWl17Mix9XCJcbiAgICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0lERUFfQVVUSC5FTUFJTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguRU1BSUxfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvZ2luKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHBvc2l0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImtleVwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJjdXJyZW50LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICBbY2xlYXJPbkVkaXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidJREVBX0FVVEguUEFTU1dPUkQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlBBU1NXT1JEX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICFyZWdpc3RyYXRpb25Qb3NzaWJsZSAmJlxuICAgICAgICAgICAgICAgICh0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJykgfHxcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJhZ3JlZW1lbnRzQWNjZXB0YW5jZVJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY2hlY2tib3ggc2l6ZT1cInNtYWxsXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgWyhuZ01vZGVsKV09XCJhZ3JlZW1lbnRzQ2hlY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILkFHUkVFTUVOVFNfQ0hFQ0tfTE9HSU4nIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBpb24tdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5URVJNU19BTkRfQ09ORElUSU9OU19ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCInSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5URVJNU19BTkRfQ09ORElUSU9OUycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PiAmIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgaW9uLXRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1lfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1knIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWdyZWVtZW50c0NoZWNrXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5TSUdOX0lOX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9naW4oKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILlNJR05fSU4nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgQGlmIChyZWdpc3RyYXRpb25Qb3NzaWJsZSkge1xuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguQ1JFQVRFX0FOX0FDQ09VTlRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9SZWdpc3RyYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5DUkVBVEVfQU5fQUNDT1VOVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNtYWxsQ2FzZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguSV9GT1JHT1RfTVlfUEFTU1dPUkRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvRm9yZ290UGFzc3dvcmQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILklfRk9SR09UX01ZX1BBU1NXT1JEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIEBpZiAoaGFzSW50cm9QYWdlKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNtYWxsQ2FzZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5CQUNLX1RPX0lOVFJPX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvSW50cm8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5CQUNLX1RPX0lOVFJPJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgQGlmICh3ZWJzaXRlKSB7XG4gICAgICAgICAgICA8aW9uLWltZ1xuICAgICAgICAgICAgICBjbGFzcz1cImlkZWFMb2dvXCJcbiAgICAgICAgICAgICAgW3NyY109XCJkYXJrTW9kZSA/ICcuL2Fzc2V0cy9pY29ucy9pZGVhLWFsdC5wbmcnIDogJy4vYXNzZXRzL2ljb25zL2lkZWEucG5nJ1wiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILklERUFfVEFHTElORScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkxpbmsod2Vic2l0ZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlVXJsczogWydhdXRoLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJREVBU2lnbkluUGFnZSB7XG4gIHByb3RlY3RlZCBfZW52ID0gaW5qZWN0KElERUFFbnZpcm9ubWVudCk7XG4gIHByaXZhdGUgX25hdiA9IGluamVjdChOYXZDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChJREVBTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIF9sb2FkaW5nID0gaW5qZWN0KElERUFMb2FkaW5nU2VydmljZSk7XG4gIHByaXZhdGUgX3RyYW5zbGF0ZSA9IGluamVjdChJREVBVHJhbnNsYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgX2F1dGggPSBpbmplY3QoSURFQUF1dGhTZXJ2aWNlKTtcblxuICB0aXRsZTogc3RyaW5nO1xuICByZWdpc3RyYXRpb25Qb3NzaWJsZTogYm9vbGVhbjtcbiAgaGFzSW50cm9QYWdlOiBib29sZWFuO1xuICB3ZWJzaXRlOiBzdHJpbmc7XG5cbiAgZW1haWw6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgYWdyZWVtZW50c0NoZWNrID0gdHJ1ZTtcbiAgbmV3QWNjb3VudFJlZ2lzdGVyZWQgPSBmYWxzZTtcbiAgZXJyb3JNc2c6IHN0cmluZztcbiAgZGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuX2Vudi5pZGVhLmF1dGgudGl0bGU7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25Qb3NzaWJsZSA9IHRoaXMuX2Vudi5pZGVhLmF1dGgucmVnaXN0cmF0aW9uSXNQb3NzaWJsZTtcbiAgICB0aGlzLmhhc0ludHJvUGFnZSA9IHRoaXMuX2Vudi5pZGVhLmF1dGguaGFzSW50cm9QYWdlO1xuICAgIHRoaXMud2Vic2l0ZSA9IHRoaXMuX2Vudi5pZGVhLmF1dGgud2Vic2l0ZTtcbiAgfVxuICBpb25WaWV3RGlkRW50ZXIoKTogdm9pZCB7XG4gICAgLy8gbWFuYWdlIHRoZSBzY2VuYXJpbyBpbiB3aGljaCB3ZSBqdXN0IGNyZWF0ZWQgYSBuZXcgYWNjb3VudCAoc2hvdyBhIGV4cGxhbmF0b3J5IG1lc3NhZ2U6IGVtYWlsIG11c3QgYmUgY29uZmlybWVkKVxuICAgIHRoaXMubmV3QWNjb3VudFJlZ2lzdGVyZWQgPSAhIXRoaXMuX2F1dGguZ2V0TmV3QWNjb3VudEp1c3RSZWdpc3RlcmVkKCk7XG4gICAgaWYgKHRoaXMubmV3QWNjb3VudFJlZ2lzdGVyZWQpIHRoaXMuZW1haWwgPSB0aGlzLl9hdXRoLmdldE5ld0FjY291bnRKdXN0UmVnaXN0ZXJlZCgpO1xuICB9XG5cbiAgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFncmVlbWVudHNDaGVjaykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmVycm9yTXNnID0gbnVsbDtcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgY29uc3QgbG9naW5BY3Rpb24gPSBhd2FpdCB0aGlzLl9hdXRoLmxvZ2luKHRoaXMuZW1haWwsIHRoaXMucGFzc3dvcmQpO1xuICAgICAgaWYgKGxvZ2luQWN0aW9uID09PSBMb2dpbk91dGNvbWVBY3Rpb25zLk5FV19QQVNTV09SRCkgdGhpcy5fbmF2Lm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgnLCAnbmV3LXBhc3N3b3JkJ10pO1xuICAgICAgZWxzZSBpZiAobG9naW5BY3Rpb24gPT09IExvZ2luT3V0Y29tZUFjdGlvbnMuTUZBX0NIQUxMRU5HRSkgdGhpcy5fbmF2Lm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgnLCAnbWZhLWNoYWxsZW5nZSddKTtcbiAgICAgIGVsc2UgaWYgKGxvZ2luQWN0aW9uID09PSBMb2dpbk91dGNvbWVBY3Rpb25zLk1GQV9TRVRVUCkgdGhpcy5fbmF2Lm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgnLCAnc2V0dXAtbWZhJ10pO1xuICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uYXNzaWduKCcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICgoZXJyIGFzIGFueSkubmFtZSA9PT0gJ1VzZXJOb3RDb25maXJtZWRFeGNlcHRpb24nKVxuICAgICAgICB0aGlzLmVycm9yTXNnID0gdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQVVUSC5DT05GSVJNX1lPVVJfRU1BSUxfVE9fTE9HSU4nKTtcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoZXJyIGFzIGFueSkubmFtZSA9PT0gJ1VzZXJMYW1iZGFWYWxpZGF0aW9uRXhjZXB0aW9uJyAmJlxuICAgICAgICAoZXJyIGFzIGFueSkubWVzc2FnZT8uaW5jbHVkZXMoJ0BJREVBX0NPR05JVE9fVFJBTlNJVElPTicpXG4gICAgICApXG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BVVRILkNIQU5HRV9ZT1VSX1BBU1NXT1JEX1RPX0xPR0lOJyk7XG4gICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdJREVBX0FVVEguQVVUSEVOVElDQVRJT05fRkFJTEVEJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9JbnRybygpOiB2b2lkIHtcbiAgICB0aGlzLl9uYXYubmF2aWdhdGVCYWNrKFsnaW50cm8nXSk7XG4gIH1cbiAgZ29Ub0ZvcmdvdFBhc3N3b3JkKCk6IHZvaWQge1xuICAgIHRoaXMuX25hdi5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoJywgJ2ZvcmdvdC1wYXNzd29yZCddKTtcbiAgfVxuICBnb1RvUmVnaXN0cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX25hdi5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoJywgJ3NpZ24tdXAnXSk7XG4gIH1cblxuICB0cmFuc2xhdGlvbkV4aXN0cyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3RyYW5zbGF0ZS5fKGtleSk7XG4gIH1cblxuICBhc3luYyBvcGVuTGluayh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IEJyb3dzZXIub3Blbih7IHVybCB9KTtcbiAgfVxufVxuIl19
|