@delon/abc 12.2.2 → 12.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/bundles/abc.umd.js +3 -3
  2. package/bundles/autoFocus.umd.js +4 -4
  3. package/bundles/avatarList.umd.js +4 -4
  4. package/bundles/count-down.umd.js +4 -4
  5. package/bundles/datePicker.umd.js +5 -5
  6. package/bundles/downFile.umd.js +4 -4
  7. package/bundles/edit.umd.js +4 -4
  8. package/bundles/ellipsis.umd.js +4 -4
  9. package/bundles/errorCollect.umd.js +4 -4
  10. package/bundles/exception.umd.js +12 -9
  11. package/bundles/exception.umd.js.map +1 -1
  12. package/bundles/footerToolbar.umd.js +4 -4
  13. package/bundles/fullContent.umd.js +6 -8
  14. package/bundles/fullContent.umd.js.map +1 -1
  15. package/bundles/globalFooter.umd.js +4 -4
  16. package/bundles/grid.umd.js +3 -3
  17. package/bundles/image.umd.js +3 -3
  18. package/bundles/let.umd.js +4 -4
  19. package/bundles/loading.umd.js +6 -8
  20. package/bundles/loading.umd.js.map +1 -1
  21. package/bundles/lodop.umd.js +5 -7
  22. package/bundles/lodop.umd.js.map +1 -1
  23. package/bundles/media.umd.js +5 -7
  24. package/bundles/media.umd.js.map +1 -1
  25. package/bundles/noticeIcon.umd.js +4 -4
  26. package/bundles/onboarding.umd.js +6 -8
  27. package/bundles/onboarding.umd.js.map +1 -1
  28. package/bundles/pageHeader.umd.js +4 -4
  29. package/bundles/pdf.umd.js +4 -4
  30. package/bundles/qr.umd.js +3 -3
  31. package/bundles/quickMenu.umd.js +4 -4
  32. package/bundles/result.umd.js +4 -4
  33. package/bundles/reuseTab.umd.js +14 -25
  34. package/bundles/reuseTab.umd.js.map +1 -1
  35. package/bundles/table.umd.js +243 -145
  36. package/bundles/table.umd.js.map +1 -1
  37. package/bundles/tagSelect.umd.js +4 -4
  38. package/bundles/view.umd.js +4 -4
  39. package/bundles/xlsx.umd.js +30 -37
  40. package/bundles/xlsx.umd.js.map +1 -1
  41. package/bundles/zip.umd.js +5 -7
  42. package/bundles/zip.umd.js.map +1 -1
  43. package/esm2015/exception/exception.component.js +7 -4
  44. package/esm2015/exception/exception.module.js +3 -2
  45. package/esm2015/lodop/lodop.service.js +1 -1
  46. package/esm2015/reuse-tab/reuse-tab-context-menu.component.js +2 -2
  47. package/esm2015/reuse-tab/reuse-tab-context.service.js +4 -13
  48. package/esm2015/reuse-tab/reuse-tab.component.js +6 -6
  49. package/esm2015/st/index.js +2 -0
  50. package/esm2015/st/st-column-source.js +28 -7
  51. package/esm2015/st/st-data-source.js +4 -4
  52. package/esm2015/st/st-filter.component.js +149 -0
  53. package/esm2015/st/st-td.component.js +232 -0
  54. package/esm2015/st/st.component.js +28 -118
  55. package/esm2015/st/st.config.js +1 -2
  56. package/esm2015/st/st.interfaces.js +1 -1
  57. package/esm2015/st/st.module.js +9 -3
  58. package/esm2015/st/st.types.js +1 -1
  59. package/esm2015/st/table.js +3 -1
  60. package/esm2015/xlsx/xlsx.service.js +23 -29
  61. package/esm2015/xlsx/xlsx.types.js +1 -1
  62. package/esm2015/zip/zip.service.js +1 -1
  63. package/exception/exception.component.d.ts +3 -2
  64. package/exception/exception.metadata.json +1 -1
  65. package/fesm2015/exception.js +8 -4
  66. package/fesm2015/exception.js.map +1 -1
  67. package/fesm2015/lodop.js.map +1 -1
  68. package/fesm2015/reuseTab.js +9 -18
  69. package/fesm2015/reuseTab.js.map +1 -1
  70. package/fesm2015/table.js +439 -130
  71. package/fesm2015/table.js.map +1 -1
  72. package/fesm2015/xlsx.js +22 -28
  73. package/fesm2015/xlsx.js.map +1 -1
  74. package/fesm2015/zip.js.map +1 -1
  75. package/package.json +4 -4
  76. package/reuse-tab/reuse-tab.component.d.ts +1 -1
  77. package/reuse-tab/reuseTab.metadata.json +1 -1
  78. package/st/index.d.ts +1 -0
  79. package/st/st-filter.component.d.ts +18 -0
  80. package/st/st-td.component.d.ts +27 -0
  81. package/st/st.component.d.ts +8 -23
  82. package/st/st.interfaces.d.ts +57 -3
  83. package/st/st.types.d.ts +6 -0
  84. package/st/style/index.less +8 -0
  85. package/st/table.d.ts +2 -0
  86. package/st/table.metadata.json +1 -1
  87. package/sv/style/index.less +1 -0
  88. package/xlsx/xlsx.metadata.json +1 -1
  89. package/xlsx/xlsx.types.d.ts +3 -0
