dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
293 lines • 29.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { OverlayContainer } from '@angular/cdk/overlay';
import { HttpClient } from '@angular/common/http';
import { Component, ElementRef, HostBinding, ViewChild } from '@angular/core';
import { MatDialog } from '@angular/material';
import { CurrentApiService, CurrentService, fullApiPath } from 'dbweb-core';
import { MainNavService } from '../services/main-nav.service';
import { ThemeService } from '../services/theme.service';
import { PortraitEditComponent } from './portrait-edit/portrait-edit.component';
import { portraitDefault } from '../const';
var UserinfoComponent = /** @class */ (function () {
function UserinfoComponent(overlayContainer, curr, httpClient, api, theme, dialog, mainNav) {
var _this = this;
this.overlayContainer = overlayContainer;
this.curr = curr;
this.httpClient = httpClient;
this.api = api;
this.theme = theme;
this.dialog = dialog;
this.mainNav = mainNav;
this.hostClass = true;
this.num = 0;
this.isEditNickName = false;
this.nickName = '';
this.subject = [];
this.subject.push(this.mainNav.navMin.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v) {
_this.mainNavStyle = 'min';
}
else {
_this.mainNavStyle = 'full';
}
})), this.curr.change$.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v && v.HeadPortrait) {
_this.portraitURL = v.portraitURL;
}
else {
_this.portraitURL = portraitDefault;
}
})));
}
/**
* @return {?}
*/
UserinfoComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subject.forEach((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.unsubscribe(); }));
};
/**
* @return {?}
*/
UserinfoComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.subject.push(this.theme.theme.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
_this.themeColor = v.color;
_this.themeModel = v.model;
})), this.api.get('get-user-portrait-url').subscribe((/**
* @param {?} u
* @return {?}
*/
function (u) {
_this.uploadURL = fullApiPath(u);
})));
};
/**
* @return {?}
*/
UserinfoComponent.prototype.setTheme = /**
* @return {?}
*/
function () {
this.theme.setTheme(this.themeColor + '-' + this.themeModel + '-theme');
};
/**
* @param {?} fileToUpload
* @return {?}
*/
UserinfoComponent.prototype.postFile = /**
* @param {?} fileToUpload
* @return {?}
*/
function (fileToUpload) {
var _this = this;
/** @type {?} */
var formData = new FormData();
formData.append('portrait', fileToUpload, fileToUpload.name);
return this.httpClient.post(this.uploadURL, formData, { withCredentials: true }).subscribe((/**
* @return {?}
*/
function () {
_this.curr.setPortrait(true);
_this.num++;
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
console.log(error);
}));
};
/**
* @return {?}
*/
UserinfoComponent.prototype.editNickName = /**
* @return {?}
*/
function () {
this.nickName = this.curr.data.NickName;
this.isEditNickName = true;
};
/**
* @return {?}
*/
UserinfoComponent.prototype.editDone = /**
* @return {?}
*/
function () {
var _this = this;
this.api.post('change-user-nickname', this.nickName).subscribe((/**
* @return {?}
*/
function () {
_this.curr.setNickName(_this.nickName);
_this.isEditNickName = false;
}));
};
/**
* @return {?}
*/
UserinfoComponent.prototype.showPortraitEdit = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var dialogRef = this.dialog.open(PortraitEditComponent, {
width: '480px',
data: (/** @type {?} */ ({
img: this.portraitImage.nativeElement,
default: this.portraitURL === portraitDefault
}))
});
dialogRef.afterClosed().subscribe((/**
* @param {?} result
* @return {?}
*/
function (result) {
if (result && result.ok) {
if (result.data) {
_this.postFile(dataURLtoFile(result.data, 'portrait.jpg'));
}
else {
_this.api.post('clear-user-portrait').subscribe((/**
* @return {?}
*/
function () {
_this.curr.setPortrait(false);
}));
}
}
}));
};
/**
* @param {?} event
* @return {?}
*/
UserinfoComponent.prototype.navStyleChange = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.mainNav.setNavMin(event.value === 'min');
};
UserinfoComponent.decorators = [
{ type: Component, args: [{
selector: 'common-userinfo',
template: "<div class=\"main\">\r\n\t<div class=\"top\">\r\n\t\t<div class=\"head-portrait mat-elevation-z2\">\r\n\t\t\t<div class=\"picture\">\r\n\t\t\t\t<img class=\"\u5934\u50CF\u56FE\u7247\" #portraitImage [src]=\"portraitURL\" />\r\n\t\t\t\t<div class=\"\u5934\u50CF\u7F16\u8F91\" (click)=\"showPortraitEdit()\">\r\n\t\t\t\t\t<mat-icon svgIcon=\"photo_camera\"></mat-icon>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"\u4FEE\u6539\u6635\u79F0\" *ngIf=\"isEditNickName; else nickNameTxt\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input class=\" \u8F93\u5165\u6635\u79F0 \u4E00\u7EA7\u6807\u9898\u8272\u503C\" matInput [(ngModel)]=\"nickName\" />\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t\t<mat-icon class=\"close\" svgIcon=\"close\" (click)=\"isEditNickName = false\"></mat-icon>\r\n\t\t\t\t<mat-icon color=\"primary\" svgIcon=\"done\" (click)=\"editDone()\"> </mat-icon>\r\n\t\t\t\t<!-- <button mat-stroked-button class=\" \u53D6\u6D88\" color=\"primary\" mat-button>\r\n\t\t\t\t\t\u53D6\u6D88\r\n\t\t\t\t</button>\r\n\t\t\t\t<button mat-raised-button class=\"\" color=\"primary\">\u786E\u5B9A</button> -->\r\n\t\t\t</div>\r\n\r\n\t\t\t<ng-template #nickNameTxt>\r\n\t\t\t\t<div class=\"\u6635\u79F0\">\r\n\t\t\t\t\t<span class=\" \u4E00\u7EA7\u6807\u9898\u8272\u503C\">{{ curr.data.NickName }}</span>\r\n\t\t\t\t\t<mat-icon class=\"\u7F16\u8F91\" (click)=\"editNickName()\" svgIcon=\"edit\"></mat-icon>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-template>\r\n\t\t</div>\r\n\t\t<div class=\"theme mat-elevation-z2\">\r\n\t\t\t<p class=\"title \u4E00\u7EA7\u6807\u9898\u8272\u503C\">\u4E3B\u9898\u989C\u8272</p>\r\n\t\t\t<div class=\"colors\">\r\n\t\t\t\t<div class=\"theme-button\">\r\n\t\t\t\t\t<div class=\"cicle deep-purple\" (click)=\"themeColor = 'deep-purple'; setTheme()\">\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"done\" *ngIf=\"themeColor == 'deep-purple'\"></mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"text\">\u6D6A\u6F2B\u7D2B</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"theme-button\">\r\n\t\t\t\t\t<div class=\"cicle blue\" (click)=\"themeColor = 'blue'; setTheme()\">\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"done\" *ngIf=\"themeColor == 'blue'\"> </mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"text\">\u9ED8\u8BA4</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"theme-button\">\r\n\t\t\t\t\t<div class=\"cicle pink\" (click)=\"themeColor = 'pink'; setTheme()\">\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"done\" *ngIf=\"themeColor == 'pink'\"> </mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"text\">\u6E29\u60C5\u7C89</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"theme-button\">\r\n\t\t\t\t\t<div class=\"cicle orange\" (click)=\"themeColor = 'orange'; setTheme()\">\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"done\" *ngIf=\"themeColor == 'orange'\"> </mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"text\">\u6D3B\u529B\u6A59</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"theme-button\">\r\n\t\t\t\t\t<div class=\"cicle green\" (click)=\"themeColor = 'green'; setTheme()\">\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"done\" *ngIf=\"themeColor == 'green'\"> </mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"text\">\u6E05\u65B0\u7EFF</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"title \u4E00\u7EA7\u6807\u9898\u8272\u503C\">\u6A21\u5F0F</div>\r\n\t\t\t<div class=\"select-model\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"color-model\"\r\n\t\t\t\t\t[ngClass]=\"{ selected: themeModel === 'light' }\"\r\n\t\t\t\t\t(click)=\"themeModel = 'light'; setTheme()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<mat-icon svgIcon=\"brightness_7\"></mat-icon>\r\n\t\t\t\t\t<span>\u6D45\u8272\u6A21\u5F0F</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"color-model\"\r\n\t\t\t\t\t[ngClass]=\"{ selected: themeModel === 'dark' }\"\r\n\t\t\t\t\t(click)=\"themeModel = 'dark'; setTheme()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<mat-icon svgIcon=\"brightness_2\"></mat-icon>\r\n\t\t\t\t\t<span>\u6DF1\u8272\u6A21\u5F0F</span>\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<div class=\"setting mat-elevation-z2\">\r\n\t\t<div class=\"\u504F\u597D\u8BBE\u7F6E \u4E00\u7EA7\u6807\u9898\u8272\u503C\">\u504F\u597D\u8BBE\u7F6E</div>\r\n\t\t<div class=\"one-setting\">\r\n\t\t\t<div class=\"default\">\u9ED8\u8BA4\u5BFC\u822A\u6837\u5F0F</div>\r\n\t\t\t<div class=\"default-radio\">\r\n\t\t\t\t<mat-radio-group aria-label=\"Select an option\" [value]=\"mainNavStyle\" (change)=\"navStyleChange($event)\">\r\n\t\t\t\t\t<mat-radio-button [class.selected]=\"mainNavStyle == 'full'\" value=\"full\">\u5B8C\u6574\u6A21\u5F0F</mat-radio-button>\r\n\t\t\t\t\t<mat-radio-button [class.selected]=\"mainNavStyle == 'min'\" value=\"min\">\u7B80\u6D01\u6A21\u5F0F</mat-radio-button>\r\n\t\t\t\t</mat-radio-group>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n",
styles: ["@charset \"UTF-8\";.main{display:flex;flex-direction:column;height:100%;max-width:960px;margin:0 auto;width:100%}.main .top{margin-top:24px;display:flex}.main .top .head-portrait{display:flex;flex-direction:column;align-items:center;position:relative;width:256px;height:256px;border-radius:2px}.main .top .head-portrait .picture{width:112px;height:112px;margin:32px 0 16px;border-radius:128px;overflow:hidden;position:relative}.main .top .head-portrait .picture .\u5934\u50CF\u56FE\u7247{width:100%;height:100%}.main .top .head-portrait .picture .\u5934\u50CF\u7F16\u8F91{width:100%;height:100%;position:absolute;left:0;top:0;background-color:rgba(0,0,0,.4);display:none;cursor:pointer}.main .top .head-portrait .picture .\u5934\u50CF\u7F16\u8F91 .mat-icon{color:#fff;margin:44px}.main .top .head-portrait .picture:hover .\u5934\u50CF\u7F16\u8F91{display:block}.main .top .head-portrait .\u7F16\u8F91{cursor:pointer;display:inline-block;vertical-align:top;margin-left:4px;opacity:0}.main .top .head-portrait .\u6635\u79F0{width:232px;font-size:20px;height:24px;line-height:24px;font-weight:700;text-align:center;-webkit-transform:translateX(12px);transform:translateX(12px)}.main .top .head-portrait .\u6635\u79F0 span{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main .top .head-portrait .\u6635\u79F0:hover .\u7F16\u8F91{opacity:1}.main .top .head-portrait .\u4FEE\u6539\u6635\u79F0{padding:0 8px;box-sizing:border-box;display:flex;align-items:center}.main .top .head-portrait .\u4FEE\u6539\u6635\u79F0 .mat-icon{cursor:pointer;line-height:24px}.main .top .head-portrait .\u4FEE\u6539\u6635\u79F0 .\u8F93\u5165\u6635\u79F0{font-weight:700;font-size:14px}.main .top .head-portrait .\u4FEE\u6539\u6635\u79F0 .close{margin:0 8px 0 12px}.main .top .head-portrait .mat-form-field{width:172px}.main .top .head-portrait .mat-form-field ::ng-deep .mat-form-field-infix{border:0;height:16px}.main .top .theme{flex-grow:1;margin-left:24px;display:flex;flex-direction:column;border-radius:4px}.main .top .theme .title{font-size:20px;font-weight:700;margin:16px 0 16px 24px}.main .top .theme .colors{display:flex;margin:4px 0}.main .top .theme .colors .theme-button{margin:0 5px 0 40px}.main .top .theme .colors .cicle{width:40px;height:40px;cursor:pointer;border-radius:20px;display:flex;justify-content:center;align-items:center;color:#fff}.main .top .theme .colors .text{text-align:center;margin:16px 0 0;font-size:14px}.main .top .theme .select-model{display:flex}.main .top .theme .select-model .color-model{cursor:pointer;display:flex;margin-left:32px}.main .top .theme .select-model .color-model span{font-size:14px;margin-left:8px}.main .setting{border-radius:4px;flex-grow:1;flex-flow:1;margin:24px 0 64px}.main .setting .\u504F\u597D\u8BBE\u7F6E{font-size:20px;font-weight:700;margin:16px}.main .setting .one-setting{display:flex}.main .setting .one-setting .default{margin-left:32px;font-size:16px}.main .setting .one-setting .default-radio{margin-left:256px;font-size:14px}.main .setting .one-setting .default-radio .mat-radio-button{margin-left:8px}"]
}] }
];
/** @nocollapse */
UserinfoComponent.ctorParameters = function () { return [
{ type: OverlayContainer },
{ type: CurrentService },
{ type: HttpClient },
{ type: CurrentApiService },
{ type: ThemeService },
{ type: MatDialog },
{ type: MainNavService }
]; };
UserinfoComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.user-info',] }],
portraitImage: [{ type: ViewChild, args: ['portraitImage', { static: false },] }]
};
return UserinfoComponent;
}());
export { UserinfoComponent };
if (false) {
/** @type {?} */
UserinfoComponent.prototype.hostClass;
/** @type {?} */
UserinfoComponent.prototype.portraitImage;
/** @type {?} */
UserinfoComponent.prototype.uploadURL;
/** @type {?} */
UserinfoComponent.prototype.num;
/** @type {?} */
UserinfoComponent.prototype.isEditNickName;
/** @type {?} */
UserinfoComponent.prototype.nickName;
/** @type {?} */
UserinfoComponent.prototype.themeColor;
/** @type {?} */
UserinfoComponent.prototype.themeModel;
/** @type {?} */
UserinfoComponent.prototype.mainNavStyle;
/** @type {?} */
UserinfoComponent.prototype.portraitURL;
/**
* @type {?}
* @private
*/
UserinfoComponent.prototype.subject;
/** @type {?} */
UserinfoComponent.prototype.overlayContainer;
/** @type {?} */
UserinfoComponent.prototype.curr;
/**
* @type {?}
* @private
*/
UserinfoComponent.prototype.httpClient;
/**
* @type {?}
* @private
*/
UserinfoComponent.prototype.api;
/**
* @type {?}
* @private
*/
UserinfoComponent.prototype.theme;
/** @type {?} */
UserinfoComponent.prototype.dialog;
/** @type {?} */
UserinfoComponent.prototype.mainNav;
}
/**
* @param {?} dataurl
* @param {?} filename
* @return {?}
*/
function dataURLtoFile(dataurl, filename) {
/** @type {?} */
var arr = dataurl.split(',');
/** @type {?} */
var mime = arr[0].match(/:(.*?);/)[1];
/** @type {?} */
var bstr = atob(arr[1]);
/** @type {?} */
var n = bstr.length;
/** @type {?} */
var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcmluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL3VzZXJpbmZvL3VzZXJpbmZvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUEwQixNQUFNLDJCQUEyQixDQUFDO0FBQ2pGLE9BQU8sRUFDTixxQkFBcUIsRUFHckIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDO0lBaUJDLDJCQUNRLGdCQUFrQyxFQUNsQyxJQUFvQixFQUNuQixVQUFzQixFQUN0QixHQUFzQixFQUN0QixLQUFtQixFQUNwQixNQUFpQixFQUNqQixPQUF1QjtRQVAvQixpQkF5QkM7UUF4Qk8scUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQWxCQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pELFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBS04sWUFBTyxHQUFtQixFQUFFLENBQUM7UUFVcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLENBQUM7WUFDOUIsSUFBSSxDQUFDLEVBQUU7Z0JBQ04sS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7YUFDMUI7aUJBQU07Z0JBQ04sS0FBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7YUFDM0I7UUFDRixDQUFDLEVBQUMsRUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hCLEtBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQzthQUNqQztpQkFBTTtnQkFDTixLQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQzthQUNuQztRQUNGLENBQUMsRUFBQyxDQUNGLENBQUM7SUFDSCxDQUFDOzs7O0lBQ0QsdUNBQVc7OztJQUFYO1FBQ0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQWYsQ0FBZSxFQUFDLENBQUM7SUFDNUMsQ0FBQzs7OztJQUVELG9DQUFROzs7SUFBUjtRQUFBLGlCQVVDO1FBVEEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLENBQUM7WUFDM0IsS0FBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFCLEtBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzQixDQUFDLEVBQUMsRUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBUyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLENBQUM7WUFDeEQsS0FBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFDLENBQ0YsQ0FBQztJQUNILENBQUM7Ozs7SUFDRCxvQ0FBUTs7O0lBQVI7UUFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Ozs7O0lBRUQsb0NBQVE7Ozs7SUFBUixVQUFTLFlBQWtCO1FBQTNCLGlCQVlDOztZQVhNLFFBQVEsR0FBYSxJQUFJLFFBQVEsRUFBRTtRQUN6QyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTOzs7UUFDekY7WUFDQyxLQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixLQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixDQUFDOzs7O1FBQ0QsVUFBQyxLQUF3QjtZQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BCLENBQUMsRUFDRCxDQUFDO0lBQ0gsQ0FBQzs7OztJQUNELHdDQUFZOzs7SUFBWjtRQUNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7Ozs7SUFDRCxvQ0FBUTs7O0lBQVI7UUFBQSxpQkFLQztRQUpBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFVLHNCQUFzQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTOzs7UUFBQztZQUN2RSxLQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOzs7O0lBQ0QsNENBQWdCOzs7SUFBaEI7UUFBQSxpQkFvQkM7O1lBbkJNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUN6RCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxtQkFBQTtnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhO2dCQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsS0FBSyxlQUFlO2FBQzdDLEVBQTZCO1NBQzlCLENBQUM7UUFFRixTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsTUFBdUM7WUFDekUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO29CQUNoQixLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQzFEO3FCQUFNO29CQUNOLEtBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFVLHFCQUFxQixDQUFDLENBQUMsU0FBUzs7O29CQUFDO3dCQUN2RCxLQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUIsQ0FBQyxFQUFDLENBQUM7aUJBQ0g7YUFDRDtRQUNGLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7Ozs7SUFDRCwwQ0FBYzs7OztJQUFkLFVBQWUsS0FBcUI7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDOztnQkE1R0QsU0FBUyxTQUFDO29CQUNWLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLDBySkFBd0M7O2lCQUV4Qzs7OztnQkFsQlEsZ0JBQWdCO2dCQUlHLGNBQWM7Z0JBSGpDLFVBQVU7Z0JBR1YsaUJBQWlCO2dCQUdqQixZQUFZO2dCQUpaLFNBQVM7Z0JBR1QsY0FBYzs7OzRCQWNyQixXQUFXLFNBQUMsaUJBQWlCO2dDQUM3QixTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7SUFzRzlDLHdCQUFDO0NBQUEsQUE3R0QsSUE2R0M7U0F4R1ksaUJBQWlCOzs7SUFDN0Isc0NBQWlEOztJQUNqRCwwQ0FBMkY7O0lBQzNGLHNDQUFrQjs7SUFDbEIsZ0NBQVE7O0lBQ1IsMkNBQXVCOztJQUN2QixxQ0FBYzs7SUFDZCx1Q0FBdUI7O0lBQ3ZCLHVDQUF1Qjs7SUFDdkIseUNBQTZCOztJQUM3Qix3Q0FBb0I7Ozs7O0lBQ3BCLG9DQUFxQzs7SUFFcEMsNkNBQXlDOztJQUN6QyxpQ0FBMkI7Ozs7O0lBQzNCLHVDQUE4Qjs7Ozs7SUFDOUIsZ0NBQThCOzs7OztJQUM5QixrQ0FBMkI7O0lBQzNCLG1DQUF3Qjs7SUFDeEIsb0NBQThCOzs7Ozs7O0FBc0ZoQyxTQUFTLGFBQWEsQ0FBQyxPQUFlLEVBQUUsUUFBZ0I7O1FBQ2pELEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzs7UUFDN0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUNqQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFDaEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNOztRQUNiLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFL0IsT0FBTyxDQUFDLEVBQUUsRUFBRTtRQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdFJhZGlvQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBDdXJyZW50QXBpU2VydmljZSwgQ3VycmVudFNlcnZpY2UsIGZ1bGxBcGlQYXRoIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYWluTmF2U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21haW4tbmF2LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UsIFRoZW1lTW9kZWwsIFRoZW1lQ29sb3IgfSBmcm9tICcuLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuXHRQb3J0cmFpdEVkaXRDb21wb25lbnQsXHJcblx0UG9ydHJhaXRFZGl0Q29tcG9uZW50RGF0YSxcclxuXHRQb3J0cmFpdEVkaXRDb21wb25lbnRSZXN1bHREYXRhXHJcbn0gZnJvbSAnLi9wb3J0cmFpdC1lZGl0L3BvcnRyYWl0LWVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgcG9ydHJhaXREZWZhdWx0IH0gZnJvbSAnLi4vY29uc3QnO1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi11c2VyaW5mbycsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3VzZXJpbmZvLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi91c2VyaW5mby5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyaW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLnVzZXItaW5mbycpIGhvc3RDbGFzcyA9IHRydWU7XHJcblx0QFZpZXdDaGlsZCgncG9ydHJhaXRJbWFnZScsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3J0cmFpdEltYWdlOiBFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+O1xyXG5cdHVwbG9hZFVSTDogc3RyaW5nO1xyXG5cdG51bSA9IDA7XHJcblx0aXNFZGl0Tmlja05hbWUgPSBmYWxzZTtcclxuXHRuaWNrTmFtZSA9ICcnO1xyXG5cdHRoZW1lQ29sb3I6IFRoZW1lQ29sb3I7XHJcblx0dGhlbWVNb2RlbDogVGhlbWVNb2RlbDtcclxuXHRtYWluTmF2U3R5bGU6ICdmdWxsJyB8ICdtaW4nO1xyXG5cdHBvcnRyYWl0VVJMOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBzdWJqZWN0OiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIG92ZXJsYXlDb250YWluZXI6IE92ZXJsYXlDb250YWluZXIsXHJcblx0XHRwdWJsaWMgY3VycjogQ3VycmVudFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcblx0XHRwcml2YXRlIGFwaTogQ3VycmVudEFwaVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRoZW1lOiBUaGVtZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcblx0XHRwdWJsaWMgbWFpbk5hdjogTWFpbk5hdlNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMuc3ViamVjdC5wdXNoKFxyXG5cdFx0XHR0aGlzLm1haW5OYXYubmF2TWluLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHRpZiAodikge1xyXG5cdFx0XHRcdFx0dGhpcy5tYWluTmF2U3R5bGUgPSAnbWluJztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5tYWluTmF2U3R5bGUgPSAnZnVsbCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KSxcclxuXHRcdFx0dGhpcy5jdXJyLmNoYW5nZSQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdGlmICh2ICYmIHYuSGVhZFBvcnRyYWl0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnBvcnRyYWl0VVJMID0gdi5wb3J0cmFpdFVSTDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5wb3J0cmFpdFVSTCA9IHBvcnRyYWl0RGVmYXVsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMuc3ViamVjdC5mb3JFYWNoKHYgPT4gdi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0dGhpcy5zdWJqZWN0LnB1c2goXHJcblx0XHRcdHRoaXMudGhlbWUudGhlbWUuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdHRoaXMudGhlbWVDb2xvciA9IHYuY29sb3I7XHJcblx0XHRcdFx0dGhpcy50aGVtZU1vZGVsID0gdi5tb2RlbDtcclxuXHRcdFx0fSksXHJcblx0XHRcdHRoaXMuYXBpLmdldDxzdHJpbmc+KCdnZXQtdXNlci1wb3J0cmFpdC11cmwnKS5zdWJzY3JpYmUodSA9PiB7XHJcblx0XHRcdFx0dGhpcy51cGxvYWRVUkwgPSBmdWxsQXBpUGF0aCh1KTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdHNldFRoZW1lKCkge1xyXG5cdFx0dGhpcy50aGVtZS5zZXRUaGVtZSh0aGlzLnRoZW1lQ29sb3IgKyAnLScgKyB0aGlzLnRoZW1lTW9kZWwgKyAnLXRoZW1lJyk7XHJcblx0fVxyXG5cclxuXHRwb3N0RmlsZShmaWxlVG9VcGxvYWQ6IEZpbGUpIHtcclxuXHRcdGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cdFx0Zm9ybURhdGEuYXBwZW5kKCdwb3J0cmFpdCcsIGZpbGVUb1VwbG9hZCwgZmlsZVRvVXBsb2FkLm5hbWUpO1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMudXBsb2FkVVJMLCBmb3JtRGF0YSwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSkuc3Vic2NyaWJlKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jdXJyLnNldFBvcnRyYWl0KHRydWUpO1xyXG5cdFx0XHRcdHRoaXMubnVtKys7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cdGVkaXROaWNrTmFtZSgpIHtcclxuXHRcdHRoaXMubmlja05hbWUgPSB0aGlzLmN1cnIuZGF0YS5OaWNrTmFtZTtcclxuXHRcdHRoaXMuaXNFZGl0Tmlja05hbWUgPSB0cnVlO1xyXG5cdH1cclxuXHRlZGl0RG9uZSgpIHtcclxuXHRcdHRoaXMuYXBpLnBvc3Q8Ym9vbGVhbj4oJ2NoYW5nZS11c2VyLW5pY2tuYW1lJywgdGhpcy5uaWNrTmFtZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0dGhpcy5jdXJyLnNldE5pY2tOYW1lKHRoaXMubmlja05hbWUpO1xyXG5cdFx0XHR0aGlzLmlzRWRpdE5pY2tOYW1lID0gZmFsc2U7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0c2hvd1BvcnRyYWl0RWRpdCgpIHtcclxuXHRcdGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUG9ydHJhaXRFZGl0Q29tcG9uZW50LCB7XHJcblx0XHRcdHdpZHRoOiAnNDgwcHgnLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0aW1nOiB0aGlzLnBvcnRyYWl0SW1hZ2UubmF0aXZlRWxlbWVudCxcclxuXHRcdFx0XHRkZWZhdWx0OiB0aGlzLnBvcnRyYWl0VVJMID09PSBwb3J0cmFpdERlZmF1bHRcclxuXHRcdFx0fSBhcyBQb3J0cmFpdEVkaXRDb21wb25lbnREYXRhXHJcblx0XHR9KTtcclxuXHJcblx0XHRkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogUG9ydHJhaXRFZGl0Q29tcG9uZW50UmVzdWx0RGF0YSkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5vaykge1xyXG5cdFx0XHRcdGlmIChyZXN1bHQuZGF0YSkge1xyXG5cdFx0XHRcdFx0dGhpcy5wb3N0RmlsZShkYXRhVVJMdG9GaWxlKHJlc3VsdC5kYXRhLCAncG9ydHJhaXQuanBnJykpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmFwaS5wb3N0PGJvb2xlYW4+KCdjbGVhci11c2VyLXBvcnRyYWl0Jykuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXJyLnNldFBvcnRyYWl0KGZhbHNlKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdG5hdlN0eWxlQ2hhbmdlKGV2ZW50OiBNYXRSYWRpb0NoYW5nZSkge1xyXG5cdFx0dGhpcy5tYWluTmF2LnNldE5hdk1pbihldmVudC52YWx1ZSA9PT0gJ21pbicpO1xyXG5cdH1cclxufVxyXG5mdW5jdGlvbiBkYXRhVVJMdG9GaWxlKGRhdGF1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IEZpbGUge1xyXG5cdGNvbnN0IGFyciA9IGRhdGF1cmwuc3BsaXQoJywnKSxcclxuXHRcdG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuXHRcdGJzdHIgPSBhdG9iKGFyclsxXSk7XHJcblx0bGV0IG4gPSBic3RyLmxlbmd0aDtcclxuXHRjb25zdCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xyXG5cclxuXHR3aGlsZSAobi0tKSB7XHJcblx0XHR1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuXHR9XHJcblx0cmV0dXJuIG5ldyBGaWxlKFt1OGFycl0sIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWUgfSk7XHJcbn1cclxuIl19