@yoyoboot/l-52abp-ng
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.13.
267 lines • 31 kB
JavaScript
import { AppComponentBaseDirective } from './app-component-base';
import { Directive } from '@angular/core';
import { PagedRequestDto, SortType } from './interfaces';
import * as i0 from "@angular/core";
/**
* 分页列表基类,包含一些分页通用方法。注意 派生类中的 `ngOnInit` 会覆盖此类中的此方法。
*/
export class PagedListingComponentBaseDirective extends AppComponentBaseDirective {
/**
* 构造函数
* @param injector 注入器
* @param nzModalRef (optional) nzModal 模态框关闭、销毁等处理帮助,只能在modal中打开的组件中注入,非modal打开的组件注入null即可,否则报错。因为nzModalRef是建立在nzModalComponent之上的。
*/
constructor(injector) {
super(injector);
/** 分页大小 */
this.pageSize = this.appConfig.grid.defaultPageSize;
/** 当前页 */
this.pageSizeOptions = this.appConfig.grid.defaultPageSizes;
/** 当前页 */
this.pageNumber = 1;
/** 总页数 */
this.totalPages = 1;
/** 数据是否处于加载状态 */
this.isTableLoading = true;
/** 是否全部选中 */
this.allChecked = false;
/** 全选框是否禁用 */
this.allCheckboxDisabled = false;
/** 选择框非全选状态,控制全选框的样式:☒ */
this.checkboxIndeterminate = false;
/** 已选中数据项列表 */
this.selectedDataItems = [];
/** 排序条件 - 表达式 */
this.sortConditions = [];
/** 排序 */
this.sorting = undefined;
/** 模糊搜索的文本 */
this.filterText = '';
/** 数据表的数据源 */
this.dataList = [];
/** 布尔类型表格列头过滤列表 */
this.booleanFilterList = [
{ text: this.l('All'), value: 'All' },
{ text: this.l('Yes'), value: true },
{ text: this.l('No'), value: false }
];
}
ngOnInit() {
this.refresh();
}
/** 刷新表格数据 */
refresh() {
this.restCheckStatus(this.dataList);
this.getDataPage(this.pageNumber);
}
/** 刷新表格数据并跳转到第一页(`pageNumber = 1`) */
refreshGoFirstPage() {
this.pageNumber = 1;
this.restCheckStatus(this.dataList);
this.getDataPage(this.pageNumber);
}
/** 获取数据页 */
getDataPage(page) {
const req = new PagedRequestDto();
req.maxResultCount = this.pageSize;
req.skipCount = (page - 1) * this.pageSize;
req.sorting = this.sorting;
this.isTableLoading = true;
this.fetchDataList(req, page, () => {
this.isTableLoading = false;
// 更新全选框禁用状态
this.refreshAllCheckBoxDisabled();
});
}
/** 刷新全选框是否禁用 */
refreshAllCheckBoxDisabled() {
this.allCheckboxDisabled = this.dataList.length <= 0;
}
/** 当页码发生改变 */
pageNumberChange() {
if (this.pageNumber > 0) {
this.refresh();
}
}
/**
* 选中全部记录
* @param value 是否选中
*/
checkAll(value) {
this.dataList.forEach(data => data.checked = this.allChecked);
this.refreshCheckStatus(this.dataList);
}
/**
* 刷新选中状态
* @param entityList 数据集合
*/
refreshCheckStatus(entityList) {
// 是否全部选中
const allChecked = entityList.every(value => value.checked === true);
// 是否全部未选中
const allUnChecked = entityList.every(value => !value.checked);
// 是否全选
this.allChecked = allChecked;
// 全选框样式控制
this.checkboxIndeterminate = !allChecked && !allUnChecked;
// 已选中数据
this.selectedDataItems = entityList.filter(value => value.checked);
}
/**
* 重置选中状态
* @param entityList 数据集合
*/
restCheckStatus(entityList) {
if (!Array.isArray(entityList)) {
entityList = this.dataList;
}
this.allChecked = false;
this.checkboxIndeterminate = false;
// 已选中数据
this.selectedDataItems = [];
// 设置数据为未选中状态
entityList.forEach(value => (value.checked = false));
}
/**
* 计算分页
* @param result 分页结果Dto
* @param pageNumber 当前页码
*/
showPaging(result) {
this.totalItems = result.totalCount;
this.totalPages = Math.ceil(this.totalItems / this.pageSize);
}
/** 排序条件发生改变 */
onSortChange(sortConditions, sorting) {
this.sortConditions = sortConditions !== null && sortConditions !== void 0 ? sortConditions : [];
this.sorting = sorting;
this.refresh();
}
/** 数据表格排序 */
gridSort(sort) {
this.sorting = undefined;
this.sortConditions = [];
let ascOrDesc = sort.value; // 'ascend' or 'descend' or null
const filedName = sort.key; // 字段名
if (ascOrDesc) {
ascOrDesc = abp.utils.replaceAll(ascOrDesc, 'end', '');
const args = ['{0} {1}', filedName, ascOrDesc];
const sortingStr = abp.utils.formatString.apply(this, args);
this.sorting = sortingStr;
this.sortConditions.push({
field: filedName,
order: 0,
type: ascOrDesc === 'asc' ? SortType.Asc : SortType.Desc
});
}
this.refresh();
}
/**
* 权限列表验证
* @param permissions 权限名称列表
*/
isGrantedAny(...permissions) {
if (!permissions) {
return false;
}
for (const permission of permissions) {
if (this.isGranted(permission)) {
return true;
}
}
return false;
}
/** st change事件 */
stChange(e) {
switch (e.type) {
case 'checkbox': // 多选
const checked = e.checkbox;
this.refreshCheckStatus(checked);
break;
case 'radio': // 单选
this.refreshCheckStatus([e.radio]);
break;
case 'sort': // 排序
const sortMap = this.processSorting(e);
this.onSortChange(this.toSortConditions(sortMap), this.toSortingString(sortMap));
break;
case 'pi': // page index 修改
this.pageNumber = e.pi;
this.pageNumberChange();
break;
case 'ps': // page size 修改
this.pageSize = e.ps;
this.refresh();
break;
}
}
/** STChange 转 sort cond */
toSortConditions(sortMap) {
if (!sortMap) {
return [];
}
let index = 0;
const sortConditions = [];
// tslint:disable-next-line:forin
for (const key in sortMap) {
sortConditions.push({
field: key,
order: index++,
type: sortMap[key]
});
}
return sortConditions;
}
/** STChange 转 sorting */
toSortingString(sortMap) {
if (!sortMap) {
return '';
}
// 处理数据
let sorting = '';
// tslint:disable-next-line:forin
for (const key in sortMap) {
sorting += `${key} ${sortMap[key]},`;
}
// 截取最后的字符串
if (sorting.endsWith(',')) {
sorting = sorting.substr(0, sorting.length - 1);
}
return sorting;
}
/** 预处理sorting数据 */
processSorting(input) {
// 结果集
const sortMap = {};
if (input.type !== 'sort') {
return sortMap;
}
let sortType = SortType.None;
// tslint:disable-next-line:no-string-literal
const inputSortStringArr = input.sort.map['sort'].split('-');
inputSortStringArr.forEach(o => {
const lastIndex = o.lastIndexOf('.');
const field = o.substring(0, lastIndex);
const fieldSortType = o.substring(lastIndex + 1, o.length);
sortType = SortType.None;
switch (fieldSortType) {
case 'descend':
sortType = SortType.Desc;
break;
case 'ascend':
sortType = SortType.Asc;
break;
}
if (sortType !== SortType.None) {
sortMap[field] = sortType;
}
});
return sortMap;
}
}
PagedListingComponentBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PagedListingComponentBaseDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
PagedListingComponentBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: PagedListingComponentBaseDirective, usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PagedListingComponentBaseDirective, decorators: [{
type: Directive
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZWQtbGlzdGluZy1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2wtNTJhYnAtbmcvc3JjL2NvbXBvbmVudC1iYXNlL3BhZ2VkLWxpc3RpbmctY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFrQixlQUFlLEVBQWtCLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFJekY7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLGtDQUE0QyxTQUFRLHlCQUF5QjtJQTRDakc7Ozs7T0FJRztJQUNILFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBL0NsQixXQUFXO1FBQ1gsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUUvQyxVQUFVO1FBQ1Ysb0JBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2RCxVQUFVO1FBQ1YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVmLFVBQVU7UUFDVixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBSWYsaUJBQWlCO1FBQ2pCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXRCLGFBQWE7UUFDYixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGNBQWM7UUFDZCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsMEJBQTBCO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUU5QixlQUFlO1FBQ2Ysc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBRTlCLGlCQUFpQjtRQUNqQixtQkFBYyxHQUFxQixFQUFFLENBQUM7UUFFdEMsU0FBUztRQUNULFlBQU8s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LFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDN0IsNkNBQTZDO1FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDekIsUUFBUSxhQUFhLEVBQUU7Z0JBQ3JCLEtBQUssU0FBUztvQkFDWixRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ3hCLE1BQU07YUFDVDtZQUVELElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O2dJQXpTbUIsa0NBQWtDO29IQUFsQyxrQ0FBa0M7NEZBQWxDLGtDQUFrQztrQkFEdkQsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcENvbXBvbmVudEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2FwcC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBJbmplY3RvciwgT25Jbml0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElTb3J0Q29uZGl0aW9uLCBQYWdlZFJlcXVlc3REdG8sIFBhZ2VkUmVzdWx0RHRvLCBTb3J0VHlwZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTVENoYW5nZSB9IGZyb20gJ0BkZWxvbi9hYmMvc3QnO1xuXG5cbi8qKlxuICog5YiG6aG15YiX6KGo5Z+657G777yM5YyF5ZCr5LiA5Lqb5YiG6aG16YCa55So5pa55rOV44CC5rOo5oSPIOa0vueUn+exu+S4reeahCBgbmdPbkluaXRgIOS8muimhuebluatpOexu+S4reeahOatpOaWueazleOAglxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWdlZExpc3RpbmdDb21wb25lbnRCYXNlRGlyZWN0aXZlPFRFbnRpdHk+IGV4dGVuZHMgQXBwQ29tcG9uZW50QmFzZURpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqIOWIhumhteWkp+WwjyAqL1xuICBwYWdlU2l6ZSA9IHRoaXMuYXBwQ29uZmlnLmdyaWQuZGVmYXVsdFBhZ2VTaXplO1xuXG4gIC8qKiDlvZPliY3pobUgKi9cbiAgcGFnZVNpemVPcHRpb25zID0gdGhpcy5hcHBDb25maWcuZ3JpZC5kZWZhdWx0UGFnZVNpemVzO1xuXG4gIC8qKiDlvZPliY3pobUgKi9cbiAgcGFnZU51bWJlciA9IDE7XG5cbiAgLyoqIOaAu+mhteaVsCAqL1xuICB0b3RhbFBhZ2VzID0gMTtcbiAgLyoqIOaAu+iusOW9leaVsCAqL1xuICB0b3RhbEl0ZW1zOiBudW1iZXI7XG5cbiAgLyoqIOaVsOaNruaYr+WQpuWkhOS6juWKoOi9veeKtuaAgSAqL1xuICBpc1RhYmxlTG9hZGluZyA9IHRydWU7XG5cbiAgLyoqIOaYr+WQpuWFqOmDqOmAieS4rSAqL1xuICBhbGxDaGVja2VkID0gZmFsc2U7XG5cbiAgLyoqIOWFqOmAieahhuaYr+WQpuemgeeUqCAqL1xuICBhbGxDaGVja2JveERpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIOmAieaLqeahhumdnuWFqOmAieeKtuaAge+8jOaOp+WItuWFqOmAieahhueahOagt+W8j++8muKYkiAqL1xuICBjaGVja2JveEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAvKiog5bey6YCJ5Lit5pWw5o2u6aG55YiX6KGoICovXG4gIHNlbGVjdGVkRGF0YUl0ZW1zOiBhbnlbXSA9IFtdO1xuXG4gIC8qKiDmjpLluo/mnaHku7YgLSDooajovr7lvI8gKi9cbiAgc29ydENvbmRpdGlvbnM6IElTb3J0Q29uZGl0aW9uW10gPSBbXTtcblxuICAvKiog5o6S5bqPICovXG4gIHNvcnRpbmc6IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICAvKiog5qih57OK5pCc57Si55qE5paH5pysICovXG4gIGZpbHRlclRleHQgPSAnJztcblxuICAvKiog5pWw5o2u6KGo55qE5pWw5o2u5rqQICovXG4gIGRhdGFMaXN0OiBURW50aXR5W10gPSBbXTtcblxuICAvKipcbiAgICog5p6E6YCg5Ye95pWwXG4gICAqIEBwYXJhbSBpbmplY3RvciDms6jlhaXlmahcbiAgICogQHBhcmFtIG56TW9kYWxSZWYgKG9wdGlvbmFsKSBuek1vZGFsIOaooeaAgeahhuWFs+mXreOAgemUgOavgeetieWkhOeQhuW4ruWKqe+8jOWPquiDveWcqG1vZGFs5Lit5omT5byA55qE57uE5Lu25Lit5rOo5YWl77yM6Z2ebW9kYWzmiZPlvIDnmoTnu4Tku7bms6jlhaVudWxs5Y2z5Y+v77yM5ZCm5YiZ5oql6ZSZ44CC5Zug5Li6bnpNb2RhbFJlZuaYr+W7uueri+WcqG56TW9kYWxDb21wb25lbnTkuYvkuIrnmoTjgIJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqIOWIt+aWsOihqOagvOaVsOaNriAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMucmVzdENoZWNrU3RhdHVzKHRoaXMuZGF0YUxpc3QpO1xuICAgIHRoaXMuZ2V0RGF0YVBhZ2UodGhpcy5wYWdlTnVtYmVyKTtcbiAgfVxuXG4gIC8qKiDliLfmlrDooajmoLzmlbDmja7lubbot7PovazliLDnrKzkuIDpobXvvIhgcGFnZU51bWJlciA9IDFg77yJICovXG4gIHJlZnJlc2hHb0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xuICAgIHRoaXMucmVzdENoZWNrU3RhdHVzKHRoaXMuZGF0YUxpc3QpO1xuICAgIHRoaXMuZ2V0RGF0YVBhZ2UodGhpcy5wYWdlTnVtYmVyKTtcbiAgfVxuXG4gIC8qKiDluIPlsJTnsbvlnovooajmoLzliJflpLTov4fmu6TliJfooaggKi9cbiAgYm9vbGVhbkZpbHRlckxpc3Q6IGFueVtdID0gW1xuICAgIHsgdGV4dDogdGhpcy5sKCdBbGwnKSwgdmFsdWU6ICdBbGwnIH0sXG4gICAgeyB0ZXh0OiB0aGlzLmwoJ1llcycpLCB2YWx1ZTogdHJ1ZSB9LFxuICAgIHsgdGV4dDogdGhpcy5sKCdObycpLCB2YWx1ZTogZmFsc2UgfVxuICBdO1xuXG4gIC8qKiDojrflj5bmlbDmja7pobUgKi9cbiAgZ2V0RGF0YVBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVxID0gbmV3IFBhZ2VkUmVxdWVzdER0bygpO1xuICAgIHJlcS5tYXhSZXN1bHRDb3VudCA9IHRoaXMucGFnZVNpemU7XG4gICAgcmVxLnNraXBDb3VudCA9IChwYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xuICAgIHJlcS5zb3J0aW5nID0gdGhpcy5zb3J0aW5nO1xuICAgIHRoaXMuaXNUYWJsZUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmV0Y2hEYXRhTGlzdChyZXEsIHBhZ2UsICgpID0+IHtcbiAgICAgIHRoaXMuaXNUYWJsZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIC8vIOabtOaWsOWFqOmAieahhuemgeeUqOeKtuaAgVxuICAgICAgdGhpcy5yZWZyZXNoQWxsQ2hlY2tCb3hEaXNhYmxlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIOWIt+aWsOWFqOmAieahhuaYr+WQpuemgeeUqCAqL1xuICByZWZyZXNoQWxsQ2hlY2tCb3hEaXNhYmxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbENoZWNrYm94RGlzYWJsZWQgPSB0aGlzLmRhdGFMaXN0Lmxlbmd0aCA8PSAwO1xuICB9XG5cblxuICAvKiog5b2T6aG156CB5Y+R55Sf5pS55Y+YICovXG4gIHBhZ2VOdW1iZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnZU51bWJlciA+IDApIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgInkuK3lhajpg6jorrDlvZVcbiAgICogQHBhcmFtIHZhbHVlIOaYr+WQpumAieS4rVxuICAgKi9cbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFMaXN0LmZvckVhY2goZGF0YSA9PiAoZGF0YSBhcyBhbnkpLmNoZWNrZWQgPSB0aGlzLmFsbENoZWNrZWQpO1xuICAgIHRoaXMucmVmcmVzaENoZWNrU3RhdHVzKHRoaXMuZGF0YUxpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOmAieS4reeKtuaAgVxuICAgKiBAcGFyYW0gZW50aXR5TGlzdCDmlbDmja7pm4blkIhcbiAgICovXG4gIHJlZnJlc2hDaGVja1N0YXR1cyhlbnRpdHlMaXN0OiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIOaYr+WQpuWFqOmDqOmAieS4rVxuICAgIGNvbnN0IGFsbENoZWNrZWQgPSBlbnRpdHlMaXN0LmV2ZXJ5KHZhbHVlID0+IHZhbHVlLmNoZWNrZWQgPT09IHRydWUpO1xuICAgIC8vIOaYr+WQpuWFqOmDqOacqumAieS4rVxuICAgIGNvbnN0IGFsbFVuQ2hlY2tlZCA9IGVudGl0eUxpc3QuZXZlcnkodmFsdWUgPT4gIXZhbHVlLmNoZWNrZWQpO1xuICAgIC8vIOaYr+WQpuWFqOmAiVxuICAgIHRoaXMuYWxsQ2hlY2tlZCA9IGFsbENoZWNrZWQ7XG4gICAgLy8g5YWo6YCJ5qGG5qC35byP5o6n5Yi2XG4gICAgdGhpcy5jaGVja2JveEluZGV0ZXJtaW5hdGUgPSAhYWxsQ2hlY2tlZCAmJiAhYWxsVW5DaGVja2VkO1xuICAgIC8vIOW3sumAieS4reaVsOaNrlxuICAgIHRoaXMuc2VsZWN0ZWREYXRhSXRlbXMgPSBlbnRpdHlMaXN0LmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5jaGVja2VkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDph43nva7pgInkuK3nirbmgIFcbiAgICogQHBhcmFtIGVudGl0eUxpc3Qg5pWw5o2u6ZuG5ZCIXG4gICAqL1xuICByZXN0Q2hlY2tTdGF0dXMoZW50aXR5TGlzdDogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXR5TGlzdCkpIHtcbiAgICAgIGVudGl0eUxpc3QgPSB0aGlzLmRhdGFMaXN0IGFzIGFueVtdO1xuICAgIH1cbiAgICB0aGlzLmFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNoZWNrYm94SW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIC8vIOW3sumAieS4reaVsOaNrlxuICAgIHRoaXMuc2VsZWN0ZWREYXRhSXRlbXMgPSBbXTtcbiAgICAvLyDorr7nva7mlbDmja7kuLrmnKrpgInkuK3nirbmgIFcbiAgICBlbnRpdHlMaXN0LmZvckVhY2godmFsdWUgPT4gKHZhbHVlLmNoZWNrZWQgPSBmYWxzZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiuoeeul+WIhumhtVxuICAgKiBAcGFyYW0gcmVzdWx0IOWIhumhtee7k+aenER0b1xuICAgKiBAcGFyYW0gcGFnZU51bWJlciDlvZPliY3pobXnoIFcbiAgICovXG4gIHNob3dQYWdpbmcocmVzdWx0OiBQYWdlZFJlc3VsdER0byk6IHZvaWQge1xuICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3VsdC50b3RhbENvdW50O1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMgLyB0aGlzLnBhZ2VTaXplKTtcbiAgfVxuXG4gIC8qKiDmjpLluo/mnaHku7blj5HnlJ/mlLnlj5ggKi9cbiAgb25Tb3J0Q2hhbmdlKHNvcnRDb25kaXRpb25zOiBJU29ydENvbmRpdGlvbltdLCBzb3J0aW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRDb25kaXRpb25zID0gc29ydENvbmRpdGlvbnMgPz8gW107XG4gICAgdGhpcy5zb3J0aW5nID0gc29ydGluZztcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKiDmlbDmja7ooajmoLzmjpLluo8gKi9cbiAgZ3JpZFNvcnQoc29ydDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zb3J0aW5nID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc29ydENvbmRpdGlvbnMgPSBbXTtcblxuICAgIGxldCBhc2NPckRlc2MgPSBzb3J0LnZhbHVlOyAvLyAnYXNjZW5kJyBvciAnZGVzY2VuZCcgb3IgbnVsbFxuICAgIGNvbnN0IGZpbGVkTmFtZSA9IHNvcnQua2V5OyAvLyDlrZfmrrXlkI1cbiAgICBpZiAoYXNjT3JEZXNjKSB7XG4gICAgICBhc2NPckRlc2MgPSBhYnAudXRpbHMucmVwbGFjZUFsbChhc2NPckRlc2MsICdlbmQnLCAnJyk7XG4gICAgICBjb25zdCBhcmdzID0gWyd7MH0gezF9JywgZmlsZWROYW1lLCBhc2NPckRlc2NdO1xuICAgICAgY29uc3Qgc29ydGluZ1N0ciA9IGFicC51dGlscy5mb3JtYXRTdHJpbmcuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB0aGlzLnNvcnRpbmcgPSBzb3J0aW5nU3RyO1xuXG4gICAgICB0aGlzLnNvcnRDb25kaXRpb25zLnB1c2goe1xuICAgICAgICBmaWVsZDogZmlsZWROYW1lLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgdHlwZTogYXNjT3JEZXNjID09PSAnYXNjJyA/IFNvcnRUeXBlLkFzYyA6IFNvcnRUeXBlLkRlc2NcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmnYPpmZDliJfooajpqozor4FcbiAgICogQHBhcmFtIHBlcm1pc3Npb25zIOadg+mZkOWQjeensOWIl+ihqFxuICAgKi9cbiAgaXNHcmFudGVkQW55KC4uLnBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc0dyYW50ZWQocGVybWlzc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBzdCBjaGFuZ2Xkuovku7YgKi9cbiAgc3RDaGFuZ2UoZTogU1RDaGFuZ2UpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGUudHlwZSkge1xuICAgICAgY2FzZSAnY2hlY2tib3gnOiAvLyDlpJrpgIlcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IGUuY2hlY2tib3g7XG4gICAgICAgIHRoaXMucmVmcmVzaENoZWNrU3RhdHVzKGNoZWNrZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhZGlvJzogLy8g5Y2V6YCJXG4gICAgICAgIHRoaXMucmVmcmVzaENoZWNrU3RhdHVzKFtlLnJhZGlvXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc29ydCc6IC8vIOaOkuW6j1xuICAgICAgICBjb25zdCBzb3J0TWFwID0gdGhpcy5wcm9jZXNzU29ydGluZyhlKTtcbiAgICAgICAgdGhpcy5vblNvcnRDaGFuZ2UodGhpcy50b1NvcnRDb25kaXRpb25zKHNvcnRNYXApLCB0aGlzLnRvU29ydGluZ1N0cmluZyhzb3J0TWFwKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGknOiAvLyBwYWdlIGluZGV4IOS/ruaUuVxuICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSBlLnBpO1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJDaGFuZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcyc6IC8vIHBhZ2Ugc2l6ZSDkv67mlLlcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGUucHM7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogU1RDaGFuZ2Ug6L2sIHNvcnQgY29uZCAqL1xuICBwcm90ZWN0ZWQgdG9Tb3J0Q29uZGl0aW9ucyhzb3J0TWFwOiB7IFtuYW1lOiBzdHJpbmddOiBTb3J0VHlwZSB9KTogSVNvcnRDb25kaXRpb25bXSB7XG4gICAgaWYgKCFzb3J0TWFwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzb3J0Q29uZGl0aW9uczogSVNvcnRDb25kaXRpb25bXSA9IFtdO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxuICAgIGZvciAoY29uc3Qga2V5IGluIHNvcnRNYXApIHtcbiAgICAgIHNvcnRDb25kaXRpb25zLnB1c2goe1xuICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICBvcmRlcjogaW5kZXgrKyxcbiAgICAgICAgdHlwZTogc29ydE1hcFtrZXldXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRDb25kaXRpb25zO1xuICB9XG5cbiAgLyoqIFNUQ2hhbmdlIOi9rCBzb3J0aW5nICovXG4gIHByb3RlY3RlZCB0b1NvcnRpbmdTdHJpbmcoc29ydE1hcDogeyBbbmFtZTogc3RyaW5nXTogU29ydFR5cGUgfSk6IHN0cmluZyB7XG4gICAgaWYgKCFzb3J0TWFwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIOWkhOeQhuaVsOaNrlxuICAgIGxldCBzb3J0aW5nID0gJyc7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc29ydE1hcCkge1xuICAgICAgc29ydGluZyArPSBgJHtrZXl9ICR7c29ydE1hcFtrZXldfSxgO1xuICAgIH1cblxuICAgIC8vIOaIquWPluacgOWQjueahOWtl+espuS4slxuICAgIGlmIChzb3J0aW5nLmVuZHNXaXRoKCcsJykpIHtcbiAgICAgIHNvcnRpbmcgPSBzb3J0aW5nLnN1YnN0cigwLCBzb3J0aW5nLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0aW5nO1xuICB9XG5cbiAgLyoqIOmihOWkhOeQhnNvcnRpbmfmlbDmja4gKi9cbiAgcHJvdGVjdGVkIHByb2Nlc3NTb3J0aW5nKGlucHV0OiBTVENoYW5nZSk6IHsgW25hbWU6IHN0cmluZ106IFNvcnRUeXBlIH0ge1xuICAgIC8vIOe7k+aenOmbhlxuICAgIGNvbnN0IHNvcnRNYXA6IHsgW25hbWU6IHN0cmluZ106IFNvcnRUeXBlIH0gPSB7fTtcbiAgICBpZiAoaW5wdXQudHlwZSAhPT0gJ3NvcnQnKSB7XG4gICAgICByZXR1cm4gc29ydE1hcDtcbiAgICB9XG5cbiAgICBsZXQgc29ydFR5cGUgPSBTb3J0VHlwZS5Ob25lO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgIGNvbnN0IGlucHV0U29ydFN0cmluZ0FyciA9IGlucHV0LnNvcnQhLm1hcFsnc29ydCddLnNwbGl0KCctJyk7XG4gICAgaW5wdXRTb3J0U3RyaW5nQXJyLmZvckVhY2gobyA9PiB7XG4gICAgICBjb25zdCBsYXN0SW5kZXggPSBvLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICBjb25zdCBmaWVsZCA9IG8uc3Vic3RyaW5nKDAsIGxhc3RJbmRleCk7XG4gICAgICBjb25zdCBmaWVsZFNvcnRUeXBlID0gby5zdWJzdHJpbmcobGFzdEluZGV4ICsgMSwgby5sZW5ndGgpO1xuXG4gICAgICBzb3J0VHlwZSA9IFNvcnRUeXBlLk5vbmU7XG4gICAgICBzd2l0Y2ggKGZpZWxkU29ydFR5cGUpIHtcbiAgICAgICAgY2FzZSAnZGVzY2VuZCc6XG4gICAgICAgICAgc29ydFR5cGUgPSBTb3J0VHlwZS5EZXNjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhc2NlbmQnOlxuICAgICAgICAgIHNvcnRUeXBlID0gU29ydFR5cGUuQXNjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc29ydFR5cGUgIT09IFNvcnRUeXBlLk5vbmUpIHtcbiAgICAgICAgc29ydE1hcFtmaWVsZF0gPSBzb3J0VHlwZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzb3J0TWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaVsOaNruaKveixoeaOpeWPo++8jOW/hemhu+WunueOsFxuICAgKiBAcGFyYW0gcmVxdWVzdCDor7fmsYLlv4XpnIDlj4LmlbAgc2tpcENvdW50OiBudW1iZXI7IG1heFJlc3VsdENvdW50OiBudW1iZXI7XG4gICAqIEBwYXJhbSBwYWdlTnVtYmVyIOW9k+WJjemhteeggVxuICAgKiBAcGFyYW0gZmluaXNoZWRDYWxsYmFjayDlrozmiJDlkI7lm57osIPlh73mlbBcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBmZXRjaERhdGFMaXN0KFxuICAgIHJlcXVlc3Q6IFBhZ2VkUmVxdWVzdER0byxcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgZmluaXNoZWRDYWxsYmFjaz86ICgpID0+IHZvaWRcbiAgKTogdm9pZDtcbn1cbiJdfQ==