@delon/abc 12.3.0 → 12.4.0
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.
- package/bundles/abc.umd.js +1 -1
- package/bundles/autoFocus.umd.js +1 -1
- package/bundles/avatarList.umd.js +1 -1
- package/bundles/count-down.umd.js +1 -1
- package/bundles/datePicker.umd.js +1 -1
- package/bundles/downFile.umd.js +1 -1
- package/bundles/edit.umd.js +1 -1
- package/bundles/ellipsis.umd.js +1 -1
- package/bundles/errorCollect.umd.js +1 -1
- package/bundles/exception.umd.js +11 -8
- package/bundles/exception.umd.js.map +1 -1
- package/bundles/footerToolbar.umd.js +1 -1
- package/bundles/fullContent.umd.js +1 -1
- package/bundles/globalFooter.umd.js +1 -1
- package/bundles/grid.umd.js +1 -1
- package/bundles/image.umd.js +1 -1
- package/bundles/let.umd.js +1 -1
- package/bundles/loading.umd.js +1 -1
- package/bundles/lodop.umd.js +1 -1
- package/bundles/lodop.umd.js.map +1 -1
- package/bundles/media.umd.js +1 -1
- package/bundles/noticeIcon.umd.js +1 -1
- package/bundles/onboarding.umd.js +1 -1
- package/bundles/pageHeader.umd.js +1 -1
- package/bundles/pdf.umd.js +1 -1
- package/bundles/qr.umd.js +1 -1
- package/bundles/quickMenu.umd.js +1 -1
- package/bundles/result.umd.js +1 -1
- package/bundles/reuseTab.umd.js +9 -18
- package/bundles/reuseTab.umd.js.map +1 -1
- package/bundles/table.umd.js +236 -139
- package/bundles/table.umd.js.map +1 -1
- package/bundles/tagSelect.umd.js +1 -1
- package/bundles/view.umd.js +1 -1
- package/bundles/xlsx.umd.js +1 -1
- package/bundles/xlsx.umd.js.map +1 -1
- package/bundles/zip.umd.js +1 -1
- package/bundles/zip.umd.js.map +1 -1
- package/esm2015/exception/exception.component.js +7 -4
- package/esm2015/exception/exception.module.js +3 -2
- package/esm2015/lodop/lodop.service.js +1 -1
- package/esm2015/reuse-tab/reuse-tab-context-menu.component.js +2 -2
- package/esm2015/reuse-tab/reuse-tab-context.service.js +4 -13
- package/esm2015/reuse-tab/reuse-tab.component.js +6 -6
- package/esm2015/st/index.js +2 -0
- package/esm2015/st/st-column-source.js +25 -7
- package/esm2015/st/st-data-source.js +4 -4
- package/esm2015/st/st-filter.component.js +149 -0
- package/esm2015/st/st-td.component.js +232 -0
- package/esm2015/st/st.component.js +28 -118
- package/esm2015/st/st.config.js +1 -2
- package/esm2015/st/st.interfaces.js +1 -1
- package/esm2015/st/st.module.js +9 -3
- package/esm2015/st/st.types.js +1 -1
- package/esm2015/st/table.js +3 -1
- package/esm2015/xlsx/xlsx.service.js +1 -1
- package/esm2015/zip/zip.service.js +1 -1
- package/exception/exception.component.d.ts +3 -2
- package/exception/exception.metadata.json +1 -1
- package/fesm2015/exception.js +8 -4
- package/fesm2015/exception.js.map +1 -1
- package/fesm2015/lodop.js.map +1 -1
- package/fesm2015/reuseTab.js +9 -18
- package/fesm2015/reuseTab.js.map +1 -1
- package/fesm2015/table.js +436 -130
- package/fesm2015/table.js.map +1 -1
- package/fesm2015/xlsx.js.map +1 -1
- package/fesm2015/zip.js.map +1 -1
- package/package.json +4 -4
- package/reuse-tab/reuse-tab.component.d.ts +1 -1
- package/reuse-tab/reuseTab.metadata.json +1 -1
- package/st/index.d.ts +1 -0
- package/st/st-filter.component.d.ts +18 -0
- package/st/st-td.component.d.ts +27 -0
- package/st/st.component.d.ts +8 -23
- package/st/st.interfaces.d.ts +57 -3
- package/st/st.types.d.ts +6 -0
- package/st/style/index.less +8 -0
- package/st/table.d.ts +2 -0
- package/st/table.metadata.json +1 -1
- package/sv/style/index.less +1 -0
|
@@ -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==
|