firebaseui-angular-i18n
Version:
[](https://badge.fury.io/js/firebaseui-angular-i18n)
136 lines • 18.5 kB
JavaScript
import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
import 'firebase/compat/auth';
import * as i0 from "@angular/core";
import * as i1 from "@angular/fire/compat/auth";
import * as i2 from "./firebaseui-angular-library.service";
export class FirebaseuiAngularLibraryComponent {
constructor(angularFireAuth, _firebaseUiConfig, _firebaseUiConfig_Feature, ngZone, firebaseUIService) {
this.angularFireAuth = angularFireAuth;
this._firebaseUiConfig = _firebaseUiConfig;
this._firebaseUiConfig_Feature = _firebaseUiConfig_Feature;
this.ngZone = ngZone;
this.firebaseUIService = firebaseUIService;
this.signInSuccessWithAuthResultCallback = new EventEmitter(); // tslint:disable-line
this.signInFailureCallback = new EventEmitter(); // tslint:disable-line
this.uiShownCallback = new EventEmitter(); // tslint:disable-line
this.firebaseUISubscription = this.firebaseUIService.getFirebaseUiObservable().subscribe((fireUIInstance) => {
this.firebaseUIPopup(fireUIInstance);
});
}
async ngOnChanges(changes) {
await this.firebaseUIService.setLanguage(changes.language.currentValue);
}
get firebaseUiConfig() {
return {
...this._firebaseUiConfig,
...this._firebaseUiConfig_Feature
};
}
ngOnInit() {
this.subscription = this.angularFireAuth.authState.subscribe((value) => {
if ((value && value.isAnonymous) || !value) {
if (this.firebaseUiConfig.signInOptions.length !== 0) {
// initialization of ngOnChanges occurs only when language value is accepted as @input. fire manually if it is not
if (!this.language) {
this.firebaseUIService.setLanguage('en');
}
}
else {
throw new Error('There must be at least one AuthProvider.');
}
}
});
}
ngOnDestroy() {
if (!!this.subscription) {
this.subscription.unsubscribe();
}
if (!!this.firebaseUISubscription) {
this.firebaseUISubscription.unsubscribe();
}
}
getUIAuthConfig() {
if (!this.firebaseUiConfig.callbacks) {
this._firebaseUiConfig[FirebaseuiAngularLibraryComponent.COMPUTED_CALLBACKS] = true;
this._firebaseUiConfig.callbacks = this.getCallbacks();
}
return this.firebaseUiConfig;
}
firebaseUIPopup(firebaseUiInstance) {
const uiAuthConfig = this.getUIAuthConfig();
// Check if callbacks got computed to reset them again after providing the to firebaseui.
// Necessary for allowing updating the firebaseui config during runtime.
let resetCallbacks = false;
if (uiAuthConfig[FirebaseuiAngularLibraryComponent.COMPUTED_CALLBACKS]) {
resetCallbacks = true;
delete uiAuthConfig[FirebaseuiAngularLibraryComponent.COMPUTED_CALLBACKS];
}
delete uiAuthConfig.language;
// show the firebaseui
firebaseUiInstance.start('#firebaseui-auth-container', uiAuthConfig);
if (resetCallbacks) {
this._firebaseUiConfig.callbacks = null;
}
}
getCallbacks() {
const signInSuccessWithAuthResultCallback = (authResult, redirectUrl) => {
this.ngZone.run(() => {
this.signInSuccessWithAuthResultCallback.emit({
authResult,
redirectUrl
});
});
return this.firebaseUiConfig.signInSuccessUrl;
};
const signInFailureCallback = (error) => {
this.ngZone.run(() => {
this.signInFailureCallback.emit({
code: error.code,
credential: error.credential
});
});
return Promise.reject();
};
const uiShownCallback = () => {
this.ngZone.run(() => {
this.uiShownCallback.emit();
});
};
return {
signInSuccessWithAuthResult: signInSuccessWithAuthResultCallback,
signInFailure: signInFailureCallback,
uiShown: uiShownCallback
};
}
}
FirebaseuiAngularLibraryComponent.COMPUTED_CALLBACKS = 'COMPUTED_CALLBACKS';
FirebaseuiAngularLibraryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: FirebaseuiAngularLibraryComponent, deps: [{ token: i1.AngularFireAuth }, { token: 'firebaseUIAuthConfig' }, { token: 'firebaseUIAuthConfigFeature' }, { token: i0.NgZone }, { token: i2.FirebaseuiAngularLibraryService }], target: i0.ɵɵFactoryTarget.Component });
FirebaseuiAngularLibraryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: FirebaseuiAngularLibraryComponent, selector: "firebase-ui", inputs: { language: "language" }, outputs: { signInSuccessWithAuthResultCallback: "signInSuccessWithAuthResult", signInFailureCallback: "signInFailure", uiShownCallback: "uiShown" }, usesOnChanges: true, ngImport: i0, template: '<div id="firebaseui-auth-container"></div>', isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: FirebaseuiAngularLibraryComponent, decorators: [{
type: Component,
args: [{
selector: 'firebase-ui',
template: '<div id="firebaseui-auth-container"></div>'
}]
}], ctorParameters: function () { return [{ type: i1.AngularFireAuth }, { type: undefined, decorators: [{
type: Inject,
args: ['firebaseUIAuthConfig']
}] }, { type: undefined, decorators: [{
type: Inject,
args: ['firebaseUIAuthConfigFeature']
}] }, { type: i0.NgZone }, { type: i2.FirebaseuiAngularLibraryService }]; }, propDecorators: { language: [{
type: Optional
}, {
type: Input,
args: ["language"]
}], signInSuccessWithAuthResultCallback: [{
type: Output,
args: ['signInSuccessWithAuthResult']
}], signInFailureCallback: [{
type: Output,
args: ['signInFailure']
}], uiShownCallback: [{
type: Output,
args: ['uiShown']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2V1aS1hbmd1bGFyLWxpYnJhcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlyZWJhc2V1aS1hbmd1bGFyLWxpYnJhcnkvc3JjL2xpYi9maXJlYmFzZXVpLWFuZ3VsYXItbGlicmFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBd0MsUUFBUSxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHOUksT0FBTyxzQkFBc0IsQ0FBQzs7OztBQW1COUIsTUFBTSxPQUFPLGlDQUFpQztJQVk1QyxZQUFvQixlQUFnQyxFQUNWLGlCQUErQyxFQUN4Qyx5QkFBdUQsRUFDOUYsTUFBYyxFQUNkLGlCQUFrRDtRQUp4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDVixzQkFBaUIsR0FBakIsaUJBQWlCLENBQThCO1FBQ3hDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBOEI7UUFDOUYsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBaUM7UUFWckIsd0NBQW1DLEdBQXdELElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxzQkFBc0I7UUFDbkosMEJBQXFCLEdBQTBDLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxzQkFBc0I7UUFDL0csb0JBQWUsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtRQVNqRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBc0IsRUFBRSxFQUFFO1lBQ2xILElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxD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QU07dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJGaXJlQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvY29tcGF0L2F1dGgnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdC9hcHAnO1xuaW1wb3J0ICdmaXJlYmFzZS9jb21wYXQvYXV0aCc7XG5pbXBvcnQgKiBhcyBmaXJlYmFzZXVpIGZyb20gJ2ZpcmViYXNldWknO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZEZpcmViYXNlVUlBdXRoQ29uZmlnLFxuICBGaXJlYmFzZVVJU2lnbkluRmFpbHVyZSxcbiAgRmlyZWJhc2VVSVNpZ25JblN1Y2Nlc3NXaXRoQXV0aFJlc3VsdFxufSBmcm9tICcuL2ZpcmViYXNldWktYW5ndWxhci1saWJyYXJ5LmhlbHBlcic7XG5pbXBvcnQgeyBGaXJlYmFzZXVpQW5ndWxhckxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi9maXJlYmFzZXVpLWFuZ3VsYXItbGlicmFyeS5zZXJ2aWNlJztcblxuaW1wb3J0IFVzZXIgPSBmaXJlYmFzZS5Vc2VyO1xuaW1wb3J0IFVzZXJDcmVkZW50aWFsID0gZmlyZWJhc2UuYXV0aC5Vc2VyQ3JlZGVudGlhbDtcbmltcG9ydCBBdXRoVUkgPSBmaXJlYmFzZXVpLmF1dGguQXV0aFVJO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZpcmViYXNlLXVpJyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGlkPVwiZmlyZWJhc2V1aS1hdXRoLWNvbnRhaW5lclwiPjwvZGl2Pidcbn0pXG5leHBvcnQgY2xhc3MgRmlyZWJhc2V1aUFuZ3VsYXJMaWJyYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPTVBVVEVEX0NBTExCQUNLUyA9ICdDT01QVVRFRF9DQUxMQkFDS1MnO1xuICBwcml2YXRlIGZpcmViYXNlVUlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAT3B0aW9uYWwoKSBASW5wdXQoXCJsYW5ndWFnZVwiKSBsYW5ndWFnZTogc3RyaW5nO1xuXG4gIEBPdXRwdXQoJ3NpZ25JblN1Y2Nlc3NXaXRoQXV0aFJlc3VsdCcpIHNpZ25JblN1Y2Nlc3NXaXRoQXV0aFJlc3VsdENhbGxiYWNrOiBFdmVudEVtaXR0ZXI8RmlyZWJhc2VVSVNpZ25JblN1Y2Nlc3NXaXRoQXV0aFJlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgQE91dHB1dCgnc2lnbkluRmFpbHVyZScpIHNpZ25JbkZhaWx1cmVDYWxsYmFjazogRXZlbnRFbWl0dGVyPEZpcmViYXNlVUlTaWduSW5GYWlsdXJlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICBAT3V0cHV0KCd1aVNob3duJykgdWlTaG93bkNhbGxiYWNrOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYW5ndWxhckZpcmVBdXRoOiBBbmd1bGFyRmlyZUF1dGgsXG4gICAgQEluamVjdCgnZmlyZWJhc2VVSUF1dGhDb25maWcnKSBwcml2YXRlIF9maXJlYmFzZVVpQ29uZmlnOiBFeHRlbmRlZEZpcmViYXNlVUlBdXRoQ29uZmlnLFxuICAgIEBJbmplY3QoJ2ZpcmViYXNlVUlBdXRoQ29uZmlnRmVhdHVyZScpIHByaXZhdGUgX2ZpcmViYXNlVWlDb25maWdfRmVhdHVyZTogRXh0ZW5kZWRGaXJlYmFzZVVJQXV0aENvbmZpZyxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgZmlyZWJhc2VVSVNlcnZpY2U6IEZpcmViYXNldWlBbmd1bGFyTGlicmFyeVNlcnZpY2UpIHtcbiAgICB0aGlzLmZpcmViYXNlVUlTdWJzY3JpcHRpb24gPSB0aGlzLmZpcmViYXNlVUlTZXJ2aWNlLmdldEZpcmViYXNlVWlPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChmaXJlVUlJbnN0YW5jZTogQXV0aFVJKSA9PiB7XG4gICAgICB0aGlzLmZpcmViYXNlVUlQb3B1cChmaXJlVUlJbnN0YW5jZSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgYXdhaXQgdGhpcy5maXJlYmFzZVVJU2VydmljZS5zZXRMYW5ndWFnZShjaGFuZ2VzLmxhbmd1YWdlLmN1cnJlbnRWYWx1ZSk7XG4gIH1cblxuICBnZXQgZmlyZWJhc2VVaUNvbmZpZygpOiBFeHRlbmRlZEZpcmViYXNlVUlBdXRoQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5fZmlyZWJhc2VVaUNvbmZpZyxcbiAgICAgIC4uLnRoaXMuX2ZpcmViYXNlVWlDb25maWdfRmVhdHVyZVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYW5ndWxhckZpcmVBdXRoLmF1dGhTdGF0ZS5zdWJzY3JpYmUoKHZhbHVlOiBVc2VyKSA9PiB7XG4gICAgICBpZiAoKHZhbHVlICYmIHZhbHVlLmlzQW5vbnltb3VzKSB8fCAhdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlyZWJhc2VVaUNvbmZpZy5zaWduSW5PcHRpb25zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIGluaXRpYWxpemF0aW9uIG9mIG5nT25DaGFuZ2VzIG9jY3VycyBvbmx5IHdoZW4gbGFuZ3VhZ2UgdmFsdWUgaXMgYWNjZXB0ZWQgYXMgQGlucHV0LiBmaXJlIG1hbnVhbGx5IGlmIGl0IGlzIG5vdFxuICAgICAgICAgIGlmICghdGhpcy5sYW5ndWFnZSkge1xuICAgICAgICAgICAgdGhpcy5maXJlYmFzZVVJU2VydmljZS5zZXRMYW5ndWFnZSgnZW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBBdXRoUHJvdmlkZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICghIXRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmZpcmViYXNlVUlTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlyZWJhc2VVSVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VUlBdXRoQ29uZmlnKCk6IEV4dGVuZGVkRmlyZWJhc2VVSUF1dGhDb25maWcge1xuICAgIGlmICghdGhpcy5maXJlYmFzZVVpQ29uZmlnLmNhbGxiYWNrcykge1xuICAgICAgdGhpcy5fZmlyZWJhc2VVaUNvbmZpZ1tGaXJlYmFzZXVpQW5ndWxhckxpYnJhcnlDb21wb25lbnQuQ09NUFVURURfQ0FMTEJBQ0tTXSA9IHRydWU7XG4gICAgICB0aGlzLl9maXJlYmFzZVVpQ29uZmlnLmNhbGxiYWNrcyA9IHRoaXMuZ2V0Q2FsbGJhY2tzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpcmViYXNlVWlDb25maWc7XG4gIH1cblxuICBwcml2YXRlIGZpcmViYXNlVUlQb3B1cChmaXJlYmFzZVVpSW5zdGFuY2U6IEF1dGhVSSkge1xuICAgIGNvbnN0IHVpQXV0aENvbmZpZyA9IHRoaXMuZ2V0VUlBdXRoQ29uZmlnKCk7XG5cbiAgICAvLyBDaGVjayBpZiBjYWxsYmFja3MgZ290IGNvbXB1dGVkIHRvIHJlc2V0IHRoZW0gYWdhaW4gYWZ0ZXIgcHJvdmlkaW5nIHRoZSB0byBmaXJlYmFzZXVpLlxuICAgIC8vIE5lY2Vzc2FyeSBmb3IgYWxsb3dpbmcgdXBkYXRpbmcgdGhlIGZpcmViYXNldWkgY29uZmlnIGR1cmluZyBydW50aW1lLlxuICAgIGxldCByZXNldENhbGxiYWNrcyA9IGZhbHNlO1xuICAgIGlmICh1aUF1dGhDb25maWdbRmlyZWJhc2V1aUFuZ3VsYXJMaWJyYXJ5Q29tcG9uZW50LkNPTVBVVEVEX0NBTExCQUNLU10pIHtcbiAgICAgIHJlc2V0Q2FsbGJhY2tzID0gdHJ1ZTtcbiAgICAgIGRlbGV0ZSB1aUF1dGhDb25maWdbRmlyZWJhc2V1aUFuZ3VsYXJMaWJyYXJ5Q29tcG9uZW50LkNPTVBVVEVEX0NBTExCQUNLU107XG4gICAgfVxuXG4gICAgZGVsZXRlIHVpQXV0aENvbmZpZy5sYW5ndWFnZTtcblxuICAgIC8vIHNob3cgdGhlIGZpcmViYXNldWlcbiAgICBmaXJlYmFzZVVpSW5zdGFuY2Uuc3RhcnQoJyNmaXJlYmFzZXVpLWF1dGgtY29udGFpbmVyJywgdWlBdXRoQ29uZmlnKTtcblxuICAgIGlmIChyZXNldENhbGxiYWNrcykge1xuICAgICAgdGhpcy5fZmlyZWJhc2VVaUNvbmZpZy5jYWxsYmFja3MgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsbGJhY2tzKCk6IGFueSB7IC8vIGZpcmViYXNldWkuQ2FsbGJhY2tzXG4gICAgY29uc3Qgc2lnbkluU3VjY2Vzc1dpdGhBdXRoUmVzdWx0Q2FsbGJhY2sgPSAoYXV0aFJlc3VsdDogVXNlckNyZWRlbnRpYWwsIHJlZGlyZWN0VXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2lnbkluU3VjY2Vzc1dpdGhBdXRoUmVzdWx0Q2FsbGJhY2suZW1pdCh7XG4gICAgICAgICAgYXV0aFJlc3VsdCxcbiAgICAgICAgICByZWRpcmVjdFVybFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuZmlyZWJhc2VVaUNvbmZpZy5zaWduSW5TdWNjZXNzVXJsO1xuICAgIH07XG5cbiAgICBjb25zdCBzaWduSW5GYWlsdXJlQ2FsbGJhY2sgPSAoZXJyb3I6IGZpcmViYXNldWkuYXV0aC5BdXRoVUlFcnJvcikgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaWduSW5GYWlsdXJlQ2FsbGJhY2suZW1pdCh7XG4gICAgICAgICAgY29kZTogZXJyb3IuY29kZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBlcnJvci5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdWlTaG93bkNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy51aVNob3duQ2FsbGJhY2suZW1pdCgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaWduSW5TdWNjZXNzV2l0aEF1dGhSZXN1bHQ6IHNpZ25JblN1Y2Nlc3NXaXRoQXV0aFJlc3VsdENhbGxiYWNrLFxuICAgICAgc2lnbkluRmFpbHVyZTogc2lnbkluRmFpbHVyZUNhbGxiYWNrLFxuICAgICAgdWlTaG93bjogdWlTaG93bkNhbGxiYWNrXG4gICAgfTtcbiAgfVxufVxuIl19