tnx-shared 5.3.276 → 5.3.277
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/tnx-shared.umd.js +43 -32
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/esm2015/pipes/tn-date.pipe.js +2 -3
- package/esm2015/services/crud.service.js +13 -1
- package/fesm2015/tnx-shared.js +13 -2
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/pipes/tn-date.pipe.d.ts.map +1 -1
- package/services/crud.service.d.ts +1 -0
- package/services/crud.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -17,8 +17,7 @@ export class TnDatePipe {
|
|
|
17
17
|
return this._crudService.renderDate(value, format);
|
|
18
18
|
}
|
|
19
19
|
else if (dataType == 'timespan') {
|
|
20
|
-
|
|
21
|
-
return `${arrTime[0]}:${arrTime[1]}`;
|
|
20
|
+
return this._crudService.renderTimespan(value);
|
|
22
21
|
}
|
|
23
22
|
return this._crudService.renderDateTime(value, format);
|
|
24
23
|
}
|
|
@@ -35,4 +34,4 @@ TnDatePipe.decorators = [
|
|
|
35
34
|
TnDatePipe.ctorParameters = () => [
|
|
36
35
|
{ type: Injector }
|
|
37
36
|
];
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG4tZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3BpcGVzL3RuLWRhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFRdkQsTUFBTSxPQUFPLFVBQVU7SUFFbkIsWUFDYyxTQUFtQjtRQUFuQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBRTdCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxDQUFDLEtBQUs7UUFDVCxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7WUFDWixPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7U0FDdEI7UUFDRCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQVUsRUFBRSxRQUFnQixFQUFFLFNBQStCLFFBQVEsRUFBRSxJQUFVO1FBQ3ZGLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN0RDthQUNJLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7OztZQTNCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7WUFDQSxJQUFJLFNBQUM7Z0JBQ0YsSUFBSSxFQUFFLFFBQVE7YUFDakI7OztZQVJvQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBQaXBlKHtcbiAgICBuYW1lOiAndG5EYXRlJ1xufSlcbmV4cG9ydCBjbGFzcyBUbkRhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSBfaW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICB9XG4gICAgYWRkWmVybyh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPCAxMCkge1xuICAgICAgICAgICAgcmV0dXJuIGAwJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgZm9ybWF0OiAnbm9ybWFsJyB8ICdmcm9tTm93JyA9ICdub3JtYWwnLCBhcmdzPzogYW55KTogYW55IHtcbiAgICAgICAgaWYgKGRhdGFUeXBlID09ICdkYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NydWRTZXJ2aWNlLnJlbmRlckRhdGUodmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YVR5cGUgPT0gJ3RpbWVzcGFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NydWRTZXJ2aWNlLnJlbmRlclRpbWVzcGFuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY3J1ZFNlcnZpY2UucmVuZGVyRGF0ZVRpbWUodmFsdWUsIGZvcm1hdCk7XG4gICAgfVxufVxuIl19
|
|
@@ -142,6 +142,18 @@ export class CrudService {
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
|
+
renderTimespan(datetime) {
|
|
146
|
+
if (!datetime) {
|
|
147
|
+
return '';
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const arrTime = datetime.split(':');
|
|
151
|
+
return `${arrTime[0]}:${arrTime[1]}`;
|
|
152
|
+
}
|
|
153
|
+
catch (_a) {
|
|
154
|
+
return '';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
145
157
|
renderDate(datetime, format = 'normal') {
|
|
146
158
|
if (!datetime) {
|
|
147
159
|
return '';
|
|
@@ -998,4 +1010,4 @@ CrudService.ctorParameters = () => [
|
|
|
998
1010
|
{ type: NotifierService },
|
|
999
1011
|
{ type: ModuleConfigService }
|
|
1000
1012
|
];
|
|
1001
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUdILGVBQWUsRUFDZixRQUFRLEVBR1gsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQU1yRCxNQUFNLE9BQU8sV0FBVztJQUdwQixZQUNZLFNBQW1CLEVBQ25CLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzdCLFFBQWtCLEVBQ2xCLGdCQUFpQyxFQUNqQyxvQkFBeUM7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QUMzQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyx1QkFBK0I7UUFDckQsTUFBTSxJQUFJLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7Ozs7WUEzakNKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBM0JvQixRQUFRO1lBbUJwQixhQUFhO1lBRGIsYUFBYTtZQW5CYixRQUFRO1lBdUJSLGVBQWU7WUFEZixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIENvbHVtblNjaGVtYUJhc2UsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIERyb3Bkb3duT3B0aW9ucyxcbiAgICBPcGVyYXRvcixcbiAgICBSZWZGaWVsZCxcbiAgICBUcmVlRGF0YU9wdGlvblxufSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDcnVkU2VydmljZSB7XG4gICAgdXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQudXNlSWdub3JlQWxsQmFzZUZpbHRlciB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyRGF0ZVRpbWUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnZnJvbU5vdycpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXkgSEg6bW0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcbiAgICAgICAgbGV0IG1pbGlzZWNvbmQgPSBub3cgLSBkYXRldGltZTtcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPiAwKSB7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCB0csaw4bubYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gdHLGsOG7m2MnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdIw7RtIHF1YSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gODY0MDAwMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmdldERhdGUoKSA9PSBub3cuZ2V0RGF0ZSgpIC0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnSMO0bSBxdWEgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGQvTU0veXl5eSBISDptbSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaWxpc2Vjb25kID0gLW1pbGlzZWNvbmQ7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCBu4buvYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdOZ8OgeSBtYWkgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDg2NDAwMDAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSAtIDFcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05nw6B5IG1haSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAyXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAzXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSBu4buvYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZC9NTS95eXl5IEhIOm1tJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlckRhdGUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnbm9ybWFsJykge1xuICAgICAgICBpZiAoIWRhdGV0aW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRhdGV0aW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShkYXRldGltZSArICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3c6IGFueSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZGF5cyA9IGRhdGV0aW1lLmdldERhdGUoKSAtIG5vdy5nZXREYXRlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGRheXMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSMO0bSBuYXknO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdOZ8OgeSBtYWknO1xuICAgICAgICAgICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSMO0bSBxdWEnO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xuICAgICAgICAgICAgICAgIGNhc2UgLTI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IHRyxrDhu5tjJztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnQmEgbmfDoHkgbuG7r2EnO1xuICAgICAgICAgICAgICAgIGNhc2UgLTM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnQmEgbmfDoHkgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXknKTtcbiAgICB9XG5cbiAgICBoaWRlQ29udHJvbEFuZExhYmVsKCkge1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZyk6IEZpbHRlciB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBidWlsZEZpbHRlckRhdGUoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogRGF0ZSk6IEZpbHRlciB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZTogdGhpcy5nZXREYXRlKHZhbHVlKSB9KTtcbiAgICB9XG5cbiAgICBnZXREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX0vJHt2YWx1ZS5nZXRNb250aCgpICsgMX0vJHt2YWx1ZS5nZXRGdWxsWWVhcigpfWA7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXJEYXRlSW5MaXN0UmFuZ2UoZmllbGQ6IHN0cmluZywgYXJyTWluTWF4OiBEYXRlW11bXSwgb3BlcmF0b3JMZWZ0OiBzdHJpbmcgPSAnZ3RlJywgb3BlcmF0b3JSaWdodDogc3RyaW5nID0gJ2x0ZScpOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgZmlsdGVyczogW11cbiAgICAgICAgfSk7XG4gICAgICAgIGFyck1pbk1heC5mb3JFYWNoKG1pbk1heCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdHJTdGFydCA9IHRoaXMuZ2V0U3RyaW5nRGF0ZVZhbHVlKG1pbk1heFswXSk7XG4gICAgICAgICAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMV0pO1xuICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlcihmaWVsZCwgT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCwgc3RyU3RhcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlcihmaWVsZCwgT3BlcmF0b3IubG93ZXJUaGFuRXF1YWwsIHN0ckVuZClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0U3RyaW5nRGF0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXRVVENEYXRlKCl9LyR7dmFsdWUuZ2V0VVRDTW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0VVRDRnVsbFllYXIoKX0gJHt2YWx1ZS5nZXRVVENIb3VycygpfToke3ZhbHVlLmdldFVUQ01pbnV0ZXMoKX06JHt2YWx1ZS5nZXRVVENTZWNvbmRzKCl9YDtcbiAgICB9XG5cbiAgICBidWlsZE11bHRpRmlsdGVyQ29udGFpbnMoZmllbGRzOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyk6IEZpbHRlciB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXJDb250YWluTXVsdGlWYWx1ZXMoZmllbGQ6IHN0cmluZywgdmFsdWVzOiBzdHJpbmdbXSk6IEZpbHRlciB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYTogRHJvcGRvd25Db250cm9sU2NoZW1hIHwgQ29sdW1uU2NoZW1hQmFzZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRHJvcGRvd25PcHRpb25zKHtcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXG4gICAgICAgICAgICBzb3J0czogc2NoZW1hLnNvcnRzLFxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXG4gICAgICAgICAgICBwbHVzVXJsOiBzY2hlbWEucGx1c1VybCxcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCxcbiAgICAgICAgICAgIGlzU2VydmVyTG9hZDogc2NoZW1hLmlzU2VydmVyTG9hZCxcbiAgICAgICAgICAgIHJlZkZpZWxkczogc2NoZW1hLnJlZkZpZWxkcyxcbiAgICAgICAgICAgIGlzVHJlZUJhc2VNb2RlbDogc2NoZW1hLmlzVHJlZUJhc2VNb2RlbCxcbiAgICAgICAgICAgIC8vIFRPRE86IEPhuqduIMSRaeG7gW4gdsOgbyBraMO0bmcgY8OzIGzhu5dpIGtow7RuZyBjaOG6oXkgxJHGsOG7o2NcbiAgICAgICAgICAgIHNlbGVjdENoaWxkSXRlbTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYWdlU2l6ZSA9IHNjaGVtYS5wYWdlU2l6ZTtcbiAgICAgICAgICAgIC8vIHJlc3VsdC5wYWdlU2l6ZSA9IDI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZWZEYXRhSW5EYXRhc291cmNlKFxuICAgICAgICBkYXRhU291cmNlOiBhbnlbXSxcbiAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bjogRnVuY3Rpb24gPSBudWxsLFxuICAgICkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgfHwgIWRhdGFTb3VyY2UubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGlmICghc2NoZW1hcyB8fCAhc2NoZW1hcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoZW1hSGFzT3JkZXIgPSBzY2hlbWFzLmZpbHRlcih4ID0+IE51bWJlci5pc0ludGVnZXIoeC5vcmRlcikpO1xuICAgICAgICBpZiAoc2NoZW1hSGFzT3JkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFJlZkRhdGFJbkRhdGFzb3VyY2VXaXRoT3JkZXIoZGF0YVNvdXJjZSwgc2NoZW1hSGFzT3JkZXIsIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24pO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVtYXMgPSBzY2hlbWFzLmZpbHRlcih4ID0+ICFOdW1iZXIuaXNJbnRlZ2VyKHgub3JkZXIpKTtcbiAgICAgICAgY29uc3QgZGljRGF0YToge1xuICAgICAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgICAgIHByb21pc2VzOiBQcm9taXNlPGFueT5bXTtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIC8vIHByZXByb2Nlc3Mgc2NoZW1hLCB0aGVtIHNjaGVtYSB2YW8gYXJyIHZvaSBpbmRleCA9IHNjaGVtYS5vcmRlclxuICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlID8gdGhpcy5wcm9jZXNzU2NoZW1hV2l0aEJhc2VTZXJ2aWNlKHNjaGVtYSwgZGF0YVNvdXJjZSkgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gcmVzb2x2ZSh0cnVlKSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZGljRGF0YVtzY2hlbWEub3JkZXJdO1xuICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRpY0RhdGFbc2NoZW1hLm9yZGVyXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXM6IFtwcm9taXNlXSxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hczogW3NjaGVtYV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5zY2hlbWFzLnB1c2goc2NoZW1hKTtcbiAgICAgICAgICAgIGRhdGEucHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCBkYXRhIHZhIG1lcmdlIHZvaSBkYXRhU291cmNlXG4gICAgICAgIGNvbnN0IGxzdERhdGEgPSBPYmplY3QudmFsdWVzKGRpY0RhdGEpO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbHN0RGF0YSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IGRhdGEucHJvbWlzZXM7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhcyA9IGRhdGEuc2NoZW1hcztcblxuICAgICAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgICAgc2NoZW1hRGF0YXMuZm9yRWFjaCgoc2NoZW1hLCByZXNJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYURhdGEgPSBhcnJSZXNbcmVzSW5kZXhdID09PSB0cnVlID8gc2NoZW1hLmRhdGFTb3VyY2UgOiBhcnJSZXNbcmVzSW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2goPGFueT57XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzY2hlbWFEYXRhXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY2hlbWEuZGF0YVNvdXJjZSA9IHNjaGVtYURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bihzY2hlbWEuZmllbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFzVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYURhdGFzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFJlZkRhdGFJbkRhdGFzb3VyY2VXaXRoT3JkZXIoXG4gICAgICAgIGRhdGFTb3VyY2U6IGFueVtdLFxuICAgICAgICBzY2hlbWFzOiBSZWZGaWVsZFtdLFxuICAgICAgICBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duOiBGdW5jdGlvbiA9IG51bGwsXG4gICAgKSB7XG4gICAgICAgIHNjaGVtYXMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICAgICAgICBjb25zdCBkaWNEYXRhOiB7XG4gICAgICAgICAgICBzY2hlbWFzOiBSZWZGaWVsZFtdLFxuICAgICAgICAgICAgcHJvbWlzZXM6IGFueVtdO1xuICAgICAgICB9W10gPSBbXTtcbiAgICAgICAgLy8gcHJlcHJvY2VzcyBzY2hlbWEsIHRoZW0gc2NoZW1hIHZhbyBhcnIgdm9pIGluZGV4ID0gc2NoZW1hLm9yZGVyICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3QgZnVuY0dldFByb21pc2UgPSAoX19kYXRhU291cmNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5iYXNlU2VydmljZSA/IHRoaXMucHJvY2Vzc1NjaGVtYVdpdGhCYXNlU2VydmljZShzY2hlbWEsIF9fZGF0YVNvdXJjZSkgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gcmVzb2x2ZSh0cnVlKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRpY0RhdGFbc2NoZW1hLm9yZGVyXTtcbiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaWNEYXRhW3NjaGVtYS5vcmRlcl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzOiBbZnVuY0dldFByb21pc2VdLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFzOiBbc2NoZW1hXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLnNjaGVtYXMucHVzaChzY2hlbWEpO1xuICAgICAgICAgICAgZGF0YS5wcm9taXNlcy5wdXNoKGZ1bmNHZXRQcm9taXNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCBkYXRhIHZhIG1lcmdlIHZvaSBkYXRhU291cmNlXG4gICAgICAgIGNvbnN0IGxzdERhdGEgPSBPYmplY3QudmFsdWVzKGRpY0RhdGEpO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbHN0RGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBsc3REYXRhW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gZGF0YS5wcm9taXNlcztcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYURhdGFzID0gZGF0YS5zY2hlbWFzO1xuXG4gICAgICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlQWxsID0gcHJvbWlzZXMubWFwKHggPT4geChkYXRhU291cmNlKSk7XG4gICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQWxsKTtcbiAgICAgICAgICAgIHNjaGVtYURhdGFzLmZvckVhY2goKHNjaGVtYSwgcmVzSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhID0gYXJyUmVzW3Jlc0luZGV4XSA9PT0gdHJ1ZSA/IHNjaGVtYS5kYXRhU291cmNlIDogYXJyUmVzW3Jlc0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc2NoZW1hRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRhdGFTb3VyY2UgPSBzY2hlbWFEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oc2NoZW1hLmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWFEYXRhcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTY2hlbWFXaXRoQmFzZVNlcnZpY2Uoc2NoZW1hOiBSZWZGaWVsZCwgZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKGl0ZW1EYXRhKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVNdWx0aXBsZShhcnJWYWx1ZSwgY3VycmVudFZhbHVlLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duKFxuICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGUsXG4gICAgICAgICAgICAgICAgYXJyVmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51c2VJZ25vcmVBbGxCYXNlRmlsdGVyICYmICFzY2hlbWEucGx1c1VybCkge1xuICAgICAgICAgICAgc2NoZW1hLnBsdXNVcmwgPSAnSWdub3JlQWxsQmFzZUZpbHRlcic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgW3RoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXSxcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcFZhbHVlTXVsdGlwbGUoYXJyVmFsdWU6IGFueVtdLCB2YWx1ZVRvTWFwLCBzY2hlbWE6IFJlZkZpZWxkKSB7XG4gICAgICAgIGlmICghdmFsdWVUb01hcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlVG9NYXApKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZVRvTWFwLnNwbGl0KCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZVRvTWFwO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RnVudGlvbkdldExhYmVsKHNjaGVtYTogUmVmRmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYS5mdW5jR2V0TGFiZWwgPyBzY2hlbWEuZnVuY0dldExhYmVsIDogaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRJbkdyaWRdIHx8IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsndGVuJ107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkRhdGFzVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWFzOiBSZWZGaWVsZFtdLCBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duPzogRnVuY3Rpb24pIHtcbiAgICAgICAgLy8gI3JlZ2lvbiBzZXQgZGVmYXVsdCBmdW5jdGlvblxuICAgICAgICBmb3IgKGNvbnN0IHJvd0RhdGEgb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBzY2hlbWEuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZERhdGEgPSBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGREYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IHRoaXMuZ2V0RnVudGlvbkdldExhYmVsKHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1xuICAgICAgICAgICAgICAgICAgICA/IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dcbiAgICAgICAgICAgICAgICAgICAgOiAocm93SXRlbSwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHlcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5XG4gICAgICAgICAgICAgICAgICAgIDogKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0UmVmRGF0YVJvdyA9IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvd1xuICAgICAgICAgICAgICAgICAgICA/IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvd1xuICAgICAgICAgICAgICAgICAgICA6IChyZWZJdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFTaW5nbGUgPSAocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gZGF0YS5maW5kKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGZpZWxkRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KHJvd0RhdGEsIHJlZkl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5pc0NoaWxkT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgZmllbGREYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICNlbmRyZWdpb25cbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFZhbHVlTXVsdGlwbGUoaWRzLCBmaWVsZERhdGEsIHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRSZWZEYXRhUm93KHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFTaW5nbGUocm93RGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIChjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKSB7XG4gICAgICAgICAgICAvLyAgICAgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bihyb3dEYXRhKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IFJlZkZpZWxkLCBkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KGl0ZW1EYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyAjcmVnaW9uIHNldCBkZWZhdWx0IGZ1bmN0aW9uXG4gICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IHRoaXMuZ2V0RnVudGlvbkdldExhYmVsKHNjaGVtYSk7XG4gICAgICAgIGxldCBmdW5jU2V0VmFsdWVSb3cgPSAocm93SXRlbSwgZGF0YSkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhUm93ID0gKHJlZkl0ZW1zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVmSXRlbXMubWFwKGl0ZW0gPT4gZnVuY0dldExhYmVsKGl0ZW0pKS5qb2luKGAke3NjaGVtYS5zZXBhcmF0b3J9IGApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdykge1xuICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSkge1xuICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93KSB7XG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVJvdyA9IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdztcbiAgICAgICAgfVxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFTaW5nbGUgPSAocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSkpO1xuICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XG4gICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KHJvd0RhdGEsIHJlZkl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoc2NoZW1hLmlzQ2hpbGRPYmplY3QpIHtcbiAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRSZWZEYXRhUm93KHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyAjZW5kcmVnaW9uXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChyb3dEYXRhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZU11bHRpcGxlKGlkcywgc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSksIHNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRSZWZEYXRhUm93KHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2gocm93RGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFTaW5nbGUocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzcGxpdFRvTGlzdE51bWJlcihzdHI6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgPSAnLCcpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoc2VwYXJhdG9yKS5tYXAoaXRlbSA9PiBOdW1iZXIoaXRlbSkpO1xuICAgIH1cblxuICAgIHB1c2hBc2MoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmaWVsZE9yZGVyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XG4gICAgfVxuXG4gICAgcHVzaERlc2MoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmaWVsZE9yZGVyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZE9yZGVyXSA+PSBhcnJbaV1bZmllbGRPcmRlcl0pIHtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBwdXNoQXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pOiBudW1iZXIge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBhcnIubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGkgKyAxLCAwLCBpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXJyLnNwbGljZSgwLCAwLCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVzaERlc2NCeUZ1bmMoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmdW5jOiBGdW5jdGlvbikge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmdW5jKGl0ZW0pID49IGZ1bmMoYXJyW2ldKSkge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgIH1cblxuICAgIGdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBmaWVsZE9yZGVyOiBzdHJpbmcsXG4gICAgICAgIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGRpck9yZGVyOiBudW1iZXIgPSAxLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5LCBvcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IFRyZWVOb2RlW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgY29uc3QgZnVuY0dldFZhbHVlT3JkZXIgPSBpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGFbZmllbGRPcmRlcl07XG4gICAgICAgIH07XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gdmFsdWVQYXJlbnRSb290KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSA8VHJlZU5vZGU+e1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMSxcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoZGlyT3JkZXIgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hBc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGVzY0J5RnVuYyhyZXN1bHQsIHJvb3RJdGVtLCBmdW5jR2V0VmFsdWVPcmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGRpck9yZGVyLCBmdW5jR2V0VmFsdWVPcmRlciwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290SXRlbS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShyb290SXRlbSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihub2RlUGFyZW50OiBUcmVlTm9kZSwgZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLFxuICAgICAgICBkaXJPcmRlcjogbnVtYmVyLCBmdW5jR2V0VmFsdWVPcmRlcjogRnVuY3Rpb24sIGxldmVsQ2xvc2U6IG51bWJlciwgb3B0aW9uczogYW55ID0ge31cbiAgICApIHtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSBub2RlUGFyZW50LmRhdGEuaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ2hpbGRyZW4gPSA8VHJlZU5vZGU+e1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbm9kZVBhcmVudFsnbGV2ZWwnXSArIDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKG5vZGVQYXJlbnQuY2hpbGRyZW4sIGl0ZW1DaGlsZHJlbiwgZnVuY0dldFZhbHVlT3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGVzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlblsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoaXRlbUNoaWxkcmVuLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGRpck9yZGVyLCBmdW5jR2V0VmFsdWVPcmRlciwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlVGFibGVEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge30pOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gdmFsdWVQYXJlbnRSb290KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSA8VHJlZU5vZGU+e1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMSxcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyb290SXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGEocm9vdEl0ZW0sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290SXRlbS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShyb290SXRlbSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlUXV5R2V0VHJlZVRhYmxlRGF0YShub2RlUGFyZW50OiBUcmVlTm9kZSwgZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG5vZGVQYXJlbnQuY2hpbGRyZW4ucHVzaChpdGVtQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ2hpbGRyZW4uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUoaXRlbUNoaWxkcmVuLCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSk6IFRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlVGFibGVEYXRhKGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgdmFsdWVQYXJlbnRSb290LCBsZXZlbENsb3NlLCB7XG4gICAgICAgICAgICBtb2RpZnlUcmVlTm9kZTogKGl0ZW1UcmVlLCBpdGVtRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmxhYmVsID0gaXRlbURhdGFbb3B0aW9uLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuZXhwYW5kZWRJY29uID0gb3B0aW9uLmV4cGFuZGVkSWNvbjtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5jb2xsYXBzZWRJY29uID0gb3B0aW9uLmNvbGxhcHNlZEljb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxuICAgICAgICBvcHRpb246IFRyZWVEYXRhT3B0aW9uLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OVxuICAgICk6IFRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZmllbGRPcmRlciwgdmFsdWVQYXJlbnRSb290LCBkaXJPcmRlciwgbGV2ZWxDbG9zZSwge1xuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLnNob3J0TGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uc2hvcnREaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVHdWlkKCkge1xuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgY29uc3QgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBHZXQgxJFp4buBdSBraeG7h24gdMOsbSBraeG6v20gbeG6t2MgxJHhu4tuaCAoQ+G6pXUgaMOsbmggaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sylcbiAgICAvLyBDaOG7iSBz4butIGThu6VuZyBjaG8gcGjhuqduIG3hu4FtIHF14bqjbiBsw70gxJHDoG8gdOG6oW9cbiAgICBnZXREZWZhdWx0U2VhcmNoRGF0YSgpIHtcbiAgICAgICAgY29uc3QgbG9jYWxEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuREVGQVVMVF9EQVRBKTtcbiAgICAgICAgaWYgKGxvY2FsRGF0YSAhPSBudWxsICYmIGxvY2FsRGF0YSAhPSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgZm9yY2VTZWxlY3REZWZhdWx0RGF0YShfY29tcG9uZW50LCBjYikge1xuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaGVEYW9UYW9cbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0Lm5hbUhvY1xuICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXG4gICAgICAgICAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0Lm5hbUhvY1xuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5ob2NLeVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoJ0LhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICho4buHIMSRw6BvIHThuqFvLCBuxINtIGjhu41jLCBo4buNYyBr4buzKSB0csaw4bubYycpO1xuICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNiKSB7XG4gICAgICAgICAgICBjYihfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGFXaXRoRmllbGRzKF9jb21wb25lbnQsIGFyckZpZWxkLCBhcnJGaWVsZE5hbWUsIGNiKSB7XG4gICAgICAgIGlmICghYXJyRmllbGQgfHwgYXJyRmllbGQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XG4gICAgICAgIGxldCBlbm91Z2hGaWVsZHMgPSB0cnVlO1xuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdFtmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFlbm91Z2hGaWVsZHMpIHtcbiAgICAgICAgICAgIF9jb21wb25lbnQubW9kZWwucmVhZHlUb0dldERhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5DT05GSUdfREFUQV9ERUZBVUxUX0NMT1NFRCwgZiA9PiB7XG4gICAgICAgICAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcbiAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dFcnJvcihgQuG6oW4gcGjhuqNpIGPhuqV1IGjDrG5oIHRow7RuZyB0aW4gKCR7YXJyRmllbGROYW1lLnRvU3RyaW5nKCl9KSB0csaw4bubY2ApO1xuICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNiKSB7XG4gICAgICAgICAgICBjYihfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0RmllbGQobW9kZWwsIGFyckZpZWxkKSB7XG4gICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgbW9kZWwuZGF0YVtmaWVsZF0gPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmFjZUlkID0gKCkgPT4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndHJhY2VJZCcpO1xuXG4gICAgcHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpIHtcbiAgICAgICAgc3dpdGNoIChycy5lcnJvcikge1xuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9CVVNJTkVTUzpcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocnMubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZhbGlkYXRpb24uRVJSX1NZU19ERVY6XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihgX19fX19fX19fXyBFUlJfU1lTX0RFViBfX19fX19fX19fICA6ICR7cnMubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKGBUcmFjZUlkID09PT0+ICR7dGhpcy5nZXRUcmFjZUlkKCl9IMSR4buDIGTDuW5nIGNobyBlbGFzdGljIHNlYXJjaGApO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGFvIHTDoWMgY2jGsGEgdGjDoG5oIGPDtG5nLiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1IScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ29weSBUcmFjZUlkID09PT0+ICR7dGhpcy5nZXRUcmFjZUlkKCl9IHbDoCBn4butaSBjaG8gcXXhuqNuIHRy4buLIHZpw6puYCk7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxCYWNrRXJyb3IocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxCYWNrKSB7XG4gICAgICAgICAgICBjYWxsQmFjayhyZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlUmVwb25zZVByb21pc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZVN1Y2Nlc3M/OiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5lcnJvciA9PSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gcmVzLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UpIG1lc3NhZ2UgPSByZXMubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ29weSBUcmFjZUlkID09PT0+ICR7dGhpcy5nZXRUcmFjZUlkKCl9IHbDoCBn4butaSBjaG8gcXXhuqNuIHRy4buLIHZpw6puYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZVN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRlbXBsYXRlRmlsdGVyOiBGaWx0ZXJbXSwgbW9kZWw6IGFueSwgcm9vdE1vZGVsPzogYW55KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZUZpbHRlcikpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIGYsIG1vZGVsLCByb290TW9kZWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHJlc3VsdCwgdGVtcGxhdGVGaWx0ZXIsIG1vZGVsLCByb290TW9kZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eVJlcGxhY2VWYWx1ZShmaWx0ZXJzOiBGaWx0ZXJbXSwgZmlsdGVyOiBGaWx0ZXIsIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xuICAgICAgICBjb25zdCB2YWx1ZUZpbHRlciA9IHRoaXMuZ2V0VmFsdWVGaWx0ZXIoZmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKTtcblxuICAgICAgICBpZiAoZmlsdGVyLmxvZ2ljID09IG51bGxcbiAgICAgICAgICAgICYmIGZpbHRlci5vcGVyYXRvciAhPT0gT3BlcmF0b3IuaXNOdWxsXG4gICAgICAgICAgICAmJiBmaWx0ZXIub3BlcmF0b3IgIT09IE9wZXJhdG9yLmlzTm90TnVsbFxuICAgICAgICAgICAgJiYgKHZhbHVlRmlsdGVyID09IG51bGwgfHwgdmFsdWVGaWx0ZXIgPT09ICcnIHx8IHZhbHVlRmlsdGVyLmxlbmd0aCA9PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRtcEZpbHRlciA9IG5ldyBGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgZGVsZXRlIHRtcEZpbHRlci5zb3VyY2VGaWVsZDtcbiAgICAgICAgaWYgKGZpbHRlci5pc0FycmF5RmllbGQpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZUZpbHRlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG1wRmlsdGVyLmZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIHRtcEZpbHRlci5sb2dpYyA9ICdvcic7XG4gICAgICAgICAgICB0bXBGaWx0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdmFsdWVGaWx0ZXIuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHRtcEZpbHRlci5maWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3IuZXF1YWwsIHZhbC50b1N0cmluZygpKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5uZXdGaWx0ZXIoZmlsdGVyLmZpZWxkLCBPcGVyYXRvci5zdGFydFdpdGgsIGAke3ZhbH0sYCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3IuZW5kV2l0aCwgYCwke3ZhbH1gKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5uZXdGaWx0ZXIoZmlsdGVyLmZpZWxkLCBPcGVyYXRvci5jb250YWluLCBgLCR7dmFsfSxgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAodG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSkge1xuICAgICAgICAvLyAgICAgdmFsdWVGaWx0ZXIgPSB0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKHZhbHVlRmlsdGVyKTtcbiAgICAgICAgLy8gfVxuICAgICAgICB0bXBGaWx0ZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZUZpbHRlcik7XG4gICAgICAgIHRtcEZpbHRlci5maWx0ZXJzID0gW107XG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgJiYgZmlsdGVyLmZpbHRlcnMpIHtcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLmZvckVhY2goZiA9PiB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHRtcEZpbHRlci5maWx0ZXJzLCBmLCBtb2RlbCwgcm9vdE1vZGVsKSk7XG4gICAgICAgICAgICBpZiAodG1wRmlsdGVyLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRtcEZpbHRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlRmlsdGVyKGZpbHRlcjogRmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUZpZWxkID0gZmlsdGVyLnNvdXJjZUZpZWxkO1xuICAgICAgICBjb25zdCBzdWJGaWVsZCA9IGZpbHRlci5zdWJGaWVsZDtcbiAgICAgICAgY29uc3QgdHJ5R2V0QnlTdWJGaWVsZCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoc3ViRmllbGQgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKHggPT4geFtzdWJGaWVsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHZhbHVlW3N1YkZpZWxkXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIGlmIChtb2RlbC5oYXNPd25Qcm9wZXJ0eShzb3VyY2VGaWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuZnVuY0dldFZhbHVlICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IGZpbHRlci5mdW5jR2V0VmFsdWUobW9kZWxbc291cmNlRmllbGRdKVxuICAgICAgICAgICAgICAgIDogdHJ5R2V0QnlTdWJGaWVsZChtb2RlbFtzb3VyY2VGaWVsZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb290TW9kZWwpIHtcbiAgICAgICAgICAgIGlmIChyb290TW9kZWwuaGFzT3duUHJvcGVydHkoc291cmNlRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyeUdldEJ5U3ViRmllbGQocm9vdE1vZGVsW3NvdXJjZUZpZWxkXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IHNvdXJjZUZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBsZXQgdGVtcCA9IHJvb3RNb2RlbDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGVtcC5oYXNPd25Qcm9wZXJ0eShmKSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcFtmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ5R2V0QnlTdWJGaWVsZCh0ZW1wW3N1YkZpZWxkXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0V29ya2Zsb3dDb3JlU3RhdHVzVGV4dCh3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzLmZpbmQoeCA9PiB4LmlkID09IHdvcmtmbG93Q29yZVN0YXR1c1ZhbHVlKTtcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm4gJyc7XG4gICAgICAgIHJldHVybiBpdGVtLnRlbjtcbiAgICB9XG59XG4iXX0=
|
|
1013
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUdILGVBQWUsRUFDZixRQUFRLEVBR1gsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQU1yRCxNQUFNLE9BQU8sV0FBVztJQUdwQixZQUNZLFNBQW1CLEVBQ25CLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzdCLFFBQWtCLEVBQ2xCLGdCQUFpQyxFQUNqQyxvQkFBeUM7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QUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hCLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO3FCQUNJO29CQUNELElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ1osTUFBTTtpQkFDVDthQUNKO1lBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyx1QkFBK0I7UUFDckQsTUFBTSxJQUFJLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7Ozs7WUF4a0NKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBM0JvQixRQUFRO1lBbUJwQixhQUFhO1lBRGIsYUFBYTtZQW5CYixRQUFRO1lBdUJSLGVBQWU7WUFEZixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIENvbHVtblNjaGVtYUJhc2UsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIERyb3Bkb3duT3B0aW9ucyxcbiAgICBPcGVyYXRvcixcbiAgICBSZWZGaWVsZCxcbiAgICBUcmVlRGF0YU9wdGlvblxufSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDcnVkU2VydmljZSB7XG4gICAgdXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQudXNlSWdub3JlQWxsQmFzZUZpbHRlciB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyRGF0ZVRpbWUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnZnJvbU5vdycpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXkgSEg6bW0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcbiAgICAgICAgbGV0IG1pbGlzZWNvbmQgPSBub3cgLSBkYXRldGltZTtcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPiAwKSB7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCB0csaw4bubYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gdHLGsOG7m2MnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdIw7RtIHF1YSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gODY0MDAwMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmdldERhdGUoKSA9PSBub3cuZ2V0RGF0ZSgpIC0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnSMO0bSBxdWEgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGQvTU0veXl5eSBISDptbSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaWxpc2Vjb25kID0gLW1pbGlzZWNvbmQ7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCBu4buvYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdOZ8OgeSBtYWkgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDg2NDAwMDAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSAtIDFcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05nw6B5IG1haSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAyXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAzXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSBu4buvYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZC9NTS95eXl5IEhIOm1tJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlclRpbWVzcGFuKGRhdGV0aW1lOiBhbnkpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcnJUaW1lID0gZGF0ZXRpbWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJldHVybiBgJHthcnJUaW1lWzBdfToke2FyclRpbWVbMV19YDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJEYXRlKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ25vcm1hbCcpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGRheXMgPSBkYXRldGltZS5nZXREYXRlKCkgLSBub3cuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChkYXlzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gbmF5JztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnTmfDoHkgbWFpJztcbiAgICAgICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gcXVhJztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IG7hu69hJztcbiAgICAgICAgICAgICAgICBjYXNlIC0yOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSB0csaw4bubYyc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IG7hu69hJztcbiAgICAgICAgICAgICAgICBjYXNlIC0zOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XG4gICAgfVxuXG4gICAgaGlkZUNvbnRyb2xBbmRMYWJlbCgpIHtcbiAgICB9XG5cbiAgICBidWlsZEZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXJEYXRlKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IERhdGUpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWU6IHRoaXMuZ2V0RGF0ZSh2YWx1ZSkgfSk7XG4gICAgfVxuXG4gICAgZ2V0RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXREYXRlKCl9LyR7dmFsdWUuZ2V0TW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyRGF0ZUluTGlzdFJhbmdlKGZpZWxkOiBzdHJpbmcsIGFyck1pbk1heDogRGF0ZVtdW10sIG9wZXJhdG9yTGVmdDogc3RyaW5nID0gJ2d0ZScsIG9wZXJhdG9yUmlnaHQ6IHN0cmluZyA9ICdsdGUnKTogRmlsdGVyIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBhcnJNaW5NYXguZm9yRWFjaChtaW5NYXggPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyU3RhcnQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMF0pO1xuICAgICAgICAgICAgY29uc3Qgc3RyRW5kID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzFdKTtcbiAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsIHN0clN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLCBzdHJFbmQpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0cmluZ0RhdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0VVRDRGF0ZSgpfS8ke3ZhbHVlLmdldFVUQ01vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCl9ICR7dmFsdWUuZ2V0VVRDSG91cnMoKX06JHt2YWx1ZS5nZXRVVENNaW51dGVzKCl9OiR7dmFsdWUuZ2V0VVRDU2Vjb25kcygpfWA7XG4gICAgfVxuXG4gICAgYnVpbGRNdWx0aUZpbHRlckNvbnRhaW5zKGZpZWxkczogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyQ29udGFpbk11bHRpVmFsdWVzKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IERyb3Bkb3duQ29udHJvbFNjaGVtYSB8IENvbHVtblNjaGVtYUJhc2UpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IERyb3Bkb3duT3B0aW9ucyh7XG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxuICAgICAgICAgICAgc29ydHM6IHNjaGVtYS5zb3J0cyxcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxuICAgICAgICAgICAgcGx1c1VybDogc2NoZW1hLnBsdXNVcmwsXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gsXG4gICAgICAgICAgICBpc1NlcnZlckxvYWQ6IHNjaGVtYS5pc1NlcnZlckxvYWQsXG4gICAgICAgICAgICByZWZGaWVsZHM6IHNjaGVtYS5yZWZGaWVsZHMsXG4gICAgICAgICAgICBpc1RyZWVCYXNlTW9kZWw6IHNjaGVtYS5pc1RyZWVCYXNlTW9kZWwsXG4gICAgICAgICAgICAvLyBUT0RPOiBD4bqnbiDEkWnhu4FuIHbDoG8ga2jDtG5nIGPDsyBs4buXaSBraMO0bmcgY2jhuqF5IMSRxrDhu6NjXG4gICAgICAgICAgICBzZWxlY3RDaGlsZEl0ZW06IG51bGxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXN1bHQucGFnZVNpemUgPSBzY2hlbWEucGFnZVNpemU7XG4gICAgICAgICAgICAvLyByZXN1bHQucGFnZVNpemUgPSAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShcbiAgICAgICAgZGF0YVNvdXJjZTogYW55W10sXG4gICAgICAgIHNjaGVtYXM6IFJlZkZpZWxkW10sXG4gICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd246IEZ1bmN0aW9uID0gbnVsbCxcbiAgICApIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXNjaGVtYXMgfHwgIXNjaGVtYXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaGVtYUhhc09yZGVyID0gc2NoZW1hcy5maWx0ZXIoeCA9PiBOdW1iZXIuaXNJbnRlZ2VyKHgub3JkZXIpKTtcbiAgICAgICAgaWYgKHNjaGVtYUhhc09yZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRSZWZEYXRhSW5EYXRhc291cmNlV2l0aE9yZGVyKGRhdGFTb3VyY2UsIHNjaGVtYUhhc09yZGVyLCBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWFzID0gc2NoZW1hcy5maWx0ZXIoeCA9PiAhTnVtYmVyLmlzSW50ZWdlcih4Lm9yZGVyKSk7XG4gICAgICAgIGNvbnN0IGRpY0RhdGE6IHtcbiAgICAgICAgICAgIHNjaGVtYXM6IFJlZkZpZWxkW10sXG4gICAgICAgICAgICBwcm9taXNlczogUHJvbWlzZTxhbnk+W107XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICAvLyBwcmVwcm9jZXNzIHNjaGVtYSwgdGhlbSBzY2hlbWEgdmFvIGFyciB2b2kgaW5kZXggPSBzY2hlbWEub3JkZXJcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZSA/IHRoaXMucHJvY2Vzc1NjaGVtYVdpdGhCYXNlU2VydmljZShzY2hlbWEsIGRhdGFTb3VyY2UpIDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRpY0RhdGFbc2NoZW1hLm9yZGVyXTtcbiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaWNEYXRhW3NjaGVtYS5vcmRlcl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzOiBbcHJvbWlzZV0sXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYXM6IFtzY2hlbWFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuc2NoZW1hcy5wdXNoKHNjaGVtYSk7XG4gICAgICAgICAgICBkYXRhLnByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgZGF0YSB2YSBtZXJnZSB2b2kgZGF0YVNvdXJjZVxuICAgICAgICBjb25zdCBsc3REYXRhID0gT2JqZWN0LnZhbHVlcyhkaWNEYXRhKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxzdERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlbGVtZW50O1xuICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBkYXRhLnByb21pc2VzO1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hRGF0YXMgPSBkYXRhLnNjaGVtYXM7XG5cbiAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIHNjaGVtYURhdGFzLmZvckVhY2goKHNjaGVtYSwgcmVzSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhID0gYXJyUmVzW3Jlc0luZGV4XSA9PT0gdHJ1ZSA/IHNjaGVtYS5kYXRhU291cmNlIDogYXJyUmVzW3Jlc0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc2NoZW1hRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRhdGFTb3VyY2UgPSBzY2hlbWFEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oc2NoZW1hLmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWFEYXRhcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZWZEYXRhSW5EYXRhc291cmNlV2l0aE9yZGVyKFxuICAgICAgICBkYXRhU291cmNlOiBhbnlbXSxcbiAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bjogRnVuY3Rpb24gPSBudWxsLFxuICAgICkge1xuICAgICAgICBzY2hlbWFzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgICAgICAgY29uc3QgZGljRGF0YToge1xuICAgICAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgICAgIHByb21pc2VzOiBhbnlbXTtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIC8vIHByZXByb2Nlc3Mgc2NoZW1hLCB0aGVtIHNjaGVtYSB2YW8gYXJyIHZvaSBpbmRleCA9IHNjaGVtYS5vcmRlciAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRQcm9taXNlID0gKF9fZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2hlbWEuYmFzZVNlcnZpY2UgPyB0aGlzLnByb2Nlc3NTY2hlbWFXaXRoQmFzZVNlcnZpY2Uoc2NoZW1hLCBfX2RhdGFTb3VyY2UpIDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkaWNEYXRhW3NjaGVtYS5vcmRlcl07XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGljRGF0YVtzY2hlbWEub3JkZXJdID0ge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlczogW2Z1bmNHZXRQcm9taXNlXSxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hczogW3NjaGVtYV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5zY2hlbWFzLnB1c2goc2NoZW1hKTtcbiAgICAgICAgICAgIGRhdGEucHJvbWlzZXMucHVzaChmdW5jR2V0UHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgZGF0YSB2YSBtZXJnZSB2b2kgZGF0YVNvdXJjZVxuICAgICAgICBjb25zdCBsc3REYXRhID0gT2JqZWN0LnZhbHVlcyhkaWNEYXRhKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxzdERhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbHN0RGF0YVtpbmRleF07XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IGRhdGEucHJvbWlzZXM7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhcyA9IGRhdGEuc2NoZW1hcztcblxuICAgICAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbCA9IHByb21pc2VzLm1hcCh4ID0+IHgoZGF0YVNvdXJjZSkpO1xuICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFsbCk7XG4gICAgICAgICAgICBzY2hlbWFEYXRhcy5mb3JFYWNoKChzY2hlbWEsIHJlc0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hRGF0YSA9IGFyclJlc1tyZXNJbmRleF0gPT09IHRydWUgPyBzY2hlbWEuZGF0YVNvdXJjZSA6IGFyclJlc1tyZXNJbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCg8YW55PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHNjaGVtYURhdGFcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVtYS5kYXRhU291cmNlID0gc2NoZW1hRGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKHNjaGVtYS5maWVsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YXNUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hRGF0YXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU2NoZW1hV2l0aEJhc2VTZXJ2aWNlKHNjaGVtYTogUmVmRmllbGQsIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChpdGVtRGF0YSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFZhbHVlTXVsdGlwbGUoYXJyVmFsdWUsIGN1cnJlbnRWYWx1ZSwgc2NoZW1hKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcbiAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlLFxuICAgICAgICAgICAgICAgIGFyclZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciAmJiAhc2NoZW1hLnBsdXNVcmwpIHtcbiAgICAgICAgICAgIHNjaGVtYS5wbHVzVXJsID0gJ0lnbm9yZUFsbEJhc2VGaWx0ZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgIFt0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihzY2hlbWEudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIGFyclZhbHVlKV0sXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBWYWx1ZU11bHRpcGxlKGFyclZhbHVlOiBhbnlbXSwgdmFsdWVUb01hcCwgc2NoZW1hOiBSZWZGaWVsZCkge1xuICAgICAgICBpZiAoIXZhbHVlVG9NYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVUb01hcC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVUb01hcDtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWE6IFJlZkZpZWxkKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEuZnVuY0dldExhYmVsID8gc2NoZW1hLmZ1bmNHZXRMYWJlbCA6IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ3RlbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hczogUmVmRmllbGRbXSwgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIC8vICNyZWdpb24gc2V0IGRlZmF1bHQgZnVuY3Rpb25cbiAgICAgICAgZm9yIChjb25zdCByb3dEYXRhIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gc2NoZW1hLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGREYXRhID0gc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSB0aGlzLmdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY1NldFZhbHVlUm93XG4gICAgICAgICAgICAgICAgICAgIDogKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5XG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eVxuICAgICAgICAgICAgICAgICAgICA6IChyb3dJdGVtLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3dcbiAgICAgICAgICAgICAgICAgICAgOiAocmVmSXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZJdGVtcy5tYXAoaXRlbSA9PiBmdW5jR2V0TGFiZWwoaXRlbSkpLmpvaW4oYCR7c2NoZW1hLnNlcGFyYXRvcn0gYCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBmaWVsZERhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXNDaGlsZE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVNpbmdsZSA9IChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGZpZWxkRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAjZW5kcmVnaW9uXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZU11bHRpcGxlKGlkcywgZmllbGREYXRhLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlKHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiAoY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgLy8gICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24ocm93RGF0YSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBSZWZGaWVsZCwgZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShpdGVtRGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gI3JlZ2lvbiBzZXQgZGVmYXVsdCBmdW5jdGlvblxuICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSB0aGlzLmdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWEpO1xuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IChyb3dJdGVtLCBkYXRhKSA9PiB7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSkpKTtcbiAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5pc0NoaWxkT2JqZWN0KSB7XG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVNpbmdsZSA9IChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSkpO1xuICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gI2VuZHJlZ2lvblxuICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2gocm93RGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVNdWx0aXBsZShpZHMsIHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHJvd0RhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3BsaXRUb0xpc3ROdW1iZXIoc3RyOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gJywnKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KHNlcGFyYXRvcikubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBwdXNoQXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xuICAgIH1cblxuICAgIHB1c2hEZXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgcHVzaEFzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1c2hEZXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBnZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxuICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge31cbiAgICApOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XG4gICAgICAgIGNvbnN0IGZ1bmNHZXRWYWx1ZU9yZGVyID0gaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW2ZpZWxkT3JkZXJdO1xuICAgICAgICB9O1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZyxcbiAgICAgICAgZGlyT3JkZXI6IG51bWJlciwgZnVuY0dldFZhbHVlT3JkZXI6IEZ1bmN0aW9uLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9XG4gICAgKSB7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9KTogVHJlZU5vZGVbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdEl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGEobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBub2RlUGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTkpOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlLCBmaWVsZFRyZWUsIHZhbHVlUGFyZW50Um9vdCwgbGV2ZWxDbG9zZSwge1xuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTlcbiAgICApOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlLCBmaWVsZFRyZWUsIGZpZWxkT3JkZXIsIHZhbHVlUGFyZW50Um9vdCwgZGlyT3JkZXIsIGxldmVsQ2xvc2UsIHtcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5zaG9ydExhYmVsID0gaXRlbURhdGFbb3B0aW9uLnNob3J0RGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlR3VpZCgpIHtcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IMSRaeG7gXUga2nhu4duIHTDrG0ga2nhur9tIG3hurdjIMSR4buLbmggKEPhuqV1IGjDrG5oIGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpXG4gICAgLy8gQ2jhu4kgc+G7rSBk4bulbmcgY2hvIHBo4bqnbiBt4buBbSBxdeG6o24gbMO9IMSRw6BvIHThuqFvXG4gICAgZ2V0RGVmYXVsdFNlYXJjaERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGEoX2NvbXBvbmVudCwgY2IpIHtcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcbiAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XG4gICAgICAgICkge1xuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKCdC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sykgdHLGsOG7m2MnKTtcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYikge1xuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhV2l0aEZpZWxkcyhfY29tcG9uZW50LCBhcnJGaWVsZCwgYXJyRmllbGROYW1lLCBjYikge1xuICAgICAgICBpZiAoIWFyckZpZWxkIHx8IGFyckZpZWxkLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICBsZXQgZW5vdWdoRmllbGRzID0gdHJ1ZTtcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoYELhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICgke2FyckZpZWxkTmFtZS50b1N0cmluZygpfSkgdHLGsOG7m2NgKTtcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYikge1xuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEZpZWxkKG1vZGVsLCBhcnJGaWVsZCkge1xuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIG1vZGVsLmRhdGFbZmllbGRdID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJhY2VJZCA9ICgpID0+IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RyYWNlSWQnKTtcblxuICAgIHByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKSB7XG4gICAgICAgIHN3aXRjaCAocnMuZXJyb3IpIHtcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfQlVTSU5FU1M6XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWOlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoYF9fX19fX19fX18gRVJSX1NZU19ERVYgX19fX19fX19fXyAgOiAke3JzLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSDEkeG7gyBkw7luZyBjaG8gZWxhc3RpYyBzZWFyY2hgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENvcHkgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSB2w6AgZ+G7rWkgY2hvIHF14bqjbiB0cuG7iyB2acOqbmApO1xuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsQmFja0Vycm9yKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsQmFjaykge1xuICAgICAgICAgICAgY2FsbEJhY2socmVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlcG9uc2VQcm9taXNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2VTdWNjZXNzPzogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYS4gTGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHJlcy5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlKSBtZXNzYWdlID0gcmVzLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENvcHkgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSB2w6AgZ+G7rWkgY2hvIHF14bqjbiB0cuG7iyB2acOqbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2VTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEZpbHRlckZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10sIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVGaWx0ZXIpKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCBmLCBtb2RlbCwgcm9vdE1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIHRlbXBsYXRlRmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVRdXlSZXBsYWNlVmFsdWUoZmlsdGVyczogRmlsdGVyW10sIGZpbHRlcjogRmlsdGVyLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVGaWx0ZXIgPSB0aGlzLmdldFZhbHVlRmlsdGVyKGZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCk7XG5cbiAgICAgICAgaWYgKGZpbHRlci5sb2dpYyA9PSBudWxsXG4gICAgICAgICAgICAmJiBmaWx0ZXIub3BlcmF0b3IgIT09IE9wZXJhdG9yLmlzTnVsbFxuICAgICAgICAgICAgJiYgZmlsdGVyLm9wZXJhdG9yICE9PSBPcGVyYXRvci5pc05vdE51bGxcbiAgICAgICAgICAgICYmICh2YWx1ZUZpbHRlciA9PSBudWxsIHx8IHZhbHVlRmlsdGVyID09PSAnJyB8fCB2YWx1ZUZpbHRlci5sZW5ndGggPT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXBGaWx0ZXIgPSBuZXcgRmlsdGVyKGZpbHRlcik7XG4gICAgICAgIGRlbGV0ZSB0bXBGaWx0ZXIuc291cmNlRmllbGQ7XG4gICAgICAgIGlmIChmaWx0ZXIuaXNBcnJheUZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVGaWx0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcEZpbHRlci5maWx0ZXJzID0gW107XG4gICAgICAgICAgICB0bXBGaWx0ZXIubG9naWMgPSAnb3InO1xuICAgICAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihmaWx0ZXIuZmllbGQsIE9wZXJhdG9yLmVxdWFsLCB2YWwudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3Iuc3RhcnRXaXRoLCBgJHt2YWx9LGApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihmaWx0ZXIuZmllbGQsIE9wZXJhdG9yLmVuZFdpdGgsIGAsJHt2YWx9YCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3IuY29udGFpbiwgYCwke3ZhbH0sYCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRtcEZpbHRlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHRtcEZpbHRlci5mdW5jR2V0VmFsdWUpIHtcbiAgICAgICAgLy8gICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWVGaWx0ZXIpO1xuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xuICAgICAgICBpZiAoZmlsdGVyLmxvZ2ljICYmIGZpbHRlci5maWx0ZXJzKSB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5mb3JFYWNoKGYgPT4gdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZSh0bXBGaWx0ZXIuZmlsdGVycywgZiwgbW9kZWwsIHJvb3RNb2RlbCkpO1xuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUZpbHRlcihmaWx0ZXI6IEZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCkge1xuICAgICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGZpbHRlci5zb3VyY2VGaWVsZDtcbiAgICAgICAgY29uc3Qgc3ViRmllbGQgPSBmaWx0ZXIuc3ViRmllbGQ7XG4gICAgICAgIGNvbnN0IHRyeUdldEJ5U3ViRmllbGQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YkZpZWxkID09IG51bGwpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdCh2YWx1ZSkpIHJldHVybiB2YWx1ZVtzdWJGaWVsZF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkoc291cmNlRmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyLmZ1bmNHZXRWYWx1ZSAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXIuZnVuY0dldFZhbHVlKG1vZGVsW3NvdXJjZUZpZWxkXSlcbiAgICAgICAgICAgICAgICA6IHRyeUdldEJ5U3ViRmllbGQobW9kZWxbc291cmNlRmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm9vdE1vZGVsKSB7XG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnlHZXRCeVN1YkZpZWxkKHJvb3RNb2RlbFtzb3VyY2VGaWVsZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBzb3VyY2VGaWVsZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgbGV0IHRlbXAgPSByb290TW9kZWw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXAuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXBbZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyeUdldEJ5U3ViRmllbGQodGVtcFtzdWJGaWVsZF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFdvcmtmbG93Q29yZVN0YXR1c1RleHQod29ya2Zsb3dDb3JlU3RhdHVzVmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cy5maW5kKHggPT4geC5pZCA9PSB3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZSk7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gaXRlbS50ZW47XG4gICAgfVxufVxuIl19
|
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -5706,6 +5706,18 @@ class CrudService {
|
|
|
5706
5706
|
}
|
|
5707
5707
|
}
|
|
5708
5708
|
}
|
|
5709
|
+
renderTimespan(datetime) {
|
|
5710
|
+
if (!datetime) {
|
|
5711
|
+
return '';
|
|
5712
|
+
}
|
|
5713
|
+
try {
|
|
5714
|
+
const arrTime = datetime.split(':');
|
|
5715
|
+
return `${arrTime[0]}:${arrTime[1]}`;
|
|
5716
|
+
}
|
|
5717
|
+
catch (_a) {
|
|
5718
|
+
return '';
|
|
5719
|
+
}
|
|
5720
|
+
}
|
|
5709
5721
|
renderDate(datetime, format = 'normal') {
|
|
5710
5722
|
if (!datetime) {
|
|
5711
5723
|
return '';
|
|
@@ -34788,8 +34800,7 @@ class TnDatePipe {
|
|
|
34788
34800
|
return this._crudService.renderDate(value, format);
|
|
34789
34801
|
}
|
|
34790
34802
|
else if (dataType == 'timespan') {
|
|
34791
|
-
|
|
34792
|
-
return `${arrTime[0]}:${arrTime[1]}`;
|
|
34803
|
+
return this._crudService.renderTimespan(value);
|
|
34793
34804
|
}
|
|
34794
34805
|
return this._crudService.renderDateTime(value, format);
|
|
34795
34806
|
}
|