@ecip/auth
Version:
274 lines • 21.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewChild } from '@angular/core';
import { ModalHelper } from '@delon/theme';
import { SFComponent, } from '@delon/form';
import { STComponent } from "@delon/abc";
import { NzMessageService } from "ng-zorro-antd";
import { AuthDataSourceEditComponent } from "./edit/dsedit.component";
import { DictService, DataSourceService } from "@ecip/service";
export class AuthDataSourceComponent {
/**
* @param {?} modalHelper
* @param {?} messageService
* @param {?} dataSourceService
* @param {?} dictService
*/
constructor(modalHelper, messageService, dataSourceService, dictService) {
this.modalHelper = modalHelper;
this.messageService = messageService;
this.dataSourceService = dataSourceService;
this.dictService = dictService;
this.url = 'api/v1/sysrDS';
this.selectedIds = [];
this.pageTitle = '数据源管理';
this.params = {};
this.schema = {
properties: {
dsName: {
type: 'string',
title: '数据源名称',
},
dbType: {
type: "string",
title: '数据库类型',
ui: {
widget: 'select',
width: 260,
notFoundContent: '没有数据',
dropdownMatchSelectWidth: false,
asyncData: (/**
* @return {?}
*/
() => this.dictService.getTypeList("dbType"))
}
},
ip: {
type: 'string',
title: '主机名',
},
dbName: {
type: 'string',
title: '数据库名',
},
},
};
this.columns = [
{
title: '编号',
type: 'checkbox',
index: 'id',
fixed: 'left',
width: '2%',
},
{
title: '数据源名称',
index: 'dsName',
fixed: 'left',
width: '10%'
},
{
title: '数据库类型',
index: 'dbType',
fixed: 'left',
width: '6%',
format: (/**
* @param {?} item
* @return {?}
*/
(item) => {
for (let pair of this.dbTypeList) {
if (item.dbType == pair.value) {
return pair.label;
}
}
return item.dbType;
})
},
{
title: '数据库名',
index: 'dbName',
fixed: 'left',
width: '8%'
},
{
title: 'URL',
index: 'url',
},
{
title: '主机名',
index: 'ip',
},
{
title: '端口号',
index: 'port',
},
{
title: '用户名',
index: 'username',
},
{
title: '操作',
fixed: 'right',
width: '9%',
buttons: [
{
text: '编辑',
icon: 'edit',
type: 'static',
component: AuthDataSourceEditComponent,
click: (/**
* @param {?} record
* @param {?} modal
* @return {?}
*/
(record, modal) => {
this.messageService.success("编辑成功");
this.st.load(-1, this.params);
}),
acl: { ability: ['datasource:edit'] }
},
{
text: '删除',
icon: 'delete',
type: 'del',
click: (/**
* @param {?} record
* @param {?} modal
* @param {?} component
* @return {?}
*/
(record, modal, component) => {
this.dataSourceService.deleteById(record.id).subscribe((/**
* @return {?}
*/
() => {
this.messageService.success("删除成功");
component.load(-1, this.params);
}));
}),
acl: { ability: ['datasource:remove'] }
}
],
}
];
}
/**
* @return {?}
*/
ngOnInit() {
this.dictService.getTypeList("dbType").subscribe((/**
* @param {?} res
* @return {?}
*/
res => {
this.dbTypeList = res;
}));
}
//即时监控选中项的ID列表
/**
* @param {?} e
* @return {?}
*/
checkboxChange(e) {
this.selectedIds = [];
for (let item of e) {
this.selectedIds.push(item.id);
}
}
//因为[formData]和st的params似乎不能绑定,所以手写了一个绑定数据的方法
/**
* @return {?}
*/
formBind() {
this.params = this.sf.value;
}
/**
* @return {?}
*/
multiDelete() {
//未选定任何一条
if (this.selectedIds.length == 0) {
this.messageService.warning("未选择任何记录");
}
else {
this.dataSourceService.multiDelete(this.selectedIds).subscribe((/**
* @return {?}
*/
() => {
this.messageService.success("删除成功");
this.st.load(-1, this.params);
}));
}
}
/**
* @return {?}
*/
create() {
this.modalHelper.createStatic(AuthDataSourceEditComponent, { isNew: true })
.subscribe((/**
* @return {?}
*/
() => {
this.messageService.success("创建成功");
this.st.load(-1, this.params);
}));
}
}
AuthDataSourceComponent.decorators = [
{ type: Component, args: [{
selector: 'app-auth-ds',
template: "<page-header [action]=\"phPhAction\">\r\n <ng-template #phPhAction>\r\n <button acl [acl-ability]=\"'datasource:add'\" nz-button nzType=\"primary\" (click)=\"create()\">\u65B0\u5EFA</button>\r\n <!--<button nz-button (click)=\"multiDelete()\">\u5220\u9664</button>-->\r\n </ng-template>\r\n</page-header>\r\n<nz-card>\r\n <sf #sf mode=\"search\" [schema]=\"schema\" (formSubmit)=\"formBind();st.load(1, params);\" (formReset)=\"formBind();st.reset(params)\"></sf>\r\n <st #st [data]=\"url\" [columns]=\"columns\" [scroll]=\"{x:'150%'}\" (change)=\"checkboxChange($event)\" [req]=\"{params: params}\" [page]=\"{front: false}\"></st>\r\n</nz-card>\r\n"
}] }
];
/** @nocollapse */
AuthDataSourceComponent.ctorParameters = () => [
{ type: ModalHelper },
{ type: NzMessageService },
{ type: DataSourceService },
{ type: DictService }
];
AuthDataSourceComponent.propDecorators = {
st: [{ type: ViewChild, args: ['st',] }],
sf: [{ type: ViewChild, args: ['sf',] }]
};
if (false) {
/** @type {?} */
AuthDataSourceComponent.prototype.url;
/** @type {?} */
AuthDataSourceComponent.prototype.selectedIds;
/** @type {?} */
AuthDataSourceComponent.prototype.pageTitle;
/** @type {?} */
AuthDataSourceComponent.prototype.params;
/** @type {?} */
AuthDataSourceComponent.prototype.dbTypeList;
/** @type {?} */
AuthDataSourceComponent.prototype.st;
/** @type {?} */
AuthDataSourceComponent.prototype.sf;
/** @type {?} */
AuthDataSourceComponent.prototype.schema;
/** @type {?} */
AuthDataSourceComponent.prototype.columns;
/**
* @type {?}
* @private
*/
AuthDataSourceComponent.prototype.modalHelper;
/**
* @type {?}
* @private
*/
AuthDataSourceComponent.prototype.messageService;
/** @type {?} */
AuthDataSourceComponent.prototype.dataSourceService;
/**
* @type {?}
* @private
*/
AuthDataSourceComponent.prototype.dictService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVjaXAvYXV0aC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhc291cmNlL2RzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsR0FBWSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQVcsV0FBVyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTS9ELE1BQU0sT0FBTyx1QkFBdUI7Ozs7Ozs7SUFnSWxDLFlBQW9CLFdBQXdCLEVBQ3hCLGNBQStCLEVBQ2hDLGlCQUFtQyxFQUNsQyxXQUF1QjtRQUh2QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDaEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQWpJM0MsUUFBRyxHQUFHLGVBQWUsQ0FBQztRQUV0QixnQkFBVyxHQUFZLEVBQUUsQ0FBQztRQUUxQixjQUFTLEdBQUcsT0FBTyxDQUFDO1FBRXBCLFdBQU0sR0FBTSxFQUFHLENBQUM7UUFVaEIsV0FBTSxHQUFhO1lBQ2pCLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLE9BQU87aUJBQ2Y7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxRQUFRO29CQUNk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LENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUzs7O1lBQUMsR0FBRSxFQUFFO2dCQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsRUFBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7O0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLDJCQUEyQixFQUFFLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxDQUFDO2FBQ3JFLFNBQVM7OztRQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7OztZQTlLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLCtwQkFBa0M7YUFDbkM7Ozs7WUFWTyxXQUFXO1lBR1gsZ0JBQWdCO1lBRUYsaUJBQWlCO1lBQTlCLFdBQVc7OztpQkFrQmpCLFNBQVMsU0FBQyxJQUFJO2lCQUdkLFNBQVMsU0FBQyxJQUFJOzs7O0lBYmYsc0NBQXNCOztJQUV0Qiw4Q0FBMEI7O0lBRTFCLDRDQUFvQjs7SUFFcEIseUNBQWdCOztJQUVoQiw2Q0FBaUI7O0lBRWpCLHFDQUNnQjs7SUFFaEIscUNBQ2dCOztJQUVoQix5Q0EwQkU7O0lBRUYsMENBZ0ZFOzs7OztJQUVVLDhDQUFnQzs7Ozs7SUFDaEMsaURBQXVDOztJQUN2QyxvREFBMEM7Ozs7O0lBQzFDLDhDQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TW9kYWxIZWxwZXJ9IGZyb20gJ0BkZWxvbi90aGVtZSc7XHJcbmltcG9ydCB7U0ZDb21wb25lbnQsIFNGU2NoZW1hLH0gZnJvbSAnQGRlbG9uL2Zvcm0nO1xyXG5pbXBvcnQge1NUQ29sdW1uLCBTVENvbXBvbmVudH0gZnJvbSBcIkBkZWxvbi9hYmNcIjtcclxuaW1wb3J0IHtOek1lc3NhZ2VTZXJ2aWNlfSBmcm9tIFwibmctem9ycm8tYW50ZFwiO1xyXG5pbXBvcnQge0F1dGhEYXRhU291cmNlRWRpdENvbXBvbmVudH0gZnJvbSBcIi4vZWRpdC9kc2VkaXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERpY3RTZXJ2aWNlLCBEYXRhU291cmNlU2VydmljZSB9IGZyb20gXCJAZWNpcC9zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hdXRoLWRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHMuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aERhdGFTb3VyY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XHJcblxyXG4gIHVybCA9ICdhcGkvdjEvc3lzckRTJztcclxuXHJcbiAgc2VsZWN0ZWRJZHM6c3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcGFnZVRpdGxlID0gJ+aVsOaNrua6kOeuoeeQhic7XHJcblxyXG4gIHBhcmFtczphbnk9IHsgfTtcclxuXHJcbiAgZGJUeXBlTGlzdDpbYW55XTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc3QnKVxyXG4gIHN0OiBTVENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2YnKVxyXG4gIHNmOiBTRkNvbXBvbmVudDtcclxuXHJcbiAgc2NoZW1hOiBTRlNjaGVtYSA9IHtcclxuICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgZHNOYW1lOiB7XHJcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgdGl0bGU6ICfmlbDmja7mupDlkI3np7AnLFxyXG4gICAgICB9LFxyXG4gICAgICBkYlR5cGU6IHtcclxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxyXG4gICAgICAgIHRpdGxlOiAn5pWw5o2u5bqT57G75Z6LJyxcclxuICAgICAgICB1aToge1xyXG4gICAgICAgICAgd2lkZ2V0OiAnc2VsZWN0JyxcclxuICAgICAgICAgIHdpZHRoOiAyNjAsXHJcbiAgICAgICAgICBub3RGb3VuZENvbnRlbnQ6ICfmsqHmnInmlbDmja4nLFxyXG4gICAgICAgICAgZHJvcGRvd25NYXRjaFNlbGVjdFdpZHRoOiBmYWxzZSxcclxuICAgICAgICAgIGFzeW5jRGF0YTooKT0+dGhpcy5kaWN0U2VydmljZS5nZXRUeXBlTGlzdChcImRiVHlwZVwiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgaXA6IHtcclxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICB0aXRsZTogJ+S4u+acuuWQjScsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRiTmFtZToge1xyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgIHRpdGxlOiAn5pWw5o2u5bqT5ZCNJyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29sdW1uczogU1RDb2x1bW5bXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICfnvJblj7cnLFxyXG4gICAgICB0eXBlOidjaGVja2JveCcsXHJcbiAgICAgIGluZGV4OidpZCcsXHJcbiAgICAgIGZpeGVkOidsZWZ0JyxcclxuICAgICAgd2lkdGg6ICcyJScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ+aVsOaNrua6kOWQjeensCcsXHJcbiAgICAgIGluZGV4OiAnZHNOYW1lJyxcclxuICAgICAgZml4ZWQ6J2xlZnQnLFxyXG4gICAgICB3aWR0aDogJzEwJSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAn5pWw5o2u5bqT57G75Z6LJyxcclxuICAgICAgaW5kZXg6ICdkYlR5cGUnLFxyXG4gICAgICBmaXhlZDonbGVmdCcsXHJcbiAgICAgIHdpZHRoOiAnNiUnLFxyXG4gICAgICBmb3JtYXQ6KGl0ZW06YW55KT0+e1xyXG4gICAgICAgIGZvcihsZXQgcGFpciBvZiB0aGlzLmRiVHlwZUxpc3Qpe1xyXG4gICAgICAgICAgaWYoaXRlbS5kYlR5cGUgPT0gcGFpci52YWx1ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBwYWlyLmxhYmVsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbS5kYlR5cGU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAn5pWw5o2u5bqT5ZCNJyxcclxuICAgICAgaW5kZXg6ICdkYk5hbWUnLFxyXG4gICAgICBmaXhlZDonbGVmdCcsXHJcbiAgICAgIHdpZHRoOiAnOCUnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1VSTCcsXHJcbiAgICAgIGluZGV4OiAndXJsJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAn5Li75py65ZCNJyxcclxuICAgICAgaW5kZXg6ICdpcCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ+err+WPo+WPtycsXHJcbiAgICAgIGluZGV4OiAncG9ydCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ+eUqOaIt+WQjScsXHJcbiAgICAgIGluZGV4OiAndXNlcm5hbWUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICfmk43kvZwnLFxyXG4gICAgICBmaXhlZDoncmlnaHQnLFxyXG4gICAgICB3aWR0aDogJzklJyxcclxuICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRleHQ6ICfnvJbovpEnLFxyXG4gICAgICAgICAgaWNvbjogJ2VkaXQnLFxyXG4gICAgICAgICAgdHlwZTogJ3N0YXRpYycsXHJcbiAgICAgICAgICBjb21wb25lbnQ6IEF1dGhEYXRhU291cmNlRWRpdENvbXBvbmVudCxcclxuICAgICAgICAgIGNsaWNrOiAocmVjb3JkLCBtb2RhbCkgPT57XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcIue8lui+keaIkOWKn1wiKTtcclxuICAgICAgICAgICAgdGhpcy5zdC5sb2FkKC0xLCB0aGlzLnBhcmFtcyk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYWNsOiB7IGFiaWxpdHk6IFsnZGF0YXNvdXJjZTplZGl0J10gfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGV4dDogJ+WIoOmZpCcsXHJcbiAgICAgICAgICBpY29uOiAnZGVsZXRlJyxcclxuICAgICAgICAgIHR5cGU6ICdkZWwnLFxyXG4gICAgICAgICAgY2xpY2s6IChyZWNvcmQsIG1vZGFsLCBjb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlU2VydmljZS5kZWxldGVCeUlkKHJlY29yZC5pZCkuc3Vic2NyaWJlKCgpPT57XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFwi5Yig6Zmk5oiQ5YqfXCIpO1xyXG4gICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkKC0xLCB0aGlzLnBhcmFtcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFjbDogeyBhYmlsaXR5OiBbJ2RhdGFzb3VyY2U6cmVtb3ZlJ10gfVxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsSGVscGVyOiBNb2RhbEhlbHBlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOk56TWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHVibGljIGRhdGFTb3VyY2VTZXJ2aWNlOkRhdGFTb3VyY2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZGljdFNlcnZpY2U6RGljdFNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWN0U2VydmljZS5nZXRUeXBlTGlzdChcImRiVHlwZVwiKS5zdWJzY3JpYmUocmVzPT57XHJcbiAgICAgIHRoaXMuZGJUeXBlTGlzdCA9IHJlcztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL+WNs+aXtuebkeaOp+mAieS4remhueeahElE5YiX6KGoXHJcbiAgY2hlY2tib3hDaGFuZ2UoZTogYW55W10pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIGZvcihsZXQgaXRlbSBvZiBlKXtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy/lm6DkuLpbZm9ybURhdGFd5ZKMc3TnmoRwYXJhbXPkvLzkuY7kuI3og73nu5HlrprvvIzmiYDku6XmiYvlhpnkuobkuIDkuKrnu5HlrprmlbDmja7nmoTmlrnms5VcclxuICBmb3JtQmluZCgpIHtcclxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5zZi52YWx1ZTtcclxuICB9XHJcblxyXG4gIG11bHRpRGVsZXRlKCl7XHJcbiAgICAvL+acqumAieWumuS7u+S9leS4gOadoVxyXG4gICAgaWYodGhpcy5zZWxlY3RlZElkcy5sZW5ndGg9PTApe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLndhcm5pbmcoXCLmnKrpgInmi6nku7vkvZXorrDlvZVcIik7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kYXRhU291cmNlU2VydmljZS5tdWx0aURlbGV0ZSh0aGlzLnNlbGVjdGVkSWRzKS5zdWJzY3JpYmUoKCk9PntcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXCLliKDpmaTmiJDlip9cIik7XHJcbiAgICAgICAgdGhpcy5zdC5sb2FkKC0xLCB0aGlzLnBhcmFtcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlKCl7XHJcbiAgICB0aGlzLm1vZGFsSGVscGVyLmNyZWF0ZVN0YXRpYyhBdXRoRGF0YVNvdXJjZUVkaXRDb21wb25lbnQsIHtpc05ldzp0cnVlfSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFwi5Yib5bu65oiQ5YqfXCIpO1xyXG4gICAgICAgIHRoaXMuc3QubG9hZCgtMSwgdGhpcy5wYXJhbXMpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=