@sumaris-net/ngx-components 18.2.14 → 18.2.16
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/esm2022/src/app/core/services/base-entity-service.class.mjs +4 -4
- package/esm2022/src/app/core/services/local-settings.service.mjs +4 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +6 -3
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/assets/manifest.json +1 -1
|
@@ -58,7 +58,7 @@ export class BaseEntityService extends BaseGraphqlService {
|
|
|
58
58
|
query,
|
|
59
59
|
variables,
|
|
60
60
|
fetchPolicy: (opts && opts.fetchPolicy) || undefined,
|
|
61
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: '
|
|
61
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
62
62
|
})
|
|
63
63
|
.pipe(map(({ data }) => this.fromObject(data, opts)));
|
|
64
64
|
}
|
|
@@ -71,7 +71,7 @@ export class BaseEntityService extends BaseGraphqlService {
|
|
|
71
71
|
query,
|
|
72
72
|
variables,
|
|
73
73
|
fetchPolicy: (opts && opts.fetchPolicy) || undefined,
|
|
74
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: '
|
|
74
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
75
75
|
});
|
|
76
76
|
// Convert to entity
|
|
77
77
|
return this.fromObject(data, opts);
|
|
@@ -101,7 +101,7 @@ export class BaseEntityService extends BaseGraphqlService {
|
|
|
101
101
|
arrayFieldName: 'data',
|
|
102
102
|
totalFieldName: withTotal ? 'total' : undefined,
|
|
103
103
|
insertFilterFn: dataFilter && dataFilter.asFilterFn(),
|
|
104
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: '
|
|
104
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
105
105
|
fetchPolicy: (opts && opts.fetchPolicy) || undefined,
|
|
106
106
|
}).pipe(map(({ data, total }) => {
|
|
107
107
|
// Convert to entities (if need)
|
|
@@ -479,4 +479,4 @@ export class BaseEntityService extends BaseGraphqlService {
|
|
|
479
479
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: BaseEntityService, decorators: [{
|
|
480
480
|
type: Directive
|
|
481
481
|
}], ctorParameters: () => [{ type: i1.GraphqlService }, { type: i2.PlatformService }, { type: undefined }, { type: undefined }, { type: undefined }] });
|
|
482
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFLdEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFXbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBaUMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFnQixpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBd0R2RSxXQUFXO0FBRVgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsaUJBVXBCLFNBQVEsa0JBQTRCO0lBaUJ4QjtJQUNBO0lBQ0E7SUFDQTtJQWpCTyxTQUFTLENBQVM7SUFDbEIsWUFBWSxDQUFTO0lBRXJCLE9BQU8sQ0FBSTtJQUNYLFNBQVMsQ0FBYTtJQUN0QixhQUFhLENBQWE7SUFDMUIsU0FBUyxDQUE0QjtJQUNyQyxRQUFRLENBQW9CO0lBRTVCLGFBQWEsQ0FBVTtJQUN2QixvQkFBb0IsQ0FBZ0I7SUFDcEMsd0JBQXdCLENB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LENBQUM7SUFFUyxRQUFRLENBQUMsTUFBUyxFQUFFLElBQTRCO1FBQ3hELGtDQUFrQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLDRCQUE0QixDQUNwQyxJQUF3QjtRQUV4QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUU1RCxpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssaUJBQWlCO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFMUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsZ0JBQWdCO1FBRXZELHNDQUFzQztRQUN0QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLGNBQWM7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixPQUFPLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekMsQ0FBQzt3R0FuakJtQixpQkFBaUI7NEZBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFGdEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgeyBBcG9sbG9DYWNoZSwgRmV0Y2hQb2xpY3ksIEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlLCBNdXRhdGlvblVwZGF0ZXJGbiwgTXV0YXRpb25VcGRhdGVyRnVuY3Rpb24gfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge1xuICBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucyxcbiAgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLFxuICBFbnRpdHlTZXJ2aWNlTGlzdGVuQ2hhbmdlc09wdGlvbnMsXG4gIElFbnRpdGllc1NlcnZpY2UsXG4gIElFbnRpdHlTZXJ2aWNlLFxuICBMb2FkUmVzdWx0LFxufSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgR3JhcGhxbFNlcnZpY2UgfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEVudGl0eVV0aWxzIH0gZnJvbSAnLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgY2hhaW5Qcm9taXNlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCByZW1vdmVFbmQsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoUmVzdWx0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9jb3JlJztcbmltcG9ydCB7IEVudGl0eUZpbHRlciwgRW50aXR5RmlsdGVyVXRpbHMgfSBmcm9tICcuL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUgfSBmcm9tICdncmFwaHFsJztcblxuZXhwb3J0IHR5cGUgTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9ICd1cGRhdGUtY2FjaGUnIHwgJ3JlZmV0Y2gtcXVlcmllcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzIHtcbiAgbG9hZD86IGFueTtcbiAgbG9hZEFsbDogYW55O1xuICBsb2FkQWxsV2l0aFRvdGFsPzogYW55O1xuICBjb3VudEFsbD86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMge1xuICBzYXZlPzogYW55O1xuICBkZWxldGU/OiBhbnk7XG4gIHNhdmVBbGw/OiBhbnk7XG4gIGRlbGV0ZUFsbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMge1xuICBsaXN0ZW5DaGFuZ2VzPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5U2VydmljZU9wdGlvbnM8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8YW55LCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBRIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzID0gQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzLFxuICBNIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyxcbj4ge1xuICBxdWVyaWVzOiBRO1xuICBtdXRhdGlvbnM/OiBQYXJ0aWFsPE0+O1xuICBzdWJzY3JpcHRpb25zPzogUGFydGlhbDxTPjtcblxuICBlcXVhbHM/OiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2VxdWFscycgaW5zdGVhZFxuICAgKi9cbiAgZXF1YWxzRm4/OiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuXG4gIGlzTmV3PzogKGU6IFQpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSAnaXNOZXcnIGluc3RlYWRcbiAgICovXG4gIGlzTmV3Rm4/OiAoZTogVCkgPT4gYm9vbGVhbjtcbiAgZGVmYXVsdFNvcnRCeT86IGtleW9mIFQ7XG4gIGRlZmF1bHRTb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbjtcbiAgd2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5PzogTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTYXZlT3B0aW9uczxUID0gYW55LCBWID0gYW55PiB7XG4gIHJlZmV0Y2hRdWVyaWVzPzogKChyZXN1bHQ6IEZldGNoUmVzdWx0PHsgZGF0YTogVCB9PikgPT4gSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUpIHwgSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGU7XG4gIGF3YWl0UmVmZXRjaFF1ZXJpZXM/OiBib29sZWFuO1xuICB1cGRhdGU/OiBNdXRhdGlvblVwZGF0ZXJGbjx7IGRhdGE6IGFueSB9PiB8IE11dGF0aW9uVXBkYXRlckZ1bmN0aW9uPHsgZGF0YTogYW55IH0sIFYsIGFueSwgQXBvbGxvQ2FjaGU8eyBkYXRhOiBhbnkgfT4+O1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRW50aXR5U2VydmljZTxcbiAgICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgICBGIGV4dGVuZHMgRW50aXR5RmlsdGVyPEYsIFQsIElEPixcbiAgICBJRCA9IG51bWJlcixcbiAgICBXTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9uczxUPixcbiAgICBMTyBleHRlbmRzIEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM8VD4sXG4gICAgUSBleHRlbmRzIEJhc2VFbnRpdHlHcmFwaHFsUXVlcmllcyA9IEJhc2VFbnRpdHlHcmFwaHFsUXVlcmllcyxcbiAgICBNIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyxcbiAgICBTIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zID0gQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zLFxuICA+XG4gIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPFQsIEYsIElEPlxuICBpbXBsZW1lbnRzIElFbnRpdGllc1NlcnZpY2U8VCwgRiwgV08+LCBJRW50aXR5U2VydmljZTxULCBJRCwgTE8+XG57XG4gIHByb3RlY3RlZCByZWFkb25seSBfdHlwZW5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9sb2dUeXBlTmFtZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzOiBRO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbXV0YXRpb25zOiBQYXJ0aWFsPE0+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogUGFydGlhbDxTPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lcXVhbHNGbjogKGUxOiBULCBlMjogVCkgPT4gYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ld0ZuOiAoZTogVCkgPT4gYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFNvcnRCeToga2V5b2YgVDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5OiBNdXRhYmxlV2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcgKCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZmlsdGVyVHlwZTogbmV3ICgpID0+IEYsXG4gICAgb3B0aW9uczogQmFzZUVudGl0eVNlcnZpY2VPcHRpb25zPFQsIElELCBRLCBNLCBTPlxuICApIHtcbiAgICBzdXBlcihncmFwaHFsLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5xdWVyaWVzID0gb3B0aW9ucy5xdWVyaWVzO1xuICAgIHRoaXMubXV0YXRpb25zID0gb3B0aW9ucy5tdXRhdGlvbnMgfHwgPFBhcnRpYWw8TT4+e307XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gb3B0aW9ucy5zdWJzY3JpcHRpb25zIHx8IDxQYXJ0aWFsPFM+Pnt9O1xuICAgIHRoaXMuX2VxdWFsc0ZuID0gb3B0aW9ucy5lcXVhbHMgfHwgb3B0aW9ucy5lcXVhbHNGbjtcbiAgICB0aGlzLl9pc05ld0ZuID0gb3B0aW9ucy5pc05ldyB8fCBvcHRpb25zLmlzTmV3Rm47XG4gICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gb3B0aW9ucy5kZWZhdWx0U29ydEJ5IHx8ICdpZCc7XG4gICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IG9wdGlvbnMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYyc7XG4gICAgdGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPSBvcHRpb25zLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSB8fCAndXBkYXRlLWNhY2hlJztcblxuICAgIGNvbnN0IG9iaiA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIHRoaXMuX3R5cGVuYW1lID0gb2JqLl9fdHlwZW5hbWUgfHwgJ1Vua25vd25WTyc7XG4gICAgdGhpcy5fbG9nVHlwZU5hbWUgPSByZW1vdmVFbmQodGhpcy5fdHlwZW5hbWUsICdWTycpO1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIHdhdGNoKGlkOiBudW1iZXIsIG9wdHM/OiBXTyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgV2F0Y2hpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuXG4gICAgY29uc3QgdmFyaWFibGVzOiBhbnkgPSBvcHRzPy52YXJpYWJsZXMgfHwgeyBpZCB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSAob3B0cyAmJiBvcHRzLnF1ZXJ5KSB8fCB0aGlzLnF1ZXJpZXMubG9hZDtcbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsXG4gICAgICAud2F0Y2hRdWVyeTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgIGZldGNoUG9saWN5OiAob3B0cyAmJiAob3B0cy5mZXRjaFBvbGljeSBhcyBGZXRjaFBvbGljeSkpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdSRUZFUkVOVElBTC5FUlJPUi5MT0FEX0RBVEFfRVJST1InIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gdGhpcy5mcm9tT2JqZWN0KGRhdGEsIG9wdHMpKSk7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IExPKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBMb2FkaW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9IHske2lkfX0uLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogYW55ID0gb3B0cz8udmFyaWFibGVzIHx8IHsgaWQgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gb3B0cz8ucXVlcnkgfHwgdGhpcy5xdWVyaWVzLmxvYWQ7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgcXVlcnksXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgKG9wdHMuZmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpKSB8fCB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfREFUQV9FUlJPUiwgbWVzc2FnZTogJ1JFRkVSRU5USUFMLkVSUk9SLkxPQURfREFUQV9FUlJPUicgfSxcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gZW50aXR5XG4gICAgcmV0dXJuIHRoaXMuZnJvbU9iamVjdChkYXRhLCBvcHRzKTtcbiAgfVxuXG4gIHdhdGNoQWxsKG9mZnNldDogbnVtYmVyLCBzaXplOiBudW1iZXIsIHNvcnRCeT86IHN0cmluZywgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sIGRhdGFGaWx0ZXI/OiBGLCBvcHRzPzogV08pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICBkYXRhRmlsdGVyID0gdGhpcy5hc0ZpbHRlcihkYXRhRmlsdGVyKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogYW55ID0ge1xuICAgICAgLi4uKG9wdHM/LnZhcmlhYmxlcyB8fCB7fSksXG4gICAgICBvZmZzZXQ6IG9mZnNldCB8fCAwLFxuICAgICAgc2l6ZTogc2l6ZSB8fCAxMDAsXG4gICAgICBzb3J0Qnk6IHNvcnRCeSB8fCB0aGlzLmRlZmF1bHRTb3J0QnksXG4gICAgICBzb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIHx8IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24sXG4gICAgICBmaWx0ZXI6IGRhdGFGaWx0ZXIgJiYgZGF0YUZpbHRlci5hc1BvZE9iamVjdCgpLFxuICAgIH07XG5cbiAgICBsZXQgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFdhdGNoaW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9Li4uYCwgdmFyaWFibGVzKTtcblxuICAgIGNvbnN0IHdpdGhUb3RhbCA9ICghb3B0cyB8fCBvcHRzLndpdGhUb3RhbCAhPT0gZmFsc2UpICYmIHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsICYmIHRydWU7XG4gICAgY29uc3QgcXVlcnkgPVxuICAgICAgKG9wdHMgJiYgb3B0cy5xdWVyeSkgfHwgLy8gdXNlIGdpdmVuIHF1ZXJ5XG4gICAgICAvLyBPciBnZXQgbG9hZEFsbCBvciBsb2FkQWxsV2l0aFRvdGFsIHF1ZXJ5XG4gICAgICAod2l0aFRvdGFsID8gdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWwgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCk7XG4gICAgcmV0dXJuIHRoaXMubXV0YWJsZVdhdGNoUXVlcnk8TG9hZFJlc3VsdDxhbnk+Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIC8vIEZvcmNlIGNhY2hlZCBtdXRhYmxlIHF1ZXJ5XG4gICAgICBxdWVyeU5hbWU6IHdpdGhUb3RhbCA/ICdMb2FkQWxsV2l0aFRvdGFsJyA6ICdMb2FkQWxsJyxcbiAgICAgIGFycmF5RmllbGROYW1lOiAnZGF0YScsXG4gICAgICB0b3RhbEZpZWxkTmFtZTogd2l0aFRvdGFsID8gJ3RvdGFsJyA6IHVuZGVmaW5lZCxcbiAgICAgIGluc2VydEZpbHRlckZuOiBkYXRhRmlsdGVyICYmIGRhdGFGaWx0ZXIuYXNGaWx0ZXJGbigpLFxuICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdSRUZFUkVOVElBTC5FUlJPUi5MT0FEX0RBVEFfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSkgfHwgdW5kZWZpbmVkLFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSwgdG90YWwgfSkgPT4ge1xuICAgICAgICAvLyBDb252ZXJ0IHRvIGVudGl0aWVzIChpZiBuZWVkKVxuICAgICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuZnJvbU9iamVjdHMoZGF0YSwgb3B0cyk7XG5cbiAgICAgICAgaWYgKG5vdykge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYCR7dGhpcy5fbG9nVHlwZU5hbWV9IGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdGllcyk7XG4gICAgICAgICAgbm93ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhOiBlbnRpdGllcywgdG90YWwgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBbGwoXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHNvcnRCeT86IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICBvcHRzPzogTE8gJiB7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBkZWJ1ZyA9IHRoaXMuX2RlYnVnICYmICghb3B0cyB8fCBvcHRzLmRlYnVnICE9PSBmYWxzZSk7XG5cbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCB2YXJpYWJsZXM6IGFueSA9IHtcbiAgICAgIC4uLihvcHRzPy52YXJpYWJsZXMgfHwge30pLFxuICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMCxcbiAgICAgIHNpemU6IHNpemUgfHwgMTAwLFxuICAgICAgc29ydEJ5OiBzb3J0QnkgfHwgJ2lkJyxcbiAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfHwgJ2FzYycsXG4gICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYExvYWRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCB2YXJpYWJsZXMpO1xuXG4gICAgY29uc3Qgd2l0aFRvdGFsID0gKCFvcHRzIHx8IG9wdHMud2l0aFRvdGFsICE9PSBmYWxzZSkgJiYgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWwgJiYgdHJ1ZTtcbiAgICAvLyB1c2UgZ2l2ZW4gcXVlcnlcbiAgICBjb25zdCBxdWVyeSA9XG4gICAgICBvcHRzPy5xdWVyeSB8fFxuICAgICAgLy8gT3IgZ2V0IGxvYWRBbGwgb3IgbG9hZEFsbFdpdGhUb3RhbCBxdWVyeVxuICAgICAgKHdpdGhUb3RhbCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsIDogdGhpcy5xdWVyaWVzLmxvYWRBbGwpO1xuICAgIGNvbnN0IHsgZGF0YSwgdG90YWwgfSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTxMb2FkUmVzdWx0PGFueT4+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0RBVEFfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSkgfHwgJ25ldHdvcmstb25seScsXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuZnJvbU9iamVjdHMoZGF0YSwgb3B0cyk7XG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBpdGVtcyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IExvYWRSZXN1bHQ8VD4gPSB7XG4gICAgICBkYXRhOiBlbnRpdGllcyxcbiAgICAgIHRvdGFsOiB0b3RhbCB8fCBlbnRpdGllcy5sZW5ndGgsXG4gICAgfTtcblxuICAgIC8vIEFkZCBmZXRjaCBtb3JlIGNhcGFiaWxpdHksIGlmIHRvdGFsIHdhcyBmZXRjaGVkXG4gICAgaWYgKHdpdGhUb3RhbCkge1xuICAgICAgY29uc3QgbmV4dE9mZnNldCA9IChvZmZzZXQgfHwgMCkgKyBlbnRpdGllcy5sZW5ndGg7XG4gICAgICBpZiAobmV4dE9mZnNldCA8IHJlc3VsdC50b3RhbCkge1xuICAgICAgICByZXN1bHQuZmV0Y2hNb3JlID0gKCkgPT4gdGhpcy5sb2FkQWxsKG5leHRPZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgY291bnRBbGwoZmlsdGVyPzogUGFydGlhbDxGPiwgb3B0cz86IExPKSB7XG4gICAgLy8gSWYgbm8gY291bnRBbGwgcXVlcnlcbiAgICBpZiAoIXRoaXMucXVlcmllcy5jb3VudEFsbCAmJiAhb3B0cz8ucXVlcnkpIHtcbiAgICAgIC8vIEZhaWwgaWYgbm8gbG9hZEFsbCAoY2Fubm90IGNvdW50KVxuICAgICAgaWYgKCF0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhUb3RhbCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcblxuICAgICAgLy8gVXNlIGxvYWRBbGwgcXVlcnksIHdpdGggc2l6ZSA9IDA7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMubG9hZEFsbCgwLCAxLCBudWxsLCBudWxsLCBmaWx0ZXIsIDxMTyAmIHsgd2l0aFRvdGFsOiBib29sZWFuIH0+eyB3aXRoVG90YWw6IHRydWUgfSkpPy50b3RhbCB8fCAwO1xuICAgIH1cblxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogYW55ID0ge1xuICAgICAgLi4uKG9wdHM/LnZhcmlhYmxlcyB8fCB7fSksXG4gICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzPy5xdWVyeSB8fCB0aGlzLnF1ZXJpZXMuY291bnRBbGw7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgdG90YWw6IG51bWJlciB9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7IGNvZGU6IEVycm9yQ29kZXMuTE9BRF9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQ09VTlRfREFUQV9FUlJPUicgfSxcbiAgICAgIGZldGNoUG9saWN5OiAob3B0cyAmJiBvcHRzLmZldGNoUG9saWN5KSB8fCAnbmV0d29yay1vbmx5JyxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLnRvdGFsO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IFQsIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFkYXRhO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbChlbnRpdGllczogVFtdLCBvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSByZXR1cm4gZW50aXRpZXM7IC8vIE5vdGhpbmcgdG8gc2F2ZTogc2tpcFxuXG4gICAgaWYgKCF0aGlzLm11dGF0aW9ucy5zYXZlQWxsKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmUpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICAvLyBTYXZlIG9uZSBieSBvbmVcbiAgICAgIHJldHVybiBjaGFpblByb21pc2VzKChlbnRpdGllcyB8fCBbXSkubWFwKChlbnRpdHkpID0+ICgpID0+IHRoaXMuc2F2ZShlbnRpdHksIG9wdHMpKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RW50aXRpZXM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGpzb24gPSBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNOZXcoZW50aXR5KSkgbmV3RW50aXRpZXMucHVzaChlbnRpdHkpO1xuICAgICAgdGhpcy5maWxsRGVmYXVsdFByb3BlcnRpZXMoZW50aXR5KTtcbiAgICAgIHJldHVybiB0aGlzLmFzT2JqZWN0KGVudGl0eSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgU2F2aW5nIGFsbCAke3RoaXMuX2xvZ1R5cGVOYW1lfS4uLmAsIGpzb24pO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IFRbXSB9Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuc2F2ZUFsbCxcbiAgICAgIHJlZmV0Y2hRdWVyaWVzOiB0aGlzLmdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24ob3B0cyksXG4gICAgICBhd2FpdFJlZmV0Y2hRdWVyaWVzOiBvcHRzICYmIG9wdHMuYXdhaXRSZWZldGNoUXVlcmllcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkYXRhOiBqc29uLFxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IEVycm9yQ29kZXMuU0FWRV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuU0FWRV9EQVRBX0VSUk9SJyB9LFxuICAgICAgdXBkYXRlOiAoY2FjaGUsIHsgZGF0YSB9LCB7IGNvbnRleHQsIHZhcmlhYmxlcyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhdmVkRW50aXRpZXMgPSBkYXRhICYmIGRhdGEuZGF0YTtcbiAgICAgICAgaWYgKHNhdmVkRW50aXRpZXMpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgZW50aXRpZXMgKGlkIGFuZCB1cGRhdGUgZGF0ZSlcbiAgICAgICAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVkRW50aXR5ID0gc2F2ZWRFbnRpdGllcy5maW5kKChlKSA9PiB0aGlzLmVxdWFscyhlbnRpdHksIGUpKTtcbiAgICAgICAgICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZShzYXZlZEVudGl0eSwgZW50aXR5KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUsIHdpdGggbmV3IGVudGl0aWVzXG4gICAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShuZXdFbnRpdGllcykgJiYgdGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZSwge1xuICAgICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICAgIGRhdGE6IG5ld0VudGl0aWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHM/LnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKGNhY2hlLCB7IGRhdGEgfSwgeyBjb250ZXh0LCB2YXJpYWJsZXMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nVHlwZU5hbWV9IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGVudGl0aWVzKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXRpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIHJlZmVyZW50aWFsIGVudGl0eVxuICAgKlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGVudGl0eTogVCwgb3B0cz86IEVudGl0eVNhdmVPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCF0aGlzLm11dGF0aW9ucy5zYXZlKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmVBbGwpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5zYXZlQWxsKFtlbnRpdHldLCBvcHRzKTtcbiAgICAgIHJldHVybiBkYXRhICYmIGRhdGFbMF07XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZXdFbnRpdHkgPSB0aGlzLmlzTmV3KGVudGl0eSk7XG5cbiAgICAvLyBGaWxsIGRlZmF1bHQgcHJvcGVydGllc1xuICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gaW50byBqc29uXG4gICAgY29uc3QganNvbiA9IHRoaXMuYXNPYmplY3QoZW50aXR5KTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBTYXZpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBqc29uKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLnNhdmUsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvbixcbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLlNBVkVfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlNBVkVfREFUQV9FUlJPUicgfSxcbiAgICAgIHVwZGF0ZTogKGNhY2hlLCB7IGRhdGEgfSwgeyBjb250ZXh0LCB2YXJpYWJsZXMgfSkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgZW50aXR5XG4gICAgICAgIGNvbnN0IHNhdmVkRW50aXR5ID0gZGF0YSAmJiBkYXRhLmRhdGE7XG4gICAgICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZShzYXZlZEVudGl0eSwgZW50aXR5KTtcblxuICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgY2FjaGVcbiAgICAgICAgaWYgKGlzTmV3RW50aXR5ICYmIHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0eSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzPy51cGRhdGUpIHtcbiAgICAgICAgICBvcHRzLnVwZGF0ZShjYWNoZSwgeyBkYXRhIH0sIHsgY29udGV4dCwgdmFyaWFibGVzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke2VudGl0eS5fX3R5cGVuYW1lfSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdHkpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHJlZmVyZW50aWFsIGVudGl0aWVzXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGwoXG4gICAgZW50aXRpZXM6IFRbXSxcbiAgICBvcHRzPzpcbiAgICAgIHwgUGFydGlhbDx7XG4gICAgICAgICAgdXBkYXRlOiBNdXRhdGlvblVwZGF0ZXJGbjxhbnk+O1xuICAgICAgICB9PlxuICAgICAgfCBhbnlcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLmRlbGV0ZUFsbCkge1xuICAgICAgaWYgKCF0aGlzLm11dGF0aW9ucy5kZWxldGUpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICAvLyBEZWxldGUgb25lIGJ5IG9uZVxuICAgICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoKGVudGl0aWVzIHx8IFtdKS5tYXAoKGVudGl0eSkgPT4gKCkgPT4gdGhpcy5kZWxldGUoZW50aXR5LCBvcHRzKSkpO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBzYXZlZCBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gZW50aXRpZXMgJiYgZW50aXRpZXMuZmlsdGVyKChlKSA9PiBpc05vdE5pbChlLmlkKSk7XG5cbiAgICAvLyBOb3RoaW5nIHRvIHNhdmU6IHNraXBcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaWRzID0gZW50aXRpZXMubWFwKCh0KSA9PiB0LmlkKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgRGVsZXRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVBbGwsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHsgaWRzIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkRFTEVURV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREVMRVRFX0RBVEFfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChjYWNoZSwgcmVzKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBpZHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKGNhY2hlLCByZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkZWxldGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSByZWZlcmVudGlhbCBlbnRpdHlcbiAgICovXG4gIGFzeW5jIGRlbGV0ZShlbnRpdHk6IFQsIG9wdHM/OiBFbnRpdHlTYXZlT3B0aW9ucyB8IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLm11dGF0aW9ucy5kZWxldGUpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnMuZGVsZXRlQWxsKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGVsZXRlQWxsKFtlbnRpdHldLCBvcHRzKTtcbiAgICAgIHJldHVybiBkYXRhICYmIGRhdGFbMF07XG4gICAgfVxuXG4gICAgLy8gTm90aGluZyB0byBzYXZlOiBza2lwXG4gICAgaWYgKCFlbnRpdHkgfHwgaXNOaWwoZW50aXR5LmlkKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaWQgPSBlbnRpdHkuaWQ7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYERlbGV0aW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9IHske2lkfX0uLi5gKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8YW55Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuZGVsZXRlLFxuICAgICAgcmVmZXRjaFF1ZXJpZXM6IHRoaXMuZ2V0UmVmZXRjaFF1ZXJpZXNGb3JNdXRhdGlvbihvcHRzKSxcbiAgICAgIGF3YWl0UmVmZXRjaFF1ZXJpZXM6IG9wdHMgJiYgb3B0cy5hd2FpdFJlZmV0Y2hRdWVyaWVzLFxuICAgICAgdmFyaWFibGVzOiB7IGlkIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkRFTEVURV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREVMRVRFX0RBVEFfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChwcm94eSwgcmVzKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKHByb3h5LCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBpZHM6IFtpZF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHByb3h5LCByZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkZWxldGVkIGluICR7bmV3IERhdGUoKS5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpfW1zYCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhpZDogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTGlzdGVuQ2hhbmdlc09wdGlvbnM8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoaXNOaWwoaWQpKSB0aHJvdyBFcnJvcihcIk1pc3NpbmcgYXJndW1lbnQgJ2lkJyBcIik7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQ2hhbmdlcykge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0ubGlzdGVuQ2hhbmdlcygpIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIFdpbGwgZW1wdHkgb2JzZXJ2YWJsZWApO1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVzID0gb3B0cz8udmFyaWFibGVzIHx8IHtcbiAgICAgIGlkLFxuICAgICAgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdHM/LmludGVydmFsLCAwKSwgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuICAgIH07XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBbV1NdIExpc3RlbmluZyBmb3IgY2hhbmdlcyBvbiAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsXG4gICAgICAuc3Vic2NyaWJlPHsgZGF0YTogYW55IH0+KHtcbiAgICAgICAgcXVlcnk6IG9wdHM/LnF1ZXJ5IHx8IHRoaXMuc3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgICBmZXRjaFBvbGljeTogb3B0cz8uZmV0Y2hQb2xpY3kgfHwgJ25vLWNhY2hlJyxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU1VCU0NSSUJFX0RBVEFfRVJST1IsXG4gICAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNVQlNDUklCRV9EQVRBX0VSUk9SJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gZW50aXR5IChpZiBuZWVkKVxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZnJvbU9iamVjdChkYXRhLCBvcHRzKTtcbiAgICAgICAgICAvL2lmIChlbnRpdHkgJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFtXU10gUmVjZWl2ZWQgY2hhbmdlcyBvbiAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19YCwgZW50aXR5KTtcblxuICAgICAgICAgIGlmICghZW50aXR5KSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFtXU10gUmVjZWl2ZWQgZW1wdHkgZGF0YSBvbiAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19IC0gQ2hlY2sgaWYgZW50aXR5IGhhcyBiZWVuIGRlbGV0ZWRgKTtcblxuICAgICAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IFQsIHRhcmdldDogVCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgKGlkIGFuZCB1cGRhdGVEYXRlKVxuICAgIEVudGl0eVV0aWxzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbiAgZnJvbU9iamVjdChcbiAgICBzb3VyY2U6IGFueSxcbiAgICBvcHRzPzoge1xuICAgICAgdG9FbnRpdHk/OiBib29sZWFuIHwgKChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gVCk7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBUIHtcbiAgICAvLyBTaW1wbGUgY2FzdCAoc2tpcCBjb252ZXJzaW9uKVxuICAgIGlmICghc291cmNlIHx8IG9wdHM/LnRvRW50aXR5ID09PSBmYWxzZSkgcmV0dXJuIHNvdXJjZSBhcyBUO1xuXG4gICAgLy8gVXNlciBkZWZpbmVkIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBvcHRzPy50b0VudGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG9wdHMudG9FbnRpdHkoc291cmNlLCBvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBFbnRpdHkgY29udmVyc2lvblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXNGaWx0ZXIoc291cmNlOiBhbnkpOiBGIHtcbiAgICByZXR1cm4gRW50aXR5RmlsdGVyVXRpbHMuZnJvbU9iamVjdChzb3VyY2UsIHRoaXMuZmlsdGVyVHlwZSk7XG4gIH1cblxuICBlcXVhbHMoZDE6IFQsIGQyOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2VxdWFsc0ZuKSByZXR1cm4gdGhpcy5fZXF1YWxzRm4oZDEsIGQyKTtcbiAgICByZXR1cm4gZDEgJiYgZDEuZXF1YWxzID8gZDEuZXF1YWxzKGQyKSA6IEVudGl0eVV0aWxzLmVxdWFscyhkMSwgZDIsICdpZCcpO1xuICB9XG5cbiAgaXNOZXcoZGF0YTogVCkge1xuICAgIGlmICh0aGlzLl9pc05ld0ZuKSByZXR1cm4gdGhpcy5faXNOZXdGbihkYXRhKTtcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuaXNFbXB0eShkYXRhLCAnaWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZXF1YWxzKCkgaW5zdGVhZFxuICAgKi9cbiAgZXF1YWxzRm4oZDE6IFQsIGQyOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuZXF1YWxzKGQxLCBkMik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGlzTmV3KCkgaW5zdGVhZFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgaXNOZXdGbihkYXRhOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNOZXcoZGF0YSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpIHtcbiAgICAvLyBObyBsaW1pdCBmb3IgdXBkYXRhYmxlIHdhdGNoIHF1ZXJpZXMsIGlmIGRlc2t0b3BcbiAgICBpZiAoIXRoaXMucGxhdGZvcm0ubW9iaWxlKSB7XG4gICAgICB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQgPSAtMTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKHNvdXJjZTogVCkge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBmcm9tT2JqZWN0cyhcbiAgICBzb3VyY2VzOiBhbnlbXSxcbiAgICBvcHRzPzoge1xuICAgICAgdG9FbnRpdHk/OiBib29sZWFuIHwgKChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gVCk7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBUW10ge1xuICAgIHJldHVybiAoc291cmNlcyB8fCBbXSkubWFwKChzb3VyY2UpID0+IHRoaXMuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc09iamVjdChzb3VyY2U6IFQsIG9wdHM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiBhbnkge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXNcbiAgICByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24oXG4gICAgb3B0cz86IEVudGl0eVNhdmVPcHRpb25zXG4gICk6ICgocmVzdWx0OiBGZXRjaFJlc3VsdDx7IGRhdGE6IGFueSB9PikgPT4gSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUpIHwgSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUge1xuICAgIGlmIChvcHRzICYmIG9wdHMucmVmZXRjaFF1ZXJpZXMpIHJldHVybiBvcHRzLnJlZmV0Y2hRdWVyaWVzO1xuXG4gICAgLy8gU2tpcCBpZiB1cGRhdGUgcG9saWN5IG5vdCB1c2VkIHJlZmVjdGggcXVlcmllc1xuICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSAhPT0gJ3JlZmV0Y2gtcXVlcmllcycpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5nZXRMb2FkUXVlcmllcygpO1xuICAgIGlmICghcXVlcmllcy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7IC8vIFNraXAgaWYgZW1wdHlcblxuICAgIC8vIEZpbmQgdGhlIHJlZmV0Y2ggcXVlcmllcyBkZWZpbml0aW9uXG4gICAgcmV0dXJuIHRoaXMuZmluZFJlZmV0Y2hRdWVyaWVzKHsgcXVlcmllcyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMb2FkUXVlcmllcygpOiBEb2N1bWVudE5vZGVbXSB7XG4gICAgcmV0dXJuIFt0aGlzLnF1ZXJpZXMubG9hZEFsbCwgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWxdLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TG9hZFF1ZXJ5TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ0xvYWRBbGwnLCAnTG9hZEFsbFdpdGhUb3RhbCddO1xuICB9XG59XG4iXX0=
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFLdEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFXbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBaUMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFnQixpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBd0R2RSxXQUFXO0FBRVgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsaUJBVXBCLFNBQVEsa0JBQTRCO0lBaUJ4QjtJQUNBO0lBQ0E7SUFDQTtJQWpCTyxTQUFTLENBQVM7SUFDbEIsWUFBWSxDQUFTO0lBRXJCLE9BQU8sQ0FBSTtJQUNYLFNBQVMsQ0FBYTtJQUN0QixhQUFhLENBQWE7SUFDMUIsU0FBUyxDQUE0QjtJQUNyQyxRQUFRLENBQW9CO0lBRTVCLGFBQWEsQ0FBVTtJQUN2QixvQkFBb0IsQ0FBZ0I7SUFDcEMsd0JBQXdCLENB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LENBQUM7SUFFUyxRQUFRLENBQUMsTUFBUyxFQUFFLElBQTRCO1FBQ3hELGtDQUFrQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLDRCQUE0QixDQUNwQyxJQUF3QjtRQUV4QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUU1RCxpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssaUJBQWlCO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFMUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsZ0JBQWdCO1FBRXZELHNDQUFzQztRQUN0QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLGNBQWM7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixPQUFPLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekMsQ0FBQzt3R0FuakJtQixpQkFBaUI7NEZBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFGdEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgeyBBcG9sbG9DYWNoZSwgRmV0Y2hQb2xpY3ksIEludGVybmFsUmVmZXRjaFF1ZXJpZXNJbmNsdWRlLCBNdXRhdGlvblVwZGF0ZXJGbiwgTXV0YXRpb25VcGRhdGVyRnVuY3Rpb24gfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge1xuICBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucyxcbiAgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLFxuICBFbnRpdHlTZXJ2aWNlTGlzdGVuQ2hhbmdlc09wdGlvbnMsXG4gIElFbnRpdGllc1NlcnZpY2UsXG4gIElFbnRpdHlTZXJ2aWNlLFxuICBMb2FkUmVzdWx0LFxufSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgR3JhcGhxbFNlcnZpY2UgfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEVudGl0eVV0aWxzIH0gZnJvbSAnLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgY2hhaW5Qcm9taXNlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCByZW1vdmVFbmQsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoUmVzdWx0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvbGluay9jb3JlJztcbmltcG9ydCB7IEVudGl0eUZpbHRlciwgRW50aXR5RmlsdGVyVXRpbHMgfSBmcm9tICcuL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUgfSBmcm9tICdncmFwaHFsJztcblxuZXhwb3J0IHR5cGUgTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9ICd1cGRhdGUtY2FjaGUnIHwgJ3JlZmV0Y2gtcXVlcmllcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzIHtcbiAgbG9hZD86IGFueTtcbiAgbG9hZEFsbDogYW55O1xuICBsb2FkQWxsV2l0aFRvdGFsPzogYW55O1xuICBjb3VudEFsbD86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMge1xuICBzYXZlPzogYW55O1xuICBkZWxldGU/OiBhbnk7XG4gIHNhdmVBbGw/OiBhbnk7XG4gIGRlbGV0ZUFsbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMge1xuICBsaXN0ZW5DaGFuZ2VzPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW50aXR5U2VydmljZU9wdGlvbnM8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8YW55LCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBRIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzID0gQmFzZUVudGl0eUdyYXBocWxRdWVyaWVzLFxuICBNIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyxcbj4ge1xuICBxdWVyaWVzOiBRO1xuICBtdXRhdGlvbnM/OiBQYXJ0aWFsPE0+O1xuICBzdWJzY3JpcHRpb25zPzogUGFydGlhbDxTPjtcblxuICBlcXVhbHM/OiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2VxdWFscycgaW5zdGVhZFxuICAgKi9cbiAgZXF1YWxzRm4/OiAoZTE6IFQsIGUyOiBUKSA9PiBib29sZWFuO1xuXG4gIGlzTmV3PzogKGU6IFQpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSAnaXNOZXcnIGluc3RlYWRcbiAgICovXG4gIGlzTmV3Rm4/OiAoZTogVCkgPT4gYm9vbGVhbjtcbiAgZGVmYXVsdFNvcnRCeT86IGtleW9mIFQ7XG4gIGRlZmF1bHRTb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbjtcbiAgd2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5PzogTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTYXZlT3B0aW9uczxUID0gYW55LCBWID0gYW55PiB7XG4gIHJlZmV0Y2hRdWVyaWVzPzogKChyZXN1bHQ6IEZldGNoUmVzdWx0PHsgZGF0YTogVCB9PikgPT4gSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUpIHwgSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGU7XG4gIGF3YWl0UmVmZXRjaFF1ZXJpZXM/OiBib29sZWFuO1xuICB1cGRhdGU/OiBNdXRhdGlvblVwZGF0ZXJGbjx7IGRhdGE6IGFueSB9PiB8IE11dGF0aW9uVXBkYXRlckZ1bmN0aW9uPHsgZGF0YTogYW55IH0sIFYsIGFueSwgQXBvbGxvQ2FjaGU8eyBkYXRhOiBhbnkgfT4+O1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRW50aXR5U2VydmljZTxcbiAgICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgICBGIGV4dGVuZHMgRW50aXR5RmlsdGVyPEYsIFQsIElEPixcbiAgICBJRCA9IG51bWJlcixcbiAgICBXTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9uczxUPixcbiAgICBMTyBleHRlbmRzIEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnM8VD4sXG4gICAgUSBleHRlbmRzIEJhc2VFbnRpdHlHcmFwaHFsUXVlcmllcyA9IEJhc2VFbnRpdHlHcmFwaHFsUXVlcmllcyxcbiAgICBNIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSBCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucyxcbiAgICBTIGV4dGVuZHMgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zID0gQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zLFxuICA+XG4gIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPFQsIEYsIElEPlxuICBpbXBsZW1lbnRzIElFbnRpdGllc1NlcnZpY2U8VCwgRiwgV08+LCBJRW50aXR5U2VydmljZTxULCBJRCwgTE8+XG57XG4gIHByb3RlY3RlZCByZWFkb25seSBfdHlwZW5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9sb2dUeXBlTmFtZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzOiBRO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbXV0YXRpb25zOiBQYXJ0aWFsPE0+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogUGFydGlhbDxTPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lcXVhbHNGbjogKGUxOiBULCBlMjogVCkgPT4gYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ld0ZuOiAoZTogVCkgPT4gYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFNvcnRCeToga2V5b2YgVDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5OiBNdXRhYmxlV2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcgKCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZmlsdGVyVHlwZTogbmV3ICgpID0+IEYsXG4gICAgb3B0aW9uczogQmFzZUVudGl0eVNlcnZpY2VPcHRpb25zPFQsIElELCBRLCBNLCBTPlxuICApIHtcbiAgICBzdXBlcihncmFwaHFsLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5xdWVyaWVzID0gb3B0aW9ucy5xdWVyaWVzO1xuICAgIHRoaXMubXV0YXRpb25zID0gb3B0aW9ucy5tdXRhdGlvbnMgfHwgPFBhcnRpYWw8TT4+e307XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gb3B0aW9ucy5zdWJzY3JpcHRpb25zIHx8IDxQYXJ0aWFsPFM+Pnt9O1xuICAgIHRoaXMuX2VxdWFsc0ZuID0gb3B0aW9ucy5lcXVhbHMgfHwgb3B0aW9ucy5lcXVhbHNGbjtcbiAgICB0aGlzLl9pc05ld0ZuID0gb3B0aW9ucy5pc05ldyB8fCBvcHRpb25zLmlzTmV3Rm47XG4gICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gb3B0aW9ucy5kZWZhdWx0U29ydEJ5IHx8ICdpZCc7XG4gICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9IG9wdGlvbnMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYyc7XG4gICAgdGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPSBvcHRpb25zLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSB8fCAndXBkYXRlLWNhY2hlJztcblxuICAgIGNvbnN0IG9iaiA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIHRoaXMuX3R5cGVuYW1lID0gb2JqLl9fdHlwZW5hbWUgfHwgJ1Vua25vd25WTyc7XG4gICAgdGhpcy5fbG9nVHlwZU5hbWUgPSByZW1vdmVFbmQodGhpcy5fdHlwZW5hbWUsICdWTycpO1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIHdhdGNoKGlkOiBudW1iZXIsIG9wdHM/OiBXTyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgV2F0Y2hpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0geyR7aWR9fS4uLmApO1xuXG4gICAgY29uc3QgdmFyaWFibGVzOiBhbnkgPSBvcHRzPy52YXJpYWJsZXMgfHwgeyBpZCB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSAob3B0cyAmJiBvcHRzLnF1ZXJ5KSB8fCB0aGlzLnF1ZXJpZXMubG9hZDtcbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsXG4gICAgICAud2F0Y2hRdWVyeTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgIGZldGNoUG9saWN5OiAob3B0cyAmJiAob3B0cy5mZXRjaFBvbGljeSBhcyBGZXRjaFBvbGljeSkpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0RBVEFfRVJST1InIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gdGhpcy5mcm9tT2JqZWN0KGRhdGEsIG9wdHMpKSk7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IExPKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBMb2FkaW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9IHske2lkfX0uLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogYW55ID0gb3B0cz8udmFyaWFibGVzIHx8IHsgaWQgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gb3B0cz8ucXVlcnkgfHwgdGhpcy5xdWVyaWVzLmxvYWQ7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgcXVlcnksXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgKG9wdHMuZmV0Y2hQb2xpY3kgYXMgRmV0Y2hQb2xpY3kpKSB8fCB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfREFUQV9FUlJPUicgfSxcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gZW50aXR5XG4gICAgcmV0dXJuIHRoaXMuZnJvbU9iamVjdChkYXRhLCBvcHRzKTtcbiAgfVxuXG4gIHdhdGNoQWxsKG9mZnNldDogbnVtYmVyLCBzaXplOiBudW1iZXIsIHNvcnRCeT86IHN0cmluZywgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sIGRhdGFGaWx0ZXI/OiBGLCBvcHRzPzogV08pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICBkYXRhRmlsdGVyID0gdGhpcy5hc0ZpbHRlcihkYXRhRmlsdGVyKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogYW55ID0ge1xuICAgICAgLi4uKG9wdHM/LnZhcmlhYmxlcyB8fCB7fSksXG4gICAgICBvZmZzZXQ6IG9mZnNldCB8fCAwLFxuICAgICAgc2l6ZTogc2l6ZSB8fCAxMDAsXG4gICAgICBzb3J0Qnk6IHNvcnRCeSB8fCB0aGlzLmRlZmF1bHRTb3J0QnksXG4gICAgICBzb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIHx8IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24sXG4gICAgICBmaWx0ZXI6IGRhdGFGaWx0ZXIgJiYgZGF0YUZpbHRlci5hc1BvZE9iamVjdCgpLFxuICAgIH07XG5cbiAgICBsZXQgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFdhdGNoaW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9Li4uYCwgdmFyaWFibGVzKTtcblxuICAgIGNvbnN0IHdpdGhUb3RhbCA9ICghb3B0cyB8fCBvcHRzLndpdGhUb3RhbCAhPT0gZmFsc2UpICYmIHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsICYmIHRydWU7XG4gICAgY29uc3QgcXVlcnkgPVxuICAgICAgKG9wdHMgJiYgb3B0cy5xdWVyeSkgfHwgLy8gdXNlIGdpdmVuIHF1ZXJ5XG4gICAgICAvLyBPciBnZXQgbG9hZEFsbCBvciBsb2FkQWxsV2l0aFRvdGFsIHF1ZXJ5XG4gICAgICAod2l0aFRvdGFsID8gdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWwgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCk7XG4gICAgcmV0dXJuIHRoaXMubXV0YWJsZVdhdGNoUXVlcnk8TG9hZFJlc3VsdDxhbnk+Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIC8vIEZvcmNlIGNhY2hlZCBtdXRhYmxlIHF1ZXJ5XG4gICAgICBxdWVyeU5hbWU6IHdpdGhUb3RhbCA/ICdMb2FkQWxsV2l0aFRvdGFsJyA6ICdMb2FkQWxsJyxcbiAgICAgIGFycmF5RmllbGROYW1lOiAnZGF0YScsXG4gICAgICB0b3RhbEZpZWxkTmFtZTogd2l0aFRvdGFsID8gJ3RvdGFsJyA6IHVuZGVmaW5lZCxcbiAgICAgIGluc2VydEZpbHRlckZuOiBkYXRhRmlsdGVyICYmIGRhdGFGaWx0ZXIuYXNGaWx0ZXJGbigpLFxuICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0RBVEFfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSkgfHwgdW5kZWZpbmVkLFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSwgdG90YWwgfSkgPT4ge1xuICAgICAgICAvLyBDb252ZXJ0IHRvIGVudGl0aWVzIChpZiBuZWVkKVxuICAgICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuZnJvbU9iamVjdHMoZGF0YSwgb3B0cyk7XG5cbiAgICAgICAgaWYgKG5vdykge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYCR7dGhpcy5fbG9nVHlwZU5hbWV9IGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdGllcyk7XG4gICAgICAgICAgbm93ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhOiBlbnRpdGllcywgdG90YWwgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBbGwoXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHNvcnRCeT86IGtleW9mIFQgfCBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICBvcHRzPzogTE8gJiB7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBkZWJ1ZyA9IHRoaXMuX2RlYnVnICYmICghb3B0cyB8fCBvcHRzLmRlYnVnICE9PSBmYWxzZSk7XG5cbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCB2YXJpYWJsZXM6IGFueSA9IHtcbiAgICAgIC4uLihvcHRzPy52YXJpYWJsZXMgfHwge30pLFxuICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMCxcbiAgICAgIHNpemU6IHNpemUgfHwgMTAwLFxuICAgICAgc29ydEJ5OiBzb3J0QnkgfHwgJ2lkJyxcbiAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfHwgJ2FzYycsXG4gICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYExvYWRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCB2YXJpYWJsZXMpO1xuXG4gICAgY29uc3Qgd2l0aFRvdGFsID0gKCFvcHRzIHx8IG9wdHMud2l0aFRvdGFsICE9PSBmYWxzZSkgJiYgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWwgJiYgdHJ1ZTtcbiAgICAvLyB1c2UgZ2l2ZW4gcXVlcnlcbiAgICBjb25zdCBxdWVyeSA9XG4gICAgICBvcHRzPy5xdWVyeSB8fFxuICAgICAgLy8gT3IgZ2V0IGxvYWRBbGwgb3IgbG9hZEFsbFdpdGhUb3RhbCBxdWVyeVxuICAgICAgKHdpdGhUb3RhbCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aFRvdGFsIDogdGhpcy5xdWVyaWVzLmxvYWRBbGwpO1xuICAgIGNvbnN0IHsgZGF0YSwgdG90YWwgfSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTxMb2FkUmVzdWx0PGFueT4+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0RBVEFfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0RBVEFfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSkgfHwgJ25ldHdvcmstb25seScsXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuZnJvbU9iamVjdHMoZGF0YSwgb3B0cyk7XG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBpdGVtcyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IExvYWRSZXN1bHQ8VD4gPSB7XG4gICAgICBkYXRhOiBlbnRpdGllcyxcbiAgICAgIHRvdGFsOiB0b3RhbCB8fCBlbnRpdGllcy5sZW5ndGgsXG4gICAgfTtcblxuICAgIC8vIEFkZCBmZXRjaCBtb3JlIGNhcGFiaWxpdHksIGlmIHRvdGFsIHdhcyBmZXRjaGVkXG4gICAgaWYgKHdpdGhUb3RhbCkge1xuICAgICAgY29uc3QgbmV4dE9mZnNldCA9IChvZmZzZXQgfHwgMCkgKyBlbnRpdGllcy5sZW5ndGg7XG4gICAgICBpZiAobmV4dE9mZnNldCA8IHJlc3VsdC50b3RhbCkge1xuICAgICAgICByZXN1bHQuZmV0Y2hNb3JlID0gKCkgPT4gdGhpcy5sb2FkQWxsKG5leHRPZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgY291bnRBbGwoZmlsdGVyPzogUGFydGlhbDxGPiwgb3B0cz86IExPKSB7XG4gICAgLy8gSWYgbm8gY291bnRBbGwgcXVlcnlcbiAgICBpZiAoIXRoaXMucXVlcmllcy5jb3VudEFsbCAmJiAhb3B0cz8ucXVlcnkpIHtcbiAgICAgIC8vIEZhaWwgaWYgbm8gbG9hZEFsbCAoY2Fubm90IGNvdW50KVxuICAgICAgaWYgKCF0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhUb3RhbCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcblxuICAgICAgLy8gVXNlIGxvYWRBbGwgcXVlcnksIHdpdGggc2l6ZSA9IDA7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMubG9hZEFsbCgwLCAxLCBudWxsLCBudWxsLCBmaWx0ZXIsIDxMTyAmIHsgd2l0aFRvdGFsOiBib29sZWFuIH0+eyB3aXRoVG90YWw6IHRydWUgfSkpPy50b3RhbCB8fCAwO1xuICAgIH1cblxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogYW55ID0ge1xuICAgICAgLi4uKG9wdHM/LnZhcmlhYmxlcyB8fCB7fSksXG4gICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzPy5xdWVyeSB8fCB0aGlzLnF1ZXJpZXMuY291bnRBbGw7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgdG90YWw6IG51bWJlciB9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7IGNvZGU6IEVycm9yQ29kZXMuTE9BRF9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQ09VTlRfREFUQV9FUlJPUicgfSxcbiAgICAgIGZldGNoUG9saWN5OiAob3B0cyAmJiBvcHRzLmZldGNoUG9saWN5KSB8fCAnbmV0d29yay1vbmx5JyxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLnRvdGFsO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IFQsIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFkYXRhO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbChlbnRpdGllczogVFtdLCBvcHRzPzogRW50aXR5U2F2ZU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSByZXR1cm4gZW50aXRpZXM7IC8vIE5vdGhpbmcgdG8gc2F2ZTogc2tpcFxuXG4gICAgaWYgKCF0aGlzLm11dGF0aW9ucy5zYXZlQWxsKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmUpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICAvLyBTYXZlIG9uZSBieSBvbmVcbiAgICAgIHJldHVybiBjaGFpblByb21pc2VzKChlbnRpdGllcyB8fCBbXSkubWFwKChlbnRpdHkpID0+ICgpID0+IHRoaXMuc2F2ZShlbnRpdHksIG9wdHMpKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RW50aXRpZXM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGpzb24gPSBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNOZXcoZW50aXR5KSkgbmV3RW50aXRpZXMucHVzaChlbnRpdHkpO1xuICAgICAgdGhpcy5maWxsRGVmYXVsdFByb3BlcnRpZXMoZW50aXR5KTtcbiAgICAgIHJldHVybiB0aGlzLmFzT2JqZWN0KGVudGl0eSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgU2F2aW5nIGFsbCAke3RoaXMuX2xvZ1R5cGVOYW1lfS4uLmAsIGpzb24pO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IFRbXSB9Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuc2F2ZUFsbCxcbiAgICAgIHJlZmV0Y2hRdWVyaWVzOiB0aGlzLmdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24ob3B0cyksXG4gICAgICBhd2FpdFJlZmV0Y2hRdWVyaWVzOiBvcHRzICYmIG9wdHMuYXdhaXRSZWZldGNoUXVlcmllcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkYXRhOiBqc29uLFxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IEVycm9yQ29kZXMuU0FWRV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuU0FWRV9EQVRBX0VSUk9SJyB9LFxuICAgICAgdXBkYXRlOiAoY2FjaGUsIHsgZGF0YSB9LCB7IGNvbnRleHQsIHZhcmlhYmxlcyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhdmVkRW50aXRpZXMgPSBkYXRhICYmIGRhdGEuZGF0YTtcbiAgICAgICAgaWYgKHNhdmVkRW50aXRpZXMpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgZW50aXRpZXMgKGlkIGFuZCB1cGRhdGUgZGF0ZSlcbiAgICAgICAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVkRW50aXR5ID0gc2F2ZWRFbnRpdGllcy5maW5kKChlKSA9PiB0aGlzLmVxdWFscyhlbnRpdHksIGUpKTtcbiAgICAgICAgICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZShzYXZlZEVudGl0eSwgZW50aXR5KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUsIHdpdGggbmV3IGVudGl0aWVzXG4gICAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShuZXdFbnRpdGllcykgJiYgdGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhjYWNoZSwge1xuICAgICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICAgIGRhdGE6IG5ld0VudGl0aWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHM/LnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKGNhY2hlLCB7IGRhdGEgfSwgeyBjb250ZXh0LCB2YXJpYWJsZXMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nVHlwZU5hbWV9IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGVudGl0aWVzKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXRpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIHJlZmVyZW50aWFsIGVudGl0eVxuICAgKlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGVudGl0eTogVCwgb3B0cz86IEVudGl0eVNhdmVPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCF0aGlzLm11dGF0aW9ucy5zYXZlKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zLnNhdmVBbGwpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5zYXZlQWxsKFtlbnRpdHldLCBvcHRzKTtcbiAgICAgIHJldHVybiBkYXRhICYmIGRhdGFbMF07XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZXdFbnRpdHkgPSB0aGlzLmlzTmV3KGVudGl0eSk7XG5cbiAgICAvLyBGaWxsIGRlZmF1bHQgcHJvcGVydGllc1xuICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gaW50byBqc29uXG4gICAgY29uc3QganNvbiA9IHRoaXMuYXNPYmplY3QoZW50aXR5KTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBTYXZpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBqc29uKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLnNhdmUsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvbixcbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLlNBVkVfREFUQV9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlNBVkVfREFUQV9FUlJPUicgfSxcbiAgICAgIHVwZGF0ZTogKGNhY2hlLCB7IGRhdGEgfSwgeyBjb250ZXh0LCB2YXJpYWJsZXMgfSkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgZW50aXR5XG4gICAgICAgIGNvbnN0IHNhdmVkRW50aXR5ID0gZGF0YSAmJiBkYXRhLmRhdGE7XG4gICAgICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZShzYXZlZEVudGl0eSwgZW50aXR5KTtcblxuICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgY2FjaGVcbiAgICAgICAgaWYgKGlzTmV3RW50aXR5ICYmIHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0eSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzPy51cGRhdGUpIHtcbiAgICAgICAgICBvcHRzLnVwZGF0ZShjYWNoZSwgeyBkYXRhIH0sIHsgY29udGV4dCwgdmFyaWFibGVzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke2VudGl0eS5fX3R5cGVuYW1lfSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdHkpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHJlZmVyZW50aWFsIGVudGl0aWVzXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGwoXG4gICAgZW50aXRpZXM6IFRbXSxcbiAgICBvcHRzPzpcbiAgICAgIHwgUGFydGlhbDx7XG4gICAgICAgICAgdXBkYXRlOiBNdXRhdGlvblVwZGF0ZXJGbjxhbnk+O1xuICAgICAgICB9PlxuICAgICAgfCBhbnlcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMubXV0YXRpb25zLmRlbGV0ZUFsbCkge1xuICAgICAgaWYgKCF0aGlzLm11dGF0aW9ucy5kZWxldGUpIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgICAvLyBEZWxldGUgb25lIGJ5IG9uZVxuICAgICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoKGVudGl0aWVzIHx8IFtdKS5tYXAoKGVudGl0eSkgPT4gKCkgPT4gdGhpcy5kZWxldGUoZW50aXR5LCBvcHRzKSkpO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBzYXZlZCBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gZW50aXRpZXMgJiYgZW50aXRpZXMuZmlsdGVyKChlKSA9PiBpc05vdE5pbChlLmlkKSk7XG5cbiAgICAvLyBOb3RoaW5nIHRvIHNhdmU6IHNraXBcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaWRzID0gZW50aXRpZXMubWFwKCh0KSA9PiB0LmlkKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgRGVsZXRpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0uLi5gLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVBbGwsXG4gICAgICByZWZldGNoUXVlcmllczogdGhpcy5nZXRSZWZldGNoUXVlcmllc0Zvck11dGF0aW9uKG9wdHMpLFxuICAgICAgYXdhaXRSZWZldGNoUXVlcmllczogb3B0cyAmJiBvcHRzLmF3YWl0UmVmZXRjaFF1ZXJpZXMsXG4gICAgICB2YXJpYWJsZXM6IHsgaWRzIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkRFTEVURV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREVMRVRFX0RBVEFfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChjYWNoZSwgcmVzKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKGNhY2hlLCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBpZHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKGNhY2hlLCByZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkZWxldGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSByZWZlcmVudGlhbCBlbnRpdHlcbiAgICovXG4gIGFzeW5jIGRlbGV0ZShlbnRpdHk6IFQsIG9wdHM/OiBFbnRpdHlTYXZlT3B0aW9ucyB8IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLm11dGF0aW9ucy5kZWxldGUpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnMuZGVsZXRlQWxsKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGVsZXRlQWxsKFtlbnRpdHldLCBvcHRzKTtcbiAgICAgIHJldHVybiBkYXRhICYmIGRhdGFbMF07XG4gICAgfVxuXG4gICAgLy8gTm90aGluZyB0byBzYXZlOiBza2lwXG4gICAgaWYgKCFlbnRpdHkgfHwgaXNOaWwoZW50aXR5LmlkKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaWQgPSBlbnRpdHkuaWQ7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYERlbGV0aW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9IHske2lkfX0uLi5gKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8YW55Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuZGVsZXRlLFxuICAgICAgcmVmZXRjaFF1ZXJpZXM6IHRoaXMuZ2V0UmVmZXRjaFF1ZXJpZXNGb3JNdXRhdGlvbihvcHRzKSxcbiAgICAgIGF3YWl0UmVmZXRjaFF1ZXJpZXM6IG9wdHMgJiYgb3B0cy5hd2FpdFJlZmV0Y2hRdWVyaWVzLFxuICAgICAgdmFyaWFibGVzOiB7IGlkIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkRFTEVURV9EQVRBX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREVMRVRFX0RBVEFfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChwcm94eSwgcmVzKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKHByb3h5LCB7XG4gICAgICAgICAgICBxdWVyaWVzOiB0aGlzLmdldExvYWRRdWVyaWVzKCksXG4gICAgICAgICAgICBpZHM6IFtpZF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnVwZGF0ZSkge1xuICAgICAgICAgIG9wdHMudXBkYXRlKHByb3h5LCByZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkZWxldGVkIGluICR7bmV3IERhdGUoKS5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpfW1zYCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhpZDogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTGlzdGVuQ2hhbmdlc09wdGlvbnM8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoaXNOaWwoaWQpKSB0aHJvdyBFcnJvcihcIk1pc3NpbmcgYXJndW1lbnQgJ2lkJyBcIik7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQ2hhbmdlcykge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0ubGlzdGVuQ2hhbmdlcygpIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIFdpbGwgZW1wdHkgb2JzZXJ2YWJsZWApO1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVzID0gb3B0cz8udmFyaWFibGVzIHx8IHtcbiAgICAgIGlkLFxuICAgICAgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdHM/LmludGVydmFsLCAwKSwgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuICAgIH07XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMuX2xvZ1ByZWZpeCArIGBbV1NdIExpc3RlbmluZyBmb3IgY2hhbmdlcyBvbiAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsXG4gICAgICAuc3Vic2NyaWJlPHsgZGF0YTogYW55IH0+KHtcbiAgICAgICAgcXVlcnk6IG9wdHM/LnF1ZXJ5IHx8IHRoaXMuc3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgICBmZXRjaFBvbGljeTogb3B0cz8uZmV0Y2hQb2xpY3kgfHwgJ25vLWNhY2hlJyxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU1VCU0NSSUJFX0RBVEFfRVJST1IsXG4gICAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNVQlNDUklCRV9EQVRBX0VSUk9SJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gZW50aXR5IChpZiBuZWVkKVxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZnJvbU9iamVjdChkYXRhLCBvcHRzKTtcbiAgICAgICAgICAvL2lmIChlbnRpdHkgJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgYFtXU10gUmVjZWl2ZWQgY2hhbmdlcyBvbiAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19YCwgZW50aXR5KTtcblxuICAgICAgICAgIGlmICghZW50aXR5KSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFtXU10gUmVjZWl2ZWQgZW1wdHkgZGF0YSBvbiAke3RoaXMuX2xvZ1R5cGVOYW1lfSB7JHtpZH19IC0gQ2hlY2sgaWYgZW50aXR5IGhhcyBiZWVuIGRlbGV0ZWRgKTtcblxuICAgICAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IFQsIHRhcmdldDogVCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgKGlkIGFuZCB1cGRhdGVEYXRlKVxuICAgIEVudGl0eVV0aWxzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbiAgZnJvbU9iamVjdChcbiAgICBzb3VyY2U6IGFueSxcbiAgICBvcHRzPzoge1xuICAgICAgdG9FbnRpdHk/OiBib29sZWFuIHwgKChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gVCk7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBUIHtcbiAgICAvLyBTaW1wbGUgY2FzdCAoc2tpcCBjb252ZXJzaW9uKVxuICAgIGlmICghc291cmNlIHx8IG9wdHM/LnRvRW50aXR5ID09PSBmYWxzZSkgcmV0dXJuIHNvdXJjZSBhcyBUO1xuXG4gICAgLy8gVXNlciBkZWZpbmVkIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBvcHRzPy50b0VudGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG9wdHMudG9FbnRpdHkoc291cmNlLCBvcHRzKTtcbiAgICB9XG5cbiAgICAvLyBFbnRpdHkgY29udmVyc2lvblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXNGaWx0ZXIoc291cmNlOiBhbnkpOiBGIHtcbiAgICByZXR1cm4gRW50aXR5RmlsdGVyVXRpbHMuZnJvbU9iamVjdChzb3VyY2UsIHRoaXMuZmlsdGVyVHlwZSk7XG4gIH1cblxuICBlcXVhbHMoZDE6IFQsIGQyOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2VxdWFsc0ZuKSByZXR1cm4gdGhpcy5fZXF1YWxzRm4oZDEsIGQyKTtcbiAgICByZXR1cm4gZDEgJiYgZDEuZXF1YWxzID8gZDEuZXF1YWxzKGQyKSA6IEVudGl0eVV0aWxzLmVxdWFscyhkMSwgZDIsICdpZCcpO1xuICB9XG5cbiAgaXNOZXcoZGF0YTogVCkge1xuICAgIGlmICh0aGlzLl9pc05ld0ZuKSByZXR1cm4gdGhpcy5faXNOZXdGbihkYXRhKTtcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuaXNFbXB0eShkYXRhLCAnaWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZXF1YWxzKCkgaW5zdGVhZFxuICAgKi9cbiAgZXF1YWxzRm4oZDE6IFQsIGQyOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuZXF1YWxzKGQxLCBkMik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGlzTmV3KCkgaW5zdGVhZFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgaXNOZXdGbihkYXRhOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNOZXcoZGF0YSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpIHtcbiAgICAvLyBObyBsaW1pdCBmb3IgdXBkYXRhYmxlIHdhdGNoIHF1ZXJpZXMsIGlmIGRlc2t0b3BcbiAgICBpZiAoIXRoaXMucGxhdGZvcm0ubW9iaWxlKSB7XG4gICAgICB0aGlzLl9tdXRhYmxlV2F0Y2hRdWVyaWVzTWF4Q291bnQgPSAtMTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKHNvdXJjZTogVCkge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBmcm9tT2JqZWN0cyhcbiAgICBzb3VyY2VzOiBhbnlbXSxcbiAgICBvcHRzPzoge1xuICAgICAgdG9FbnRpdHk/OiBib29sZWFuIHwgKChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gVCk7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBUW10ge1xuICAgIHJldHVybiAoc291cmNlcyB8fCBbXSkubWFwKChzb3VyY2UpID0+IHRoaXMuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc09iamVjdChzb3VyY2U6IFQsIG9wdHM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiBhbnkge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXNcbiAgICByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlZmV0Y2hRdWVyaWVzRm9yTXV0YXRpb24oXG4gICAgb3B0cz86IEVudGl0eVNhdmVPcHRpb25zXG4gICk6ICgocmVzdWx0OiBGZXRjaFJlc3VsdDx7IGRhdGE6IGFueSB9PikgPT4gSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUpIHwgSW50ZXJuYWxSZWZldGNoUXVlcmllc0luY2x1ZGUge1xuICAgIGlmIChvcHRzICYmIG9wdHMucmVmZXRjaFF1ZXJpZXMpIHJldHVybiBvcHRzLnJlZmV0Y2hRdWVyaWVzO1xuXG4gICAgLy8gU2tpcCBpZiB1cGRhdGUgcG9saWN5IG5vdCB1c2VkIHJlZmVjdGggcXVlcmllc1xuICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSAhPT0gJ3JlZmV0Y2gtcXVlcmllcycpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5nZXRMb2FkUXVlcmllcygpO1xuICAgIGlmICghcXVlcmllcy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7IC8vIFNraXAgaWYgZW1wdHlcblxuICAgIC8vIEZpbmQgdGhlIHJlZmV0Y2ggcXVlcmllcyBkZWZpbml0aW9uXG4gICAgcmV0dXJuIHRoaXMuZmluZFJlZmV0Y2hRdWVyaWVzKHsgcXVlcmllcyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMb2FkUXVlcmllcygpOiBEb2N1bWVudE5vZGVbXSB7XG4gICAgcmV0dXJuIFt0aGlzLnF1ZXJpZXMubG9hZEFsbCwgdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoVG90YWxdLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TG9hZFF1ZXJ5TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ0xvYWRBbGwnLCAnTG9hZEFsbFdpdGhUb3RhbCddO1xuICB9XG59XG4iXX0=
|
|
@@ -104,6 +104,9 @@ export class LocalSettingsService extends StartableService {
|
|
|
104
104
|
});
|
|
105
105
|
// Merge into existing data
|
|
106
106
|
data = Object.assign(data, restoredData);
|
|
107
|
+
// Fix known attribute
|
|
108
|
+
if (data.pageHistory && !Array.isArray(data.pageHistory))
|
|
109
|
+
data.pageHistory = [];
|
|
107
110
|
}
|
|
108
111
|
// Initialize darkMode, if not set
|
|
109
112
|
if (this.environment?.allowDarkMode !== true) {
|
|
@@ -491,4 +494,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
491
494
|
type: Inject,
|
|
492
495
|
args: [APP_LOCAL_SETTINGS_OPTIONS]
|
|
493
496
|
}] }] });
|
|
494
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQTRDLE1BQU0sd0JBQXdCLENBQUM7QUFDakcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNySixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUUvRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGNB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RUFBRSxNQUFNO29CQUNsQix3REFBd0Q7aUJBQ3pEOzswQkFpREksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUNyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT25GaWVsZE1vZGUsIExvY2FsU2V0dGluZ3MsIE9mZmxpbmVGZWF0dXJlLCBVc2FnZU1vZGUgfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuXG5pbXBvcnQgeyBlcXVhbHMsIGdldFByb3BlcnR5QnlQYXRoLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHVuZGVmaW5lZElmTnVsbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYXRMb25nUGF0dGVybiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc0NhcGFjaXRvciwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknIC8qZGVwcmVjYXRlZCovXTtcblxuLy8gZml4bWU6IHRoaXMgY29uc3RhbnQgcG9pbnRzIHRvIHN0YXRpYyBlbnZpcm9ubWVudFxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTG9jYWxTZXR0aW5ncyA9IHtcbiAgYWNjb3VudEluaGVyaXRhbmNlOiB0cnVlLFxuICBsb2NhbGU6IGVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUsXG4gIGxhdExvbmdGb3JtYXQ6IGVudmlyb25tZW50LmRlZmF1bHRMYXRMb25nRm9ybWF0IHx8ICdERE1NJyxcbiAgcGFnZUhpc3RvcnlNYXhTaXplOiAzLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFNldHRpbmdzT3B0aW9ucyB7XG4gIHNlcmlhbGl6ZUFzU3RyaW5nPzogYm9vbGVhbjsgLy8gZmFsc2UgYnkgZGVmYXVsdFxuICBvcHRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uTWFwO1xufVxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zIHtcbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gIGVtaXRFdmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1MgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGFydGlhbDxMb2NhbFNldHRpbmdzPj4oJ0RlZmF1bHRMb2NhbFNldHRpbmdzJyk7XG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9jYWxTZXR0aW5nc09wdGlvbnM+KCdMb2NhbFNldHRpbmdzT3B0aW9ucycpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgLy9kZXBzOiBbQVBQX0xPQ0FMX1NFVFRJTkdTLCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OU11cbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxTZXR0aW5nc1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlPExvY2FsU2V0dGluZ3M+IHtcbiAgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxMb2NhbFNldHRpbmdzPigpO1xuICBkYXJrTW9kZSQgPSB0aGlzLm9uQ2hhbmdlLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhPy5kYXJrTW9kZSB8fCBmYWxzZSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VyaWFsaXplQXNTdHJpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgXyRwZXJzaXN0OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBnZXQgc2V0dGluZ3MoKTogTG9jYWxTZXR0aW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gIH1cblxuICBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubG9jYWxlKSB8fCB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIGdldCBsYXRMb25nRm9ybWF0KCk6IExhdExvbmdQYXR0ZXJuIHtcbiAgICByZXR1cm4gKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sYXRMb25nRm9ybWF0KSB8fCAnRERNTSc7XG4gIH1cblxuICBnZXQgdXNhZ2VNb2RlKCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEudXNhZ2VNb2RlKSA/IHRoaXMuX2RhdGEudXNhZ2VNb2RlIDogaXNDYXBhY2l0b3Iod2luZG93KSB8fCBpc01vYmlsZSh3aW5kb3cpID8gJ0ZJRUxEJyA6ICdERVNLJztcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEubW9iaWxlKSA/IHRoaXMuX2RhdGEubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBtb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KSB8fCBbXTtcbiAgfVxuXG4gIGdldCBhbGxvd0RhcmtNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50Py5hbGxvd0RhcmtNb2RlID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzRGFya01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEYXJrTW9kZSAmJiB0aGlzLl9kYXRhPy5kYXJrTW9kZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HUykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IExvY2FsU2V0dGluZ3MsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUykgb3B0aW9uczogTG9jYWxTZXR0aW5nc09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0geyAuLi5ERUZBVUxUX1NFVFRJTkdTLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5ncyB9O1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucz8ub3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5fc2VyaWFsaXplQXNTdHJpbmcgPSBvcHRpb25zPy5zZXJpYWxpemVBc1N0cmluZyB8fCBmYWxzZTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9IHRydWU7IC8vICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICBuZ09uU3RhcnQoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzPiB7XG4gICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFN0YXJ0aW5nIHNlcnZpY2UuLi4nKTtcblxuICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHRoaXMubW9iaWxlO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdGhpcy51c2FnZU1vZGU7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICByZXR1cm4gdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICB9XG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc09uRmllbGRNb2RlKHZhbHVlIHx8IHRoaXMudXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YSB8fCA8TG9jYWxTZXR0aW5ncz57fTtcblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcblxuICAgIC8vIFJlc3RvcmUgbG9jYWwgc2V0dGluZ3MgKG9yIGtlZXAgb2xkIHNldHRpbmdzKVxuICAgIGlmIChpc05vdE5pbChzZXR0aW5ncykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gdHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKCh0cmFuc2llbnRLZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkRGF0YVt0cmFuc2llbnRLZXldO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIGludG8gZXhpc3RpbmcgZGF0YVxuICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgcmVzdG9yZWREYXRhKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGRhcmtNb2RlLCBpZiBub3Qgc2V0XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFsbG93RGFya01vZGUgIT09IHRydWUpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmRhcmtNb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwoZGF0YS5kYXJrTW9kZSkpIHtcbiAgICAgIGRhdGEuZGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZyB8IEZvcm1GaWVsZERlZmluaXRpb24sIHZhbHVlOiBULCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBpbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIWtleU9yRGVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHRoaXMuX2RhdGEucHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdID0gaXNOaWwodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWUudG9TdHJpbmcoKTtcblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkob3B0cz8uaW1tZWRpYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXlPckRlZjogc3RyaW5nIHwgRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCBpc05vdE5pbChkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDoga2V5T3JEZWYuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZElmTnVsbChkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0Jvb2xlYW4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNJbnQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gcGFyc2VJbnQodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc051bWJlcnMoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChwYXJzZUZsb2F0KSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IFtwYXJzZUZsb2F0KHZhbHVlKV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzU3RyaW5ncyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLnNwbGl0KCcsJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNPYmplY3RzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueVtdKTogYW55W10ge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICAvLyBQYXJzZSBhcnJheVxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgYXN5bmMgYXBwbHkoc2V0dGluZ3M6IFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHsgLi4udGhpcy5fZGF0YSwgLi4uc2V0dGluZ3MgfTtcblxuICAgIGlmIChlcXVhbHMoZGF0YSwgdGhpcy5fZGF0YSkpIHJldHVybjsgLy8gU2tpcCBpZiBubyBjaGFuZ2VzXG5cbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgIC8vIFNhdmUgbG9jYWxseVxuICAgIGlmIChvcHRzICYmIG9wdHMucGVyc2lzdEltbWVkaWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpOyAvLyBObyBBV0FJVFxuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXBwbHlQcm9wZXJ0eShrZXk6IGtleW9mIExvY2FsU2V0dGluZ3MsIHZhbHVlOiBhbnksIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgY2hhbmdlc1trZXldID0gdmFsdWU7XG4gICAgYXdhaXQgdGhpcy5hcHBseShjaGFuZ2VzLCBvcHRzKTtcbiAgfVxuXG4gIGdldFBhZ2VTZXR0aW5nczxUID0gYW55PihwYWdlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnBhZ2VzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgodGhpcy5fZGF0YS5wYWdlcywga2V5ICsgJy4nICsgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucGFnZXNba2V5XTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVQYWdlU2V0dGluZyhwYWdlSWQ6IHN0cmluZywgdmFsdWU6IGFueSwgcHJvcGVydHlOYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5wYWdlcyA9IHRoaXMuX2RhdGEucGFnZXMgfHwge307XG5cbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHRoaXMuX2RhdGEucGFnZXNba2V5XSB8fCB7fTtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlPEYgPSBhbnk+KGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBPZmZsaW5lRmVhdHVyZTxGPiB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBpc0VtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghZmVhdHVyZU5hbWUpIHRocm93IEVycm9yKFwiTWlzc2luZyAnZmVhdHVyZU5hbWUnIGFyZ3VtZW50XCIpO1xuXG4gICAgZmVhdHVyZU5hbWUgPSBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlTmFtZSArICcjJztcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZCgoZikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZU5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKCFmZWF0dXJlKSByZXR1cm47IC8vIE5vdCBmb3VuZFxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxhc3RTeW5jRGF0ZSA9IGZlYXR1cmUuc3Vic3RyaW5nKGZlYXR1cmVQcmVmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFske2ZlYXR1cmVOYW1lfV0gTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZTogJHtsYXN0U3luY0RhdGV9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZSxcbiAgICAgICAgbGFzdFN5bmNEYXRlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmU7XG4gIH1cblxuICBnZXRPZmZsaW5lRmVhdHVyZUxhc3RTeW5jRGF0ZShmZWF0dXJlTmFtZTogc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG4gICAgcmV0dXJuIGZlYXR1cmUgJiYgZnJvbURhdGVJU09TdHJpbmcoZmVhdHVyZS5sYXN0U3luY0RhdGUpO1xuICB9XG5cbiAgaGFzT2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoZmVhdHVyZU5hbWUpIHJldHVybiBpc05vdE5pbCh0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgaXNOb3RFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKTtcbiAgfVxuXG4gIHNhdmVPZmZsaW5lRmVhdHVyZShmZWF0dXJlOiBPZmZsaW5lRmVhdHVyZSkge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgW107XG5cbiAgICBmZWF0dXJlLm5hbWUgPSBmZWF0dXJlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGZlYXR1cmVQcmVmaXggPSBmZWF0dXJlLm5hbWUgKyAnIyc7XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmRJbmRleCgoZikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZS5uYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXNbZXhpc3RpbmdJbmRleF0gPSBmZWF0dXJlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG4gIG1hcmtPZmZsaW5lRmVhdHVyZUFzU3luYyhmZWF0dXJlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgZmVhdHVyZSA9IDxPZmZsaW5lRmVhdHVyZT57XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxhc3RTeW5jRGF0ZTogRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBmZWF0dXJlLmxhc3RTeW5jRGF0ZSA9IERhdGVVdGlscy5tb21lbnQoKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmUpO1xuICB9XG5cbiAgcmVtb3ZlT2ZmbGluZUZlYXR1cmVzKCkge1xuICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2BzdW1hcmlzLmZpZWxkLiR7ZmllbGROYW1lfS5hdHRyaWJ1dGVzYF07XG4gICAgLy8gTm90aGluZyBmb3VuZCBpbiBzZXR0aW5nczogcmV0dXJuIGRlZmF1bHRzXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVzIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJyk7XG4gIH1cblxuICBnZXRQYWdlRmllbGREZWZhdWx0VmFsdWUocGFnZUlkOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlU2V0dGluZ3MocGFnZUlkLCBgZmllbGQuJHtmaWVsZE5hbWV9LmRlZmF1bHRWYWx1ZWApO1xuICB9XG5cbiAgZ2V0IG9wdGlvbkRlZnMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRGVmcztcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9uKGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgb3B0cz86IHsgcmVwbGFjZUlmRXhpc3RzPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcHRpb25EZWZzLmZpbmRJbmRleCgoZikgPT4gZi5rZXkgPT09IGRlZi5rZXkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChvcHRzPy5yZXBsYWNlSWZFeGlzdHMgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgICAgfVxuICAgICAgLy8gUmVwbGFjZSBleGlzdGluZ1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIFVwZGF0aW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICAgIHRoaXMuX29wdGlvbkRlZnNbaW5kZXhdID0gZGVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQWRkaW5nIGFkZGl0aW9uYWwgcHJvcGVydHkgeyR7ZGVmLmtleX19YCwgZGVmKTtcbiAgICAgIHRoaXMuX29wdGlvbkRlZnMucHVzaChkZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9ucyhkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICAoZGVmcyB8fCBbXSkuZm9yRWFjaCgoZGVmKSA9PiB0aGlzLnJlZ2lzdGVyT3B0aW9uKGRlZikpO1xuICB9XG5cbiAgYXN5bmMgYWRkVG9QYWdlSGlzdG9yeShcbiAgICBwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSxcbiAgICBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMsXG4gICAgcGFnZUhpc3Rvcnk/OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdIC8vIHVzZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIHRvIGNoaWxkcmVuXG4gICkge1xuICAgIC8vIElmIG5vdCBpbnNpZGUgcmVjdXJzaXZlIGNhbGw6IGZpbGwgcGFnZSBoaXN0b3J5IGRlZmF1bHRzXG4gICAgaWYgKCFwYWdlSGlzdG9yeSkgdGhpcy5maWxsUGFnZUhpc3RvcnlEZWZhdWx0cyhwYWdlLCBvcHRzKTtcblxuICAgIHBhZ2VIaXN0b3J5ID0gQXJyYXkuaXNBcnJheShwYWdlSGlzdG9yeSkgPyBwYWdlSGlzdG9yeSA6IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChcbiAgICAgIChwKSA9PlxuICAgICAgICAvLyBzYW1lIHBhdGhcbiAgICAgICAgcC5wYXRoID09PSBwYWdlLnBhdGggfHxcbiAgICAgICAgLy8gb3Igc3ViLXBhdGhcbiAgICAgICAgcGFnZS5wYXRoLnN0YXJ0c1dpdGgocC5wYXRoICsgJy8nKVxuICAgICk7XG5cbiAgICAvLyBOZXcgcGFnZTogaW5zZXJ0IGl0XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIEFkZGluZyBwYWdlIHRvIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuXG4gICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZSgwLCAwLCBwYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhpc3RpbmdQYWdlID0gcGFnZUhpc3RvcnlbaW5kZXhdO1xuXG4gICAgICAvLyBTYW1lIHBhdGg6IHJlcGxhY2UgZXhpc3RpbmcgcGFnZVxuICAgICAgaWYgKHBhZ2VIaXN0b3J5W2luZGV4XS5wYXRoID09PSBwYWdlLnBhdGgpIHtcbiAgICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gVXBkYXRpbmcgZXhpc3RpbmcgcGFnZSBpbiBoaXN0b3J5OiAnLCBwYWdlKTtcbiAgICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAvLyBDb3B5IGV4aXRpbmcgY2hpbGRyZW5cbiAgICAgICAgcGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKDAsIDAsIHBhZ2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3Qgc2FtZSBwYXRoIChzaG91bGQgYmUgYSBwYXJlbnQgcGFnZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgcGFyZW50J3MgY2hpbGRyZW4gYXJyYXksIGlmIG5vdCBleGlzdHNcbiAgICAgICAgZXhpc3RpbmdQYWdlLmNoaWxkcmVuID0gZXhpc3RpbmdQYWdlLmNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcGFyZW50IHRpbWVcbiAgICAgICAgZXhpc3RpbmdQYWdlLnRpbWUgPSBwYWdlLnRpbWU7XG5cbiAgICAgICAgLy8gQWRkIHBhZ2UgYXMgcGFyZW50J3MgY2hpbGRyZW4gKHJlY3Vyc2l2ZSBjYWxsKVxuICAgICAgICBhd2FpdCB0aGlzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSwgb3B0cywgZXhpc3RpbmdQYWdlLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYXZlIGxvY2FsbHkgKG9ubHkgaWYgbm90IGEgcmVjdXJzaXZlIGV4ZWN1dGlvbilcbiAgICBpZiAocGFnZUhpc3RvcnkgPT09IHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpIHtcbiAgICAgIC8vIElmIG1heCBoYXMgYmVlbiByZWFjaGVkLCByZW1vdmUgb2xkIHBhZ2VzXG4gICAgICBpZiAocGFnZUhpc3RvcnkubGVuZ3RoID4gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhZ2VzID0gcGFnZUhpc3Rvcnkuc3BsaWNlKHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplLCBwYWdlSGlzdG9yeS5sZW5ndGggLSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUGFnZXMgcmVtb3ZlZCBmcm9tIGhpc3Rvcnk6ICcsIHJlbW92ZWRQYWdlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IG5ldyB2YWx1ZVxuICAgICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIHBhZ2VIaXN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSxcbiAgICBwYWdlSGlzdG9yeTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSA9IHVuZGVmaW5lZCwgLy8gdXNlZCBmb3IgcmVjdXJzaXZlIGNhbGwgdG8gY2hpbGRyZW4pXG4gICAgZGVwdGggPSAwXG4gICkge1xuICAgIGNvbnN0IHJvb3QgPSBkZXB0aCA9PT0gMDtcbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk/LnNsaWNlKCkgLypjbG9uZSwgdG8gZm9yY2UgYXBwbHkgdG8gc2F2ZSAqLyB8fCBbXTtcblxuICAgIGNvbnN0IGluZGV4ID0gcGFnZUhpc3RvcnkuZmluZEluZGV4KChwKSA9PiBwLnBhdGggPT09IHBhdGgpO1xuICAgIGxldCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUmVtb3ZlIHBhZ2UgaGlzdG9yeTogJywgcGF0aCk7XG4gICAgICAvLyBSZW1vdmUgdmFsdWVcbiAgICAgIHBhZ2VIaXN0b3J5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlYXJjaCBwYXRoIG9uIGNoaWxkcmVuIChzdG9wIHdoZW4gZm91bmQpXG4gICAgICBmb3VuZCA9XG4gICAgICAgIHBhZ2VIaXN0b3J5XG4gICAgICAgICAgLm1hcCgocCkgPT4gcC5jaGlsZHJlbilcbiAgICAgICAgICAuZmlsdGVyKGlzTm90RW1wdHlBcnJheSlcbiAgICAgICAgICAuZmluZEluZGV4KChjaGlsZHJlbikgPT4gdGhpcy5yZW1vdmVQYWdlSGlzdG9yeShwYXRoLCBvcHRzLCBjaGlsZHJlbiwgKGRlcHRoIHx8IDApICsgMSkpICE9PSAtMTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIGxvY2FsbHkgKG9ubHkgaWYgcm9vdCBsZXZlbClcbiAgICBpZiAoZm91bmQgJiYgcm9vdCkge1xuICAgICAgLy8gQXBwbHkgY2hhbmdlc1xuICAgICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIHBhZ2VIaXN0b3J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICBhc3luYyBjbGVhclBhZ2VIaXN0b3J5KCkge1xuICAgIC8vIFJlc2V0IGFsbCBwYWdlIGhpc3RvcnlcbiAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgW10sIHsgcGVyc2lzdEltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVzZXREYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RGF0YSgpIHtcbiAgICB0aGlzLl9kYXRhID0geyAuLi50aGlzLl9kYXRhLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5ncyB9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IChkZWZhdWx0UGVlciAmJiBkZWZhdWx0UGVlci51cmwpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExvY2FsbHkoaW1tZWRpYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBTdG9yZSBsb2NhbCBzZXR0aW5ncycsIHRoaXMuX2RhdGEpO1xuICAgICAgICBpZiAodGhpcy5fc2VyaWFsaXplQXNTdHJpbmcpIHtcbiAgICAgICAgICAvLyBGaXggc2VyaWFsaXphdGlvbiBlcnJvciwgaW4gU3VtYXJpcy1BcHBcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5fZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCB0aGlzLl9kYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIHdpdGggZGVsYXlcbiAgICBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKFxuICAgIHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLFxuICAgIG9wdHM/OiB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM/OiBib29sZWFuO1xuICAgICAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gICAgfVxuICApOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSB7XG4gICAgaWYgKCFwYWdlIHx8ICFwYWdlLnRpdGxlIHx8ICFwYWdlLnBhdGgpIHRocm93IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCAncGFnZScsICdwYWdlLnBhdGgnIG9yICdwYWdlLnRpdGxlJ1wiKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRpdGxlXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVtb3ZlVGl0bGVTbWFsbFRhZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlbW92ZSA8c21hbGw+IEhUTUwgdGFnc1xuICAgICAgY29uc3Qgc21hbGxUYWdJbmRleCA9IHBhZ2UudGl0bGUuaW5kZXhPZignPC9zbWFsbD4nKTtcbiAgICAgIGlmIChzbWFsbFRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgICBwYWdlLnRpdGxlID0gcGFnZS50aXRsZS5zdWJzdHJpbmcoc21hbGxUYWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBjbGFzcz1cIi4uLlwiIEhUTUwgYXR0cmlidXRlXG4gICAgICBwYWdlLnRpdGxlID0gcGFnZS50aXRsZS5yZXBsYWNlKC9cXHMqY2xhc3M9WydcIl1bXidcIl0rWydcIl0nL2csICcnKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zICE9PSBmYWxzZSkge1xuICAgICAgcGFnZS5wYXRoID0gcGFnZS5wYXRoLnJlcGxhY2UoL1s/XS4qJC8sICcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZTtcbiAgfVxufVxuIl19
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQTRDLE1BQU0sd0JBQXdCLENBQUM7QUFDakcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNySixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUUvRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGNB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Qzt3R0FsaEJVLG9CQUFvQixpR0FnRHJCLFdBQVcsYUFDQyxrQkFBa0IsNkJBQ2xCLDBCQUEwQjs0R0FsRHJDLG9CQUFvQixjQUhuQixNQUFNOzs0RkFHUCxvQkFBb0I7a0JBSmhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLHdEQUF3RDtpQkFDekQ7OzBCQWlESSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3JDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNPbkZpZWxkTW9kZSwgTG9jYWxTZXR0aW5ncywgT2ZmbGluZUZlYXR1cmUsIFVzYWdlTW9kZSB9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5cbmltcG9ydCB7IGVxdWFscywgZ2V0UHJvcGVydHlCeVBhdGgsIGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdW5kZWZpbmVkSWZOdWxsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExhdExvbmdQYXR0ZXJuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscyc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzLCBmcm9tRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBIaXN0b3J5UGFnZVJlZmVyZW5jZSB9IGZyb20gJy4vbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGlzQ2FwYWNpdG9yLCBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU1RPUkFHRV9LRVkgPSAnc2V0dGluZ3MnO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTID0gWydtb2JpbGUnLCAndG91Y2hVaScgLypkZXByZWNhdGVkKi9dO1xuXG4vLyBmaXhtZTogdGhpcyBjb25zdGFudCBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBMb2NhbFNldHRpbmdzID0ge1xuICBhY2NvdW50SW5oZXJpdGFuY2U6IHRydWUsXG4gIGxvY2FsZTogZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSxcbiAgbGF0TG9uZ0Zvcm1hdDogZW52aXJvbm1lbnQuZGVmYXVsdExhdExvbmdGb3JtYXQgfHwgJ0RETU0nLFxuICBwYWdlSGlzdG9yeU1heFNpemU6IDMsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU2V0dGluZ3NPcHRpb25zIHtcbiAgc2VyaWFsaXplQXNTdHJpbmc/OiBib29sZWFuOyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gIG9wdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25NYXA7XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMge1xuICByZW1vdmVQYXRoUXVlcnlQYXJhbXM/OiBib29sZWFuO1xuICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPExvY2FsU2V0dGluZ3M+PignRGVmYXVsdExvY2FsU2V0dGluZ3MnKTtcbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbFNldHRpbmdzT3B0aW9ucz4oJ0xvY2FsU2V0dGluZ3NPcHRpb25zJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAvL2RlcHM6IFtBUFBfTE9DQUxfU0VUVElOR1MsIEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFNldHRpbmdzU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8TG9jYWxTZXR0aW5ncz4ge1xuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PExvY2FsU2V0dGluZ3M+KCk7XG4gIGRhcmtNb2RlJCA9IHRoaXMub25DaGFuZ2UucGlwZShtYXAoKGRhdGEpID0+IGRhdGE/LmRhcmtNb2RlIHx8IGZhbHNlKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXJpYWxpemVBc1N0cmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfJHBlcnNpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGdldCBzZXR0aW5ncygpOiBMb2NhbFNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sb2NhbGUpIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICB9XG5cbiAgZ2V0IGxhdExvbmdGb3JtYXQoKTogTGF0TG9uZ1BhdHRlcm4ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxhdExvbmdGb3JtYXQpIHx8ICdERE1NJztcbiAgfVxuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS51c2FnZU1vZGUpID8gdGhpcy5fZGF0YS51c2FnZU1vZGUgOiBpc0NhcGFjaXRvcih3aW5kb3cpIHx8IGlzTW9iaWxlKHdpbmRvdykgPyAnRklFTEQnIDogJ0RFU0snO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS5tb2JpbGUpID8gdGhpcy5fZGF0YS5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICB9XG5cbiAgc2V0IG1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpIHx8IFtdO1xuICB9XG5cbiAgZ2V0IGFsbG93RGFya01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/LmFsbG93RGFya01vZGUgPT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNEYXJrTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0RhcmtNb2RlICYmIHRoaXMuX2RhdGE/LmRhcmtNb2RlID09PSB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZXR0aW5nczogTG9jYWxTZXR0aW5ncyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TKSBvcHRpb25zOiBMb2NhbFNldHRpbmdzT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB7IC4uLkRFRkFVTFRfU0VUVElOR1MsIC4uLnRoaXMuZGVmYXVsdFNldHRpbmdzIH07XG5cbiAgICB0aGlzLl9vcHRpb25EZWZzID0gT2JqZWN0LnZhbHVlcyhvcHRpb25zPy5vcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLl9zZXJpYWxpemVBc1N0cmluZyA9IG9wdGlvbnM/LnNlcmlhbGl6ZUFzU3RyaW5nIHx8IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gdHJ1ZTsgLy8gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcbiAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gU3RhcnRpbmcgc2VydmljZS4uLicpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZVxuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdGhpcy5tb2JpbGU7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB0aGlzLnVzYWdlTW9kZTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHJldHVybiB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gIH1cblxuICBpc1VzYWdlTW9kZShtb2RlOiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2FnZU1vZGUgPT09IG1vZGU7XG4gIH1cblxuICBpc09uRmllbGRNb2RlKHZhbHVlPzogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzT25GaWVsZE1vZGUodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsKHNldHRpbmdzKSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbc2V0dGluZ3NdIFJlc3RvcmluZyBwcmV2aW91cyBzZXR0aW5ncy4uLicpO1xuXG4gICAgICBjb25zdCByZXN0b3JlZERhdGEgPSB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5ncztcblxuICAgICAgLy8gQXZvaWQgdG8gb3ZlcnJpZGUgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAgICAgIFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTLmZvckVhY2goKHRyYW5zaWVudEtleSkgPT4ge1xuICAgICAgICBkZWxldGUgcmVzdG9yZWREYXRhW3RyYW5zaWVudEtleV07XG4gICAgICB9KTtcblxuICAgICAgLy8gTWVyZ2UgaW50byBleGlzdGluZyBkYXRhXG4gICAgICBkYXRhID0gT2JqZWN0LmFzc2lnbihkYXRhLCByZXN0b3JlZERhdGEpO1xuXG4gICAgICAvLyBGaXgga25vd24gYXR0cmlidXRlXG4gICAgICBpZiAoZGF0YS5wYWdlSGlzdG9yeSAmJiAhQXJyYXkuaXNBcnJheShkYXRhLnBhZ2VIaXN0b3J5KSkgZGF0YS5wYWdlSGlzdG9yeSA9IFtdO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgZGFya01vZGUsIGlmIG5vdCBzZXRcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudD8uYWxsb3dEYXJrTW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgZGVsZXRlIGRhdGEuZGFya01vZGU7XG4gICAgfSBlbHNlIGlmIChpc05pbChkYXRhLmRhcmtNb2RlKSkge1xuICAgICAgZGF0YS5kYXJrTW9kZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcztcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRQcm9wZXJ0eTxUID0gc3RyaW5nPihrZXlPckRlZjogc3RyaW5nIHwgRm9ybUZpZWxkRGVmaW5pdGlvbiwgdmFsdWU6IFQsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IGltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAha2V5T3JEZWYpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzID0gdGhpcy5fZGF0YS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl0gPSBpc05pbCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseShvcHRzPy5pbW1lZGlhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnR5KGtleU9yRGVmOiBzdHJpbmcgfCBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXBlb2Yga2V5T3JEZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShrZXlPckRlZi5rZXksIGlzTm90TmlsKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiBrZXlPckRlZi5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzICYmIHRoaXMuX2RhdGEucHJvcGVydGllc1trZXlPckRlZl07XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkSWZOdWxsKGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzQm9vbGVhbihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc0ludChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzTnVtYmVycyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNTdHJpbmdzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUuc3BsaXQoJywnKSkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc09iamVjdHMoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIC8vIFBhcnNlIGFycmF5XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBhc3luYyBhcHBseShzZXR0aW5nczogUGFydGlhbDxMb2NhbFNldHRpbmdzPiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLl9kYXRhLCAuLi5zZXR0aW5ncyB9O1xuXG4gICAgaWYgKGVxdWFscyhkYXRhLCB0aGlzLl9kYXRhKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vIGNoYW5nZXNcblxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wZXJzaXN0SW1tZWRpYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7IC8vIE5vIEFXQUlUXG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHBseVByb3BlcnR5KGtleToga2V5b2YgTG9jYWxTZXR0aW5ncywgdmFsdWU6IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBjaGFuZ2VzW2tleV0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5KGNoYW5nZXMsIG9wdHMpO1xuICB9XG5cbiAgZ2V0UGFnZVNldHRpbmdzPFQgPSBhbnk+KHBhZ2VJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucGFnZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aCh0aGlzLl9kYXRhLnBhZ2VzLCBrZXkgKyAnLicgKyBwcm9wZXJ0eU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wYWdlc1trZXldO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVBhZ2VTZXR0aW5nKHBhZ2VJZDogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLnBhZ2VzID0gdGhpcy5fZGF0YS5wYWdlcyB8fCB7fTtcblxuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKHByb3BlcnR5TmFtZSkge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdGhpcy5fZGF0YS5wYWdlc1trZXldIHx8IHt9O1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmU8RiA9IGFueT4oZmVhdHVyZU5hbWU6IHN0cmluZyk6IE9mZmxpbmVGZWF0dXJlPEY+IHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IGlzRW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKCFmZWF0dXJlTmFtZSkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nICdmZWF0dXJlTmFtZScgYXJndW1lbnRcIik7XG5cbiAgICBmZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmVOYW1lICsgJyMnO1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kKChmKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSByZXR1cm4gZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoZmVhdHVyZVByZWZpeCk7XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ29iamVjdCcgJiYgZi5uYW1lKSByZXR1cm4gZi5uYW1lID09PSBmZWF0dXJlTmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoIWZlYXR1cmUpIHJldHVybjsgLy8gTm90IGZvdW5kXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbGFzdFN5bmNEYXRlID0gZmVhdHVyZS5zdWJzdHJpbmcoZmVhdHVyZVByZWZpeC5sZW5ndGgpO1xuICAgICAgY29uc29sZS5kZWJ1ZyhgWyR7ZmVhdHVyZU5hbWV9XSBMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlOiAke2xhc3RTeW5jRGF0ZX1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLFxuICAgICAgICBsYXN0U3luY0RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlTGFzdFN5bmNEYXRlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBNb21lbnQge1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcbiAgICByZXR1cm4gZmVhdHVyZSAmJiBmcm9tRGF0ZUlTT1N0cmluZyhmZWF0dXJlLmxhc3RTeW5jRGF0ZSk7XG4gIH1cblxuICBoYXNPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmZWF0dXJlTmFtZSkgcmV0dXJuIGlzTm90TmlsKHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiBpc05vdEVtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpO1xuICB9XG5cbiAgc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmU6IE9mZmxpbmVGZWF0dXJlKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBbXTtcblxuICAgIGZlYXR1cmUubmFtZSA9IGZlYXR1cmUubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmUubmFtZSArICcjJztcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZEluZGV4KChmKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSByZXR1cm4gZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoZmVhdHVyZVByZWZpeCk7XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ29iamVjdCcgJiYgZi5uYW1lKSByZXR1cm4gZi5uYW1lID09PSBmZWF0dXJlLm5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlc1tleGlzdGluZ0luZGV4XSA9IGZlYXR1cmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cbiAgbWFya09mZmxpbmVGZWF0dXJlQXNTeW5jKGZlYXR1cmVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuXG4gICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICBmZWF0dXJlID0gPE9mZmxpbmVGZWF0dXJlPntcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgbGFzdFN5bmNEYXRlOiBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZlYXR1cmUubGFzdFN5bmNEYXRlID0gRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlT2ZmbGluZUZlYXR1cmUoZmVhdHVyZSk7XG4gIH1cblxuICByZW1vdmVPZmZsaW5lRmVhdHVyZXMoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gW107XG5cbiAgICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkRGlzcGxheUF0dHJpYnV0ZXMoZmllbGROYW1lOiBzdHJpbmcsIGRlZmF1bHRBdHRyaWJ1dGVzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNbYHN1bWFyaXMuZmllbGQuJHtmaWVsZE5hbWV9LmF0dHJpYnV0ZXNgXTtcbiAgICAvLyBOb3RoaW5nIGZvdW5kIGluIHNldHRpbmdzOiByZXR1cm4gZGVmYXVsdHNcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGdldFBhZ2VGaWVsZERlZmF1bHRWYWx1ZShwYWdlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VTZXR0aW5ncyhwYWdlSWQsIGBmaWVsZC4ke2ZpZWxkTmFtZX0uZGVmYXVsdFZhbHVlYCk7XG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb24oZGVmOiBGb3JtRmllbGREZWZpbml0aW9uLCBvcHRzPzogeyByZXBsYWNlSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29wdGlvbkRlZnMuZmluZEluZGV4KChmKSA9PiBmLmtleSA9PT0gZGVmLmtleSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKG9wdHM/LnJlcGxhY2VJZkV4aXN0cyAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkZGl0aW9uYWwgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX0gYWxyZWFkeSBkZWZpbmUuYCk7XG4gICAgICB9XG4gICAgICAvLyBSZXBsYWNlIGV4aXN0aW5nXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gVXBkYXRpbmcgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX1gLCBkZWYpO1xuICAgICAgdGhpcy5fb3B0aW9uRGVmc1tpbmRleF0gPSBkZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBBZGRpbmcgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX1gLCBkZWYpO1xuICAgICAgdGhpcy5fb3B0aW9uRGVmcy5wdXNoKGRlZik7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb25zKGRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIChkZWZzIHx8IFtdKS5mb3JFYWNoKChkZWYpID0+IHRoaXMucmVnaXN0ZXJPcHRpb24oZGVmKSk7XG4gIH1cblxuICBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KFxuICAgIHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLFxuICAgIG9wdHM/OiBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyxcbiAgICBwYWdlSGlzdG9yeT86IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10gLy8gdXNlZCBmb3IgcmVjdXJzaXZlIGNhbGwgdG8gY2hpbGRyZW5cbiAgKSB7XG4gICAgLy8gSWYgbm90IGluc2lkZSByZWN1cnNpdmUgY2FsbDogZmlsbCBwYWdlIGhpc3RvcnkgZGVmYXVsdHNcbiAgICBpZiAoIXBhZ2VIaXN0b3J5KSB0aGlzLmZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2UsIG9wdHMpO1xuXG4gICAgcGFnZUhpc3RvcnkgPSBBcnJheS5pc0FycmF5KHBhZ2VIaXN0b3J5KSA/IHBhZ2VIaXN0b3J5IDogdGhpcy5fZGF0YS5wYWdlSGlzdG9yeTtcblxuICAgIGNvbnN0IGluZGV4ID0gcGFnZUhpc3RvcnkuZmluZEluZGV4KFxuICAgICAgKHApID0+XG4gICAgICAgIC8vIHNhbWUgcGF0aFxuICAgICAgICBwLnBhdGggPT09IHBhZ2UucGF0aCB8fFxuICAgICAgICAvLyBvciBzdWItcGF0aFxuICAgICAgICBwYWdlLnBhdGguc3RhcnRzV2l0aChwLnBhdGggKyAnLycpXG4gICAgKTtcblxuICAgIC8vIE5ldyBwYWdlOiBpbnNlcnQgaXRcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAvL2lmICh0aGlzLl9kZWJ1ZylcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gQWRkaW5nIHBhZ2UgdG8gaGlzdG9yeTogJywgcGFnZSk7XG5cbiAgICAgIC8vIFByZXBlbmQgdG8gbGlzdFxuICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKDAsIDAsIHBhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGlzdGluZ1BhZ2UgPSBwYWdlSGlzdG9yeVtpbmRleF07XG5cbiAgICAgIC8vIFNhbWUgcGF0aDogcmVwbGFjZSBleGlzdGluZyBwYWdlXG4gICAgICBpZiAocGFnZUhpc3RvcnlbaW5kZXhdLnBhdGggPT09IHBhZ2UucGF0aCkge1xuICAgICAgICAvL2lmICh0aGlzLl9kZWJ1ZylcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBVcGRhdGluZyBleGlzdGluZyBwYWdlIGluIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuICAgICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIENvcHkgZXhpdGluZyBjaGlsZHJlblxuICAgICAgICBwYWdlLmNoaWxkcmVuID0gZXhpc3RpbmdQYWdlLmNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAgIC8vIFByZXBlbmQgdG8gbGlzdFxuICAgICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoMCwgMCwgcGFnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBzYW1lIHBhdGggKHNob3VsZCBiZSBhIHBhcmVudCBwYWdlKVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBwYXJlbnQncyBjaGlsZHJlbiBhcnJheSwgaWYgbm90IGV4aXN0c1xuICAgICAgICBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBwYXJlbnQgdGltZVxuICAgICAgICBleGlzdGluZ1BhZ2UudGltZSA9IHBhZ2UudGltZTtcblxuICAgICAgICAvLyBBZGQgcGFnZSBhcyBwYXJlbnQncyBjaGlsZHJlbiAocmVjdXJzaXZlIGNhbGwpXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCBvcHRzLCBleGlzdGluZ1BhZ2UuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNhdmUgbG9jYWxseSAob25seSBpZiBub3QgYSByZWN1cnNpdmUgZXhlY3V0aW9uKVxuICAgIGlmIChwYWdlSGlzdG9yeSA9PT0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSkge1xuICAgICAgLy8gSWYgbWF4IGhhcyBiZWVuIHJlYWNoZWQsIHJlbW92ZSBvbGQgcGFnZXNcbiAgICAgIGlmIChwYWdlSGlzdG9yeS5sZW5ndGggPiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFnZXMgPSBwYWdlSGlzdG9yeS5zcGxpY2UodGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUsIHBhZ2VIaXN0b3J5Lmxlbmd0aCAtIHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBQYWdlcyByZW1vdmVkIGZyb20gaGlzdG9yeTogJywgcmVtb3ZlZFBhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbmV3IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9LFxuICAgIHBhZ2VIaXN0b3J5OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdID0gdW5kZWZpbmVkLCAvLyB1c2VkIGZvciByZWN1cnNpdmUgY2FsbCB0byBjaGlsZHJlbilcbiAgICBkZXB0aCA9IDBcbiAgKSB7XG4gICAgY29uc3Qgcm9vdCA9IGRlcHRoID09PSAwO1xuICAgIHBhZ2VIaXN0b3J5ID0gcGFnZUhpc3RvcnkgfHwgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeT8uc2xpY2UoKSAvKmNsb25lLCB0byBmb3JjZSBhcHBseSB0byBzYXZlICovIHx8IFtdO1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgoKHApID0+IHAucGF0aCA9PT0gcGF0aCk7XG4gICAgbGV0IGZvdW5kID0gaW5kZXggIT09IC0xO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmUgcGFnZSBoaXN0b3J5OiAnLCBwYXRoKTtcbiAgICAgIC8vIFJlbW92ZSB2YWx1ZVxuICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VhcmNoIHBhdGggb24gY2hpbGRyZW4gKHN0b3Agd2hlbiBmb3VuZClcbiAgICAgIGZvdW5kID1cbiAgICAgICAgcGFnZUhpc3RvcnlcbiAgICAgICAgICAubWFwKChwKSA9PiBwLmNoaWxkcmVuKVxuICAgICAgICAgIC5maWx0ZXIoaXNOb3RFbXB0eUFycmF5KVxuICAgICAgICAgIC5maW5kSW5kZXgoKGNoaWxkcmVuKSA9PiB0aGlzLnJlbW92ZVBhZ2VIaXN0b3J5KHBhdGgsIG9wdHMsIGNoaWxkcmVuLCAoZGVwdGggfHwgMCkgKyAxKSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8vIFNhdmUgbG9jYWxseSAob25seSBpZiByb290IGxldmVsKVxuICAgIGlmIChmb3VuZCAmJiByb290KSB7XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgcGFnZUhpc3RvcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyUGFnZUhpc3RvcnkoKSB7XG4gICAgLy8gUmVzZXQgYWxsIHBhZ2UgaGlzdG9yeVxuICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBbXSwgeyBwZXJzaXN0SW1tZWRpYXRlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7IC4uLnRoaXMuX2RhdGEsIC4uLnRoaXMuZGVmYXVsdFNldHRpbmdzIH07XG5cbiAgICB0aGlzLl9kYXRhLmxvY2FsZSA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgPSBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRQZWVyID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlciAmJiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgdGhpcy5fZGF0YS5wZWVyVXJsID0gKGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0TG9jYWxseShpbW1lZGlhdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBFeGVjdXRlIGltbWVkaWF0ZVxuICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgIGlmICghdGhpcy5fZGF0YSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFJlbW92aW5nIGxvY2FsIHNldHRpbmdzIGZyb20gc3RvcmFnZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnJlbW92ZShTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFN0b3JlIGxvY2FsIHNldHRpbmdzJywgdGhpcy5fZGF0YSk7XG4gICAgICAgIGlmICh0aGlzLl9zZXJpYWxpemVBc1N0cmluZykge1xuICAgICAgICAgIC8vIEZpeCBzZXJpYWxpemF0aW9uIGVycm9yLCBpbiBTdW1hcmlzLUFwcFxuICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIHRoaXMuX2RhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgd2l0aCBkZWxheVxuICAgIGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBldmVudCBlbWl0dGVyXG4gICAgICBpZiAoIXRoaXMuXyRwZXJzaXN0KSB7XG4gICAgICAgIHRoaXMuXyRwZXJzaXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KHRydWUpO1xuICAgICAgICB0aGlzLl8kcGVyc2lzdFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyBhZGQgYSBkZWxheSBvZiAyc1xuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc3RhcnRlZClcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fJHBlcnNpc3QuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMoXG4gICAgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsXG4gICAgb3B0cz86IHtcbiAgICAgIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdwYWdlJywgJ3BhZ2UucGF0aCcgb3IgJ3BhZ2UudGl0bGUnXCIpO1xuXG4gICAgLy8gU2V0IHRpbWVcbiAgICBwYWdlLnRpbWUgPSBwYWdlLnRpbWUgfHwgRGF0ZVV0aWxzLm1vbWVudCgpO1xuXG4gICAgLy8gQ2xlYW4gdGl0bGVcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmVtb3ZlIDxzbWFsbD4gSFRNTCB0YWdzXG4gICAgICBjb25zdCBzbWFsbFRhZ0luZGV4ID0gcGFnZS50aXRsZS5pbmRleE9mKCc8L3NtYWxsPicpO1xuICAgICAgaWYgKHNtYWxsVGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyhzbWFsbFRhZ0luZGV4ICsgJzwvc21hbGw+Jy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIGNsYXNzPVwiLi4uXCIgSFRNTCBhdHRyaWJ1dGVcbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnJlcGxhY2UoL1xccypjbGFzcz1bJ1wiXVteJ1wiXStbJ1wiXScvZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBwYWdlLnBhdGgucmVwbGFjZSgvWz9dLiokLywgJycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=
|
|
@@ -12407,6 +12407,9 @@ class LocalSettingsService extends StartableService {
|
|
|
12407
12407
|
});
|
|
12408
12408
|
// Merge into existing data
|
|
12409
12409
|
data = Object.assign(data, restoredData);
|
|
12410
|
+
// Fix known attribute
|
|
12411
|
+
if (data.pageHistory && !Array.isArray(data.pageHistory))
|
|
12412
|
+
data.pageHistory = [];
|
|
12410
12413
|
}
|
|
12411
12414
|
// Initialize darkMode, if not set
|
|
12412
12415
|
if (this.environment?.allowDarkMode !== true) {
|
|
@@ -23101,7 +23104,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
23101
23104
|
query,
|
|
23102
23105
|
variables,
|
|
23103
23106
|
fetchPolicy: (opts && opts.fetchPolicy) || undefined,
|
|
23104
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: '
|
|
23107
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
23105
23108
|
})
|
|
23106
23109
|
.pipe(map(({ data }) => this.fromObject(data, opts)));
|
|
23107
23110
|
}
|
|
@@ -23114,7 +23117,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
23114
23117
|
query,
|
|
23115
23118
|
variables,
|
|
23116
23119
|
fetchPolicy: (opts && opts.fetchPolicy) || undefined,
|
|
23117
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: '
|
|
23120
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
23118
23121
|
});
|
|
23119
23122
|
// Convert to entity
|
|
23120
23123
|
return this.fromObject(data, opts);
|
|
@@ -23144,7 +23147,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
23144
23147
|
arrayFieldName: 'data',
|
|
23145
23148
|
totalFieldName: withTotal ? 'total' : undefined,
|
|
23146
23149
|
insertFilterFn: dataFilter && dataFilter.asFilterFn(),
|
|
23147
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: '
|
|
23150
|
+
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
23148
23151
|
fetchPolicy: (opts && opts.fetchPolicy) || undefined,
|
|
23149
23152
|
}).pipe(map(({ data, total }) => {
|
|
23150
23153
|
// Convert to entities (if need)
|