@atlasauth/angular 0.12.0 → 0.13.0
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/CHANGELOG.md +4 -0
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +5 -2
- package/dist/esm2022/lib/components/flow-controller.mjs +37 -2
- package/dist/esm2022/lib/components/sign-in.component.mjs +58 -5
- package/dist/esm2022/lib/i18n.mjs +4 -1
- package/dist/esm2022/lib/version.mjs +2 -2
- package/dist/fesm2022/atlasauth-angular.mjs +99 -5
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/components/attempt-flow.component.d.ts +1 -0
- package/dist/lib/components/flow-controller.d.ts +17 -1
- package/dist/lib/components/sign-in.component.d.ts +5 -0
- package/dist/lib/version.d.ts +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, inject, } from '@angular/core';
|
|
2
|
-
import { lastUsedMethodLabel, signUp as hostedSignUp } from '@atlasauth/js';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, computed, effect, inject, } from '@angular/core';
|
|
2
|
+
import { lastUsedMethodLabel, passkeysSupported, signUp as hostedSignUp } from '@atlasauth/js';
|
|
3
3
|
import { AtlasService } from '../atlas.service';
|
|
4
4
|
import { translate } from '../i18n';
|
|
5
5
|
import { AttemptFlowComponent } from './attempt-flow.component';
|
|
@@ -35,6 +35,12 @@ export class SignInComponent {
|
|
|
35
35
|
return null;
|
|
36
36
|
return lastUsedMethodLabel(this.flow.lastMethod(), (key) => this.t(key));
|
|
37
37
|
}
|
|
38
|
+
/** The "Sign in with Atlas" connection, on the first step, when the instance has it on. */
|
|
39
|
+
atlasConnection() {
|
|
40
|
+
if (this.flow.state().attempt || this.flow.recoveryCodes())
|
|
41
|
+
return null;
|
|
42
|
+
return this.flow.settings()?.signInWithAtlas?.connectionId ?? null;
|
|
43
|
+
}
|
|
38
44
|
signUpHref() {
|
|
39
45
|
if (this.signUpUrl === null)
|
|
40
46
|
return null;
|
|
@@ -54,7 +60,16 @@ export class SignInComponent {
|
|
|
54
60
|
flow = new AtlasFlowController(this.atlas.createFapiClient(), () => this.atlas.reload(),
|
|
55
61
|
// Resume mid-flow if an OAuth redirect came back owing a second factor.
|
|
56
62
|
this.atlas.pendingAttempt, (key) => translate(this.atlas.localization, key));
|
|
63
|
+
// Passkey autofill runs while the first step offers passkeys (a computed, so it re-arms only when that changes).
|
|
64
|
+
passkeyOffered = computed(() => this.flow.passkeyOffered());
|
|
65
|
+
passkeyAutofill = effect(() => (this.passkeyOffered() ? this.flow.passkey.armAutofill() : this.flow.passkey.stopAutofill()));
|
|
66
|
+
submitIdentifier(values) {
|
|
67
|
+
this.flow.passkey.stopAutofill();
|
|
68
|
+
void this.flow.submit(values);
|
|
69
|
+
}
|
|
57
70
|
ngOnInit() {
|
|
71
|
+
if (typeof window !== 'undefined')
|
|
72
|
+
this.flow.passkeySupported.set(passkeysSupported());
|
|
58
73
|
// If seeded from a pending attempt that is already pollable, start polling.
|
|
59
74
|
this.flow.syncPolling();
|
|
60
75
|
// §5 the instance's captcha settings (switching captcha on in the dashboard
|
|
@@ -73,6 +88,14 @@ export class SignInComponent {
|
|
|
73
88
|
{{ t('signIn.lastUsed') }}: {{ label }}
|
|
74
89
|
</p>
|
|
75
90
|
}
|
|
91
|
+
@if (atlasConnection(); as connectionId) {
|
|
92
|
+
<button type="button" class="atlas-social-button" data-atlas-provider="atlas" (click)="flow.signInWithAtlas(connectionId)">
|
|
93
|
+
{{ t('signIn.continueWithAtlas') }}
|
|
94
|
+
</button>
|
|
95
|
+
@if (flow.signInWithAtlasError(); as message) {
|
|
96
|
+
<p class="atlas-error" role="alert">{{ message }}</p>
|
|
97
|
+
}
|
|
98
|
+
}
|
|
76
99
|
@if (flow.recoveryCodes(); as codes) {
|
|
77
100
|
<atlas-recovery-codes [codes]="codes" [busy]="flow.state().busy" (saved)="flow.saveRecoveryCodes()"></atlas-recovery-codes>
|
|
78
101
|
} @else {
|
|
@@ -87,7 +110,7 @@ export class SignInComponent {
|
|
|
87
110
|
[preparedFactor]="flow.preparedFactor()"
|
|
88
111
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
89
112
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
90
|
-
(submitFlow)="
|
|
113
|
+
(submitFlow)="submitIdentifier($event)"
|
|
91
114
|
(chooseFactor)="flow.prepare($event)"
|
|
92
115
|
[offerSmsSecondFactor]="flow.settings() !== null && flow.mfaChoices().sms"
|
|
93
116
|
[textedSecondFactor]="flow.smsSecondFactor()"
|
|
@@ -98,6 +121,17 @@ export class SignInComponent {
|
|
|
98
121
|
(policyDeclined)="flow.declinePolicy($event)"
|
|
99
122
|
></atlas-attempt-flow>
|
|
100
123
|
}
|
|
124
|
+
@if (flow.passkeyOffered() && !flow.recoveryCodes()) {
|
|
125
|
+
<button
|
|
126
|
+
type="button"
|
|
127
|
+
class="atlas-social-button atlas-passkey-button"
|
|
128
|
+
data-atlas-passkey-sign-in=""
|
|
129
|
+
[disabled]="flow.state().busy"
|
|
130
|
+
(click)="flow.passkey.signIn()"
|
|
131
|
+
>
|
|
132
|
+
{{ t('signIn.passkeyButton') }}
|
|
133
|
+
</button>
|
|
134
|
+
}
|
|
101
135
|
@if (flow.state().attempt?.status !== 'complete' && signUpHref(); as href) {
|
|
102
136
|
<p class="atlas-footer" data-atlas-sign-up-prompt="">
|
|
103
137
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|
|
@@ -118,6 +152,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
118
152
|
{{ t('signIn.lastUsed') }}: {{ label }}
|
|
119
153
|
</p>
|
|
120
154
|
}
|
|
155
|
+
@if (atlasConnection(); as connectionId) {
|
|
156
|
+
<button type="button" class="atlas-social-button" data-atlas-provider="atlas" (click)="flow.signInWithAtlas(connectionId)">
|
|
157
|
+
{{ t('signIn.continueWithAtlas') }}
|
|
158
|
+
</button>
|
|
159
|
+
@if (flow.signInWithAtlasError(); as message) {
|
|
160
|
+
<p class="atlas-error" role="alert">{{ message }}</p>
|
|
161
|
+
}
|
|
162
|
+
}
|
|
121
163
|
@if (flow.recoveryCodes(); as codes) {
|
|
122
164
|
<atlas-recovery-codes [codes]="codes" [busy]="flow.state().busy" (saved)="flow.saveRecoveryCodes()"></atlas-recovery-codes>
|
|
123
165
|
} @else {
|
|
@@ -132,7 +174,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
132
174
|
[preparedFactor]="flow.preparedFactor()"
|
|
133
175
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
134
176
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
135
|
-
(submitFlow)="
|
|
177
|
+
(submitFlow)="submitIdentifier($event)"
|
|
136
178
|
(chooseFactor)="flow.prepare($event)"
|
|
137
179
|
[offerSmsSecondFactor]="flow.settings() !== null && flow.mfaChoices().sms"
|
|
138
180
|
[textedSecondFactor]="flow.smsSecondFactor()"
|
|
@@ -143,6 +185,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
143
185
|
(policyDeclined)="flow.declinePolicy($event)"
|
|
144
186
|
></atlas-attempt-flow>
|
|
145
187
|
}
|
|
188
|
+
@if (flow.passkeyOffered() && !flow.recoveryCodes()) {
|
|
189
|
+
<button
|
|
190
|
+
type="button"
|
|
191
|
+
class="atlas-social-button atlas-passkey-button"
|
|
192
|
+
data-atlas-passkey-sign-in=""
|
|
193
|
+
[disabled]="flow.state().busy"
|
|
194
|
+
(click)="flow.passkey.signIn()"
|
|
195
|
+
>
|
|
196
|
+
{{ t('signIn.passkeyButton') }}
|
|
197
|
+
</button>
|
|
198
|
+
}
|
|
146
199
|
@if (flow.state().attempt?.status !== 'complete' && signUpHref(); as href) {
|
|
147
200
|
<p class="atlas-footer" data-atlas-sign-up-prompt="">
|
|
148
201
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|
|
@@ -155,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
155
208
|
}], signUpUrl: [{
|
|
156
209
|
type: Input
|
|
157
210
|
}] } });
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFeEQ7Ozs7Ozs7OztHQVNHO0FBNENILE1BQU0sT0FBTyxlQUFlO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5QyxpRkFBaUY7SUFDeEUsUUFBUSxDQUFVO0lBQzNCOzs7O09BSUc7SUFDTSxTQUFTLENBQWlCO0lBRXpCLENBQUMsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxzRkFBc0Y7SUFDNUUsYUFBYTtRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNDLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFUyxVQUFVO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUM7WUFDSCxPQUFPLFlBQVksQ0FBQztnQkFDbEIsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDbkMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hHLFFBQVEsRUFBRSxLQUFLO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRWtCLElBQUksR0FBRyxJQUFJLG1CQUFtQixDQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQzdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0lBQ3pCLHdFQUF3RTtJQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFDekIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FDakQsQ0FBQztJQUVGLFFBQVE7UUFDTiw0RUFBNEU7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4Qiw0RUFBNEU7UUFDNUUseUVBQXlFO1FBQ3pFLDJDQUEyQztRQUMzQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLENBQUM7d0dBdkRVLGVBQWU7NEZBQWYsZUFBZSxtSUF0Q2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ1QsNERBckNTLG9CQUFvQixnYkFBRSxzQkFBc0I7OzRGQXVDM0MsZUFBZTtrQkEzQzNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsc0JBQXNCLENBQUM7b0JBQ3ZELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUO2lCQUNGOzhCQUtVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxhc3RVc2VkTWV0aG9kTGFiZWwsIHNpZ25VcCBhcyBob3N0ZWRTaWduVXAgfSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB9IGZyb20gJy4vYXR0ZW1wdC1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNvdmVyeUNvZGVzQ29tcG9uZW50IH0gZnJvbSAnLi9yZWNvdmVyeS1jb2Rlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24taW4+YCDigJQgdGhlIGZ1bGwsIG11bHRpLXN0ZXAgc2lnbi1pbiBmbG93IGRyaXZlbiBlbnRpcmVseSBieSB0aGVcbiAqIHNlcnZlci1zaWRlIGF0dGVtcHQgc3RhdHVzLiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3MgYDxTaWduSW4vPmAuIERyYXdzIHRoZVxuICogaW5zdGFuY2UncyBzaWduLWluIGNhcHRjaGEgd2hlbiBpdCBpcyByZXF1aXJlZCAoYWx3YXlzLW9uLCBvciBhXG4gKiBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YXRsYXMtc2lnbi1pbiAqYXRsYXNTaWduZWRPdXQgYWZ0ZXJVcmw9XCIvZGFzaGJvYXJkXCI+PC9hdGxhcy1zaWduLWluPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24taW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0dGVtcHRGbG93Q29tcG9uZW50LCBSZWNvdmVyeUNvZGVzQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGxhc3RVc2VkTGFiZWwoKTsgYXMgbGFiZWwpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dCBhdGxhcy1sYXN0LXVzZWQtaGludFwiIGRhdGEtYXRsYXM9XCJsYXN0LXVzZWRcIiBbYXR0ci5kYXRhLWF0bGFzLW1ldGhvZF09XCJmbG93Lmxhc3RNZXRob2QoKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubGFzdFVzZWQnKSB9fToge3sgbGFiZWwgfX1cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChmbG93LnJlY292ZXJ5Q29kZXMoKTsgYXMgY29kZXMpIHtcbiAgICAgIDxhdGxhcy1yZWNvdmVyeS1jb2RlcyBbY29kZXNdPVwiY29kZXNcIiBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiIChzYXZlZCk9XCJmbG93LnNhdmVSZWNvdmVyeUNvZGVzKClcIj48L2F0bGFzLXJlY292ZXJ5LWNvZGVzPlxuICAgIH0gQGVsc2Uge1xuICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgIFthdHRlbXB0XT1cImZsb3cuc3RhdGUoKS5hdHRlbXB0XCJcbiAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICBbc2Vzc2lvbktlcHRdPVwiZmxvdy5zdGF0ZSgpLnNlc3Npb25LZXB0XCJcbiAgICAgIHRpdGxlS2V5PVwic2lnbkluLnRpdGxlXCJcbiAgICAgIFtjYXB0Y2hhXT1cImZsb3cuY2FwdGNoYURyYXduKCkgPyBmbG93LmNhcHRjaGEgOiBudWxsXCJcbiAgICAgIFtmaXJzdEZhY3RvcnNdPVwiZmxvdy5maXJzdEZhY3RvcnMoKVwiXG4gICAgICBbcHJlcGFyZWRGYWN0b3JdPVwiZmxvdy5wcmVwYXJlZEZhY3RvcigpXCJcbiAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzdWJtaXRGbG93KT1cImZsb3cuc3VibWl0KCRldmVudClcIlxuICAgICAgKGNob29zZUZhY3Rvcik9XCJmbG93LnByZXBhcmUoJGV2ZW50KVwiXG4gICAgICBbb2ZmZXJTbXNTZWNvbmRGYWN0b3JdPVwiZmxvdy5zZXR0aW5ncygpICE9PSBudWxsICYmIGZsb3cubWZhQ2hvaWNlcygpLnNtc1wiXG4gICAgICBbdGV4dGVkU2Vjb25kRmFjdG9yXT1cImZsb3cuc21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgW2Vucm9sbG1lbnRdPVwiZmxvdy5lbnJvbGxtZW50XCJcbiAgICAgIFtlbnJvbGxtZW50U3RhdGVdPVwiZmxvdy5lbnJvbGxtZW50U3RhdGUoKVwiXG4gICAgICAoZW1haWxTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kRW1haWxTZWNvbmRGYWN0b3IoKVwiXG4gICAgICAoc21zU2Vjb25kRmFjdG9yKT1cImZsb3cuc2VuZFNtc1NlY29uZEZhY3RvcigpXCJcbiAgICAgIChwb2xpY3lEZWNsaW5lZCk9XCJmbG93LmRlY2xpbmVQb2xpY3koJGV2ZW50KVwiXG4gICAgPjwvYXRsYXMtYXR0ZW1wdC1mbG93PlxuICAgIH1cbiAgICBAaWYgKGZsb3cuc3RhdGUoKS5hdHRlbXB0Py5zdGF0dXMgIT09ICdjb21wbGV0ZScgJiYgc2lnblVwSHJlZigpOyBhcyBocmVmKSB7XG4gICAgICA8cCBjbGFzcz1cImF0bGFzLWZvb3RlclwiIGRhdGEtYXRsYXMtc2lnbi11cC1wcm9tcHQ9XCJcIj5cbiAgICAgICAge3sgdCgnc2lnbkluLm5vQWNjb3VudCcpIH19IDxhIGNsYXNzPVwiYXRsYXMtbGlua1wiIFtocmVmXT1cImhyZWZcIj57eyB0KCdzaWduSW4uc2lnblVwTGluaycpIH19PC9hPlxuICAgICAgPC9wPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2lnbkluQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGF0bGFzID0gaW5qZWN0KEF0bGFzU2VydmljZSk7XG5cbiAgLyoqIFdoZXJlIHRvIHNlbmQgdGhlIHVzZXIgb25jZSB0aGUgZmxvdyBjb21wbGV0ZXMuIFJlc2VydmVkIGZvciBob3N0IHJvdXRpbmcuICovXG4gIEBJbnB1dCgpIGFmdGVyVXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlcmUgXCJObyBhY2NvdW50PyBTaWduIHVwXCIgZ29lcy4gRGVmYXVsdDogdGhlIGluc3RhbmNlJ3MgaG9zdGVkIHNpZ24tdXBcbiAgICogcGFnZSAoY2FycnlpbmcgdGhlIHZpc2l0b3IncyByZWZlcnJhbCkuIGBudWxsYCBoaWRlcyBpdC4gQWx3YXlzIHNob3duLCBuZXZlclxuICAgKiBvbmx5IGFmdGVyIGEgZmFpbGVkIHNpZ24taW4sIHNvIGl0IHNheXMgbm90aGluZyBhYm91dCB3aGV0aGVyIGFuIGVtYWlsIGhhcyBhbiBhY2NvdW50LlxuICAgKi9cbiAgQElucHV0KCkgc2lnblVwVXJsPzogc3RyaW5nIHwgbnVsbDtcblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5KTtcbiAgfVxuXG4gIC8qKiBcIkxhc3QgdXNlZDogUGFzc3dvcmRcIiBvbiB0aGUgaWRlbnRpZmllciBzdGVwLCB3aGVuIHRoZSBpbnN0YW5jZSBzaG93cyB0aGUgaGludC4gKi9cbiAgcHJvdGVjdGVkIGxhc3RVc2VkTGFiZWwoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBsYXN0VXNlZE1ldGhvZExhYmVsKHRoaXMuZmxvdy5sYXN0TWV0aG9kKCksIChrZXkpID0+IHRoaXMudChrZXkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaWduVXBIcmVmKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLnNpZ25VcFVybCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuc2lnblVwVXJsKSByZXR1cm4gdGhpcy5zaWduVXBVcmw7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBob3N0ZWRTaWduVXAoe1xuICAgICAgICBmcm9udGVuZEFwaTogdGhpcy5hdGxhcy5mcm9udGVuZEFwaSxcbiAgICAgICAgcmVkaXJlY3RVcmw6IHRoaXMuYWZ0ZXJVcmwgPz8gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQpLFxuICAgICAgICBuYXZpZ2F0ZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBmbG93ID0gbmV3IEF0bGFzRmxvd0NvbnRyb2xsZXIoXG4gICAgdGhpcy5hdGxhcy5jcmVhdGVGYXBpQ2xpZW50KCksXG4gICAgKCkgPT4gdGhpcy5hdGxhcy5yZWxvYWQoKSxcbiAgICAvLyBSZXN1bWUgbWlkLWZsb3cgaWYgYW4gT0F1dGggcmVkaXJlY3QgY2FtZSBiYWNrIG93aW5nIGEgc2Vjb25kIGZhY3Rvci5cbiAgICB0aGlzLmF0bGFzLnBlbmRpbmdBdHRlbXB0LFxuICAgIChrZXkpID0+IHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5KSxcbiAgKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJZiBzZWVkZWQgZnJvbSBhIHBlbmRpbmcgYXR0ZW1wdCB0aGF0IGlzIGFscmVhZHkgcG9sbGFibGUsIHN0YXJ0IHBvbGxpbmcuXG4gICAgdGhpcy5mbG93LnN5bmNQb2xsaW5nKCk7XG4gICAgLy8gwqc1IHRoZSBpbnN0YW5jZSdzIGNhcHRjaGEgc2V0dGluZ3MgKHN3aXRjaGluZyBjYXB0Y2hhIG9uIGluIHRoZSBkYXNoYm9hcmRcbiAgICAvLyBkcmF3cyBpdCBoZXJlIHdpdGggbm8gY29kZSBjaGFuZ2UpIGFuZCBlbWFpbCBkZWxpdmVyeSAobm8gZW1haWxlZC1jb2RlXG4gICAgLy8gb3B0aW9uIHdoaWxlIHRoZSBhcHAgY2Fubm90IHNlbmQgZW1haWwpLlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgdm9pZCB0aGlzLmZsb3cubG9hZFNldHRpbmdzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3cuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUV4RDs7Ozs7Ozs7O0dBU0c7QUErREgsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlDLGlGQUFpRjtJQUN4RSxRQUFRLENBQVU7SUFDM0I7Ozs7T0FJRztJQUNNLFNBQVMsQ0FBaUI7SUFFekIsQ0FBQyxDQUFDLEdBQVc7UUFDckIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHNGQUFzRjtJQUM1RSxhQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMs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SUF6RGhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURULDREQXhEUyxvQkFBb0IsZ2JBQUUsc0JBQXNCOzs0RkEwRDNDLGVBQWU7a0JBOUQzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixDQUFDO29CQUN2RCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RFQ7aUJBQ0Y7OEJBS1UsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGFzdFVzZWRNZXRob2RMYWJlbCwgcGFzc2tleXNTdXBwb3J0ZWQsIHNpZ25VcCBhcyBob3N0ZWRTaWduVXAgfSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB9IGZyb20gJy4vYXR0ZW1wdC1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNvdmVyeUNvZGVzQ29tcG9uZW50IH0gZnJvbSAnLi9yZWNvdmVyeS1jb2Rlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24taW4+YCDigJQgdGhlIGZ1bGwsIG11bHRpLXN0ZXAgc2lnbi1pbiBmbG93IGRyaXZlbiBlbnRpcmVseSBieSB0aGVcbiAqIHNlcnZlci1zaWRlIGF0dGVtcHQgc3RhdHVzLiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3MgYDxTaWduSW4vPmAuIERyYXdzIHRoZVxuICogaW5zdGFuY2UncyBzaWduLWluIGNhcHRjaGEgd2hlbiBpdCBpcyByZXF1aXJlZCAoYWx3YXlzLW9uLCBvciBhXG4gKiBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YXRsYXMtc2lnbi1pbiAqYXRsYXNTaWduZWRPdXQgYWZ0ZXJVcmw9XCIvZGFzaGJvYXJkXCI+PC9hdGxhcy1zaWduLWluPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24taW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0dGVtcHRGbG93Q29tcG9uZW50LCBSZWNvdmVyeUNvZGVzQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGxhc3RVc2VkTGFiZWwoKTsgYXMgbGFiZWwpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dCBhdGxhcy1sYXN0LXVzZWQtaGludFwiIGRhdGEtYXRsYXM9XCJsYXN0LXVzZWRcIiBbYXR0ci5kYXRhLWF0bGFzLW1ldGhvZF09XCJmbG93Lmxhc3RNZXRob2QoKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubGFzdFVzZWQnKSB9fToge3sgbGFiZWwgfX1cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChhdGxhc0Nvbm5lY3Rpb24oKTsgYXMgY29ubmVjdGlvbklkKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF0bGFzLXNvY2lhbC1idXR0b25cIiBkYXRhLWF0bGFzLXByb3ZpZGVyPVwiYXRsYXNcIiAoY2xpY2spPVwiZmxvdy5zaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4uY29udGludWVXaXRoQXRsYXMnKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICBAaWYgKGZsb3cuc2lnbkluV2l0aEF0bGFzRXJyb3IoKTsgYXMgbWVzc2FnZSkge1xuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChmbG93LnJlY292ZXJ5Q29kZXMoKTsgYXMgY29kZXMpIHtcbiAgICAgIDxhdGxhcy1yZWNvdmVyeS1jb2RlcyBbY29kZXNdPVwiY29kZXNcIiBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiIChzYXZlZCk9XCJmbG93LnNhdmVSZWNvdmVyeUNvZGVzKClcIj48L2F0bGFzLXJlY292ZXJ5LWNvZGVzPlxuICAgIH0gQGVsc2Uge1xuICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgIFthdHRlbXB0XT1cImZsb3cuc3RhdGUoKS5hdHRlbXB0XCJcbiAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICBbc2Vzc2lvbktlcHRdPVwiZmxvdy5zdGF0ZSgpLnNlc3Npb25LZXB0XCJcbiAgICAgIHRpdGxlS2V5PVwic2lnbkluLnRpdGxlXCJcbiAgICAgIFtjYXB0Y2hhXT1cImZsb3cuY2FwdGNoYURyYXduKCkgPyBmbG93LmNhcHRjaGEgOiBudWxsXCJcbiAgICAgIFtmaXJzdEZhY3RvcnNdPVwiZmxvdy5maXJzdEZhY3RvcnMoKVwiXG4gICAgICBbcHJlcGFyZWRGYWN0b3JdPVwiZmxvdy5wcmVwYXJlZEZhY3RvcigpXCJcbiAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzdWJtaXRGbG93KT1cInN1Ym1pdElkZW50aWZpZXIoJGV2ZW50KVwiXG4gICAgICAoY2hvb3NlRmFjdG9yKT1cImZsb3cucHJlcGFyZSgkZXZlbnQpXCJcbiAgICAgIFtvZmZlclNtc1NlY29uZEZhY3Rvcl09XCJmbG93LnNldHRpbmdzKCkgIT09IG51bGwgJiYgZmxvdy5tZmFDaG9pY2VzKCkuc21zXCJcbiAgICAgIFt0ZXh0ZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5zbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICBbZW5yb2xsbWVudF09XCJmbG93LmVucm9sbG1lbnRcIlxuICAgICAgW2Vucm9sbG1lbnRTdGF0ZV09XCJmbG93LmVucm9sbG1lbnRTdGF0ZSgpXCJcbiAgICAgIChlbWFpbFNlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRFbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzbXNTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kU21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgKHBvbGljeURlY2xpbmVkKT1cImZsb3cuZGVjbGluZVBvbGljeSgkZXZlbnQpXCJcbiAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5wYXNza2V5T2ZmZXJlZCgpICYmICFmbG93LnJlY292ZXJ5Q29kZXMoKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhdGxhcy1zb2NpYWwtYnV0dG9uIGF0bGFzLXBhc3NrZXktYnV0dG9uXCJcbiAgICAgICAgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24taW49XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICAoY2xpY2spPVwiZmxvdy5wYXNza2V5LnNpZ25JbigpXCJcbiAgICAgID5cbiAgICAgICAge3sgdCgnc2lnbkluLnBhc3NrZXlCdXR0b24nKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ2NvbXBsZXRlJyAmJiBzaWduVXBIcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtZm9vdGVyXCIgZGF0YS1hdGxhcy1zaWduLXVwLXByb21wdD1cIlwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubm9BY2NvdW50JykgfX0gPGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5zaWduVXBMaW5rJykgfX08L2E+XG4gICAgICA8L3A+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduSW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogV2hlcmUgdG8gc2VuZCB0aGUgdXNlciBvbmNlIHRoZSBmbG93IGNvbXBsZXRlcy4gUmVzZXJ2ZWQgZm9yIGhvc3Qgcm91dGluZy4gKi9cbiAgQElucHV0KCkgYWZ0ZXJVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVyZSBcIk5vIGFjY291bnQ/IFNpZ24gdXBcIiBnb2VzLiBEZWZhdWx0OiB0aGUgaW5zdGFuY2UncyBob3N0ZWQgc2lnbi11cFxuICAgKiBwYWdlIChjYXJyeWluZyB0aGUgdmlzaXRvcidzIHJlZmVycmFsKS4gYG51bGxgIGhpZGVzIGl0LiBBbHdheXMgc2hvd24sIG5ldmVyXG4gICAqIG9ubHkgYWZ0ZXIgYSBmYWlsZWQgc2lnbi1pbiwgc28gaXQgc2F5cyBub3RoaW5nIGFib3V0IHdoZXRoZXIgYW4gZW1haWwgaGFzIGFuIGFjY291bnQuXG4gICAqL1xuICBASW5wdXQoKSBzaWduVXBVcmw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpO1xuICB9XG5cbiAgLyoqIFwiTGFzdCB1c2VkOiBQYXNzd29yZFwiIG9uIHRoZSBpZGVudGlmaWVyIHN0ZXAsIHdoZW4gdGhlIGluc3RhbmNlIHNob3dzIHRoZSBoaW50LiAqL1xuICBwcm90ZWN0ZWQgbGFzdFVzZWRMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGxhc3RVc2VkTWV0aG9kTGFiZWwodGhpcy5mbG93Lmxhc3RNZXRob2QoKSwgKGtleSkgPT4gdGhpcy50KGtleSkpO1xuICB9XG5cbiAgLyoqIFRoZSBcIlNpZ24gaW4gd2l0aCBBdGxhc1wiIGNvbm5lY3Rpb24sIG9uIHRoZSBmaXJzdCBzdGVwLCB3aGVuIHRoZSBpbnN0YW5jZSBoYXMgaXQgb24uICovXG4gIHByb3RlY3RlZCBhdGxhc0Nvbm5lY3Rpb24oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQgfHwgdGhpcy5mbG93LnJlY292ZXJ5Q29kZXMoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmxvdy5zZXR0aW5ncygpPy5zaWduSW5XaXRoQXRsYXM/LmNvbm5lY3Rpb25JZCA/PyBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25VcEhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2lnblVwVXJsID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5zaWduVXBVcmwpIHJldHVybiB0aGlzLnNpZ25VcFVybDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGhvc3RlZFNpZ25VcCh7XG4gICAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmF0bGFzLmZyb250ZW5kQXBpLFxuICAgICAgICByZWRpcmVjdFVybDogdGhpcy5hZnRlclVybCA/PyAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCksXG4gICAgICAgIG5hdmlnYXRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIC8vIFJlc3VtZSBtaWQtZmxvdyBpZiBhbiBPQXV0aCByZWRpcmVjdCBjYW1lIGJhY2sgb3dpbmcgYSBzZWNvbmQgZmFjdG9yLlxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICApO1xuXG4gIC8vIFBhc3NrZXkgYXV0b2ZpbGwgcnVucyB3aGlsZSB0aGUgZmlyc3Qgc3RlcCBvZmZlcnMgcGFzc2tleXMgKGEgY29tcHV0ZWQsIHNvIGl0IHJlLWFybXMgb25seSB3aGVuIHRoYXQgY2hhbmdlcykuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzc2tleU9mZmVyZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZsb3cucGFzc2tleU9mZmVyZWQoKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXNza2V5QXV0b2ZpbGwgPSBlZmZlY3QoKCkgPT4gKHRoaXMucGFzc2tleU9mZmVyZWQoKSA/IHRoaXMuZmxvdy5wYXNza2V5LmFybUF1dG9maWxsKCkgOiB0aGlzLmZsb3cucGFzc2tleS5zdG9wQXV0b2ZpbGwoKSkpO1xuXG4gIHByb3RlY3RlZCBzdWJtaXRJZGVudGlmaWVyKHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5wYXNza2V5LnN0b3BBdXRvZmlsbCgpO1xuICAgIHZvaWQgdGhpcy5mbG93LnN1Ym1pdCh2YWx1ZXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB0aGlzLmZsb3cucGFzc2tleVN1cHBvcnRlZC5zZXQocGFzc2tleXNTdXBwb3J0ZWQoKSk7XG4gICAgLy8gSWYgc2VlZGVkIGZyb20gYSBwZW5kaW5nIGF0dGVtcHQgdGhhdCBpcyBhbHJlYWR5IHBvbGxhYmxlLCBzdGFydCBwb2xsaW5nLlxuICAgIHRoaXMuZmxvdy5zeW5jUG9sbGluZygpO1xuICAgIC8vIMKnNSB0aGUgaW5zdGFuY2UncyBjYXB0Y2hhIHNldHRpbmdzIChzd2l0Y2hpbmcgY2FwdGNoYSBvbiBpbiB0aGUgZGFzaGJvYXJkXG4gICAgLy8gZHJhd3MgaXQgaGVyZSB3aXRoIG5vIGNvZGUgY2hhbmdlKSBhbmQgZW1haWwgZGVsaXZlcnkgKG5vIGVtYWlsZWQtY29kZVxuICAgIC8vIG9wdGlvbiB3aGlsZSB0aGUgYXBwIGNhbm5vdCBzZW5kIGVtYWlsKS5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHZvaWQgdGhpcy5mbG93LmxvYWRTZXR0aW5ncygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
@@ -22,12 +22,15 @@ export const EN_US = {
|
|
|
22
22
|
'signIn.signUpLink': 'Sign up',
|
|
23
23
|
'signIn.orDivider': 'or',
|
|
24
24
|
'signIn.socialButton': 'Continue with {provider}',
|
|
25
|
+
'signIn.continueWithAtlas': 'Continue with Atlas',
|
|
25
26
|
'signIn.emailCodeLabel': 'Verification code',
|
|
26
27
|
'signIn.useEmailCode': 'Email me a code',
|
|
27
28
|
'signIn.codeSentTo': 'We sent a code to {email}. Enter it below.',
|
|
28
29
|
'signIn.resendCode': 'Resend code',
|
|
29
30
|
'signIn.sending': 'Sending…',
|
|
30
31
|
'signIn.emailCodeOption': 'Email me a code instead',
|
|
32
|
+
'signIn.passkeyButton': 'Sign in with a passkey',
|
|
33
|
+
'signIn.passkeyCancelled': "Passkey sign-in didn't finish. Try again, or use another way to sign in.",
|
|
31
34
|
'signIn.magicLinkSent': 'Check your email for a sign-in link.',
|
|
32
35
|
'signIn.signedIn': 'You\'re signed in.',
|
|
33
36
|
'signIn.sessionNotKept': 'You signed in, but this browser didn\'t keep the session. If it blocks third-party cookies, allow cookies for this site and try again.',
|
|
@@ -205,4 +208,4 @@ export function translate(catalog, key, variables = {}) {
|
|
|
205
208
|
export function withFallback(locale) {
|
|
206
209
|
return { ...EN_US, ...locale };
|
|
207
210
|
}
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQVk7SUFDNUIsY0FBYyxFQUFFLFNBQVM7SUFDekIsaUJBQWlCLEVBQUUsOEJBQThCO0lBQ2pELHdCQUF3QixFQUFFLGVBQWU7SUFDekMsc0JBQXNCLEVBQUUsVUFBVTtJQUNsQyxlQUFlLEVBQUUsVUFBVTtJQUMzQix1QkFBdUIsRUFBRSxrQkFBa0I7SUFDM0Msa0JBQWtCLEVBQUUsYUFBYTtJQUNqQyxpQkFBaUIsRUFBRSxXQUFXO0lBQzlCLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsdUJBQXVCLEVBQUUsbUJBQW1CO0lBQzVDLHFCQUFxQixFQUFFLGlCQUFpQjtJQUN4QyxtQkFBbUIsRUFBRSw0Q0FBNEM7SUFDakUsbUJBQW1CLEVBQUUsYUFBYTtJQUNsQyxnQkFBZ0IsRUFBRSxVQUFVO0lBQzVCLHdCQUF3QixFQUFFLHlCQUF5QjtJQUNuRCxzQkFBc0IsRUFBRSxzQ0FBc0M7SUFDOUQsaUJBQWlCLEVBQUUsb0JBQW9CO0lBQ3ZDLHVCQUF1QixFQUNyQix3SUFBd0k7SUFDMUksc0JBQXNCLEVBQUUsK0RBQStEO0lBRXZGLGNBQWMsRUFBRSxxQkFBcUI7SUFDckMsZUFBZSxFQUFFLFVBQVU7SUFDM0Isb0JBQW9CLEVBQUUsMEJBQTBCO0lBQ2hELG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsbUJBQW1CLEVBQUUsZUFBZTtJQUNwQyxzQkFBc0IsRUFBRSxVQUFVO0lBQ2xDLHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QywwQkFBMEIsRUFBRSxTQUFTO0lBQ3JDLHFCQUFxQixF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dkIsT0FBZ0IsRUFDaEIsR0FBVyxFQUNYLFlBQW9DLEVBQUU7SUFFdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZTtJQUMxQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjM6IFwiRXZlcnkgc3RyaW5nIHBhc3NlcyB0aHJvdWdoIGFuIGkxOG4gY2F0YWxvZzsgZW4tVVMgc2hpcHMsIGNhdGFsb2dcbiAqIGZvcm1hdCBkb2N1bWVudGVkIGZvciBjb21tdW5pdHkgbG9jYWxlcy5cIlxuICpcbiAqIEEgZmxhdCBrZXktdG8tc3RyaW5nIG1hcCByYXRoZXIgdGhhbiBuZXN0ZWQgb2JqZWN0cywgYmVjYXVzZSBuZXN0aW5nIGxvb2tzXG4gKiB0aWRpZXIgYW5kIG1ha2VzIGEgbWlzc2luZyBrZXkgYSBydW50aW1lIGNyYXNoIG9uIGB1bmRlZmluZWQub2YuYS5jaGFpbmBcbiAqIHJhdGhlciB0aGFuIGEgdmlzaWJsZSBmYWxsYmFjay5cbiAqXG4gKiBBIG1pc3Npbmcga2V5IHJlbmRlcnMgdGhlIEtFWSwgbm90IGFuIGVtcHR5IHN0cmluZy4gQSBibGFuayBidXR0b24gaXMgYSBidWdcbiAqIG5vYm9keSBjYW4gcmVwb3J0OyBhIGJ1dHRvbiByZWFkaW5nIGBzaWduSW4uc3VibWl0YCBpcyBvbmUgYW55b25lIGNhbi5cbiAqL1xuXG5pbXBvcnQgeyBQT0xJQ1lfU1RSSU5HUyB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuXG5leHBvcnQgdHlwZSBDYXRhbG9nID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZXhwb3J0IGNvbnN0IEVOX1VTOiBDYXRhbG9nID0ge1xuICAnc2lnbkluLnRpdGxlJzogJ1NpZ24gaW4nLFxuICAnc2lnbkluLnN1YnRpdGxlJzogJ3RvIGNvbnRpbnVlIHRvIHthcHBsaWNhdGlvbn0nLFxuICAnc2lnbkluLmlkZW50aWZpZXJMYWJlbCc6ICdFbWFpbCBhZGRyZXNzJyxcbiAgJ3NpZ25Jbi5wYXNzd29yZExhYmVsJzogJ1Bhc3N3b3JkJyxcbiAgJ3NpZ25Jbi5zdWJtaXQnOiAnQ29udGludWUnLFxuICAnc2lnbkluLmZvcmdvdFBhc3N3b3JkJzogJ0ZvcmdvdCBwYXNzd29yZD8nLFxuICAnc2lnbkluLm5vQWNjb3VudCc6ICdObyBhY2NvdW50PycsXG4gICdzaWduSW4ubGFzdFVzZWQnOiAnTGFzdCB1c2VkJyxcbiAgJ3NpZ25Jbi5zaWduVXBMaW5rJzogJ1NpZ24gdXAnLFxuICAnc2lnbkluLm9yRGl2aWRlcic6ICdvcicsXG4gICdzaWduSW4uc29jaWFsQnV0dG9uJzogJ0NvbnRpbnVlIHdpdGgge3Byb3ZpZGVyfScsXG4gICdzaWduSW4uZW1haWxDb2RlTGFiZWwnOiAnVmVyaWZpY2F0aW9uIGNvZGUnLFxuICAnc2lnbkluLnVzZUVtYWlsQ29kZSc6ICdFbWFpbCBtZSBhIGNvZGUnLFxuICAnc2lnbkluLmNvZGVTZW50VG8nOiAnV2Ugc2VudCBhIGNvZGUgdG8ge2VtYWlsfS4gRW50ZXIgaXQgYmVsb3cuJyxcbiAgJ3NpZ25Jbi5yZXNlbmRDb2RlJzogJ1Jlc2VuZCBjb2RlJyxcbiAgJ3NpZ25Jbi5zZW5kaW5nJzogJ1NlbmRpbmfigKYnLFxuICAnc2lnbkluLmVtYWlsQ29kZU9wdGlvbic6ICdFbWFpbCBtZSBhIGNvZGUgaW5zdGVhZCcsXG4gICdzaWduSW4ubWFnaWNMaW5rU2VudCc6ICdDaGVjayB5b3VyIGVtYWlsIGZvciBhIHNpZ24taW4gbGluay4nLFxuICAnc2lnbkluLnNpZ25lZEluJzogJ1lvdVxcJ3JlIHNpZ25lZCBpbi4nLFxuICAnc2lnbkluLnNlc3Npb25Ob3RLZXB0JzpcbiAgICAnWW91IHNpZ25lZCBpbiwgYnV0IHRoaXMgYnJvd3NlciBkaWRuXFwndCBrZWVwIHRoZSBzZXNzaW9uLiBJZiBpdCBibG9ja3MgdGhpcmQtcGFydHkgY29va2llcywgYWxsb3cgY29va2llcyBmb3IgdGhpcyBzaXRlIGFuZCB0cnkgYWdhaW4uJyxcbiAgJ3NpZ25Jbi5jaGVja090aGVyVGFiJzogJ1lvdSBjYW4gY2xvc2UgdGhpcyB0YWIg4oCUIHlvdSBhcmUgc2lnbmVkIGluIHdoZXJlIHlvdSBzdGFydGVkLicsXG5cbiAgJ3NpZ25VcC50aXRsZSc6ICdDcmVhdGUgeW91ciBhY2NvdW50JyxcbiAgJ3NpZ25VcC5zdWJtaXQnOiAnQ29udGludWUnLFxuICAnc2lnblVwLmhhdmVBY2NvdW50JzogJ0FscmVhZHkgaGF2ZSBhbiBhY2NvdW50PycsXG4gICdzaWduVXAuc2lnbkluTGluayc6ICdTaWduIGluJyxcbiAgJ3NpZ25VcC5lbWFpbExhYmVsJzogJ0VtYWlsIGFkZHJlc3MnLFxuICAnc2lnblVwLnBhc3N3b3JkTGFiZWwnOiAnUGFzc3dvcmQnLFxuICAnc2lnblVwLm9wdGlvbmFsRmllbGQnOiAne2xhYmVsfSAob3B0aW9uYWwpJyxcbiAgJ3NpZ25VcC5zZWxlY3RQbGFjZWhvbGRlcic6ICdTZWxlY3TigKYnLFxuICAnc2lnblVwLmNvbnNlbnRBZ3JlZSc6ICdJIGFncmVlIHRvIHRoZScsXG4gICdzaWduVXAuY29uc2VudE5vdGljZSc6ICdCeSBjb250aW51aW5nIHlvdSBhZ3JlZSB0byB0aGUnLFxuICAnc2lnblVwLnRlcm1zJzogJ1Rlcm1zIG9mIFNlcnZpY2UnLFxuICAnc2lnblVwLnByaXZhY3knOiAnUHJpdmFjeSBQb2xpY3knLFxuICAnc2lnblVwLmFuZCc6ICdhbmQnLFxuICAvLyA9IEVNQUlMX1VOQVZBSUxBQkxFX01FU1NBR0UgZnJvbSBAYXRsYXNhdXRoL2pzLlxuICAnc2lnblVwLmVtYWlsVW5hdmFpbGFibGUnOlxuICAgIFwiVGhpcyBhcHAgY2FuJ3Qgc2VuZCBlbWFpbCByaWdodCBub3cuIFRyeSBhbm90aGVyIHNpZ24taW4gbWV0aG9kIG9yIGNvbnRhY3QgdGhlIGFwcCBvd25lci5cIixcbiAgJ3NpZ25VcC5wYXNza2V5T3B0aW9uJzogJ1NpZ24gdXAgd2l0aCBhIHBhc3NrZXkgaW5zdGVhZCcsXG4gICdzaWduVXAucGFzc3dvcmRPcHRpb24nOiAnU2lnbiB1cCB3aXRoIGEgcGFzc3dvcmQgaW5zdGVhZCcsXG4gICdzaWduVXAucGFzc2tleUludHJvJzogXCJObyBwYXNzd29yZCBuZWVkZWQ6IHlvdSdsbCBzaWduIGluIHdpdGggYSBwYXNza2V5IHNhdmVkIG9uIHRoaXMgZGV2aWNlIG9yIGluIHlvdXIgcGFzc3dvcmQgbWFuYWdlci5cIixcbiAgJ3NpZ25VcC5wYXNza2V5UHJvbXB0JzogJ0NyZWF0ZSBhIHBhc3NrZXkgdG8gZmluaXNoIHNldHRpbmcgdXAgeW91ciBhY2NvdW50LicsXG4gICdzaWduVXAucGFzc2tleUNyZWF0ZSc6ICdDcmVhdGUgcGFzc2tleScsXG4gICdzaWduVXAucGFzc2tleUNhbmNlbGxlZCc6IFwiVGhlIHBhc3NrZXkgd2Fzbid0IGNyZWF0ZWQuIFRyeSBhZ2FpbiB3aGVuIHlvdSdyZSByZWFkeS5cIixcbiAgJ3NpZ25VcC5saW5rU2VudFRvJzogJ1dlIHNlbnQgYSBjb25maXJtYXRpb24gbGluayB0byB7ZW1haWx9LiBPcGVuIGl0IG9uIGFueSBkZXZpY2U7IHRoaXMgcGFnZSBjb250aW51ZXMgb24gaXRzIG93bi4nLFxuXG4gICdjYXB0Y2hhLnByb21wdCc6ICdDb21wbGV0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgdG8gY29udGludWUuJyxcbiAgJ2NhcHRjaGEucmVxdWlyZWQnOiAnUGxlYXNlIGNvbXBsZXRlIHRoZSBzZWN1cml0eSBjaGVjaywgdGhlbiB0cnkgYWdhaW4uJyxcbiAgJ2NhcHRjaGEuZmFpbGVkJzogXCJUaGUgc2VjdXJpdHkgY2hlY2sgZGlkbid0IHBhc3MuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICdjYXB0Y2hhLmNoZWNraW5nJzogJ0NoZWNraW5nIHlvdXIgYnJvd3NlcuKApicsXG4gICdjYXB0Y2hhLnZlcmlmaWVkJzogJ1NlY3VyaXR5IGNoZWNrIGNvbXBsZXRlLicsXG4gICdjYXB0Y2hhLnB1enpsZVByb21wdCc6IFwiU2VsZWN0IGV2ZXJ5IHBpY3R1cmUgdGhhdCBzaG93cyB0aGUgc2FtZSBzaGFwZSBhcyB0aGlzIG9uZS4gQ29sb3VyIGFuZCBzaXplIGRvbid0IG1hdHRlci5cIixcbiAgJ2NhcHRjaGEucHV6emxlQ29uZmlybSc6ICdDb25maXJtJyxcbiAgJ2NhcHRjaGEucHV6emxlVGlsZSc6ICdQaWN0dXJlIHtufScsXG4gICdjYXB0Y2hhLnB1enpsZUFsdGVybmF0aXZlJzogXCJDYW4ndCBkbyB0aGUgcGljdHVyZSBjaGVjaz8gVXNlIGEgbG9uZ2VyIGF1dG9tYXRpYyBjaGVjayBpbnN0ZWFkLlwiLFxuXG4gICdtZmEudGl0bGUnOiAnVHdvLXN0ZXAgdmVyaWZpY2F0aW9uJyxcbiAgJ21mYS5zdWJ0aXRsZSc6ICdFbnRlciB0aGUgY29kZSBmcm9tIHlvdXIgYXV0aGVudGljYXRvciBhcHAuJyxcbiAgJ21mYS5jb2RlTGFiZWwnOiAnQ29kZScsXG4gICdtZmEuZW5yb2xsRmlyc3RDb2RlTGFiZWwnOiAnQ29kZSBmcm9tIHlvdXIgYXV0aGVudGljYXRvciBhcHAnLFxuICAnbWZhLmVucm9sbFNlY29uZENvZGVMYWJlbCc6ICdUaGUgbmV4dCBjb2RlIGl0IHNob3dzJyxcbiAgJ21mYS51c2VQYXNza2V5JzogJ1VzZSBhIHBhc3NrZXkgaW5zdGVhZCcsXG4gICdtZmEudXNlQmFja3VwQ29kZSc6ICdVc2UgYSByZWNvdmVyeSBjb2RlJyxcbiAgJ21mYS5zdWJtaXQnOiAnVmVyaWZ5JyxcbiAgJ21mYS5lbnJvbGxDaG9vc2UnOiAnU2V0IHVwIGEgc2Vjb25kIHN0ZXAgZm9yIHNpZ25pbmcgaW4uJyxcbiAgJ21mYS5lbnJvbGxUb3RwT3B0aW9uJzogJ1VzZSBhbiBhdXRoZW50aWNhdG9yIGFwcCcsXG4gICdtZmEuZW5yb2xsU21zT3B0aW9uJzogJ1VzZSB0ZXh0IG1lc3NhZ2VzJyxcbiAgJ21mYS5lbnJvbGxTY2FuJzogJ1NjYW4gdGhpcyBRUiBjb2RlIHdpdGggeW91ciBhdXRoZW50aWNhdG9yIGFwcCwgb3IgZW50ZXIgdGhlIHNldHVwIGtleS4nLFxuICAnbWZhLmVucm9sbFFyQWx0JzogJ1FSIGNvZGUgZm9yIHlvdXIgYXV0aGVudGljYXRvciBhcHAnLFxuICAnbWZhLmVucm9sbFNldHVwS2V5JzogJ1NldHVwIGtleScsXG4gICdtZmEuZW5yb2xsUHJlcGFyaW5nJzogJ1NldHRpbmcgdXDigKYnLFxuICAnbWZhLnBob25lTGFiZWwnOiAnTW9iaWxlIG51bWJlcicsXG4gICdtZmEucGhvbmVIaW50JzogJ0luY2x1ZGUgdGhlIGNvdW50cnkgY29kZSwgZm9yIGV4YW1wbGUgKzE0MTU1NTUwMTAxLicsXG4gICdtZmEuc2VuZENvZGUnOiAnVGV4dCBtZSBhIGNvZGUnLFxuICAnbWZhLmNvZGVUZXh0ZWRUbyc6ICdFbnRlciB0aGUgY29kZSB3ZSB0ZXh0ZWQgdG8ge3Bob25lfS4nLFxuICAnbWZhLnNtc0NvZGVPcHRpb24nOiAnVGV4dCBtZSBhIGNvZGUgaW5zdGVhZCcsXG4gICdtZmEucmVjb3ZlcnlDb2Rlc1RpdGxlJzogJ1NhdmUgeW91ciByZWNvdmVyeSBjb2RlcycsXG4gICdtZmEucmVjb3ZlcnlDb2Rlc0hlbHAnOiBcIkVhY2ggY29kZSB3b3JrcyBvbmNlLiBJZiB5b3UgY2FuJ3QgdXNlIHlvdXIgc2Vjb25kIHN0ZXAsIHNpZ24gaW4gd2l0aCBvbmUgb2YgdGhlc2UuIEtlZXAgdGhlbSBzb21ld2hlcmUgc2FmZTogdGhleSB3b24ndCBiZSBzaG93biBhZ2Fpbi5cIixcbiAgJ21mYS5yZWNvdmVyeUNvZGVzQ29weSc6ICdDb3B5IGNvZGVzJyxcbiAgJ21mYS5yZWNvdmVyeUNvZGVzQ29waWVkJzogJ0NvcGllZC4nLFxuICAnbWZhLnJlY292ZXJ5Q29kZXNEb3dubG9hZCc6ICdEb3dubG9hZCBhcyAudHh0JyxcbiAgJ21mYS5yZWNvdmVyeUNvZGVzU2F2ZWQnOiBcIkkndmUgc2F2ZWQgbXkgY29kZXNcIixcblxuICAncmVzZXQudGl0bGUnOiAnUmVzZXQgeW91ciBwYXNzd29yZCcsXG4gICdyZXNldC5zdWJtaXQnOiAnU2VuZCByZXNldCBjb2RlJyxcbiAgJ3Jlc2V0Lm5ld1Bhc3N3b3JkTGFiZWwnOiAnTmV3IHBhc3N3b3JkJyxcblxuICAndXNlckJ1dHRvbi5tYW5hZ2VBY2NvdW50JzogJ01hbmFnZSBhY2NvdW50JyxcbiAgJ3VzZXJCdXR0b24uc2lnbk91dCc6ICdTaWduIG91dCcsXG4gICd1c2VyQnV0dG9uLnNpZ25PdXRBbGwnOiAnU2lnbiBvdXQgb2YgYWxsIGRldmljZXMnLFxuXG4gICd1c2VyUHJvZmlsZS50aXRsZSc6ICdBY2NvdW50JyxcbiAgJ3VzZXJQcm9maWxlLnByb2ZpbGVTZWN0aW9uJzogJ1Byb2ZpbGUnLFxuICAndXNlclByb2ZpbGUuZW1haWxzU2VjdGlvbic6ICdFbWFpbCBhZGRyZXNzZXMnLFxuICAndXNlclByb2ZpbGUuc2VjdXJpdHlTZWN0aW9uJzogJ1NlY3VyaXR5JyxcbiAgJ3VzZXJQcm9maWxlLmRldmljZXNTZWN0aW9uJzogJ0FjdGl2ZSBkZXZpY2VzJyxcbiAgJ3VzZXJQcm9maWxlLmRhbmdlclNlY3Rpb24nOiAnRGFuZ2VyIHpvbmUnLFxuICAndXNlclByb2ZpbGUuYWRkRW1haWwnOiAnQWRkIGFuIGVtYWlsIGFkZHJlc3MnLFxuICAndXNlclByb2ZpbGUubWFrZVByaW1hcnknOiAnTWFrZSBwcmltYXJ5JyxcbiAgJ3VzZXJQcm9maWxlLnVudmVyaWZpZWQnOiAnVW52ZXJpZmllZCcsXG4gICd1c2VyUHJvZmlsZS52ZXJpZnknOiAnVmVyaWZ5JyxcbiAgJ3VzZXJQcm9maWxlLnZlcmlmeUNvbmZpcm0nOiAnQ29uZmlybScsXG4gICd1c2VyUHJvZmlsZS52ZXJpZnlDb2RlUGxhY2Vob2xkZXInOiAnQ29kZSBmcm9tIHRoZSBlbWFpbCcsXG4gICd1c2VyUHJvZmlsZS52ZXJpZnlTZW5kRmFpbGVkJzogJ1dlIGNvdWxkIG5vdCBzZW5kIGEgY29kZSByaWdodCBub3cuIFRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nLFxuICAndXNlclByb2ZpbGUudmVyaWZ5Q29kZVJlamVjdGVkJzogJ1RoYXQgY29kZSB3YXMgbm90IGFjY2VwdGVkLicsXG4gICd1c2VyUHJvZmlsZS5yZXZva2VEZXZpY2UnOiAnU2lnbiBvdXQnLFxuICAndXNlclByb2ZpbGUuZGVsZXRlQWNjb3VudCc6ICdEZWxldGUgYWNjb3VudCcsXG5cbiAgJ29yZ2FuaXphdGlvbi5zd2l0Y2hlcic6ICdTd2l0Y2ggb3JnYW5pemF0aW9uJyxcbiAgJ29yZ2FuaXphdGlvbi5wZXJzb25hbCc6ICdQZXJzb25hbCBhY2NvdW50JyxcbiAgJ29yZ2FuaXphdGlvbi5tZW1iZXJzJzogJ01lbWJlcnMnLFxuICAnb3JnYW5pemF0aW9uLmludml0ZSc6ICdJbnZpdGUgbWVtYmVyJyxcbiAgJ29yZ2FuaXphdGlvbi5yb2xlTGFiZWwnOiAnUm9sZScsXG4gICdvcmdhbml6YXRpb24uaW52aXRhdGlvbnMnOiAnSW52aXRhdGlvbnMnLFxuICAnb3JnYW5pemF0aW9uLnNldHRpbmdzJzogJ1NldHRpbmdzJyxcbiAgJ29yZ2FuaXphdGlvbi5lbWFpbExhYmVsJzogJ0VtYWlsIGFkZHJlc3MnLFxuICAnb3JnYW5pemF0aW9uLnNlbmRJbnZpdGUnOiAnU2VuZCBpbnZpdGF0aW9uJyxcbiAgJ29yZ2FuaXphdGlvbi5ub0ludml0YXRpb25zJzogJ05vIHBlbmRpbmcgaW52aXRhdGlvbnMuJyxcbiAgJ29yZ2FuaXphdGlvbi5yZW1vdmUnOiAnUmVtb3ZlJyxcbiAgJ29yZ2FuaXphdGlvbi5yZXZva2UnOiAnUmV2b2tlJyxcbiAgJ29yZ2FuaXphdGlvbi5yZXNlbmQnOiAnUmVzZW5kJyxcbiAgJ29yZ2FuaXphdGlvbi55b3UnOiAnKHlvdSknLFxuICAnb3JnYW5pemF0aW9uLmxlYXZlJzogJ0xlYXZlIG9yZ2FuaXphdGlvbicsXG4gICdvcmdhbml6YXRpb24ubGVhdmVDb25maXJtJzogJ0xlYXZlIHtuYW1lfT8gWW91IHdpbGwgbG9zZSBhY2Nlc3MgdW50aWwgeW91IGFyZSBpbnZpdGVkIGFnYWluLicsXG4gICdvcmdhbml6YXRpb24uZGVsZXRlJzogJ0RlbGV0ZSBvcmdhbml6YXRpb24nLFxuICAnb3JnYW5pemF0aW9uLmRlbGV0ZUNvbmZpcm0nOiAnRGVsZXRlIHtuYW1lfSBmb3IgZXZlcnkgbWVtYmVyPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuJyxcbiAgJ29yZ2FuaXphdGlvbi5jb25maXJtJzogJ0NvbmZpcm0nLFxuICAnb3JnYW5pemF0aW9uLmNhbmNlbCc6ICdDYW5jZWwnLFxuICAnb3JnYW5pemF0aW9uLnVubmFtZWRNZW1iZXInOiAnVW5uYW1lZCBtZW1iZXInLFxuICAnb3JnYW5pemF0aW9uLnBhc3N3b3JkUHJvbXB0JzogJ0VudGVyIHlvdXIgcGFzc3dvcmQgdG8gY29uZmlybS4nLFxuICAnb3JnYW5pemF0aW9uLnJvbGVzJzogJ1JvbGVzJyxcbiAgJ29yZ2FuaXphdGlvbi5yb2xlTmFtZSc6ICdSb2xlIG5hbWUnLFxuICAnb3JnYW5pemF0aW9uLnJvbGVLZXknOiAnUm9sZSBrZXkgKGZvciBleGFtcGxlIG9yZzphdWRpdG9yKScsXG4gICdvcmdhbml6YXRpb24ucm9sZVBlcm1pc3Npb25zJzogJ1Blcm1pc3Npb25zJyxcbiAgJ29yZ2FuaXphdGlvbi5jcmVhdGVSb2xlJzogJ0NyZWF0ZSByb2xlJyxcbiAgJ29yZ2FuaXphdGlvbi5zYXZlUm9sZSc6ICdTYXZlIHJvbGUnLFxuICAnb3JnYW5pemF0aW9uLmVkaXRSb2xlJzogJ0VkaXQnLFxuICAnb3JnYW5pemF0aW9uLmRlbGV0ZVJvbGUnOiAnRGVsZXRlJyxcbiAgJ29yZ2FuaXphdGlvbi5ub0N1c3RvbVJvbGVzJzogJ1RoaXMgb3JnYW5pemF0aW9uIGhhcyBubyByb2xlcyBvZiBpdHMgb3duIHlldC4nLFxuICAnaW1wZXJzb25hdGlvbi5iYW5uZXInOiAnWW91IGFyZSBzaWduZWQgaW4gYXMge25hbWV9IG9uIHNvbWVvbmUgZWxzZVxcJ3MgYmVoYWxmLicsXG4gICdpbXBlcnNvbmF0aW9uLnJldHVyblRvQWRtaW4nOiAnUmV0dXJuIHRvIGFkbWluJyxcbiAgJ2ltcGVyc29uYXRpb24uZW5kJzogJ0VuZCBpbXBlcnNvbmF0aW9uJyxcblxuICAvLyBQb2xpY3kgYWNjZXB0YW5jZSAodGVybXMsIHByaXZhY3ksIGFueSBwb2xpY3kpLlxuICAuLi5QT0xJQ1lfU1RSSU5HUyxcblxuICAnZXJyb3IuZ2VuZXJpYyc6ICdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAnZXJyb3IubmV0d29yayc6ICdXZSBjb3VsZCBub3QgcmVhY2ggdGhlIHNlcnZlci4gQ2hlY2sgeW91ciBjb25uZWN0aW9uLicsXG5cbiAgLy8gU2VydmVyIGVycm9ycywgYnkgdGhlIHN0YWJsZSBgcmVhc29uYCB0aGUgRnJvbnRlbmQgQVBJIHNlbmRzLiBTaG93biBpbnN0ZWFkXG4gIC8vIG9mIHRoZSBzZXJ2ZXIncyBgbWVzc2FnZWAgKHNlZSBgbG9jYWxpemVkRXJyb3JNZXNzYWdlYCBpbiBAYXRsYXNhdXRoL2pzKS5cbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfaW5jb3JyZWN0JzogJ1Rob3NlIGNyZWRlbnRpYWxzIGFyZSBpbmNvcnJlY3QuJyxcbiAgJ2Vycm9yLmZvcm1fY29kZV9pbmNvcnJlY3QnOiAnVGhhdCBjb2RlIGlzIGluY29ycmVjdC4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX2FscmVhZHlfdXNlZCc6ICdUaGF0IGNvZGUgaGFzIGFscmVhZHkgYmVlbiB1c2VkLiBXYWl0IGZvciBhIG5ldyBvbmUuJyxcbiAgJ2Vycm9yLmZvcm1fY29kZV9leHBpcmVkJzogJ1RoYXQgY29kZSBoYXMgZXhwaXJlZC4gUmVxdWVzdCBhIG5ldyBvbmUuJyxcbiAgJ2Vycm9yLmZvcm1fY29kZV9tYXhfYXR0ZW1wdHMnOiAnVG9vIG1hbnkgaW5jb3JyZWN0IGNvZGVzLiBSZXF1ZXN0IGEgbmV3IGNvZGUuJyxcbiAgJ2Vycm9yLmZvcm1fbGlua19pbnZhbGlkJzogJ1RoYXQgc2lnbi1pbiBsaW5rIGlzIGludmFsaWQgb3IgaGFzIGFscmVhZHkgYmVlbiB1c2VkLicsXG4gICdlcnJvci5mb3JtX2lkZW50aWZpZXJfbm90X2ZvdW5kJzogXCJXZSBjb3VsZG4ndCBmaW5kIGFuIGFjY291bnQgd2l0aCB0aG9zZSBkZXRhaWxzLlwiLFxuICAnZXJyb3IuZm9ybV9pZGVudGlmaWVyX2V4aXN0cyc6IFwiVGhlcmUncyBhbHJlYWR5IGFuIGFjY291bnQgZm9yIHRoaXMgZW1haWwuIFNpZ24gaW4gd2l0aCB7bWV0aG9kc30uXCIsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3B3bmVkJzogJ1RoaXMgcGFzc3dvcmQgaGFzIGFwcGVhcmVkIGluIGEga25vd24gZGF0YSBicmVhY2guIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3Rvb19zaG9ydCc6ICdQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IHttaW5fbGVuZ3RofSBjaGFyYWN0ZXJzLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3Rvb19sb25nJzogJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbW9zdCB7bWF4X2xlbmd0aH0gY2hhcmFjdGVycy4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXF1aXJlc191cHBlcmNhc2UnOiAnUGFzc3dvcmQgbXVzdCBjb250YWluIGFuIHVwcGVyY2FzZSBsZXR0ZXIuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcmVxdWlyZXNfbG93ZXJjYXNlJzogJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhIGxvd2VyY2FzZSBsZXR0ZXIuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcmVxdWlyZXNfbnVtYmVyJzogJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhIG51bWJlci4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXF1aXJlc19zeW1ib2wnOiAnUGFzc3dvcmQgbXVzdCBjb250YWluIGEgc3ltYm9sLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX25vdF9hbGxvd2VkJzogJ1RoYXQgcGFzc3dvcmQgaXMgbm90IGFsbG93ZWQuIENob29zZSBhIGRpZmZlcmVudCBvbmUuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfY29udGFpbnNfaWRlbnRpZmllcic6ICdQYXNzd29yZCBtdXN0IG5vdCBjb250YWluIHlvdXIgZW1haWwgb3IgdXNlcm5hbWUuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfc2FtZV9hc19jdXJyZW50JzogJ1lvdXIgbmV3IHBhc3N3b3JkIG11c3QgYmUgZGlmZmVyZW50IGZyb20geW91ciBjdXJyZW50IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXVzZWQnOiAnWW91ciBuZXcgcGFzc3dvcmQgbXVzdCBub3QgbWF0Y2ggYW55IG9mIHlvdXIgbGFzdCB7aGlzdG9yeV9jb3VudH0gcGFzc3dvcmRzLicsXG4gICdlcnJvci5wYXNzd29yZF9leHBpcmVkJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGV4cGlyZWQuIFJlc2V0IGl0IHRvIGNvbnRpbnVlLicsXG4gICdlcnJvci5lbWFpbF9ub3RfdmVyaWZpZWQnOiAnWW91ciBlbWFpbCBhZGRyZXNzIGlzIG5vdCB2ZXJpZmllZCB5ZXQuIFZlcmlmeSBpdCBiZWZvcmUgc2lnbmluZyBpbiB3aXRoIHlvdXIgcGFzc3dvcmQuJyxcbiAgJ2Vycm9yLnNpZ25faW5fdG9rZW5faW52YWxpZCc6ICdUaGF0IHNpZ24taW4gdG9rZW4gaXMgaW52YWxpZCBvciBoYXMgZXhwaXJlZC4nLFxuICAnZXJyb3IudG9vX21hbnlfYXR0ZW1wdHMnOiAnVG9vIG1hbnkgZmFpbGVkIGF0dGVtcHRzLiBUcnkgYWdhaW4gbGF0ZXIuJyxcbiAgJ2Vycm9yLnRvb19tYW55X3JlcXVlc3RzJzogJ1RvbyBtYW55IHJlcXVlc3RzLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICdlcnJvci5jYXB0Y2hhX3JlcXVpcmVkJzogJ1BsZWFzZSBjb21wbGV0ZSB0aGUgc2VjdXJpdHkgY2hlY2ssIHRoZW4gdHJ5IGFnYWluLicsXG4gICdlcnJvci5jYXB0Y2hhX2ZhaWxlZCc6IFwiVGhlIHNlY3VyaXR5IGNoZWNrIGRpZG4ndCBwYXNzLiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxuICAnZXJyb3IuY2FwdGNoYV91bmF2YWlsYWJsZSc6ICdUaGUgc2VjdXJpdHkgY2hlY2sgaXMgdW5hdmFpbGFibGUgcmlnaHQgbm93LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICdlcnJvci5lbWFpbF9kZWxpdmVyeV91bmF2YWlsYWJsZSc6IFwiVGhpcyBhcHAgY2FuJ3Qgc2VuZCBlbWFpbCByaWdodCBub3cuIFRyeSBhbm90aGVyIHNpZ24taW4gbWV0aG9kIG9yIGNvbnRhY3QgdGhlIGFwcCBvd25lci5cIixcbiAgJ2Vycm9yLnN0cmF0ZWd5X2Rpc2FibGVkJzogJ1RoaXMgc2lnbi1pbiBtZXRob2QgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBhcHAuJyxcbiAgJ2Vycm9yLnNpZ25fdXBfcmVzdHJpY3RlZCc6ICdTaWduLXVwIG9uIHRoaXMgYXBwIGlzIGJ5IGludml0YXRpb24gb25seS4nLFxuICAnZXJyb3Iud2FpdGxpc3RlZCc6IFwiWW91J3JlIG9uIHRoZSB3YWl0bGlzdC4gV2UnbGwgZW1haWwgeW91IHdoZW4gYSBwbGFjZSBvcGVucyB1cC5cIixcbiAgJ2Vycm9yLmlkZW50aWZpZXJfbm90X2FsbG93ZWQnOiAnVGhpcyBlbWFpbCBvciBwaG9uZSBudW1iZXIgaXMgbm90IGFsbG93ZWQgb24gdGhpcyBhcHAuJyxcbiAgJ2Vycm9yLmRpc3Bvc2FibGVfZW1haWxfYmxvY2tlZCc6ICdTaWduLXVwIHdpdGggYSBkaXNwb3NhYmxlIG9yIHRlbXBvcmFyeSBlbWFpbCBhZGRyZXNzIGlzIG5vdCBhbGxvd2VkLicsXG4gICdlcnJvci5zc29fcmVxdWlyZWQnOiAnVGhpcyBvcmdhbml6YXRpb24gcmVxdWlyZXMgc2lnbmluZyBpbiB0aHJvdWdoIHNpbmdsZSBzaWduLW9uLicsXG4gICdlcnJvci5zaWduX2luc19kaXNhYmxlZCc6ICdTaWduLWlucyBhcmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQuJyxcbiAgJ2Vycm9yLnNpZ25fdXBzX2Rpc2FibGVkJzogJ1NpZ24tdXBzIGFyZSB0ZW1wb3JhcmlseSBkaXNhYmxlZC4nLFxuICAnZXJyb3IuaGlnaF9yaXNrX2Jsb2NrZWQnOiAnVGhpcyBzaWduLWluIHdhcyBibG9ja2VkIGJlY2F1c2UgaXQgbG9va2VkIHVudXN1YWwuJyxcbiAgJ2Vycm9yLnNtc19yZWdpb25fYmxvY2tlZCc6ICdUZXh0IG1lc3NhZ2VzIGFyZSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHBob25lIG51bWJlci4nLFxufTtcblxuLyoqXG4gKiBMb29rIHVwIGEga2V5IGFuZCBpbnRlcnBvbGF0ZSBge3BsYWNlaG9sZGVyc31gLlxuICpcbiAqIEFuIHVua25vd24gcGxhY2Vob2xkZXIgaXMgbGVmdCB2aXNpYmxlIGZvciB0aGUgc2FtZSByZWFzb24gYSBtaXNzaW5nIGtleSBpczpcbiAqIGBDb250aW51ZSB3aXRoIHtwcm92aWRlcn1gIGluIHRoZSBVSSBpcyBhIGJ1ZyByZXBvcnQgd2FpdGluZyB0byBiZSBmaWxlZCxcbiAqIHdoZXJlYXMgYENvbnRpbnVlIHdpdGggYCBpcyBvbmUgbm9ib2R5IG5vdGljZXMgdW50aWwgYSBjdXN0b21lciBkb2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKFxuICBjYXRhbG9nOiBDYXRhbG9nLFxuICBrZXk6IHN0cmluZyxcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGNhdGFsb2dba2V5XSA/PyBFTl9VU1trZXldID8/IGtleTtcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xceyhcXHcrKVxcfS9nLCAobWF0Y2gsIG5hbWU6IHN0cmluZykgPT4gdmFyaWFibGVzW25hbWVdID8/IG1hdGNoKTtcbn1cblxuLyoqIE1lcmdlIGEgY29tbXVuaXR5IGxvY2FsZSBvdmVyIGVuLVVTIHNvIGEgcGFydGlhbCB0cmFuc2xhdGlvbiBzdGlsbCByZW5kZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhGYWxsYmFjayhsb2NhbGU6IENhdGFsb2cpOiBDYXRhbG9nIHtcbiAgcmV0dXJuIHsgLi4uRU5fVVMsIC4uLmxvY2FsZSB9O1xufVxuIl19
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQVk7SUFDNUIsY0FBYyxFQUFFLFNBQVM7SUFDekIsaUJBQWlCLEVBQUUsOEJBQThCO0lBQ2pELHdCQUF3QixFQUFFLGVBQWU7SUFDekMsc0JBQXNCLEVBQUUsVUFBVTtJQUNsQyxlQUFlLEVBQUUsVUFBVTtJQUMzQix1QkFBdUIsRUFBRSxrQkFBa0I7SUFDM0Msa0JBQWtCLEVBQUUsYUFBYTtJQUNqQyxpQkFBaUIsRUFBRSxXQUFXO0lBQzlCLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsMEJBQTBCLEVBQUUscUJBQXFCO0lBQ2pELHVCQUF1QixFQUFFLG1CQUFtQjtJQUM1QyxxQkFBcUIsRUFBRSxpQkFBaUI7SUFDeEMsbUJBQW1CLEVBQUUsNENBQTRDO0lBQ2pFLG1CQUFtQixFQUFFLGFBQWE7SUFDbEMsZ0JBQWdCLEVBQUUsVUFBVTtJQUM1Qix3QkFBd0IsRUFBRSx5QkFBeUI7SUFDbkQsc0JBQXNCLEVBQUUsd0JBQXdCO0lBQ2hELHlCQUF5QixFQUFFLDBFQUEwRTtJQUNyRyxzQkFBc0IsRUFBRSxzQ0FBc0M7SUFDOUQsaUJBQWlCLEVBQUUsb0JBQW9CO0lBQ3ZDLHVCQUF1QixFQUNyQix3SUFBd0k7SUFDMUksc0JBQXNCLEVBQUUsK0RBQStEO0lBRXZGLGNBQWMsRUFBRSxxQkFBcUI7SUFDckMsZUFBZSxFQUFFLFVBQVU7SUFDM0Isb0JBQW9CLEVBQUUsMEJBQTBCO0lBQ2hELG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsbUJBQW1CLEVBQUUsZUFBZTtJQUNwQyxzQkFB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O0lBQ2hGLDBCQUEwQixFQUFFLHdEQUF3RDtDQUNyRixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBZ0IsRUFDaEIsR0FBVyxFQUNYLFlBQW9DLEVBQUU7SUFFdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZTtJQUMxQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjM6IFwiRXZlcnkgc3RyaW5nIHBhc3NlcyB0aHJvdWdoIGFuIGkxOG4gY2F0YWxvZzsgZW4tVVMgc2hpcHMsIGNhdGFsb2dcbiAqIGZvcm1hdCBkb2N1bWVudGVkIGZvciBjb21tdW5pdHkgbG9jYWxlcy5cIlxuICpcbiAqIEEgZmxhdCBrZXktdG8tc3RyaW5nIG1hcCByYXRoZXIgdGhhbiBuZXN0ZWQgb2JqZWN0cywgYmVjYXVzZSBuZXN0aW5nIGxvb2tzXG4gKiB0aWRpZXIgYW5kIG1ha2VzIGEgbWlzc2luZyBrZXkgYSBydW50aW1lIGNyYXNoIG9uIGB1bmRlZmluZWQub2YuYS5jaGFpbmBcbiAqIHJhdGhlciB0aGFuIGEgdmlzaWJsZSBmYWxsYmFjay5cbiAqXG4gKiBBIG1pc3Npbmcga2V5IHJlbmRlcnMgdGhlIEtFWSwgbm90IGFuIGVtcHR5IHN0cmluZy4gQSBibGFuayBidXR0b24gaXMgYSBidWdcbiAqIG5vYm9keSBjYW4gcmVwb3J0OyBhIGJ1dHRvbiByZWFkaW5nIGBzaWduSW4uc3VibWl0YCBpcyBvbmUgYW55b25lIGNhbi5cbiAqL1xuXG5pbXBvcnQgeyBQT0xJQ1lfU1RSSU5HUyB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuXG5leHBvcnQgdHlwZSBDYXRhbG9nID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZXhwb3J0IGNvbnN0IEVOX1VTOiBDYXRhbG9nID0ge1xuICAnc2lnbkluLnRpdGxlJzogJ1NpZ24gaW4nLFxuICAnc2lnbkluLnN1YnRpdGxlJzogJ3RvIGNvbnRpbnVlIHRvIHthcHBsaWNhdGlvbn0nLFxuICAnc2lnbkluLmlkZW50aWZpZXJMYWJlbCc6ICdFbWFpbCBhZGRyZXNzJyxcbiAgJ3NpZ25Jbi5wYXNzd29yZExhYmVsJzogJ1Bhc3N3b3JkJyxcbiAgJ3NpZ25Jbi5zdWJtaXQnOiAnQ29udGludWUnLFxuICAnc2lnbkluLmZvcmdvdFBhc3N3b3JkJzogJ0ZvcmdvdCBwYXNzd29yZD8nLFxuICAnc2lnbkluLm5vQWNjb3VudCc6ICdObyBhY2NvdW50PycsXG4gICdzaWduSW4ubGFzdFVzZWQnOiAnTGFzdCB1c2VkJyxcbiAgJ3NpZ25Jbi5zaWduVXBMaW5rJzogJ1NpZ24gdXAnLFxuICAnc2lnbkluLm9yRGl2aWRlcic6ICdvcicsXG4gICdzaWduSW4uc29jaWFsQnV0dG9uJzogJ0NvbnRpbnVlIHdpdGgge3Byb3ZpZGVyfScsXG4gICdzaWduSW4uY29udGludWVXaXRoQXRsYXMnOiAnQ29udGludWUgd2l0aCBBdGxhcycsXG4gICdzaWduSW4uZW1haWxDb2RlTGFiZWwnOiAnVmVyaWZpY2F0aW9uIGNvZGUnLFxuICAnc2lnbkluLnVzZUVtYWlsQ29kZSc6ICdFbWFpbCBtZSBhIGNvZGUnLFxuICAnc2lnbkluLmNvZGVTZW50VG8nOiAnV2Ugc2VudCBhIGNvZGUgdG8ge2VtYWlsfS4gRW50ZXIgaXQgYmVsb3cuJyxcbiAgJ3NpZ25Jbi5yZXNlbmRDb2RlJzogJ1Jlc2VuZCBjb2RlJyxcbiAgJ3NpZ25Jbi5zZW5kaW5nJzogJ1NlbmRpbmfigKYnLFxuICAnc2lnbkluLmVtYWlsQ29kZU9wdGlvbic6ICdFbWFpbCBtZSBhIGNvZGUgaW5zdGVhZCcsXG4gICdzaWduSW4ucGFzc2tleUJ1dHRvbic6ICdTaWduIGluIHdpdGggYSBwYXNza2V5JyxcbiAgJ3NpZ25Jbi5wYXNza2V5Q2FuY2VsbGVkJzogXCJQYXNza2V5IHNpZ24taW4gZGlkbid0IGZpbmlzaC4gVHJ5IGFnYWluLCBvciB1c2UgYW5vdGhlciB3YXkgdG8gc2lnbiBpbi5cIixcbiAgJ3NpZ25Jbi5tYWdpY0xpbmtTZW50JzogJ0NoZWNrIHlvdXIgZW1haWwgZm9yIGEgc2lnbi1pbiBsaW5rLicsXG4gICdzaWduSW4uc2lnbmVkSW4nOiAnWW91XFwncmUgc2lnbmVkIGluLicsXG4gICdzaWduSW4uc2Vzc2lvbk5vdEtlcHQnOlxuICAgICdZb3Ugc2lnbmVkIGluLCBidXQgdGhpcyBicm93c2VyIGRpZG5cXCd0IGtlZXAgdGhlIHNlc3Npb24uIElmIGl0IGJsb2NrcyB0aGlyZC1wYXJ0eSBjb29raWVzLCBhbGxvdyBjb29raWVzIGZvciB0aGlzIHNpdGUgYW5kIHRyeSBhZ2Fpbi4nLFxuICAnc2lnbkluLmNoZWNrT3RoZXJUYWInOiAnWW91IGNhbiBjbG9zZSB0aGlzIHRhYiDigJQgeW91IGFyZSBzaWduZWQgaW4gd2hlcmUgeW91IHN0YXJ0ZWQuJyxcblxuICAnc2lnblVwLnRpdGxlJzogJ0NyZWF0ZSB5b3VyIGFjY291bnQnLFxuICAnc2lnblVwLnN1Ym1pdCc6ICdDb250aW51ZScsXG4gICdzaWduVXAuaGF2ZUFjY291bnQnOiAnQWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/JyxcbiAgJ3NpZ25VcC5zaWduSW5MaW5rJzogJ1NpZ24gaW4nLFxuICAnc2lnblVwLmVtYWlsTGFiZWwnOiAnRW1haWwgYWRkcmVzcycsXG4gICdzaWduVXAucGFzc3dvcmRMYWJlbCc6ICdQYXNzd29yZCcsXG4gICdzaWduVXAub3B0aW9uYWxGaWVsZCc6ICd7bGFiZWx9IChvcHRpb25hbCknLFxuICAnc2lnblVwLnNlbGVjdFBsYWNlaG9sZGVyJzogJ1NlbGVjdOKApicsXG4gICdzaWduVXAuY29uc2VudEFncmVlJzogJ0kgYWdyZWUgdG8gdGhlJyxcbiAgJ3NpZ25VcC5jb25zZW50Tm90aWNlJzogJ0J5IGNvbnRpbnVpbmcgeW91IGFncmVlIHRvIHRoZScsXG4gICdzaWduVXAudGVybXMnOiAnVGVybXMgb2YgU2VydmljZScsXG4gICdzaWduVXAucHJpdmFjeSc6ICdQcml2YWN5IFBvbGljeScsXG4gICdzaWduVXAuYW5kJzogJ2FuZCcsXG4gIC8vID0gRU1BSUxfVU5BVkFJTEFCTEVfTUVTU0FHRSBmcm9tIEBhdGxhc2F1dGgvanMuXG4gICdzaWduVXAuZW1haWxVbmF2YWlsYWJsZSc6XG4gICAgXCJUaGlzIGFwcCBjYW4ndCBzZW5kIGVtYWlsIHJpZ2h0IG5vdy4gVHJ5IGFub3RoZXIgc2lnbi1pbiBtZXRob2Qgb3IgY29udGFjdCB0aGUgYXBwIG93bmVyLlwiLFxuICAnc2lnblVwLnBhc3NrZXlPcHRpb24nOiAnU2lnbiB1cCB3aXRoIGEgcGFzc2tleSBpbnN0ZWFkJyxcbiAgJ3NpZ25VcC5wYXNzd29yZE9wdGlvbic6ICdTaWduIHVwIHdpdGggYSBwYXNzd29yZCBpbnN0ZWFkJyxcbiAgJ3NpZ25VcC5wYXNza2V5SW50cm8nOiBcIk5vIHBhc3N3b3JkIG5lZWRlZDogeW91J2xsIHNpZ24gaW4gd2l0aCBhIHBhc3NrZXkgc2F2ZWQgb24gdGhpcyBkZXZpY2Ugb3IgaW4geW91ciBwYXNzd29yZCBtYW5hZ2VyLlwiLFxuICAnc2lnblVwLnBhc3NrZXlQcm9tcHQnOiAnQ3JlYXRlIGEgcGFzc2tleSB0byBmaW5pc2ggc2V0dGluZyB1cCB5b3VyIGFjY291bnQuJyxcbiAgJ3NpZ25VcC5wYXNza2V5Q3JlYXRlJzogJ0NyZWF0ZSBwYXNza2V5JyxcbiAgJ3NpZ25VcC5wYXNza2V5Q2FuY2VsbGVkJzogXCJUaGUgcGFzc2tleSB3YXNuJ3QgY3JlYXRlZC4gVHJ5IGFnYWluIHdoZW4geW91J3JlIHJlYWR5LlwiLFxuICAnc2lnblVwLmxpbmtTZW50VG8nOiAnV2Ugc2VudCBhIGNvbmZpcm1hdGlvbiBsaW5rIHRvIHtlbWFpbH0uIE9wZW4gaXQgb24gYW55IGRldmljZTsgdGhpcyBwYWdlIGNvbnRpbnVlcyBvbiBpdHMgb3duLicsXG5cbiAgJ2NhcHRjaGEucHJvbXB0JzogJ0NvbXBsZXRlIHRoZSBzZWN1cml0eSBjaGVjayB0byBjb250aW51ZS4nLFxuICAnY2FwdGNoYS5yZXF1aXJlZCc6ICdQbGVhc2UgY29tcGxldGUgdGhlIHNlY3VyaXR5IGNoZWNrLCB0aGVuIHRyeSBhZ2Fpbi4nLFxuICAnY2FwdGNoYS5mYWlsZWQnOiBcIlRoZSBzZWN1cml0eSBjaGVjayBkaWRuJ3QgcGFzcy4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgJ2NhcHRjaGEuY2hlY2tpbmcnOiAnQ2hlY2tpbmcgeW91ciBicm93c2Vy4oCmJyxcbiAgJ2NhcHRjaGEudmVyaWZpZWQnOiAnU2VjdXJpdHkgY2hlY2sgY29tcGxldGUuJyxcbiAgJ2NhcHRjaGEucHV6emxlUHJvbXB0JzogXCJTZWxlY3QgZXZlcnkgcGljdHVyZSB0aGF0IHNob3dzIHRoZSBzYW1lIHNoYXBlIGFzIHRoaXMgb25lLiBDb2xvdXIgYW5kIHNpemUgZG9uJ3QgbWF0dGVyLlwiLFxuICAnY2FwdGNoYS5wdXp6bGVDb25maXJtJzogJ0NvbmZpcm0nLFxuICAnY2FwdGNoYS5wdXp6bGVUaWxlJzogJ1BpY3R1cmUge259JyxcbiAgJ2NhcHRjaGEucHV6emxlQWx0ZXJuYXRpdmUnOiBcIkNhbid0IGRvIHRoZSBwaWN0dXJlIGNoZWNrPyBVc2UgYSBsb25nZXIgYXV0b21hdGljIGNoZWNrIGluc3RlYWQuXCIsXG5cbiAgJ21mYS50aXRsZSc6ICdUd28tc3RlcCB2ZXJpZmljYXRpb24nLFxuICAnbWZhLnN1YnRpdGxlJzogJ0VudGVyIHRoZSBjb2RlIGZyb20geW91ciBhdXRoZW50aWNhdG9yIGFwcC4nLFxuICAnbWZhLmNvZGVMYWJlbCc6ICdDb2RlJyxcbiAgJ21mYS5lbnJvbGxGaXJzdENvZGVMYWJlbCc6ICdDb2RlIGZyb20geW91ciBhdXRoZW50aWNhdG9yIGFwcCcsXG4gICdtZmEuZW5yb2xsU2Vjb25kQ29kZUxhYmVsJzogJ1RoZSBuZXh0IGNvZGUgaXQgc2hvd3MnLFxuICAnbWZhLnVzZVBhc3NrZXknOiAnVXNlIGEgcGFzc2tleSBpbnN0ZWFkJyxcbiAgJ21mYS51c2VCYWNrdXBDb2RlJzogJ1VzZSBhIHJlY292ZXJ5IGNvZGUnLFxuICAnbWZhLnN1Ym1pdCc6ICdWZXJpZnknLFxuICAnbWZhLmVucm9sbENob29zZSc6ICdTZXQgdXAgYSBzZWNvbmQgc3RlcCBmb3Igc2lnbmluZyBpbi4nLFxuICAnbWZhLmVucm9sbFRvdHBPcHRpb24nOiAnVXNlIGFuIGF1dGhlbnRpY2F0b3IgYXBwJyxcbiAgJ21mYS5lbnJvbGxTbXNPcHRpb24nOiAnVXNlIHRleHQgbWVzc2FnZXMnLFxuICAnbWZhLmVucm9sbFNjYW4nOiAnU2NhbiB0aGlzIFFSIGNvZGUgd2l0aCB5b3VyIGF1dGhlbnRpY2F0b3IgYXBwLCBvciBlbnRlciB0aGUgc2V0dXAga2V5LicsXG4gICdtZmEuZW5yb2xsUXJBbHQnOiAnUVIgY29kZSBmb3IgeW91ciBhdXRoZW50aWNhdG9yIGFwcCcsXG4gICdtZmEuZW5yb2xsU2V0dXBLZXknOiAnU2V0dXAga2V5JyxcbiAgJ21mYS5lbnJvbGxQcmVwYXJpbmcnOiAnU2V0dGluZyB1cOKApicsXG4gICdtZmEucGhvbmVMYWJlbCc6ICdNb2JpbGUgbnVtYmVyJyxcbiAgJ21mYS5waG9uZUhpbnQnOiAnSW5jbHVkZSB0aGUgY291bnRyeSBjb2RlLCBmb3IgZXhhbXBsZSArMTQxNTU1NTAxMDEuJyxcbiAgJ21mYS5zZW5kQ29kZSc6ICdUZXh0IG1lIGEgY29kZScsXG4gICdtZmEuY29kZVRleHRlZFRvJzogJ0VudGVyIHRoZSBjb2RlIHdlIHRleHRlZCB0byB7cGhvbmV9LicsXG4gICdtZmEuc21zQ29kZU9wdGlvbic6ICdUZXh0IG1lIGEgY29kZSBpbnN0ZWFkJyxcbiAgJ21mYS5yZWNvdmVyeUNvZGVzVGl0bGUnOiAnU2F2ZSB5b3VyIHJlY292ZXJ5IGNvZGVzJyxcbiAgJ21mYS5yZWNvdmVyeUNvZGVzSGVscCc6IFwiRWFjaCBjb2RlIHdvcmtzIG9uY2UuIElmIHlvdSBjYW4ndCB1c2UgeW91ciBzZWNvbmQgc3RlcCwgc2lnbiBpbiB3aXRoIG9uZSBvZiB0aGVzZS4gS2VlcCB0aGVtIHNvbWV3aGVyZSBzYWZlOiB0aGV5IHdvbid0IGJlIHNob3duIGFnYWluLlwiLFxuICAnbWZhLnJlY292ZXJ5Q29kZXNDb3B5JzogJ0NvcHkgY29kZXMnLFxuICAnbWZhLnJlY292ZXJ5Q29kZXNDb3BpZWQnOiAnQ29waWVkLicsXG4gICdtZmEucmVjb3ZlcnlDb2Rlc0Rvd25sb2FkJzogJ0Rvd25sb2FkIGFzIC50eHQnLFxuICAnbWZhLnJlY292ZXJ5Q29kZXNTYXZlZCc6IFwiSSd2ZSBzYXZlZCBteSBjb2Rlc1wiLFxuXG4gICdyZXNldC50aXRsZSc6ICdSZXNldCB5b3VyIHBhc3N3b3JkJyxcbiAgJ3Jlc2V0LnN1Ym1pdCc6ICdTZW5kIHJlc2V0IGNvZGUnLFxuICAncmVzZXQubmV3UGFzc3dvcmRMYWJlbCc6ICdOZXcgcGFzc3dvcmQnLFxuXG4gICd1c2VyQnV0dG9uLm1hbmFnZUFjY291bnQnOiAnTWFuYWdlIGFjY291bnQnLFxuICAndXNlckJ1dHRvbi5zaWduT3V0JzogJ1NpZ24gb3V0JyxcbiAgJ3VzZXJCdXR0b24uc2lnbk91dEFsbCc6ICdTaWduIG91dCBvZiBhbGwgZGV2aWNlcycsXG5cbiAgJ3VzZXJQcm9maWxlLnRpdGxlJzogJ0FjY291bnQnLFxuICAndXNlclByb2ZpbGUucHJvZmlsZVNlY3Rpb24nOiAnUHJvZmlsZScsXG4gICd1c2VyUHJvZmlsZS5lbWFpbHNTZWN0aW9uJzogJ0VtYWlsIGFkZHJlc3NlcycsXG4gICd1c2VyUHJvZmlsZS5zZWN1cml0eVNlY3Rpb24nOiAnU2VjdXJpdHknLFxuICAndXNlclByb2ZpbGUuZGV2aWNlc1NlY3Rpb24nOiAnQWN0aXZlIGRldmljZXMnLFxuICAndXNlclByb2ZpbGUuZGFuZ2VyU2VjdGlvbic6ICdEYW5nZXIgem9uZScsXG4gICd1c2VyUHJvZmlsZS5hZGRFbWFpbCc6ICdBZGQgYW4gZW1haWwgYWRkcmVzcycsXG4gICd1c2VyUHJvZmlsZS5tYWtlUHJpbWFyeSc6ICdNYWtlIHByaW1hcnknLFxuICAndXNlclByb2ZpbGUudW52ZXJpZmllZCc6ICdVbnZlcmlmaWVkJyxcbiAgJ3VzZXJQcm9maWxlLnZlcmlmeSc6ICdWZXJpZnknLFxuICAndXNlclByb2ZpbGUudmVyaWZ5Q29uZmlybSc6ICdDb25maXJtJyxcbiAgJ3VzZXJQcm9maWxlLnZlcmlmeUNvZGVQbGFjZWhvbGRlcic6ICdDb2RlIGZyb20gdGhlIGVtYWlsJyxcbiAgJ3VzZXJQcm9maWxlLnZlcmlmeVNlbmRGYWlsZWQnOiAnV2UgY291bGQgbm90IHNlbmQgYSBjb2RlIHJpZ2h0IG5vdy4gVHJ5IGFnYWluIGluIGEgbWludXRlLicsXG4gICd1c2VyUHJvZmlsZS52ZXJpZnlDb2RlUmVqZWN0ZWQnOiAnVGhhdCBjb2RlIHdhcyBub3QgYWNjZXB0ZWQuJyxcbiAgJ3VzZXJQcm9maWxlLnJldm9rZURldmljZSc6ICdTaWduIG91dCcsXG4gICd1c2VyUHJvZmlsZS5kZWxldGVBY2NvdW50JzogJ0RlbGV0ZSBhY2NvdW50JyxcblxuICAnb3JnYW5pemF0aW9uLnN3aXRjaGVyJzogJ1N3aXRjaCBvcmdhbml6YXRpb24nLFxuICAnb3JnYW5pemF0aW9uLnBlcnNvbmFsJzogJ1BlcnNvbmFsIGFjY291bnQnLFxuICAnb3JnYW5pemF0aW9uLm1lbWJlcnMnOiAnTWVtYmVycycsXG4gICdvcmdhbml6YXRpb24uaW52aXRlJzogJ0ludml0ZSBtZW1iZXInLFxuICAnb3JnYW5pemF0aW9uLnJvbGVMYWJlbCc6ICdSb2xlJyxcbiAgJ29yZ2FuaXphdGlvbi5pbnZpdGF0aW9ucyc6ICdJbnZpdGF0aW9ucycsXG4gICdvcmdhbml6YXRpb24uc2V0dGluZ3MnOiAnU2V0dGluZ3MnLFxuICAnb3JnYW5pemF0aW9uLmVtYWlsTGFiZWwnOiAnRW1haWwgYWRkcmVzcycsXG4gICdvcmdhbml6YXRpb24uc2VuZEludml0ZSc6ICdTZW5kIGludml0YXRpb24nLFxuICAnb3JnYW5pemF0aW9uLm5vSW52aXRhdGlvbnMnOiAnTm8gcGVuZGluZyBpbnZpdGF0aW9ucy4nLFxuICAnb3JnYW5pemF0aW9uLnJlbW92ZSc6ICdSZW1vdmUnLFxuICAnb3JnYW5pemF0aW9uLnJldm9rZSc6ICdSZXZva2UnLFxuICAnb3JnYW5pemF0aW9uLnJlc2VuZCc6ICdSZXNlbmQnLFxuICAnb3JnYW5pemF0aW9uLnlvdSc6ICcoeW91KScsXG4gICdvcmdhbml6YXRpb24ubGVhdmUnOiAnTGVhdmUgb3JnYW5pemF0aW9uJyxcbiAgJ29yZ2FuaXphdGlvbi5sZWF2ZUNvbmZpcm0nOiAnTGVhdmUge25hbWV9PyBZb3Ugd2lsbCBsb3NlIGFjY2VzcyB1bnRpbCB5b3UgYXJlIGludml0ZWQgYWdhaW4uJyxcbiAgJ29yZ2FuaXphdGlvbi5kZWxldGUnOiAnRGVsZXRlIG9yZ2FuaXphdGlvbicsXG4gICdvcmdhbml6YXRpb24uZGVsZXRlQ29uZmlybSc6ICdEZWxldGUge25hbWV9IGZvciBldmVyeSBtZW1iZXI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS4nLFxuICAnb3JnYW5pemF0aW9uLmNvbmZpcm0nOiAnQ29uZmlybScsXG4gICdvcmdhbml6YXRpb24uY2FuY2VsJzogJ0NhbmNlbCcsXG4gICdvcmdhbml6YXRpb24udW5uYW1lZE1lbWJlcic6ICdVbm5hbWVkIG1lbWJlcicsXG4gICdvcmdhbml6YXRpb24ucGFzc3dvcmRQcm9tcHQnOiAnRW50ZXIgeW91ciBwYXNzd29yZCB0byBjb25maXJtLicsXG4gICdvcmdhbml6YXRpb24ucm9sZXMnOiAnUm9sZXMnLFxuICAnb3JnYW5pemF0aW9uLnJvbGVOYW1lJzogJ1JvbGUgbmFtZScsXG4gICdvcmdhbml6YXRpb24ucm9sZUtleSc6ICdSb2xlIGtleSAoZm9yIGV4YW1wbGUgb3JnOmF1ZGl0b3IpJyxcbiAgJ29yZ2FuaXphdGlvbi5yb2xlUGVybWlzc2lvbnMnOiAnUGVybWlzc2lvbnMnLFxuICAnb3JnYW5pemF0aW9uLmNyZWF0ZVJvbGUnOiAnQ3JlYXRlIHJvbGUnLFxuICAnb3JnYW5pemF0aW9uLnNhdmVSb2xlJzogJ1NhdmUgcm9sZScsXG4gICdvcmdhbml6YXRpb24uZWRpdFJvbGUnOiAnRWRpdCcsXG4gICdvcmdhbml6YXRpb24uZGVsZXRlUm9sZSc6ICdEZWxldGUnLFxuICAnb3JnYW5pemF0aW9uLm5vQ3VzdG9tUm9sZXMnOiAnVGhpcyBvcmdhbml6YXRpb24gaGFzIG5vIHJvbGVzIG9mIGl0cyBvd24geWV0LicsXG4gICdpbXBlcnNvbmF0aW9uLmJhbm5lcic6ICdZb3UgYXJlIHNpZ25lZCBpbiBhcyB7bmFtZX0gb24gc29tZW9uZSBlbHNlXFwncyBiZWhhbGYuJyxcbiAgJ2ltcGVyc29uYXRpb24ucmV0dXJuVG9BZG1pbic6ICdSZXR1cm4gdG8gYWRtaW4nLFxuICAnaW1wZXJzb25hdGlvbi5lbmQnOiAnRW5kIGltcGVyc29uYXRpb24nLFxuXG4gIC8vIFBvbGljeSBhY2NlcHRhbmNlICh0ZXJtcywgcHJpdmFjeSwgYW55IHBvbGljeSkuXG4gIC4uLlBPTElDWV9TVFJJTkdTLFxuXG4gICdlcnJvci5nZW5lcmljJzogJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gICdlcnJvci5uZXR3b3JrJzogJ1dlIGNvdWxkIG5vdCByZWFjaCB0aGUgc2VydmVyLiBDaGVjayB5b3VyIGNvbm5lY3Rpb24uJyxcblxuICAvLyBTZXJ2ZXIgZXJyb3JzLCBieSB0aGUgc3RhYmxlIGByZWFzb25gIHRoZSBGcm9udGVuZCBBUEkgc2VuZHMuIFNob3duIGluc3RlYWRcbiAgLy8gb2YgdGhlIHNlcnZlcidzIGBtZXNzYWdlYCAoc2VlIGBsb2NhbGl6ZWRFcnJvck1lc3NhZ2VgIGluIEBhdGxhc2F1dGgvanMpLlxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9pbmNvcnJlY3QnOiAnVGhvc2UgY3JlZGVudGlhbHMgYXJlIGluY29ycmVjdC4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX2luY29ycmVjdCc6ICdUaGF0IGNvZGUgaXMgaW5jb3JyZWN0LicsXG4gICdlcnJvci5mb3JtX2NvZGVfYWxyZWFkeV91c2VkJzogJ1RoYXQgY29kZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuIFdhaXQgZm9yIGEgbmV3IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX2V4cGlyZWQnOiAnVGhhdCBjb2RlIGhhcyBleHBpcmVkLiBSZXF1ZXN0IGEgbmV3IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX21heF9hdHRlbXB0cyc6ICdUb28gbWFueSBpbmNvcnJlY3QgY29kZXMuIFJlcXVlc3QgYSBuZXcgY29kZS4nLFxuICAnZXJyb3IuZm9ybV9saW5rX2ludmFsaWQnOiAnVGhhdCBzaWduLWluIGxpbmsgaXMgaW52YWxpZCBvciBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuJyxcbiAgJ2Vycm9yLmZvcm1faWRlbnRpZmllcl9ub3RfZm91bmQnOiBcIldlIGNvdWxkbid0IGZpbmQgYW4gYWNjb3VudCB3aXRoIHRob3NlIGRldGFpbHMuXCIsXG4gICdlcnJvci5mb3JtX2lkZW50aWZpZXJfZXhpc3RzJzogXCJUaGVyZSdzIGFscmVhZHkgYW4gYWNjb3VudCBmb3IgdGhpcyBlbWFpbC4gU2lnbiBpbiB3aXRoIHttZXRob2RzfS5cIixcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcHduZWQnOiAnVGhpcyBwYXNzd29yZCBoYXMgYXBwZWFyZWQgaW4gYSBrbm93biBkYXRhIGJyZWFjaC4gUGxlYXNlIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfdG9vX3Nob3J0JzogJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3Qge21pbl9sZW5ndGh9IGNoYXJhY3RlcnMuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfdG9vX2xvbmcnOiAnUGFzc3dvcmQgbXVzdCBiZSBhdCBtb3N0IHttYXhfbGVuZ3RofSBjaGFyYWN0ZXJzLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JlcXVpcmVzX3VwcGVyY2FzZSc6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYW4gdXBwZXJjYXNlIGxldHRlci4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXF1aXJlc19sb3dlcmNhc2UnOiAnUGFzc3dvcmQgbXVzdCBjb250YWluIGEgbG93ZXJjYXNlIGxldHRlci4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXF1aXJlc19udW1iZXInOiAnUGFzc3dvcmQgbXVzdCBjb250YWluIGEgbnVtYmVyLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JlcXVpcmVzX3N5bWJvbCc6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYSBzeW1ib2wuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfbm90X2FsbG93ZWQnOiAnVGhhdCBwYXNzd29yZCBpcyBub3QgYWxsb3dlZC4gQ2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9jb250YWluc19pZGVudGlmaWVyJzogJ1Bhc3N3b3JkIG11c3Qgbm90IGNvbnRhaW4geW91ciBlbWFpbCBvciB1c2VybmFtZS4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9zYW1lX2FzX2N1cnJlbnQnOiAnWW91ciBuZXcgcGFzc3dvcmQgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSB5b3VyIGN1cnJlbnQgb25lLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JldXNlZCc6ICdZb3VyIG5ldyBwYXNzd29yZCBtdXN0IG5vdCBtYXRjaCBhbnkgb2YgeW91ciBsYXN0IHtoaXN0b3J5X2NvdW50fSBwYXNzd29yZHMuJyxcbiAgJ2Vycm9yLnBhc3N3b3JkX2V4cGlyZWQnOiAnWW91ciBwYXNzd29yZCBoYXMgZXhwaXJlZC4gUmVzZXQgaXQgdG8gY29udGludWUuJyxcbiAgJ2Vycm9yLmVtYWlsX25vdF92ZXJpZmllZCc6ICdZb3VyIGVtYWlsIGFkZHJlc3MgaXMgbm90IHZlcmlmaWVkIHlldC4gVmVyaWZ5IGl0IGJlZm9yZSBzaWduaW5nIGluIHdpdGggeW91ciBwYXNzd29yZC4nLFxuICAnZXJyb3Iuc2lnbl9pbl90b2tlbl9pbnZhbGlkJzogJ1RoYXQgc2lnbi1pbiB0b2tlbiBpcyBpbnZhbGlkIG9yIGhhcyBleHBpcmVkLicsXG4gICdlcnJvci50b29fbWFueV9hdHRlbXB0cyc6ICdUb28gbWFueSBmYWlsZWQgYXR0ZW1wdHMuIFRyeSBhZ2FpbiBsYXRlci4nLFxuICAnZXJyb3IudG9vX21hbnlfcmVxdWVzdHMnOiAnVG9vIG1hbnkgcmVxdWVzdHMuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgJ2Vycm9yLmNhcHRjaGFfcmVxdWlyZWQnOiAnUGxlYXNlIGNvbXBsZXRlIHRoZSBzZWN1cml0eSBjaGVjaywgdGhlbiB0cnkgYWdhaW4uJyxcbiAgJ2Vycm9yLmNhcHRjaGFfZmFpbGVkJzogXCJUaGUgc2VjdXJpdHkgY2hlY2sgZGlkbid0IHBhc3MuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICdlcnJvci5jYXB0Y2hhX3VuYXZhaWxhYmxlJzogJ1RoZSBzZWN1cml0eSBjaGVjayBpcyB1bmF2YWlsYWJsZSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgJ2Vycm9yLmVtYWlsX2RlbGl2ZXJ5X3VuYXZhaWxhYmxlJzogXCJUaGlzIGFwcCBjYW4ndCBzZW5kIGVtYWlsIHJpZ2h0IG5vdy4gVHJ5IGFub3RoZXIgc2lnbi1pbiBtZXRob2Qgb3IgY29udGFjdCB0aGUgYXBwIG93bmVyLlwiLFxuICAnZXJyb3Iuc3RyYXRlZ3lfZGlzYWJsZWQnOiAnVGhpcyBzaWduLWluIG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGFwcC4nLFxuICAnZXJyb3Iuc2lnbl91cF9yZXN0cmljdGVkJzogJ1NpZ24tdXAgb24gdGhpcyBhcHAgaXMgYnkgaW52aXRhdGlvbiBvbmx5LicsXG4gICdlcnJvci53YWl0bGlzdGVkJzogXCJZb3UncmUgb24gdGhlIHdhaXRsaXN0LiBXZSdsbCBlbWFpbCB5b3Ugd2hlbiBhIHBsYWNlIG9wZW5zIHVwLlwiLFxuICAnZXJyb3IuaWRlbnRpZmllcl9ub3RfYWxsb3dlZCc6ICdUaGlzIGVtYWlsIG9yIHBob25lIG51bWJlciBpcyBub3QgYWxsb3dlZCBvbiB0aGlzIGFwcC4nLFxuICAnZXJyb3IuZGlzcG9zYWJsZV9lbWFpbF9ibG9ja2VkJzogJ1NpZ24tdXAgd2l0aCBhIGRpc3Bvc2FibGUgb3IgdGVtcG9yYXJ5IGVtYWlsIGFkZHJlc3MgaXMgbm90IGFsbG93ZWQuJyxcbiAgJ2Vycm9yLnNzb19yZXF1aXJlZCc6ICdUaGlzIG9yZ2FuaXphdGlvbiByZXF1aXJlcyBzaWduaW5nIGluIHRocm91Z2ggc2luZ2xlIHNpZ24tb24uJyxcbiAgJ2Vycm9yLnNpZ25faW5zX2Rpc2FibGVkJzogJ1NpZ24taW5zIGFyZSB0ZW1wb3JhcmlseSBkaXNhYmxlZC4nLFxuICAnZXJyb3Iuc2lnbl91cHNfZGlzYWJsZWQnOiAnU2lnbi11cHMgYXJlIHRlbXBvcmFyaWx5IGRpc2FibGVkLicsXG4gICdlcnJvci5oaWdoX3Jpc2tfYmxvY2tlZCc6ICdUaGlzIHNpZ24taW4gd2FzIGJsb2NrZWQgYmVjYXVzZSBpdCBsb29rZWQgdW51c3VhbC4nLFxuICAnZXJyb3Iuc21zX3JlZ2lvbl9ibG9ja2VkJzogJ1RleHQgbWVzc2FnZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgcGhvbmUgbnVtYmVyLicsXG59O1xuXG4vKipcbiAqIExvb2sgdXAgYSBrZXkgYW5kIGludGVycG9sYXRlIGB7cGxhY2Vob2xkZXJzfWAuXG4gKlxuICogQW4gdW5rbm93biBwbGFjZWhvbGRlciBpcyBsZWZ0IHZpc2libGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBhIG1pc3Npbmcga2V5IGlzOlxuICogYENvbnRpbnVlIHdpdGgge3Byb3ZpZGVyfWAgaW4gdGhlIFVJIGlzIGEgYnVnIHJlcG9ydCB3YWl0aW5nIHRvIGJlIGZpbGVkLFxuICogd2hlcmVhcyBgQ29udGludWUgd2l0aCBgIGlzIG9uZSBub2JvZHkgbm90aWNlcyB1bnRpbCBhIGN1c3RvbWVyIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUoXG4gIGNhdGFsb2c6IENhdGFsb2csXG4gIGtleTogc3RyaW5nLFxuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRlbXBsYXRlID0gY2F0YWxvZ1trZXldID8/IEVOX1VTW2tleV0gPz8ga2V5O1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFxcdyspXFx9L2csIChtYXRjaCwgbmFtZTogc3RyaW5nKSA9PiB2YXJpYWJsZXNbbmFtZV0gPz8gbWF0Y2gpO1xufVxuXG4vKiogTWVyZ2UgYSBjb21tdW5pdHkgbG9jYWxlIG92ZXIgZW4tVVMgc28gYSBwYXJ0aWFsIHRyYW5zbGF0aW9uIHN0aWxsIHJlbmRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZhbGxiYWNrKGxvY2FsZTogQ2F0YWxvZyk6IENhdGFsb2cge1xuICByZXR1cm4geyAuLi5FTl9VUywgLi4ubG9jYWxlIH07XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
|
|
2
|
-
export const ATLAS_ANGULAR_VERSION = '0.
|
|
2
|
+
export const ATLAS_ANGULAR_VERSION = '0.13.0';
|
|
3
3
|
export const ATLAS_ANGULAR_SDK = { name: '@atlasauth/angular', version: ATLAS_ANGULAR_VERSION };
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxnR0FBZ0c7QUFDaEcsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFpQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXRsYXNTZGtJbmZvIH0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5cbi8qKiBUaGlzIHBhY2thZ2UncyB2ZXJzaW9uLCBzZW50IGFzIGBYLUF0bGFzLVNES2AgKGtlcHQgaW4gc3RlcCB3aXRoIHBhY2thZ2UuanNvbiBieSBhIHRlc3QpLiAqL1xuZXhwb3J0IGNvbnN0IEFUTEFTX0FOR1VMQVJfVkVSU0lPTiA9ICcwLjEzLjAnO1xuZXhwb3J0IGNvbnN0IEFUTEFTX0FOR1VMQVJfU0RLOiBBdGxhc1Nka0luZm8gPSB7IG5hbWU6ICdAYXRsYXNhdXRoL2FuZ3VsYXInLCB2ZXJzaW9uOiBBVExBU19BTkdVTEFSX1ZFUlNJT04gfTtcbiJdfQ==
|
|
@@ -4,7 +4,7 @@ import { isPlatformBrowser, DOCUMENT } from '@angular/common';
|
|
|
4
4
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { BehaviorSubject, Subject, combineLatest, firstValueFrom } from 'rxjs';
|
|
6
6
|
import { map, distinctUntilChanged, filter, take } from 'rxjs/operators';
|
|
7
|
-
import { createOrganizationAuditLog, POLICY_STRINGS, TokenCache, SignOutNotifier, resolveFrontendApi, withDevBrowser, catalogLocale, configureReferralCapture, FapiClient, SignOutGuard, localizedErrorMessage, reauthenticate, getTemplateToken, getProviderToken, signOutReasonFromClient, readRedirectResult, completeOAuthPopupLanding, mapOAuthPopupPayload, stripRedirectParams, closeOAuthPopupAfterSignIn, SDK_HEADER, sdkHeaderValue, reportSdkAdvisory, readExpiry, msUntilRefresh, policyTranslator, injectPolicyStyles, mountPolicyClickwrap, mountPolicyConsent, controllerForPending, mountPolicyAcceptStep, joinTitles, formatPolicyDate, PolicyGateController, groupSetupKey, enrollmentSubmitKey, nextStep, awaitingSignUpLink, canDownloadRecoveryCodes, copyRecoveryCodes, downloadRecoveryCodes, createCaptchaController, atlasCaptchaLabels, PolicyAcceptanceController, flowFromPending, initialFlow, createMfaEnrollment, mfaChoicesFrom, fetchInstanceSettings, fetchLastSignInMethod, offeredFirstFactors, prepareFactor, signInCaptchaOptions, flowNeedsCaptcha, planFirstFactor, advanceWithCaptcha, loadPolicies, createSignUp, prepareSecondFactorCode, resendSignUpVerification, createPasskeySignUp, finishPasskeySignUp, pendingRecoveryCodes, acknowledgeRecoveryCodes, shouldKeepPolling, pollAttempt, lastUsedMethodLabel, signUp,
|
|
7
|
+
import { createOrganizationAuditLog, POLICY_STRINGS, TokenCache, SignOutNotifier, resolveFrontendApi, withDevBrowser, catalogLocale, configureReferralCapture, FapiClient, SignOutGuard, localizedErrorMessage, reauthenticate, getTemplateToken, getProviderToken, signOutReasonFromClient, readRedirectResult, completeOAuthPopupLanding, mapOAuthPopupPayload, stripRedirectParams, closeOAuthPopupAfterSignIn, SDK_HEADER, sdkHeaderValue, reportSdkAdvisory, readExpiry, msUntilRefresh, policyTranslator, injectPolicyStyles, mountPolicyClickwrap, mountPolicyConsent, controllerForPending, mountPolicyAcceptStep, joinTitles, formatPolicyDate, PolicyGateController, groupSetupKey, enrollmentSubmitKey, nextStep, awaitingSignUpLink, canDownloadRecoveryCodes, copyRecoveryCodes, downloadRecoveryCodes, createCaptchaController, atlasCaptchaLabels, PolicyAcceptanceController, flowFromPending, initialFlow, createMfaEnrollment, createPasskeySignInController, startSignInWithAtlas, mfaChoicesFrom, fetchInstanceSettings, fetchLastSignInMethod, offeredFirstFactors, prepareFactor, signInCaptchaOptions, flowNeedsCaptcha, planFirstFactor, advanceWithCaptcha, loadPolicies, createSignUp, prepareSecondFactorCode, resendSignUpVerification, createPasskeySignUp, finishPasskeySignUp, pendingRecoveryCodes, acknowledgeRecoveryCodes, shouldKeepPolling, pollAttempt, lastUsedMethodLabel, signUp, passkeysSupported, confirmPolicies, awaitingPasskey, listCibaRequests, getCibaPin, decideCibaRequest, setCibaPin, clearCibaPin, OrganizationProfileController, describeAuditAction, actorFromClaims } from '@atlasauth/js';
|
|
8
8
|
export { FapiClient, SIGN_OUT_EVENT, SignOutError, advance, flowFromPending, getProviderToken, initialFlow, onAtlasSignOut, pollAttempt, prepareFactor, requestForStep, shouldKeepPolling } from '@atlasauth/js';
|
|
9
9
|
import { evaluate } from '@atlasauth/authz';
|
|
10
10
|
export { evaluate, hasFromClaims } from '@atlasauth/authz';
|
|
@@ -204,12 +204,15 @@ const EN_US = {
|
|
|
204
204
|
'signIn.signUpLink': 'Sign up',
|
|
205
205
|
'signIn.orDivider': 'or',
|
|
206
206
|
'signIn.socialButton': 'Continue with {provider}',
|
|
207
|
+
'signIn.continueWithAtlas': 'Continue with Atlas',
|
|
207
208
|
'signIn.emailCodeLabel': 'Verification code',
|
|
208
209
|
'signIn.useEmailCode': 'Email me a code',
|
|
209
210
|
'signIn.codeSentTo': 'We sent a code to {email}. Enter it below.',
|
|
210
211
|
'signIn.resendCode': 'Resend code',
|
|
211
212
|
'signIn.sending': 'Sending…',
|
|
212
213
|
'signIn.emailCodeOption': 'Email me a code instead',
|
|
214
|
+
'signIn.passkeyButton': 'Sign in with a passkey',
|
|
215
|
+
'signIn.passkeyCancelled': "Passkey sign-in didn't finish. Try again, or use another way to sign in.",
|
|
213
216
|
'signIn.magicLinkSent': 'Check your email for a sign-in link.',
|
|
214
217
|
'signIn.signedIn': 'You\'re signed in.',
|
|
215
218
|
'signIn.sessionNotKept': 'You signed in, but this browser didn\'t keep the session. If it blocks third-party cookies, allow cookies for this site and try again.',
|
|
@@ -389,7 +392,7 @@ function withFallback(locale) {
|
|
|
389
392
|
}
|
|
390
393
|
|
|
391
394
|
/** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
|
|
392
|
-
const ATLAS_ANGULAR_VERSION = '0.
|
|
395
|
+
const ATLAS_ANGULAR_VERSION = '0.13.0';
|
|
393
396
|
const ATLAS_ANGULAR_SDK = { name: '@atlasauth/angular', version: ATLAS_ANGULAR_VERSION };
|
|
394
397
|
|
|
395
398
|
/**
|
|
@@ -1639,7 +1642,8 @@ class AttemptFlowComponent {
|
|
|
1639
1642
|
const step = this.step();
|
|
1640
1643
|
switch (step.kind) {
|
|
1641
1644
|
case 'collect_identifier':
|
|
1642
|
-
|
|
1645
|
+
// `webauthn`: saved passkeys appear in this field's autofill while <atlas-sign-in> holds a conditional request.
|
|
1646
|
+
return [{ kind: 'input', name: 'identifier', labelKey: 'signIn.identifierLabel', type: 'email', autocomplete: 'username webauthn' }];
|
|
1643
1647
|
case 'collect_first_factor': {
|
|
1644
1648
|
if (this.preparedFactor === 'email_code') {
|
|
1645
1649
|
return [{ kind: 'input', name: 'code', labelKey: 'signIn.emailCodeLabel', type: 'text' }];
|
|
@@ -1805,6 +1809,7 @@ class AttemptFlowComponent {
|
|
|
1805
1809
|
[class]="cls('formFieldInput', 'atlas-input')"
|
|
1806
1810
|
[type]="f.type"
|
|
1807
1811
|
[attr.name]="f.name"
|
|
1812
|
+
[attr.autocomplete]="f.autocomplete ?? null"
|
|
1808
1813
|
[value]="values[f.name] ?? ''"
|
|
1809
1814
|
(input)="setValue(f.name, $any($event.target).value)"
|
|
1810
1815
|
/>
|
|
@@ -2016,6 +2021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2016
2021
|
[class]="cls('formFieldInput', 'atlas-input')"
|
|
2017
2022
|
[type]="f.type"
|
|
2018
2023
|
[attr.name]="f.name"
|
|
2024
|
+
[attr.autocomplete]="f.autocomplete ?? null"
|
|
2019
2025
|
[value]="values[f.name] ?? ''"
|
|
2020
2026
|
(input)="setValue(f.name, $any($event.target).value)"
|
|
2021
2027
|
/>
|
|
@@ -2341,6 +2347,13 @@ class AtlasFlowController {
|
|
|
2341
2347
|
* {@link create} sends their acceptances and reloads them after a refusal.
|
|
2342
2348
|
*/
|
|
2343
2349
|
policies = new PolicyAcceptanceController([]);
|
|
2350
|
+
/**
|
|
2351
|
+
* Passkey sign-in (the "Sign in with a passkey" button and passkey autofill on
|
|
2352
|
+
* the identifier field). The outcome goes through the same completion as every sign-in.
|
|
2353
|
+
*/
|
|
2354
|
+
passkey;
|
|
2355
|
+
/** Whether this browser can run WebAuthn; `<atlas-sign-in>` sets it after it is created in a browser. */
|
|
2356
|
+
passkeySupported = signal(false);
|
|
2344
2357
|
pollTimer = null;
|
|
2345
2358
|
identifier = '';
|
|
2346
2359
|
constructor(client, reload, pending,
|
|
@@ -2355,9 +2368,36 @@ class AtlasFlowController {
|
|
|
2355
2368
|
this.enrollment = createMfaEnrollment(this.client, () => this.mfaChoices());
|
|
2356
2369
|
this.enrollmentState = signal(this.enrollment.state);
|
|
2357
2370
|
this.enrollment.subscribe((next) => this.enrollmentState.set(next));
|
|
2371
|
+
this.passkey = createPasskeySignInController({
|
|
2372
|
+
client: this.client,
|
|
2373
|
+
onStart: () => this.state.update((current) => ({ ...current, busy: true, errors: [] })),
|
|
2374
|
+
onResult: (next) => this.finish(next),
|
|
2375
|
+
captcha: () => this.captcha,
|
|
2376
|
+
cancelledMessage: () => this.t('signIn.passkeyCancelled'),
|
|
2377
|
+
});
|
|
2358
2378
|
this.syncCaptcha();
|
|
2359
2379
|
this.syncEnrollment();
|
|
2360
2380
|
}
|
|
2381
|
+
/** Why "Continue with Atlas" could not start (the server's message); null otherwise. */
|
|
2382
|
+
signInWithAtlasError = signal(null);
|
|
2383
|
+
/**
|
|
2384
|
+
* "Continue with Atlas" (when `settings().signInWithAtlas` is set): starts the
|
|
2385
|
+
* SSO sign-in and sends the browser to Atlas.
|
|
2386
|
+
*/
|
|
2387
|
+
async signInWithAtlas(connectionId) {
|
|
2388
|
+
if (typeof window === 'undefined')
|
|
2389
|
+
return;
|
|
2390
|
+
this.signInWithAtlasError.set(null);
|
|
2391
|
+
const started = await startSignInWithAtlas(this.client, connectionId, window.location.href);
|
|
2392
|
+
if ('url' in started)
|
|
2393
|
+
window.location.assign(started.url);
|
|
2394
|
+
else
|
|
2395
|
+
this.signInWithAtlasError.set(started.error);
|
|
2396
|
+
}
|
|
2397
|
+
/** "Sign in with a passkey" is offered: the first step, the instance turned passkey sign-in on, and the browser can. */
|
|
2398
|
+
passkeyOffered() {
|
|
2399
|
+
return this.passkeySupported() && !this.state().attempt && this.settings()?.passkeySignIn === true;
|
|
2400
|
+
}
|
|
2361
2401
|
/** What the app lets the MFA steps offer (from {@link settings}). */
|
|
2362
2402
|
mfaChoices() {
|
|
2363
2403
|
return mfaChoicesFrom(this.settings()?.account);
|
|
@@ -2632,6 +2672,7 @@ class AtlasFlowController {
|
|
|
2632
2672
|
}
|
|
2633
2673
|
/** Release the poll timer and the captcha widgets — call from the component's `ngOnDestroy`. */
|
|
2634
2674
|
destroy() {
|
|
2675
|
+
this.passkey.stopAutofill();
|
|
2635
2676
|
this.stopPolling();
|
|
2636
2677
|
this.captcha.destroy();
|
|
2637
2678
|
this.signUpCaptcha.destroy();
|
|
@@ -2667,6 +2708,12 @@ class SignInComponent {
|
|
|
2667
2708
|
return null;
|
|
2668
2709
|
return lastUsedMethodLabel(this.flow.lastMethod(), (key) => this.t(key));
|
|
2669
2710
|
}
|
|
2711
|
+
/** The "Sign in with Atlas" connection, on the first step, when the instance has it on. */
|
|
2712
|
+
atlasConnection() {
|
|
2713
|
+
if (this.flow.state().attempt || this.flow.recoveryCodes())
|
|
2714
|
+
return null;
|
|
2715
|
+
return this.flow.settings()?.signInWithAtlas?.connectionId ?? null;
|
|
2716
|
+
}
|
|
2670
2717
|
signUpHref() {
|
|
2671
2718
|
if (this.signUpUrl === null)
|
|
2672
2719
|
return null;
|
|
@@ -2686,7 +2733,16 @@ class SignInComponent {
|
|
|
2686
2733
|
flow = new AtlasFlowController(this.atlas.createFapiClient(), () => this.atlas.reload(),
|
|
2687
2734
|
// Resume mid-flow if an OAuth redirect came back owing a second factor.
|
|
2688
2735
|
this.atlas.pendingAttempt, (key) => translate(this.atlas.localization, key));
|
|
2736
|
+
// Passkey autofill runs while the first step offers passkeys (a computed, so it re-arms only when that changes).
|
|
2737
|
+
passkeyOffered = computed(() => this.flow.passkeyOffered());
|
|
2738
|
+
passkeyAutofill = effect(() => (this.passkeyOffered() ? this.flow.passkey.armAutofill() : this.flow.passkey.stopAutofill()));
|
|
2739
|
+
submitIdentifier(values) {
|
|
2740
|
+
this.flow.passkey.stopAutofill();
|
|
2741
|
+
void this.flow.submit(values);
|
|
2742
|
+
}
|
|
2689
2743
|
ngOnInit() {
|
|
2744
|
+
if (typeof window !== 'undefined')
|
|
2745
|
+
this.flow.passkeySupported.set(passkeysSupported());
|
|
2690
2746
|
// If seeded from a pending attempt that is already pollable, start polling.
|
|
2691
2747
|
this.flow.syncPolling();
|
|
2692
2748
|
// §5 the instance's captcha settings (switching captcha on in the dashboard
|
|
@@ -2705,6 +2761,14 @@ class SignInComponent {
|
|
|
2705
2761
|
{{ t('signIn.lastUsed') }}: {{ label }}
|
|
2706
2762
|
</p>
|
|
2707
2763
|
}
|
|
2764
|
+
@if (atlasConnection(); as connectionId) {
|
|
2765
|
+
<button type="button" class="atlas-social-button" data-atlas-provider="atlas" (click)="flow.signInWithAtlas(connectionId)">
|
|
2766
|
+
{{ t('signIn.continueWithAtlas') }}
|
|
2767
|
+
</button>
|
|
2768
|
+
@if (flow.signInWithAtlasError(); as message) {
|
|
2769
|
+
<p class="atlas-error" role="alert">{{ message }}</p>
|
|
2770
|
+
}
|
|
2771
|
+
}
|
|
2708
2772
|
@if (flow.recoveryCodes(); as codes) {
|
|
2709
2773
|
<atlas-recovery-codes [codes]="codes" [busy]="flow.state().busy" (saved)="flow.saveRecoveryCodes()"></atlas-recovery-codes>
|
|
2710
2774
|
} @else {
|
|
@@ -2719,7 +2783,7 @@ class SignInComponent {
|
|
|
2719
2783
|
[preparedFactor]="flow.preparedFactor()"
|
|
2720
2784
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
2721
2785
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
2722
|
-
(submitFlow)="
|
|
2786
|
+
(submitFlow)="submitIdentifier($event)"
|
|
2723
2787
|
(chooseFactor)="flow.prepare($event)"
|
|
2724
2788
|
[offerSmsSecondFactor]="flow.settings() !== null && flow.mfaChoices().sms"
|
|
2725
2789
|
[textedSecondFactor]="flow.smsSecondFactor()"
|
|
@@ -2730,6 +2794,17 @@ class SignInComponent {
|
|
|
2730
2794
|
(policyDeclined)="flow.declinePolicy($event)"
|
|
2731
2795
|
></atlas-attempt-flow>
|
|
2732
2796
|
}
|
|
2797
|
+
@if (flow.passkeyOffered() && !flow.recoveryCodes()) {
|
|
2798
|
+
<button
|
|
2799
|
+
type="button"
|
|
2800
|
+
class="atlas-social-button atlas-passkey-button"
|
|
2801
|
+
data-atlas-passkey-sign-in=""
|
|
2802
|
+
[disabled]="flow.state().busy"
|
|
2803
|
+
(click)="flow.passkey.signIn()"
|
|
2804
|
+
>
|
|
2805
|
+
{{ t('signIn.passkeyButton') }}
|
|
2806
|
+
</button>
|
|
2807
|
+
}
|
|
2733
2808
|
@if (flow.state().attempt?.status !== 'complete' && signUpHref(); as href) {
|
|
2734
2809
|
<p class="atlas-footer" data-atlas-sign-up-prompt="">
|
|
2735
2810
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|
|
@@ -2750,6 +2825,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2750
2825
|
{{ t('signIn.lastUsed') }}: {{ label }}
|
|
2751
2826
|
</p>
|
|
2752
2827
|
}
|
|
2828
|
+
@if (atlasConnection(); as connectionId) {
|
|
2829
|
+
<button type="button" class="atlas-social-button" data-atlas-provider="atlas" (click)="flow.signInWithAtlas(connectionId)">
|
|
2830
|
+
{{ t('signIn.continueWithAtlas') }}
|
|
2831
|
+
</button>
|
|
2832
|
+
@if (flow.signInWithAtlasError(); as message) {
|
|
2833
|
+
<p class="atlas-error" role="alert">{{ message }}</p>
|
|
2834
|
+
}
|
|
2835
|
+
}
|
|
2753
2836
|
@if (flow.recoveryCodes(); as codes) {
|
|
2754
2837
|
<atlas-recovery-codes [codes]="codes" [busy]="flow.state().busy" (saved)="flow.saveRecoveryCodes()"></atlas-recovery-codes>
|
|
2755
2838
|
} @else {
|
|
@@ -2764,7 +2847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2764
2847
|
[preparedFactor]="flow.preparedFactor()"
|
|
2765
2848
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
2766
2849
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
2767
|
-
(submitFlow)="
|
|
2850
|
+
(submitFlow)="submitIdentifier($event)"
|
|
2768
2851
|
(chooseFactor)="flow.prepare($event)"
|
|
2769
2852
|
[offerSmsSecondFactor]="flow.settings() !== null && flow.mfaChoices().sms"
|
|
2770
2853
|
[textedSecondFactor]="flow.smsSecondFactor()"
|
|
@@ -2775,6 +2858,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2775
2858
|
(policyDeclined)="flow.declinePolicy($event)"
|
|
2776
2859
|
></atlas-attempt-flow>
|
|
2777
2860
|
}
|
|
2861
|
+
@if (flow.passkeyOffered() && !flow.recoveryCodes()) {
|
|
2862
|
+
<button
|
|
2863
|
+
type="button"
|
|
2864
|
+
class="atlas-social-button atlas-passkey-button"
|
|
2865
|
+
data-atlas-passkey-sign-in=""
|
|
2866
|
+
[disabled]="flow.state().busy"
|
|
2867
|
+
(click)="flow.passkey.signIn()"
|
|
2868
|
+
>
|
|
2869
|
+
{{ t('signIn.passkeyButton') }}
|
|
2870
|
+
</button>
|
|
2871
|
+
}
|
|
2778
2872
|
@if (flow.state().attempt?.status !== 'complete' && signUpHref(); as href) {
|
|
2779
2873
|
<p class="atlas-footer" data-atlas-sign-up-prompt="">
|
|
2780
2874
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|