@@ -0,0 +1,149 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ export class STFilterComponent {
3
+ constructor() {
4
+ this.visible = false;
5
+ this.locale = {};
6
+ this.n = new EventEmitter();
7
+ this.handle = new EventEmitter();
8
+ }
9
+ get icon() {
10
+ return this.f.icon;
11
+ }
12
+ show($event) {
13
+ $event.stopPropagation();
14
+ }
15
+ checkboxChange() {
16
+ var _a;
17
+ this.n.emit((_a = this.f.menus) === null || _a === void 0 ? void 0 : _a.filter(w => w.checked));
18
+ }
19
+ radioChange(item) {
20
+ this.f.menus.forEach(i => (i.checked = false));
21
+ item.checked = !item.checked;
22
+ this.n.emit(item);
23
+ }
24
+ confirm() {
25
+ this.handle.emit(true);
26
+ }
27
+ reset() {
28
+ this.handle.emit(false);
29
+ }
30
+ }
31
+ STFilterComponent.decorators = [
32
+ { type: Component, args: [{
33
+ selector: 'st-filter',
34
+ template: `
35
+ <span
36
+ class="ant-table-filter-trigger"
37
+ [class.active]="visible || f.default"
38
+ nz-dropdown
39
+ [nzDropdownMenu]="filterMenu"
40
+ nzTrigger="click"
41
+ [nzClickHide]="false"
42
+ [(nzVisible)]="visible"
43
+ nzOverlayClassName="st__filter-wrap"
44
+ (click)="show($event)"
45
+ >
46
+ <i nz-icon [nzType]="icon.type" [nzTheme]="icon.theme!"></i>
47
+ </span>
48
+ <nz-dropdown-menu #filterMenu="nzDropdownMenu">
49
+ <div class="ant-table-filter-dropdown">
50
+ <ng-container [ngSwitch]="f.type">
51
+ <div *ngSwitchCase="'keyword'" class="st__filter-keyword">
52
+ <input
53
+ type="text"
54
+ nz-input
55
+ [attr.placeholder]="f.placeholder"
56
+ [(ngModel)]="f.menus![0]!.value"
57
+ (ngModelChange)="n.emit($event)"
58
+ (keyup.enter)="confirm()"
59
+ />
60
+ </div>
61
+ <div *ngSwitchCase="'number'" class="p-sm st__filter-number">
62
+ <nz-input-number
63
+ [(ngModel)]="f.menus![0]!.value"
64
+ (ngModelChange)="n.emit($event)"
65
+ [nzMin]="f.number!.min!"
66
+ [nzMax]="f.number!.max!"
67
+ [nzStep]="f.number!.step!"
68
+ [nzPrecision]="f.number!.precision"
69
+ [nzPlaceHolder]="f.placeholder!"
70
+ class="width-100"
71
+ ></nz-input-number>
72
+ </div>
73
+ <div *ngSwitchCase="'date'" class="p-sm st__filter-date">
74
+ <nz-date-picker
75
+ *ngIf="!f.date!.range"
76
+ nzInline
77
+ [nzMode]="f.date!.mode"
78
+ [(ngModel)]="f.menus![0]!.value"
79
+ (ngModelChange)="n.emit($event)"
80
+ [nzShowNow]="f.date!.showNow"
81
+ [nzShowToday]="f.date!.showToday"
82
+ [nzDisabledDate]="f.date!.disabledDate"
83
+ [nzDisabledTime]="f.date!.disabledTime"
84
+ ></nz-date-picker>
85
+ <nz-range-picker
86
+ *ngIf="f.date!.range"
87
+ nzInline
88
+ [nzMode]="f.date!.mode"
89
+ [(ngModel)]="f.menus![0]!.value"
90
+ (ngModelChange)="n.emit($event)"
91
+ [nzShowNow]="f.date!.showNow"
92
+ [nzShowToday]="f.date!.showToday"
93
+ [nzDisabledDate]="f.date!.disabledDate"
94
+ [nzDisabledTime]="f.date!.disabledTime"
95
+ ></nz-range-picker>
96
+ </div>
97
+ <div *ngSwitchCase="'time'" class="p-sm st__filter-time"> </div>
98
+ <div *ngSwitchCase="'custom'" class="st__filter-custom">
99
+ <ng-template
100
+ [ngTemplateOutlet]="f.custom!"
101
+ [ngTemplateOutletContext]="{ $implicit: f, col: col }"
102
+ ></ng-template>
103
+ </div>
104
+ <ul *ngSwitchDefault nz-menu>
105
+ <ng-container *ngIf="f.multiple">
106
+ <li nz-menu-item *ngFor="let filter of f.menus">
107
+ <label nz-checkbox [(ngModel)]="filter.checked" (ngModelChange)="checkboxChange()">
108
+ {{ filter.text }}
109
+ </label>
110
+ </li>
111
+ </ng-container>
112
+ <ng-container *ngIf="!f.multiple">
113
+ <li nz-menu-item *ngFor="let filter of f.menus">
114
+ <label nz-radio [ngModel]="filter.checked" (ngModelChange)="radioChange(filter)">
115
+ {{ filter.text }}
116
+ </label>
117
+ </li>
118
+ </ng-container>
119
+ </ul>
120
+ </ng-container>
121
+ <div *ngIf="f.showOPArea" class="ant-table-filter-dropdown-btns">
122
+ <a class="ant-table-filter-dropdown-link confirm" (click)="visible = false">
123
+ <span (click)="confirm()">{{ f.confirmText || locale.filterConfirm }}</span>
124
+ </a>
125
+ <a class="ant-table-filter-dropdown-link clear" (click)="visible = false">
126
+ <span (click)="reset()">{{ f.clearText || locale.filterReset }}</span>
127
+ </a>
128
+ </div>
129
+ </div>
130
+ </nz-dropdown-menu>
131
+ `,
132
+ host: {
133
+ '[class.ant-table-filter-trigger-container]': `true`,
134
+ '[class.st__filter]': `true`,
135
+ '[class.ant-table-filter-trigger-container-open]': `visible`
136
+ },
137
+ preserveWhitespaces: false,
138
+ changeDetection: ChangeDetectionStrategy.OnPush,
139
+ encapsulation: ViewEncapsulation.None
140
+ },] }
141
+ ];
142
+ STFilterComponent.propDecorators = {
143
+ col: [{ type: Input }],
144
+ locale: [{ type: Input }],
145
+ f: [{ type: Input }],
146
+ n: [{ type: Output }],
147
+ handle: [{ type: Output }]
148
+ };
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FiYy9zdC9zdC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFvSG5ILE1BQU0sT0FBTyxpQkFBaUI7SUE3RzlCO1FBOEdFLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFUCxXQUFNLEdBQWUsRUFBRSxDQUFDO1FBRWQsTUFBQyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDaEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUEwQjFELENBQUM7SUF6QkMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWtCO1FBQ3JCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYzs7UUFDWixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSywwQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXdCO1FBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDOzs7WUE1SUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpR1Q7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLDRDQUE0QyxFQUFFLE1BQU07b0JBQ3BELG9CQUFvQixFQUFFLE1BQU07b0JBQzVCLGlEQUFpRCxFQUFFLFNBQVM7aUJBQzdEO2dCQUNELG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O2tCQUdFLEtBQUs7cUJBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLE1BQU07cUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTG9jYWxlRGF0YSB9IGZyb20gJ0BkZWxvbi90aGVtZSc7XG5cbmltcG9ydCB7IFNUQ29sdW1uRmlsdGVyLCBTVENvbHVtbkZpbHRlck1lbnUsIFNUSWNvbiB9IGZyb20gJy4vc3QuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBfU1RDb2x1bW4gfSBmcm9tICcuL3N0LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtZmlsdGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJhbnQtdGFibGUtZmlsdGVyLXRyaWdnZXJcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ2aXNpYmxlIHx8IGYuZGVmYXVsdFwiXG4gICAgICBuei1kcm9wZG93blxuICAgICAgW256RHJvcGRvd25NZW51XT1cImZpbHRlck1lbnVcIlxuICAgICAgbnpUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgW256Q2xpY2tIaWRlXT1cImZhbHNlXCJcbiAgICAgIFsobnpWaXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgICAgIG56T3ZlcmxheUNsYXNzTmFtZT1cInN0X19maWx0ZXItd3JhcFwiXG4gICAgICAoY2xpY2spPVwic2hvdygkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8aSBuei1pY29uIFtuelR5cGVdPVwiaWNvbi50eXBlXCIgW256VGhlbWVdPVwiaWNvbi50aGVtZSFcIj48L2k+XG4gICAgPC9zcGFuPlxuICAgIDxuei1kcm9wZG93bi1tZW51ICNmaWx0ZXJNZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhbnQtdGFibGUtZmlsdGVyLWRyb3Bkb3duXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImYudHlwZVwiPlxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidrZXl3b3JkJ1wiIGNsYXNzPVwic3RfX2ZpbHRlci1rZXl3b3JkXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBuei1pbnB1dFxuICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJmLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmLm1lbnVzIVswXSEudmFsdWVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJuLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJjb25maXJtKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIGNsYXNzPVwicC1zbSBzdF9fZmlsdGVyLW51bWJlclwiPlxuICAgICAgICAgICAgPG56LWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImYubWVudXMhWzBdIS52YWx1ZVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm4uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW256TWluXT1cImYubnVtYmVyIS5taW4hXCJcbiAgICAgICAgICAgICAgW256TWF4XT1cImYubnVtYmVyIS5tYXghXCJcbiAgICAgICAgICAgICAgW256U3RlcF09XCJmLm51bWJlciEuc3RlcCFcIlxuICAgICAgICAgICAgICBbbnpQcmVjaXNpb25dPVwiZi5udW1iZXIhLnByZWNpc2lvblwiXG4gICAgICAgICAgICAgIFtuelBsYWNlSG9sZGVyXT1cImYucGxhY2Vob2xkZXIhXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3aWR0aC0xMDBcIlxuICAgICAgICAgICAgPjwvbnotaW5wdXQtbnVtYmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIGNsYXNzPVwicC1zbSBzdF9fZmlsdGVyLWRhdGVcIj5cbiAgICAgICAgICAgIDxuei1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAqbmdJZj1cIiFmLmRhdGUhLnJhbmdlXCJcbiAgICAgICAgICAgICAgbnpJbmxpbmVcbiAgICAgICAgICAgICAgW256TW9kZV09XCJmLmRhdGUhLm1vZGVcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImYubWVudXMhWzBdIS52YWx1ZVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm4uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW256U2hvd05vd109XCJmLmRhdGUhLnNob3dOb3dcIlxuICAgICAgICAgICAgICBbbnpTaG93VG9kYXldPVwiZi5kYXRlIS5zaG93VG9kYXlcIlxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZERhdGVdPVwiZi5kYXRlIS5kaXNhYmxlZERhdGVcIlxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZFRpbWVdPVwiZi5kYXRlIS5kaXNhYmxlZFRpbWVcIlxuICAgICAgICAgICAgPjwvbnotZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICA8bnotcmFuZ2UtcGlja2VyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZi5kYXRlIS5yYW5nZVwiXG4gICAgICAgICAgICAgIG56SW5saW5lXG4gICAgICAgICAgICAgIFtuek1vZGVdPVwiZi5kYXRlIS5tb2RlXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmLm1lbnVzIVswXSEudmFsdWVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJuLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuelNob3dOb3ddPVwiZi5kYXRlIS5zaG93Tm93XCJcbiAgICAgICAgICAgICAgW256U2hvd1RvZGF5XT1cImYuZGF0ZSEuc2hvd1RvZGF5XCJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWREYXRlXT1cImYuZGF0ZSEuZGlzYWJsZWREYXRlXCJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRUaW1lXT1cImYuZGF0ZSEuZGlzYWJsZWRUaW1lXCJcbiAgICAgICAgICAgID48L256LXJhbmdlLXBpY2tlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGltZSdcIiBjbGFzcz1cInAtc20gc3RfX2ZpbHRlci10aW1lXCI+IDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidjdXN0b20nXCIgY2xhc3M9XCJzdF9fZmlsdGVyLWN1c3RvbVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImYuY3VzdG9tIVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZiwgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dWwgKm5nU3dpdGNoRGVmYXVsdCBuei1tZW51PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYubXVsdGlwbGVcIj5cbiAgICAgICAgICAgICAgPGxpIG56LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGYubWVudXNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgbnotY2hlY2tib3ggWyhuZ01vZGVsKV09XCJmaWx0ZXIuY2hlY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrYm94Q2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci50ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmLm11bHRpcGxlXCI+XG4gICAgICAgICAgICAgIDxsaSBuei1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmLm1lbnVzXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIFtuZ01vZGVsXT1cImZpbHRlci5jaGVja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmFkaW9DaGFuZ2UoZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJmLnNob3dPUEFyZWFcIiBjbGFzcz1cImFudC10YWJsZS1maWx0ZXItZHJvcGRvd24tYnRuc1wiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiYW50LXRhYmxlLWZpbHRlci1kcm9wZG93bi1saW5rIGNvbmZpcm1cIiAoY2xpY2spPVwidmlzaWJsZSA9IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29uZmlybSgpXCI+e3sgZi5jb25maXJtVGV4dCB8fCBsb2NhbGUuZmlsdGVyQ29uZmlybSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGEgY2xhc3M9XCJhbnQtdGFibGUtZmlsdGVyLWRyb3Bkb3duLWxpbmsgY2xlYXJcIiAoY2xpY2spPVwidmlzaWJsZSA9IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwicmVzZXQoKVwiPnt7IGYuY2xlYXJUZXh0IHx8IGxvY2FsZS5maWx0ZXJSZXNldCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uei1kcm9wZG93bi1tZW51PlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5hbnQtdGFibGUtZmlsdGVyLXRyaWdnZXItY29udGFpbmVyXSc6IGB0cnVlYCxcbiAgICAnW2NsYXNzLnN0X19maWx0ZXJdJzogYHRydWVgLFxuICAgICdbY2xhc3MuYW50LXRhYmxlLWZpbHRlci10cmlnZ2VyLWNvbnRhaW5lci1vcGVuXSc6IGB2aXNpYmxlYFxuICB9LFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU1RGaWx0ZXJDb21wb25lbnQge1xuICB2aXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbDogX1NUQ29sdW1uO1xuICBASW5wdXQoKSBsb2NhbGU6IExvY2FsZURhdGEgPSB7fTtcbiAgQElucHV0KCkgZjogU1RDb2x1bW5GaWx0ZXI7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGFuZGxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBnZXQgaWNvbigpOiBTVEljb24ge1xuICAgIHJldHVybiB0aGlzLmYuaWNvbiBhcyBTVEljb247XG4gIH1cblxuICBzaG93KCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGNoZWNrYm94Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMubi5lbWl0KHRoaXMuZi5tZW51cz8uZmlsdGVyKHcgPT4gdy5jaGVja2VkKSk7XG4gIH1cblxuICByYWRpb0NoYW5nZShpdGVtOiBTVENvbHVtbkZpbHRlck1lbnUpOiB2b2lkIHtcbiAgICB0aGlzLmYubWVudXMhLmZvckVhY2goaSA9PiAoaS5jaGVja2VkID0gZmFsc2UpKTtcbiAgICBpdGVtLmNoZWNrZWQgPSAhaXRlbS5jaGVja2VkO1xuICAgIHRoaXMubi5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgY29uZmlybSgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZS5lbWl0KHRydWUpO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGUuZW1pdChmYWxzZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,232 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Host, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { filter } from 'rxjs/operators';
4
+ import { DrawerHelper, ModalHelper } from '@delon/theme';
5
+ import { deepMergeKey } from '@delon/util/other';
6
+ import { STComponent } from '.';
7
+ export class STTdComponent {
8
+ constructor(stComp, router, modalHelper, drawerHelper) {
9
+ this.stComp = stComp;
10
+ this.router = router;
11
+ this.modalHelper = modalHelper;
12
+ this.drawerHelper = drawerHelper;
13
+ this.n = new EventEmitter();
14
+ }
15
+ get routerState() {
16
+ const { pi, ps, total } = this.stComp;
17
+ return { pi, ps, total };
18
+ }
19
+ report(type) {
20
+ this.n.emit({ type, item: this.i, col: this.c });
21
+ }
22
+ _checkbox(value) {
23
+ this.i.checked = value;
24
+ this.report('checkbox');
25
+ }
26
+ _radio(checked) {
27
+ this.data.filter(w => !w.disabled).forEach(i => (i.checked = false));
28
+ this.i.checked = checked;
29
+ this.report('radio');
30
+ }
31
+ _link(e) {
32
+ this._stopPropagation(e);
33
+ const res = this.c.click(this.i, this.stComp);
34
+ if (typeof res === 'string') {
35
+ this.router.navigateByUrl(res, { state: this.routerState });
36
+ }
37
+ return false;
38
+ }
39
+ _stopPropagation(ev) {
40
+ ev.preventDefault();
41
+ ev.stopPropagation();
42
+ }
43
+ _btn(btn, ev) {
44
+ if (ev) {
45
+ ev.stopPropagation();
46
+ }
47
+ const record = this.i;
48
+ if (btn.type === 'modal' || btn.type === 'static') {
49
+ const { modal } = btn;
50
+ const obj = { [modal.paramsName]: record };
51
+ this.modalHelper[btn.type === 'modal' ? 'create' : 'createStatic'](modal.component, Object.assign(Object.assign({}, obj), (modal.params && modal.params(record))), deepMergeKey({}, true, this.stComp['cog'].modal, modal))
52
+ .pipe(filter(w => typeof w !== 'undefined'))
53
+ .subscribe((res) => this.btnCallback(record, btn, res));
54
+ return;
55
+ }
56
+ else if (btn.type === 'drawer') {
57
+ const { drawer } = btn;
58
+ const obj = { [drawer.paramsName]: record };
59
+ this.drawerHelper
60
+ .create(drawer.title, drawer.component, Object.assign(Object.assign({}, obj), (drawer.params && drawer.params(record))), deepMergeKey({}, true, this.stComp['cog'].drawer, drawer))
61
+ .pipe(filter(w => typeof w !== 'undefined'))
62
+ .subscribe(res => this.btnCallback(record, btn, res));
63
+ return;
64
+ }
65
+ else if (btn.type === 'link') {
66
+ const clickRes = this.btnCallback(record, btn);
67
+ if (typeof clickRes === 'string') {
68
+ this.router.navigateByUrl(clickRes, { state: this.routerState });
69
+ }
70
+ return;
71
+ }
72
+ this.btnCallback(record, btn);
73
+ }
74
+ btnCallback(record, btn, modal) {
75
+ if (!btn.click)
76
+ return;
77
+ if (typeof btn.click === 'string') {
78
+ switch (btn.click) {
79
+ case 'load':
80
+ this.stComp.load();
81
+ break;
82
+ case 'reload':
83
+ this.stComp.reload();
84
+ break;
85
+ }
86
+ }
87
+ else {
88
+ return btn.click(record, modal, this.stComp);
89
+ }
90
+ }
91
+ }
92
+ STTdComponent.decorators = [
93
+ { type: Component, args: [{
94
+ selector: 'st-td',
95
+ template: `
96
+ <ng-template #btnTpl let-i>
97
+ <ng-container *ngIf="!i.tooltip">
98
+ <ng-template [ngTemplateOutlet]="btnItemTpl" [ngTemplateOutletContext]="{ $implicit: i }"></ng-template>
99
+ </ng-container>
100
+ <span *ngIf="i.tooltip" nz-tooltip [nzTooltipTitle]="i.tooltip">
101
+ <ng-template [ngTemplateOutlet]="btnItemTpl" [ngTemplateOutletContext]="{ $implicit: i }"></ng-template>
102
+ </span>
103
+ </ng-template>
104
+ <ng-template #btnItemTpl let-i>
105
+ <a
106
+ *ngIf="i.pop"
107
+ nz-popconfirm
108
+ [nzPopconfirmTitle]="i.pop.title"
109
+ [nzIcon]="i.pop.icon"
110
+ [nzCondition]="i.pop.condition(i)"
111
+ [nzCancelText]="i.pop.cancelText"
112
+ [nzOkText]="i.pop.okText"
113
+ [nzOkType]="i.pop.okType"
114
+ (nzOnConfirm)="_btn(i)"
115
+ class="st__btn-text"
116
+ [ngClass]="i.className"
117
+ (click)="_stopPropagation($event)"
118
+ >
119
+ <ng-template [ngTemplateOutlet]="btnTextTpl" [ngTemplateOutletContext]="{ $implicit: i }"></ng-template>
120
+ </a>
121
+ <a *ngIf="!i.pop" (click)="_btn(i, $event)" class="st__btn-text" [ngClass]="i.className">
122
+ <ng-template [ngTemplateOutlet]="btnTextTpl" [ngTemplateOutletContext]="{ $implicit: i }"></ng-template>
123
+ </a>
124
+ </ng-template>
125
+ <ng-template #btnTextTpl let-i>
126
+ <ng-container *ngIf="i.icon">
127
+ <i
128
+ *ngIf="!i.icon.iconfont"
129
+ nz-icon
130
+ [nzType]="i.icon.type"
131
+ [nzTheme]="i.icon.theme"
132
+ [nzSpin]="i.icon.spin"
133
+ [nzTwotoneColor]="i.icon.twoToneColor"
134
+ ></i>
135
+ <i *ngIf="i.icon.iconfont" nz-icon [nzIconfont]="i.icon.iconfont"></i>
136
+ </ng-container>
137
+ <span [innerHTML]="i._text" [ngClass]="{ 'pl-xs': i.icon }"></span>
138
+ </ng-template>
139
+ <ng-template
140
+ #render
141
+ [ngTemplateOutlet]="c.__render!"
142
+ [ngTemplateOutletContext]="{ $implicit: i, index: index, column: c }"
143
+ ></ng-template>
144
+ <ng-container *ngIf="!c.__render; else render">
145
+ <ng-container [ngSwitch]="c.type">
146
+ <label
147
+ *ngSwitchCase="'checkbox'"
148
+ nz-checkbox
149
+ [nzDisabled]="i.disabled"
150
+ [ngModel]="i.checked"
151
+ (ngModelChange)="_checkbox($event)"
152
+ ></label>
153
+ <label
154
+ *ngSwitchCase="'radio'"
155
+ nz-radio
156
+ [nzDisabled]="i.disabled"
157
+ [ngModel]="i.checked"
158
+ (ngModelChange)="_radio($event)"
159
+ ></label>
160
+ <a
161
+ *ngSwitchCase="'link'"
162
+ (click)="_link($event)"
163
+ [innerHTML]="i._values[cIdx]._text"
164
+ [attr.title]="i._values[cIdx].text"
165
+ ></a>
166
+ <ng-container *ngIf="i._values[cIdx].text">
167
+ <nz-tag *ngSwitchCase="'tag'" [nzColor]="i._values[cIdx].color">
168
+ <span [innerHTML]="i._values[cIdx]._text"></span>
169
+ </nz-tag>
170
+ <nz-badge
171
+ *ngSwitchCase="'badge'"
172
+ [nzStatus]="i._values[cIdx].color"
173
+ [nzText]="i._values[cIdx].text"
174
+ ></nz-badge>
175
+ </ng-container>
176
+ <ng-template *ngSwitchCase="'widget'" st-widget-host [record]="i" [column]="c"></ng-template
177
+ ><ng-container *ngSwitchDefault>
178
+ <span
179
+ *ngIf="c.safeType !== 'text'"
180
+ [innerHTML]="i._values[cIdx]._text"
181
+ [attr.title]="c._isTruncate ? i._values[cIdx].text : null"
182
+ ></span>
183
+ <span
184
+ *ngIf="c.safeType === 'text'"
185
+ [innerText]="i._values[cIdx]._text"
186
+ [attr.title]="c._isTruncate ? i._values[cIdx].text : null"
187
+ ></span>
188
+ </ng-container>
189
+ </ng-container>
190
+ <ng-container *ngFor="let btn of i._values[cIdx].buttons; let last = last">
191
+ <a *ngIf="btn.children!.length > 0" nz-dropdown [nzDropdownMenu]="btnMenu" nzOverlayClassName="st__btn-sub">
192
+ <span [innerHTML]="btn._text"></span>
193
+ <i nz-icon nzType="down"></i>
194
+ </a>
195
+ <nz-dropdown-menu #btnMenu="nzDropdownMenu">
196
+ <ul nz-menu>
197
+ <ng-container *ngFor="let subBtn of btn.children!">
198
+ <li *ngIf="subBtn.type !== 'divider'" nz-menu-item [class.st__btn-disabled]="subBtn._disabled">
199
+ <ng-template [ngTemplateOutlet]="btnTpl" [ngTemplateOutletContext]="{ $implicit: subBtn }">
200
+ </ng-template>
201
+ </li>
202
+ <li *ngIf="subBtn.type === 'divider'" nz-menu-divider></li>
203
+ </ng-container>
204
+ </ul>
205
+ </nz-dropdown-menu>
206
+ <span *ngIf="btn.children!.length === 0" [class.st__btn-disabled]="btn._disabled">
207
+ <ng-template [ngTemplateOutlet]="btnTpl" [ngTemplateOutletContext]="{ $implicit: btn }"> </ng-template>
208
+ </span>
209
+ <nz-divider *ngIf="!last" nzType="vertical"></nz-divider>
210
+ </ng-container>
211
+ </ng-container>
212
+ `,
213
+ preserveWhitespaces: false,
214
+ changeDetection: ChangeDetectionStrategy.OnPush,
215
+ encapsulation: ViewEncapsulation.None
216
+ },] }
217
+ ];
218
+ STTdComponent.ctorParameters = () => [
219
+ { type: STComponent, decorators: [{ type: Host }] },
220
+ { type: Router },
221
+ { type: ModalHelper },
222
+ { type: DrawerHelper }
223
+ ];
224
+ STTdComponent.propDecorators = {
225
+ c: [{ type: Input }],
226
+ cIdx: [{ type: Input }],
227
+ data: [{ type: Input }],
228
+ i: [{ type: Input }],
229
+ index: [{ type: Input }],
230
+ n: [{ type: Output }]
231
+ };
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYWJjL3N0L3N0LXRkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFnSWhDLE1BQU0sT0FBTyxhQUFhO0lBYXhCLFlBQ2tCLE1BQW1CLEVBQzNCLE1BQWMsRUFDZCxXQUF3QixFQUN4QixZQUEwQjtRQUhsQixXQUFNLEdBQU4sTUFBTSxDQUFhO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVhqQixNQUFDLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztJQVlwRCxDQUFDO0lBVkosSUFBWSxXQUFXO1FBQ3JCLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQVNPLE1BQU0sQ0FBQyxJQUFxQjtRQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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QUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2pCLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNuQixNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNyQixNQUFNO2FBQ1Q7U0FDRjthQUFNO1lBQ0wsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7O1lBbE9GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSFQ7Z0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztnQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUEvSFEsV0FBVyx1QkE4SWYsSUFBSTtZQXJKQSxNQUFNO1lBR1EsV0FBVztZQUF6QixZQUFZOzs7Z0JBcUlsQixLQUFLO21CQUNMLEtBQUs7bUJBQ0wsS0FBSztnQkFDTCxLQUFLO29CQUNMLEtBQUs7Z0JBQ0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJIZWxwZXIsIE1vZGFsSGVscGVyIH0gZnJvbSAnQGRlbG9uL3RoZW1lJztcbmltcG9ydCB7IGRlZXBNZXJnZUtleSB9IGZyb20gJ0BkZWxvbi91dGlsL290aGVyJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IFNUQ29tcG9uZW50IH0gZnJvbSAnLic7XG5pbXBvcnQgeyBTVENvbHVtbkJ1dHRvbiwgU1REYXRhIH0gZnJvbSAnLi9zdC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IF9TVENvbHVtbiwgX1NUVGROb3RpZnksIF9TVFRkTm90aWZ5VHlwZSB9IGZyb20gJy4vc3QudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdC10ZCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICNidG5UcGwgbGV0LWk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWkudG9vbHRpcFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnRuSXRlbVRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpLnRvb2x0aXBcIiBuei10b29sdGlwIFtuelRvb2x0aXBUaXRsZV09XCJpLnRvb2x0aXBcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bkl0ZW1UcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGkgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2J0bkl0ZW1UcGwgbGV0LWk+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cImkucG9wXCJcbiAgICAgICAgbnotcG9wY29uZmlybVxuICAgICAgICBbbnpQb3Bjb25maXJtVGl0bGVdPVwiaS5wb3AudGl0bGVcIlxuICAgICAgICBbbnpJY29uXT1cImkucG9wLmljb25cIlxuICAgICAgICBbbnpDb25kaXRpb25dPVwiaS5wb3AuY29uZGl0aW9uKGkpXCJcbiAgICAgICAgW256Q2FuY2VsVGV4dF09XCJpLnBvcC5jYW5jZWxUZXh0XCJcbiAgICAgICAgW256T2tUZXh0XT1cImkucG9wLm9rVGV4dFwiXG4gICAgICAgIFtuek9rVHlwZV09XCJpLnBvcC5va1R5cGVcIlxuICAgICAgICAobnpPbkNvbmZpcm0pPVwiX2J0bihpKVwiXG4gICAgICAgIGNsYXNzPVwic3RfX2J0bi10ZXh0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiaS5jbGFzc05hbWVcIlxuICAgICAgICAoY2xpY2spPVwiX3N0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0blRleHRUcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGkgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2E+XG4gICAgICA8YSAqbmdJZj1cIiFpLnBvcFwiIChjbGljayk9XCJfYnRuKGksICRldmVudClcIiBjbGFzcz1cInN0X19idG4tdGV4dFwiIFtuZ0NsYXNzXT1cImkuY2xhc3NOYW1lXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJidG5UZXh0VHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNidG5UZXh0VHBsIGxldC1pPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkuaWNvblwiPlxuICAgICAgICA8aVxuICAgICAgICAgICpuZ0lmPVwiIWkuaWNvbi5pY29uZm9udFwiXG4gICAgICAgICAgbnotaWNvblxuICAgICAgICAgIFtuelR5cGVdPVwiaS5pY29uLnR5cGVcIlxuICAgICAgICAgIFtuelRoZW1lXT1cImkuaWNvbi50aGVtZVwiXG4gICAgICAgICAgW256U3Bpbl09XCJpLmljb24uc3BpblwiXG4gICAgICAgICAgW256VHdvdG9uZUNvbG9yXT1cImkuaWNvbi50d29Ub25lQ29sb3JcIlxuICAgICAgICA+PC9pPlxuICAgICAgICA8aSAqbmdJZj1cImkuaWNvbi5pY29uZm9udFwiIG56LWljb24gW256SWNvbmZvbnRdPVwiaS5pY29uLmljb25mb250XCI+PC9pPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImkuX3RleHRcIiBbbmdDbGFzc109XCJ7ICdwbC14cyc6IGkuaWNvbiB9XCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAjcmVuZGVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjLl9fcmVuZGVyIVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGksIGluZGV4OiBpbmRleCwgY29sdW1uOiBjIH1cIlxuICAgID48L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYy5fX3JlbmRlcjsgZWxzZSByZW5kZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImMudHlwZVwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiXG4gICAgICAgICAgbnotY2hlY2tib3hcbiAgICAgICAgICBbbnpEaXNhYmxlZF09XCJpLmRpc2FibGVkXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJpLmNoZWNrZWRcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl9jaGVja2JveCgkZXZlbnQpXCJcbiAgICAgICAgPjwvbGFiZWw+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCJcbiAgICAgICAgICBuei1yYWRpb1xuICAgICAgICAgIFtuekRpc2FibGVkXT1cImkuZGlzYWJsZWRcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cImkuY2hlY2tlZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3JhZGlvKCRldmVudClcIlxuICAgICAgICA+PC9sYWJlbD5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCJcbiAgICAgICAgICAoY2xpY2spPVwiX2xpbmsoJGV2ZW50KVwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJpLl92YWx1ZXNbY0lkeF0uX3RleHRcIlxuICAgICAgICAgIFthdHRyLnRpdGxlXT1cImkuX3ZhbHVlc1tjSWR4XS50ZXh0XCJcbiAgICAgICAgPjwvYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkuX3ZhbHVlc1tjSWR4XS50ZXh0XCI+XG4gICAgICAgICAgPG56LXRhZyAqbmdTd2l0Y2hDYXNlPVwiJ3RhZydcIiBbbnpDb2xvcl09XCJpLl92YWx1ZXNbY0lkeF0uY29sb3JcIj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiaS5fdmFsdWVzW2NJZHhdLl90ZXh0XCI+PC9zcGFuPlxuICAgICAgICAgIDwvbnotdGFnPlxuICAgICAgICAgIDxuei1iYWRnZVxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidiYWRnZSdcIlxuICAgICAgICAgICAgW256U3RhdHVzXT1cImkuX3ZhbHVlc1tjSWR4XS5jb2xvclwiXG4gICAgICAgICAgICBbbnpUZXh0XT1cImkuX3ZhbHVlc1tjSWR4XS50ZXh0XCJcbiAgICAgICAgICA+PC9uei1iYWRnZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdTd2l0Y2hDYXNlPVwiJ3dpZGdldCdcIiBzdC13aWRnZXQtaG9zdCBbcmVjb3JkXT1cImlcIiBbY29sdW1uXT1cImNcIj48L25nLXRlbXBsYXRlXG4gICAgICAgID48bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiYy5zYWZlVHlwZSAhPT0gJ3RleHQnXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaS5fdmFsdWVzW2NJZHhdLl90ZXh0XCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImMuX2lzVHJ1bmNhdGUgPyBpLl92YWx1ZXNbY0lkeF0udGV4dCA6IG51bGxcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiYy5zYWZlVHlwZSA9PT0gJ3RleHQnXCJcbiAgICAgICAgICAgIFtpbm5lclRleHRdPVwiaS5fdmFsdWVzW2NJZHhdLl90ZXh0XCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImMuX2lzVHJ1bmNhdGUgPyBpLl92YWx1ZXNbY0lkeF0udGV4dCA6IG51bGxcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgaS5fdmFsdWVzW2NJZHhdLmJ1dHRvbnM7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICA8YSAqbmdJZj1cImJ0bi5jaGlsZHJlbiEubGVuZ3RoID4gMFwiIG56LWRyb3Bkb3duIFtuekRyb3Bkb3duTWVudV09XCJidG5NZW51XCIgbnpPdmVybGF5Q2xhc3NOYW1lPVwic3RfX2J0bi1zdWJcIj5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImJ0bi5fdGV4dFwiPjwvc3Bhbj5cbiAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImRvd25cIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPG56LWRyb3Bkb3duLW1lbnUgI2J0bk1lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxuICAgICAgICAgIDx1bCBuei1tZW51PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViQnRuIG9mIGJ0bi5jaGlsZHJlbiFcIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic3ViQnRuLnR5cGUgIT09ICdkaXZpZGVyJ1wiIG56LW1lbnUtaXRlbSBbY2xhc3Muc3RfX2J0bi1kaXNhYmxlZF09XCJzdWJCdG4uX2Rpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0blRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogc3ViQnRuIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJzdWJCdG4udHlwZSA9PT0gJ2RpdmlkZXInXCIgbnotbWVudS1kaXZpZGVyPjwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYnRuLmNoaWxkcmVuIS5sZW5ndGggPT09IDBcIiBbY2xhc3Muc3RfX2J0bi1kaXNhYmxlZF09XCJidG4uX2Rpc2FibGVkXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0blRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYnRuIH1cIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bnotZGl2aWRlciAqbmdJZj1cIiFsYXN0XCIgbnpUeXBlPVwidmVydGljYWxcIj48L256LWRpdmlkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFNUVGRDb21wb25lbnQge1xuICBASW5wdXQoKSBjOiBfU1RDb2x1bW47XG4gIEBJbnB1dCgpIGNJZHg6IG51bWJlcjtcbiAgQElucHV0KCkgZGF0YTogU1REYXRhW107XG4gIEBJbnB1dCgpIGk6IFNURGF0YTtcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG4gPSBuZXcgRXZlbnRFbWl0dGVyPF9TVFRkTm90aWZ5PigpO1xuXG4gIHByaXZhdGUgZ2V0IHJvdXRlclN0YXRlKCk6IHsgcGk6IG51bWJlcjsgcHM6IG51bWJlcjsgdG90YWw6IG51bWJlciB9IHtcbiAgICBjb25zdCB7IHBpLCBwcywgdG90YWwgfSA9IHRoaXMuc3RDb21wO1xuICAgIHJldHVybiB7IHBpLCBwcywgdG90YWwgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBIb3N0KCkgcHJpdmF0ZSBzdENvbXA6IFNUQ29tcG9uZW50LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBtb2RhbEhlbHBlcjogTW9kYWxIZWxwZXIsXG4gICAgcHJpdmF0ZSBkcmF3ZXJIZWxwZXI6IERyYXdlckhlbHBlclxuICApIHt9XG5cbiAgcHJpdmF0ZSByZXBvcnQodHlwZTogX1NUVGROb3RpZnlUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5uLmVtaXQoeyB0eXBlLCBpdGVtOiB0aGlzLmksIGNvbDogdGhpcy5jIH0pO1xuICB9XG5cbiAgX2NoZWNrYm94KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pLmNoZWNrZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnJlcG9ydCgnY2hlY2tib3gnKTtcbiAgfVxuXG4gIF9yYWRpbyhjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmZpbHRlcih3ID0+ICF3LmRpc2FibGVkKS5mb3JFYWNoKGkgPT4gKGkuY2hlY2tlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5pLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgIHRoaXMucmVwb3J0KCdyYWRpbycpO1xuICB9XG5cbiAgX2xpbmsoZTogRXZlbnQpOiBib29sZWFuIHtcbiAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb24oZSk7XG4gICAgY29uc3QgcmVzID0gdGhpcy5jLmNsaWNrISh0aGlzLmksIHRoaXMuc3RDb21wKTtcbiAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocmVzLCB7IHN0YXRlOiB0aGlzLnJvdXRlclN0YXRlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfc3RvcFByb3BhZ2F0aW9uKGV2OiBFdmVudCk6IHZvaWQge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBfYnRuKGJ0bjogU1RDb2x1bW5CdXR0b24sIGV2PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXYpIHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLmk7XG4gICAgaWYgKGJ0bi50eXBlID09PSAnbW9kYWwnIHx8IGJ0bi50eXBlID09PSAnc3RhdGljJykge1xuICAgICAgY29uc3QgeyBtb2RhbCB9ID0gYnRuO1xuICAgICAgY29uc3Qgb2JqID0geyBbbW9kYWwhLnBhcmFtc05hbWUhXTogcmVjb3JkIH07XG4gICAgICAodGhpcy5tb2RhbEhlbHBlcltidG4udHlwZSA9PT0gJ21vZGFsJyA/ICdjcmVhdGUnIDogJ2NyZWF0ZVN0YXRpYyddIGFzIE56U2FmZUFueSkoXG4gICAgICAgIG1vZGFsIS5jb21wb25lbnQsXG4gICAgICAgIHsgLi4ub2JqLCAuLi4obW9kYWwhLnBhcmFtcyAmJiBtb2RhbCEucGFyYW1zIShyZWNvcmQpKSB9LFxuICAgICAgICBkZWVwTWVyZ2VLZXkoe30sIHRydWUsIHRoaXMuc3RDb21wWydjb2cnXS5tb2RhbCwgbW9kYWwpXG4gICAgICApXG4gICAgICAgIC5waXBlKGZpbHRlcih3ID0+IHR5cGVvZiB3ICE9PSAndW5kZWZpbmVkJykpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogTnpTYWZlQW55KSA9PiB0aGlzLmJ0bkNhbGxiYWNrKHJlY29yZCwgYnRuLCByZXMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGJ0bi50eXBlID09PSAnZHJhd2VyJykge1xuICAgICAgY29uc3QgeyBkcmF3ZXIgfSA9IGJ0bjtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW2RyYXdlciEucGFyYW1zTmFtZSFdOiByZWNvcmQgfTtcbiAgICAgIHRoaXMuZHJhd2VySGVscGVyXG4gICAgICAgIC5jcmVhdGUoXG4gICAgICAgICAgZHJhd2VyIS50aXRsZSEsXG4gICAgICAgICAgZHJhd2VyIS5jb21wb25lbnQsXG4gICAgICAgICAgeyAuLi5vYmosIC4uLihkcmF3ZXIhLnBhcmFtcyAmJiBkcmF3ZXIhLnBhcmFtcyEocmVjb3JkKSkgfSxcbiAgICAgICAgICBkZWVwTWVyZ2VLZXkoe30sIHRydWUsIHRoaXMuc3RDb21wWydjb2cnXS5kcmF3ZXIsIGRyYXdlcilcbiAgICAgICAgKVxuICAgICAgICAucGlwZShmaWx0ZXIodyA9PiB0eXBlb2YgdyAhPT0gJ3VuZGVmaW5lZCcpKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmJ0bkNhbGxiYWNrKHJlY29yZCwgYnRuLCByZXMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGJ0bi50eXBlID09PSAnbGluaycpIHtcbiAgICAgIGNvbnN0IGNsaWNrUmVzID0gdGhpcy5idG5DYWxsYmFjayhyZWNvcmQsIGJ0bik7XG4gICAgICBpZiAodHlwZW9mIGNsaWNrUmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGNsaWNrUmVzLCB7IHN0YXRlOiB0aGlzLnJvdXRlclN0YXRlIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmJ0bkNhbGxiYWNrKHJlY29yZCwgYnRuKTtcbiAgfVxuXG4gIHByaXZhdGUgYnRuQ2FsbGJhY2socmVjb3JkOiBTVERhdGEsIGJ0bjogU1RDb2x1bW5CdXR0b24sIG1vZGFsPzogTnpTYWZlQW55KTogTnpTYWZlQW55IHtcbiAgICBpZiAoIWJ0bi5jbGljaykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgYnRuLmNsaWNrID09PSAnc3RyaW5nJykge1xuICAgICAgc3dpdGNoIChidG4uY2xpY2spIHtcbiAgICAgICAgY2FzZSAnbG9hZCc6XG4gICAgICAgICAgdGhpcy5zdENvbXAubG9hZCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWxvYWQnOlxuICAgICAgICAgIHRoaXMuc3RDb21wLnJlbG9hZCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnRuLmNsaWNrKHJlY29yZCwgbW9kYWwsIHRoaXMuc3RDb21wKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==