dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
383 lines • 31.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { moveItemInArray } from '@angular/cdk/drag-drop';
import { Injectable } from '@angular/core';
import { CurrentService } from 'dbweb-core';
import { of, throwError } from 'rxjs';
import * as uuid from 'uuid';
import { EleViewBackFaceService } from '../../services/eleview/eleview-backface';
import { Category } from '../../services/eleview/types/category';
import { ownerElement } from '../../services/eleview/types/model';
import { map } from 'rxjs/operators';
/**
* @return {?}
*/
function newID() {
/** @type {?} */
const buf = uuid.v1(null, []);
/** @type {?} */
const TYPED_ARRAY = new Uint8Array(buf);
/** @type {?} */
const STRING_CHAR = TYPED_ARRAY.reduce((/**
* @param {?} data
* @param {?} byte
* @return {?}
*/
(data, byte) => {
return data + String.fromCharCode(byte);
}), '');
/** @type {?} */
const base64String = btoa(STRING_CHAR);
return base64String;
}
export class LabelMockBackfaceService {
/**
* @param {?} backface
* @param {?} curr
*/
constructor(backface, curr) {
this.backface = backface;
this.curr = curr;
}
/**
* @param {?} param
* @return {?}
*/
addCategory(param) {
if (!param.Name) {
return throwError('名称为空');
}
if (this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
v => v.Name === param.Name))) {
return throwError('名称重复');
}
/** @type {?} */
const newCate = (/** @type {?} */ ({
ID: newID(),
EleName: param.EleName,
OwnerBy: param.OwnerBy,
Owner: ownerElement,
Name: param.Name
}));
if (param.BeforeAtID) {
this.recordViewData.labelCategories.splice(this.recordViewData.labelCategories.findIndex((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.BeforeAtID)), 0, newCate);
}
else {
this.recordViewData.labelCategories.push(newCate);
}
this.recordViewData.labelCategories.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
(v, i) => (v.Position = i + 1)));
/** @type {?} */
const rev = new Category();
rev.ID = newCate.ID;
rev.Name = newCate.Name;
rev.Owner = newCate.Owner;
rev.OwnerBy = newCate.OwnerBy;
rev.Position = newCate.Position;
return of(rev);
}
/**
* @param {?} id
* @return {?}
*/
removeCategory(id) {
this.recordViewData.labelCategories
.splice(this.recordViewData.labelCategories.findIndex((/**
* @param {?} v
* @return {?}
*/
v => v.ID === id)), 1)
.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
(v, i) => (v.Position = i + 1)));
return of(true);
}
/**
* @param {?} param
* @return {?}
*/
setCategoryPosition(param) {
moveItemInArray(this.recordViewData.labelCategories, this.recordViewData.labelCategories.findIndex((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.ID)), param.Position - 1);
this.recordViewData.labelCategories.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
(v, i) => (v.Position = i + 1)));
return of(this.recordViewData.labelCategories.map((/**
* @param {?} v
* @return {?}
*/
v => ({ ID: v.ID, Position: v.Position }))));
}
/**
* @param {?} param
* @return {?}
*/
updateCategory(param) {
/** @type {?} */
const c = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.ID));
c.Name = param.Name;
return of(true);
}
/**
* @param {?} param
* @return {?}
*/
fetchCategories(param) {
// 新增状态下,不能去取数据,因为有可能会取到已存在的记录数据,造成泄密
if (this.isAdd) {
return of([]);
}
return this.backface
.fetchFullCategories({ EleName: param.EleName, OwnerBy: param.OwnerBy, Owner: param.Owner })
.pipe(map((/**
* @param {?} cates
* @return {?}
*/
cates => {
this.recordViewData.labelCategories = cates;
return this.recordViewData.labelCategories.map((/**
* @param {?} v
* @return {?}
*/
v => {
/** @type {?} */
let lbls;
if (v.Labels) {
lbls = v.Labels.map((/**
* @param {?} lbl
* @return {?}
*/
lbl => ({
ID: lbl.ID,
Name: lbl.Name
})));
}
return Category.fromInterface({
ID: v.ID,
Name: v.Name,
Owner: v.Owner,
OwnerBy: v.OwnerBy,
Position: v.Position,
Labels: lbls
});
}));
})));
}
// 获取菜单项所有标签的日志
/**
* @param {?} param
* @return {?}
*/
fetchCategoryLabelHis(param) {
if (this.isAdd) {
return of([]);
}
return this.backface.fetchCategoryLabelHis(param);
}
// 获取标签的日志列表
/**
* @param {?} param
* @return {?}
*/
fetchLabelHisList(param) {
if (this.isAdd) {
return of([]);
}
return this.backface.fetchLabelHisList(param);
}
// 根据时间获取label的内容
/**
* @param {?} param
* @return {?}
*/
fetchLabelHis(param) {
return this.backface.fetchLabelHis(param);
}
/**
* @param {?} param
* @return {?}
*/
addLabel(param) {
/** @type {?} */
const c = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.CategoryID));
c.Labels = c.Labels || [];
if (c.Labels.find((/**
* @param {?} v
* @return {?}
*/
v => v.Name === param.Name))) {
return throwError('重复的名称');
}
/** @type {?} */
const lbl = (/** @type {?} */ ({
CategoryID: param.CategoryID,
ID: newID(),
Name: param.Name,
LastWriteTime: new Date(),
LastWriteUser: this.curr.data.UserName,
Conts: param.Conts,
PlainText: param.PlainText
}));
c.Labels.push(lbl);
c.Labels.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
(v, i) => (v.Position = i + 1)));
return of(lbl);
}
/**
* @param {?} param
* @return {?}
*/
removeLabel(param) {
/** @type {?} */
const lbls = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.CategoryID)).Labels;
lbls.splice(lbls.findIndex((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.ID)), 1);
return of(true);
}
/**
* @param {?} param
* @return {?}
*/
nodeToString(param) {
return this.backface.nodeToString(param);
}
/**
* @param {?} param
* @return {?}
*/
stringToNode(param) {
return this.backface.stringToNode(param);
}
/**
* @param {?} param
* @return {?}
*/
setLabelPosition(param) {
/** @type {?} */
const lbls = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.CategoryID)).Labels;
moveItemInArray(lbls, lbls.findIndex((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.ID)), param.Position - 1);
lbls.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
(v, i) => (v.Position = i + 1)));
return of(lbls.map((/**
* @param {?} v
* @return {?}
*/
v => ({ ID: v.ID, Position: v.Position }))));
}
/**
* @param {?} param
* @return {?}
*/
updateLabel(param) {
/** @type {?} */
const lbl = this.recordViewData.labelCategories
.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.CategoryID))
.Labels.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.ID));
lbl.Name = param.Name;
lbl.Conts = param.Conts;
lbl.PlainText = param.PlainText;
lbl.LastWriteTime = new Date();
return of(lbl);
}
/**
* @param {?} param
* @return {?}
*/
fetchLabel(param) {
return of(this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.CategoryID)).Labels.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === param.ID)));
}
}
LabelMockBackfaceService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
LabelMockBackfaceService.ctorParameters = () => [
{ type: EleViewBackFaceService },
{ type: CurrentService }
];
if (false) {
/** @type {?} */
LabelMockBackfaceService.prototype.isAdd;
/** @type {?} */
LabelMockBackfaceService.prototype.recordViewData;
/**
* @type {?}
* @private
*/
LabelMockBackfaceService.prototype.backface;
/**
* @type {?}
* @private
*/
LabelMockBackfaceService.prototype.curr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbW9jay1iYWNrZmFjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9sYWJlbC1tb2NrLWJhY2tmYWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQWUsTUFBTSxZQUFZLENBQUM7QUFDekQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUdOLHNCQUFzQixFQVV0QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBUU4sWUFBWSxFQUNaLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSXJDLFNBQVMsS0FBSzs7VUFDUCxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOztVQUN2QixXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDOztVQUNqQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU07Ozs7O0lBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckQsT0FBTyxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDLEdBQUUsRUFBRSxDQUFDOztVQUNBLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3RDLE9BQU8sWUFBWSxDQUFDO0FBQ3JCLENB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LENBQUMsTUFBTSxDQUFDLElBQUk7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBQyxDQUM1RyxDQUFDO0lBQ0gsQ0FBQzs7O1lBcEtELFVBQVU7Ozs7WUFuQ1Ysc0JBQXNCO1lBTmQsY0FBYzs7OztJQTJDdEIseUNBQWU7O0lBQ2Ysa0RBQXNDOzs7OztJQUMxQiw0Q0FBd0M7Ozs7O0lBQUUsd0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VycmVudFNlcnZpY2UsIEJpbGxPcGVyYXRlIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7XHJcblx0QWRkQ2F0ZWdvcnlQYXJhbSxcclxuXHRBZGRMYWJlbFBhcmFtLFxyXG5cdEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsXHJcblx0RmV0Y2hMYWJlbFJlc3VsdCxcclxuXHRNb2RlbEVsZW1lbnRDYXRlZ29yeSxcclxuXHRNb2RlbEVsZW1lbnRMYWJlbCxcclxuXHRTZXRDYXRlZ29yeVBvc2l0aW9uUGFyYW0sXHJcblx0U2V0Q2F0ZWdvcnlQb3NpdGlvblJlc3VsdCxcclxuXHRTZXRMYWJlbFBvc2l0aW9uUGFyYW0sXHJcblx0U2V0TGFiZWxQb3NpdGlvblJlc3VsdCxcclxuXHRVcGRhdGVDYXRlZ29yeVBhcmFtLFxyXG5cdFVwZGF0ZUxhYmVsUGFyYW1cclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L2VsZXZpZXctYmFja2ZhY2UnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG5cdElFbGVtZW50SGlzLFxyXG5cdElMYWJlbCxcclxuXHRJTGFiZWxIaXNJdGVtLFxyXG5cdElMYWJlbEhpc0tleSxcclxuXHRJTGFiZWxLZXksXHJcblx0SU5vZGUsXHJcblx0T3duZXJCeUVudW0sXHJcblx0b3duZXJFbGVtZW50XHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRWxlbWVudERhdGFSZWNvcmRWaWV3IH0gZnJvbSAnLi9lbGVtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYWNrRmFjZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2JhY2tmYWNlJztcclxuXHJcbmZ1bmN0aW9uIG5ld0lEKCkge1xyXG5cdGNvbnN0IGJ1ZiA9IHV1aWQudjEobnVsbCwgW10pO1xyXG5cdGNvbnN0IFRZUEVEX0FSUkFZID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcclxuXHRjb25zdCBTVFJJTkdfQ0hBUiA9IFRZUEVEX0FSUkFZLnJlZHVjZSgoZGF0YSwgYnl0ZSkgPT4ge1xyXG5cdFx0cmV0dXJuIGRhdGEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpO1xyXG5cdH0sICcnKTtcclxuXHRjb25zdCBiYXNlNjRTdHJpbmcgPSBidG9hKFNUUklOR19DSEFSKTtcclxuXHRyZXR1cm4gYmFzZTY0U3RyaW5nO1xyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIExhYmVsTW9ja0JhY2tmYWNlU2VydmljZSBpbXBsZW1lbnRzIEJhY2tGYWNlIHtcclxuXHRpc0FkZDogYm9vbGVhbjtcclxuXHRyZWNvcmRWaWV3RGF0YTogRWxlbWVudERhdGFSZWNvcmRWaWV3O1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2ZhY2U6IEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsIHByaXZhdGUgY3VycjogQ3VycmVudFNlcnZpY2UpIHt9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IEFkZENhdGVnb3J5UGFyYW0pOiBPYnNlcnZhYmxlPENhdGVnb3J5PiB7XHJcblx0XHRpZiAoIXBhcmFtLk5hbWUpIHtcclxuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoJ+WQjeensOS4uuepuicpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCflkI3np7Dph43lpI0nKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld0NhdGUgPSB7XHJcblx0XHRcdElEOiBuZXdJRCgpLFxyXG5cdFx0XHRFbGVOYW1lOiBwYXJhbS5FbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiBwYXJhbS5Pd25lckJ5LFxyXG5cdFx0XHRPd25lcjogb3duZXJFbGVtZW50LFxyXG5cdFx0XHROYW1lOiBwYXJhbS5OYW1lXHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudENhdGVnb3J5O1xyXG5cdFx0aWYgKHBhcmFtLkJlZm9yZUF0SUQpIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuc3BsaWNlKFxyXG5cdFx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLkJlZm9yZUF0SUQpLFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0bmV3Q2F0ZVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMucHVzaChuZXdDYXRlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdGNvbnN0IHJldiA9IG5ldyBDYXRlZ29yeSgpO1xyXG5cdFx0cmV2LklEID0gbmV3Q2F0ZS5JRDtcclxuXHRcdHJldi5OYW1lID0gbmV3Q2F0ZS5OYW1lO1xyXG5cdFx0cmV2Lk93bmVyID0gbmV3Q2F0ZS5Pd25lcjtcclxuXHRcdHJldi5Pd25lckJ5ID0gbmV3Q2F0ZS5Pd25lckJ5O1xyXG5cdFx0cmV2LlBvc2l0aW9uID0gbmV3Q2F0ZS5Qb3NpdGlvbjtcclxuXHRcdHJldHVybiBvZihyZXYpO1xyXG5cdH1cclxuXHRyZW1vdmVDYXRlZ29yeShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcblx0XHR0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllc1xyXG5cdFx0XHQuc3BsaWNlKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IGlkKSwgMSlcclxuXHRcdFx0LmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdHJldHVybiBvZih0cnVlKTtcclxuXHR9XHJcblx0c2V0Q2F0ZWdvcnlQb3NpdGlvbihwYXJhbTogU2V0Q2F0ZWdvcnlQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRDYXRlZ29yeVBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdG1vdmVJdGVtSW5BcnJheShcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMsXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKSxcclxuXHRcdFx0cGFyYW0uUG9zaXRpb24gLSAxXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLm1hcCh2ID0+ICh7IElEOiB2LklELCBQb3NpdGlvbjogdi5Qb3NpdGlvbiB9KSkpO1xyXG5cdH1cclxuXHR1cGRhdGVDYXRlZ29yeShwYXJhbTogVXBkYXRlQ2F0ZWdvcnlQYXJhbSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0Y29uc3QgYyA9IHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRjLk5hbWUgPSBwYXJhbS5OYW1lO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMocGFyYW06IHsgRWxlTmFtZTogc3RyaW5nOyBPd25lckJ5OiBPd25lckJ5RW51bTsgT3duZXI6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiB7XHJcblx0XHQvLyDmlrDlop7nirbmgIHkuIvvvIzkuI3og73ljrvlj5bmlbDmja7vvIzlm6DkuLrmnInlj6/og73kvJrlj5bliLDlt7LlrZjlnKjnmoTorrDlvZXmlbDmja7vvIzpgKDmiJDms4Tlr4ZcclxuXHRcdGlmICh0aGlzLmlzQWRkKSB7XHJcblx0XHRcdHJldHVybiBvZihbXSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQuZmV0Y2hGdWxsQ2F0ZWdvcmllcyh7IEVsZU5hbWU6IHBhcmFtLkVsZU5hbWUsIE93bmVyQnk6IHBhcmFtLk93bmVyQnksIE93bmVyOiBwYXJhbS5Pd25lciB9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoY2F0ZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMgPSBjYXRlcztcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5tYXAodiA9PiB7XHJcblx0XHRcdFx0XHRcdGxldCBsYmxzOiB7IElEOiBzdHJpbmc7IE5hbWU6IHN0cmluZyB9W107XHJcblx0XHRcdFx0XHRcdGlmICh2LkxhYmVscykge1xyXG5cdFx0XHRcdFx0XHRcdGxibHMgPSB2LkxhYmVscy5tYXAobGJsID0+ICh7XHJcblx0XHRcdFx0XHRcdFx0XHRJRDogbGJsLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0TmFtZTogbGJsLk5hbWVcclxuXHRcdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhdGVnb3J5LmZyb21JbnRlcmZhY2Uoe1xyXG5cdFx0XHRcdFx0XHRcdElEOiB2LklELFxyXG5cdFx0XHRcdFx0XHRcdE5hbWU6IHYuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRPd25lcjogdi5Pd25lcixcclxuXHRcdFx0XHRcdFx0XHRPd25lckJ5OiB2Lk93bmVyQnksXHJcblx0XHRcdFx0XHRcdFx0UG9zaXRpb246IHYuUG9zaXRpb24sXHJcblx0XHRcdFx0XHRcdFx0TGFiZWxzOiBsYmxzXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0Ly8g6I635Y+W6I+c5Y2V6aG55omA5pyJ5qCH562+55qE5pel5b+XXHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtOiB7XHJcblx0XHRFbGVOYW1lOiBzdHJpbmc7XHJcblx0XHRPd25lckJ5OiBPd25lckJ5RW51bTtcclxuXHRcdE93bmVyOiBzdHJpbmdbXTtcclxuXHR9KTogT2JzZXJ2YWJsZTxJRWxlbWVudEhpc1tdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtKTtcclxuXHR9XHJcblx0Ly8g6I635Y+W5qCH562+55qE5pel5b+X5YiX6KGoXHJcblx0ZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW06IElMYWJlbEtleSk6IE9ic2VydmFibGU8SUxhYmVsSGlzSXRlbVtdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW0pO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ml7bpl7Tojrflj5ZsYWJlbOeahOWGheWuuVxyXG5cdGZldGNoTGFiZWxIaXMoXHJcblx0XHRwYXJhbTogSUxhYmVsSGlzS2V5XHJcblx0KTogT2JzZXJ2YWJsZTx7XHJcblx0XHRDb250czogc3RyaW5nO1xyXG5cdFx0UGxhaW5UZXh0OiBzdHJpbmc7XHJcblx0fT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpcyhwYXJhbSk7XHJcblx0fVxyXG5cdGFkZExhYmVsKHBhcmFtOiBBZGRMYWJlbFBhcmFtKTogT2JzZXJ2YWJsZTxJTGFiZWw+IHtcclxuXHRcdGNvbnN0IGMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCk7XHJcblx0XHRjLkxhYmVscyA9IGMuTGFiZWxzIHx8IFtdO1xyXG5cdFx0aWYgKGMuTGFiZWxzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCfph43lpI3nmoTlkI3np7AnKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGxibCA9IHtcclxuXHRcdFx0Q2F0ZWdvcnlJRDogcGFyYW0uQ2F0ZWdvcnlJRCxcclxuXHRcdFx0SUQ6IG5ld0lEKCksXHJcblx0XHRcdE5hbWU6IHBhcmFtLk5hbWUsXHJcblx0XHRcdExhc3RXcml0ZVRpbWU6IG5ldyBEYXRlKCksXHJcblx0XHRcdExhc3RXcml0ZVVzZXI6IHRoaXMuY3Vyci5kYXRhLlVzZXJOYW1lLFxyXG5cdFx0XHRDb250czogcGFyYW0uQ29udHMsXHJcblx0XHRcdFBsYWluVGV4dDogcGFyYW0uUGxhaW5UZXh0XHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudExhYmVsO1xyXG5cdFx0Yy5MYWJlbHMucHVzaChsYmwpO1xyXG5cdFx0Yy5MYWJlbHMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKGxibCk7XHJcblx0fVxyXG5cdHJlbW92ZUxhYmVsKHBhcmFtOiBJTGFiZWxLZXkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bGJscy5zcGxpY2UobGJscy5maW5kSW5kZXgodiA9PiB2LklEID09PSBwYXJhbS5JRCksIDEpO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRub2RlVG9TdHJpbmcocGFyYW06IElOb2RlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLm5vZGVUb1N0cmluZyhwYXJhbSk7XHJcblx0fVxyXG5cdHN0cmluZ1RvTm9kZShwYXJhbTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJTm9kZT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2Uuc3RyaW5nVG9Ob2RlKHBhcmFtKTtcclxuXHR9XHJcblx0c2V0TGFiZWxQb3NpdGlvbihwYXJhbTogU2V0TGFiZWxQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRMYWJlbFBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bW92ZUl0ZW1JbkFycmF5KGxibHMsIGxibHMuZmluZEluZGV4KHYgPT4gdi5JRCA9PT0gcGFyYW0uSUQpLCBwYXJhbS5Qb3NpdGlvbiAtIDEpO1xyXG5cdFx0bGJscy5mb3JFYWNoKCh2LCBpKSA9PiAodi5Qb3NpdGlvbiA9IGkgKyAxKSk7XHJcblx0XHRyZXR1cm4gb2YobGJscy5tYXAodiA9PiAoeyBJRDogdi5JRCwgUG9zaXRpb246IHYuUG9zaXRpb24gfSkpKTtcclxuXHR9XHJcblx0dXBkYXRlTGFiZWwocGFyYW06IFVwZGF0ZUxhYmVsUGFyYW0pOiBPYnNlcnZhYmxlPElMYWJlbD4ge1xyXG5cdFx0Y29uc3QgbGJsID0gdGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXNcclxuXHRcdFx0LmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKVxyXG5cdFx0XHQuTGFiZWxzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRsYmwuTmFtZSA9IHBhcmFtLk5hbWU7XHJcblx0XHRsYmwuQ29udHMgPSBwYXJhbS5Db250cztcclxuXHRcdGxibC5QbGFpblRleHQgPSBwYXJhbS5QbGFpblRleHQ7XHJcblx0XHRsYmwuTGFzdFdyaXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRyZXR1cm4gb2YobGJsKTtcclxuXHR9XHJcblx0ZmV0Y2hMYWJlbChwYXJhbTogSUxhYmVsS2V5KTogT2JzZXJ2YWJsZTxGZXRjaExhYmVsUmVzdWx0PiB7XHJcblx0XHRyZXR1cm4gb2YoXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKS5MYWJlbHMuZmluZCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19