dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
131 lines • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, ViewChild, HostBinding } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';
import { AuthloginService, AuthService, ProjectService } from 'dbweb-core';
import { Md5 } from 'ts-md5';
export class LoginComponent {
/**
* @param {?} auth
* @param {?} project
* @param {?} snackBar
* @param {?} authLogin
*/
constructor(auth, project, snackBar, authLogin) {
this.auth = auth;
this.project = project;
this.snackBar = snackBar;
this.authLogin = authLogin;
this.hide = true;
this.eyehide = true;
this.hostClass = true;
this.logging = false;
}
/**
* @return {?}
*/
userNameEnter() {
this.pwd.nativeElement.focus();
}
/**
* @return {?}
*/
passwordEnter() {
this.btnOk.nativeElement.click();
}
/**
* @return {?}
*/
btnOkClick() {
if (this.snack) {
this.snack.dismiss();
}
if (!this.password || !this.userName) {
this.snack = this.snackBar.open('用户名或密码不能为空', '确定', {
verticalPosition: 'top',
duration: 5000
});
return;
}
this.logging = true;
this.auth.login({ UserName: this.userName, Md5Password: (/** @type {?} */ (Md5.hashStr(this.password))) }).subscribe((/**
* @param {?} n
* @return {?}
*/
n => {
this.authLogin.loginDefault(n);
this.logging = false;
}), (/**
* @param {?} err
* @return {?}
*/
err => {
console.log(err);
this.logging = false;
this.snack = this.snackBar.open('用户名或密码错误', '确定', { verticalPosition: 'top' });
}));
}
/**
* @return {?}
*/
ngOnInit() { }
/**
* @return {?}
*/
refresh() {
window.location.reload();
}
}
LoginComponent.decorators = [
{ type: Component, args: [{
selector: 'common-app-login',
template: "<ng-container [ngSwitch]=\"project.applicationStatus\">\r\n\t<!-- \u9690\u85CF\u5185\u5BB9 -->\r\n\t<div *ngSwitchCase=\"'start-init'\" class=\"flash-div\">\r\n\t\t<div class=\"\u8FDE\u63A5\u670D\u52A1\">\r\n\t\t\t<img src=\"/front/assets/login/\u8FDE\u63A5\u4E2D.png\" alt=\"\u8FDE\u63A5\u4E2D...\" />\r\n\t\t</div>\r\n\t</div>\r\n\t<div *ngSwitchCase=\"'init-error'\" class=\"flash-div\">\r\n\t\t<div class=\"\u8FDE\u63A5\u670D\u52A1\">\r\n\t\t\t<img src=\"/front/assets/login/\u670D\u52A1\u5668\u6545\u969C.png\" alt=\"\u670D\u52A1\u5668\u6545\u969C\" />\r\n\t\t\t<button class=\"\u5237\u65B0\u6309\u94AE\" mat-stroked-button (click)=\"refresh()\">\r\n\t\t\t\t\u5237\u65B0\u8BD5\u8BD5\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- *** \u4E3B\u4F53 *** -->\r\n\t<div class=\"login-main\" *ngSwitchCase=\"'init-done'\">\r\n\r\n\t\t<!-- ** \u767B\u5F55\u7A97\u53E3 ** -->\r\n\t\t<div class=\"login-container\">\r\n\t\t\t<!-- * \u6CE8\u518C\u6587\u5B57\u7A97\u53E3\u6846\u67B6 * -->\r\n\t\t\t<div class=\"login-wrapper\">\r\n\r\n\t\t\t\t<!-- \u767B\u5F55\u6587\u672C -->\r\n\t\t\t\t<div class=\"log-tit\">\u767B\u5F55</div>\r\n\r\n\t\t\t\t<!-- \u7528\u6237\u540D -->\r\n\t\t\t\t<div class=\"input-wrapper\">\r\n\t\t\t\t\t<mat-form-field class=\"user-input\">\r\n\t\t\t\t\t\t<input matInput #username autofocus placeholder=\"\u7528\u6237\u540D\" maxlength=\"30\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"userName\" (keyup.enter)=\"userNameEnter()\" [disabled]=\"logging\">\r\n\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- \u5BC6\u7801 -->\r\n\t\t\t\t<div class=\"input-wrapper\">\r\n\t\t\t\t\t<mat-form-field class=\"pwd-input\">\r\n\t\t\t\t\t\t<!-- left -->\r\n\t\t\t\t\t\t<input matInput #edtPassword placeholder=\"\u5BC6\u7801\" [(ngModel)]=\"password\"\r\n\t\t\t\t\t\t\t[type]=\"hide ? 'password' : 'text'\" maxlength=\"30\" [disabled]=\"logging\"\r\n\t\t\t\t\t\t\t(keyup.enter)=\"passwordEnter()\">\r\n\t\t\t\t\t\t<!-- right icon -->\r\n\t\t\t\t\t\t<mat-icon class=\"eye-icon\" matSuffix\r\n\t\t\t\t\t\t\t[svgIcon]=\"hide ? 'visibility' : 'visibility_off'\"\r\n\t\t\t\t\t\t\t(click)=\"hide = !hide\">\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- \u767B\u5F55\u6309\u94AE -->\r\n\t\t\t\t<div class=\"login-btn-wrapper\">\r\n\t\t\t\t\t<button class=\"login-button\" #btnOk mat-button (click)=\"btnOkClick()\" [disabled]=\"logging\">\r\n\t\t\t\t\t\t<ng-container *ngIf=\"logging;else notlogging\">\r\n\t\t\t\t\t\t\t<mat-spinner diameter=\"40\"></mat-spinner>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<ng-template #notlogging>\r\n\t\t\t\t\t\t\t\u767B\u5F55\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<!-- ** \u5DE6\u4E0A\u89D2\u7CFB\u7EDF\u540D\u79F0 ** -->\r\n\t<div class=\"login-title\">{{project.projectLabel}}</div>\r\n\r\n</ng-container>\r\n",
styles: ["@charset \"UTF-8\";.login-main{display:-moz-flex;display:-ms-flex;display:flex;justify-content:center;align-items:center;width:100%;height:100%;background-image:url(/front/assets/login/bg.svg);background-size:cover}.login-main .login-container{display:flex;justify-content:flex-end;align-items:center;width:640px;height:448px;background-image:url(/front/assets/login/bg_login.png);background-size:cover;border-radius:8px;box-shadow:0 5px 13px 0 rgba(0,0,0,.14)}.login-main .login-container .login-wrapper{display:flex;flex-direction:column;justify-content:space-around;width:370px;height:390px;padding:0 45px;box-sizing:border-box}.login-main .login-container .login-wrapper .log-tit{font-size:36px;font-weight:700}.login-main .login-container .login-wrapper .pwd-input,.login-main .login-container .login-wrapper .user-input{width:100%;height:30px}.login-main .login-container .login-wrapper .pwd-input{margin-top:6px}.login-main .login-container .login-wrapper .pwd-input input{width:90%}.login-main .login-container .login-wrapper .pwd-input .eye-icon{position:absolute;right:0;top:-18px;font-size:16px}.login-main .login-container .login-wrapper .login-btn-wrapper{display:flex;justify-content:flex-end}.login-main .login-container .login-wrapper .login-btn-wrapper .mat-spinner circle,.login-main .login-container .login-wrapper .login-btn-wrapper ::ng-deep .mat-progress-spinner circle{stroke:#fff}.login-main .login-container .login-wrapper .login-btn-wrapper .login-button{display:flex;justify-content:center;font-size:24px;color:#fff;background-color:#2196f3;width:168px;height:56px;box-shadow:rgba(33,150,243,.5) 0 5px 13px 2px;margin-top:80px}.login-title{position:absolute;top:20px;left:20px;color:rgba(0,0,0,.6)}.flash-div{width:100%;height:100%;display:-moz-flex;display:-ms-flex;display:flex;justify-content:center;align-items:center;overflow-y:auto}.\u8FDE\u63A5\u670D\u52A1{max-width:560px;width:100%;text-align:center}.\u8FDE\u63A5\u670D\u52A1 img{width:100%;height:auto}.\u5237\u65B0\u6309\u94AE{border:1px solid #2196f3;color:#2196f3;width:120px;height:40px;font-size:16px;font-weight:700}"]
}] }
];
/** @nocollapse */
LoginComponent.ctorParameters = () => [
{ type: AuthService },
{ type: ProjectService },
{ type: MatSnackBar },
{ type: AuthloginService }
];
LoginComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.login',] }],
username: [{ type: ViewChild, args: ['username', { static: false },] }],
pwd: [{ type: ViewChild, args: ['edtPassword', { static: false },] }],
btnOk: [{ type: ViewChild, args: ['btnOk', { read: ElementRef, static: false },] }]
};
if (false) {
/** @type {?} */
LoginComponent.prototype.userName;
/** @type {?} */
LoginComponent.prototype.password;
/** @type {?} */
LoginComponent.prototype.hide;
/** @type {?} */
LoginComponent.prototype.eyehide;
/** @type {?} */
LoginComponent.prototype.hostClass;
/** @type {?} */
LoginComponent.prototype.username;
/** @type {?} */
LoginComponent.prototype.pwd;
/** @type {?} */
LoginComponent.prototype.btnOk;
/** @type {?} */
LoginComponent.prototype.snack;
/** @type {?} */
LoginComponent.prototype.logging;
/** @type {?} */
LoginComponent.prototype.auth;
/** @type {?} */
LoginComponent.prototype.project;
/** @type {?} */
LoginComponent.prototype.snackBar;
/** @type {?} */
LoginComponent.prototype.authLogin;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsV0FBVyxFQUFrQyxNQUFNLDZCQUE2QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFPN0IsTUFBTSxPQUFPLGNBQWM7Ozs7Ozs7SUFnQjFCLFlBQ1EsSUFBaUIsRUFDakIsT0FBdUIsRUFDdkIsUUFBcUIsRUFDckIsU0FBMkI7UUFIM0IsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBakJuQyxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osWUFBTyxHQUFHLElBQUksQ0FBQztRQUVhLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFTN0MsWUFBTyxHQUFHLEtBQUssQ0FBQztJQU1iLENBQUM7Ozs7SUFDSixhQUFhO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7OztJQUNELGFBQWE7UUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7O0lBQ0QsVUFBVTtRQUNULElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFO2dCQUNuRCxnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixRQUFRLEVBQUUsSUFBSTthQUNkLENBQUMsQ0FBQztZQUNILE9BQU87U0FDUDtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLG1CQUFBLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFDeEcsQ0FBQyxDQUFDLEVBQUU7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDOzs7O1FBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxFQUNELENBQUM7SUFDSCxDQUFDOzs7O0lBRUQsUUFBUSxLQUFJLENBQUM7Ozs7SUFFYixPQUFPO1FBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs7WUE5REQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLG8yRkFBcUM7O2FBRXJDOzs7O1lBUDBCLFdBQVc7WUFBRSxjQUFjO1lBRDdDLFdBQVc7WUFDWCxnQkFBZ0I7Ozt3QkFjdkIsV0FBVyxTQUFDLGFBQWE7dUJBQ3pCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2tCQUV2QyxTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtvQkFHMUMsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7OztJQVh2RCxrQ0FBaUI7O0lBQ2pCLGtDQUFpQjs7SUFDakIsOEJBQVk7O0lBQ1osaUNBQWU7O0lBRWYsbUNBQTZDOztJQUM3QyxrQ0FDcUI7O0lBQ3JCLDZCQUVnQjs7SUFDaEIsK0JBQ2tCOztJQUNsQiwrQkFBc0M7O0lBQ3RDLGlDQUFnQjs7SUFFZiw4QkFBd0I7O0lBQ3hCLGlDQUE4Qjs7SUFDOUIsa0NBQTRCOztJQUM1QixtQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkLCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciwgTWF0U25hY2tCYXJSZWYsIFNpbXBsZVNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgQXV0aGxvZ2luU2VydmljZSwgQXV0aFNlcnZpY2UsIFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE1kNSB9IGZyb20gJ3RzLW1kNSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi1hcHAtbG9naW4nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdHVzZXJOYW1lOiBzdHJpbmc7XHJcblx0cGFzc3dvcmQ6IHN0cmluZztcclxuXHRoaWRlID0gdHJ1ZTtcclxuXHRleWVoaWRlID0gdHJ1ZTtcclxuXHJcblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5sb2dpbicpIGhvc3RDbGFzcyA9IHRydWU7XHJcblx0QFZpZXdDaGlsZCgndXNlcm5hbWUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHR1c2VybmFtZTogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKCdlZHRQYXNzd29yZCcsIHsgc3RhdGljOiBmYWxzZSB9KSAvLyDorr/pl67ku47nu4Tku7bkuK3orr/pl67mqKHmnb/kuK3kuablhpnnmoRET03jgIHlrZDnu4Tku7blkozmjIfku6TnmoTlip/og71cclxuXHQvLyDorr/pl67ku47nu4Tku7bkuK3orr/pl67mqKHmnb/kuK3kuablhpnnmoRET03jgIHlrZDnu4Tku7blkozmjIfku6TnmoTlip/og71cclxuXHRwd2Q6IEVsZW1lbnRSZWY7XHJcblx0QFZpZXdDaGlsZCgnYnRuT2snLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcclxuXHRidG5PazogRWxlbWVudFJlZjtcclxuXHRzbmFjazogTWF0U25hY2tCYXJSZWY8U2ltcGxlU25hY2tCYXI+O1xyXG5cdGxvZ2dpbmcgPSBmYWxzZTtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBhdXRoOiBBdXRoU2VydmljZSxcclxuXHRcdHB1YmxpYyBwcm9qZWN0OiBQcm9qZWN0U2VydmljZSxcclxuXHRcdHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcblx0XHRwdWJsaWMgYXV0aExvZ2luOiBBdXRobG9naW5TZXJ2aWNlXHJcblx0KSB7fVxyXG5cdHVzZXJOYW1lRW50ZXIoKSB7XHJcblx0XHR0aGlzLnB3ZC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0fVxyXG5cdHBhc3N3b3JkRW50ZXIoKSB7XHJcblx0XHR0aGlzLmJ0bk9rLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuXHR9XHJcblx0YnRuT2tDbGljaygpIHtcclxuXHRcdGlmICh0aGlzLnNuYWNrKSB7XHJcblx0XHRcdHRoaXMuc25hY2suZGlzbWlzcygpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCF0aGlzLnBhc3N3b3JkIHx8ICF0aGlzLnVzZXJOYW1lKSB7XHJcblx0XHRcdHRoaXMuc25hY2sgPSB0aGlzLnNuYWNrQmFyLm9wZW4oJ+eUqOaIt+WQjeaIluWvhueggeS4jeiDveS4uuepuicsICfnoa7lrponLCB7XHJcblx0XHRcdFx0dmVydGljYWxQb3NpdGlvbjogJ3RvcCcsXHJcblx0XHRcdFx0ZHVyYXRpb246IDUwMDBcclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9nZ2luZyA9IHRydWU7XHJcblx0XHR0aGlzLmF1dGgubG9naW4oeyBVc2VyTmFtZTogdGhpcy51c2VyTmFtZSwgTWQ1UGFzc3dvcmQ6IE1kNS5oYXNoU3RyKHRoaXMucGFzc3dvcmQpIGFzIHN0cmluZyB9KS5zdWJzY3JpYmUoXHJcblx0XHRcdG4gPT4ge1xyXG5cdFx0XHRcdHRoaXMuYXV0aExvZ2luLmxvZ2luRGVmYXVsdChuKTtcclxuXHRcdFx0XHR0aGlzLmxvZ2dpbmcgPSBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdHRoaXMubG9nZ2luZyA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuc25hY2sgPSB0aGlzLnNuYWNrQmFyLm9wZW4oJ+eUqOaIt+WQjeaIluWvhueggemUmeivrycsICfnoa7lrponLCB7IHZlcnRpY2FsUG9zaXRpb246ICd0b3AnIH0pO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7fVxyXG5cclxuXHRyZWZyZXNoKCkge1xyXG5cdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cdH1cclxufVxyXG4iXX0=