@sumaris-net/ngx-components 2.4.126 → 2.4.128
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/esm2020/public_api.mjs +3 -2
- package/esm2020/src/app/core/menu/menu.component.mjs +29 -16
- package/esm2020/src/app/core/menu/menu.model.mjs +29 -1
- package/esm2020/src/app/core/menu/menu.module.mjs +12 -3
- package/esm2020/src/app/core/menu/menu.service.mjs +74 -68
- package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +74 -0
- package/esm2020/src/app/core/menu/testing/menu-other.testing.mjs +9 -26
- package/esm2020/src/app/core/menu/testing/menu.testing.mjs +14 -56
- package/esm2020/src/app/core/menu/testing/menu.testing.module.mjs +10 -5
- package/esm2020/src/environments/environment.mjs +5 -5
- package/fesm2015/sumaris-net.ngx-components.mjs +242 -173
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +242 -174
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +2 -1
- package/src/app/core/menu/menu.component.d.ts +5 -3
- package/src/app/core/menu/menu.model.d.ts +3 -0
- package/src/app/core/menu/menu.module.d.ts +6 -5
- package/src/app/core/menu/menu.service.d.ts +9 -7
- package/src/app/core/menu/sub-menu-tab.directive.d.ts +24 -0
- package/src/app/core/menu/testing/menu.testing.d.ts +4 -8
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isNilOrBlank } from '../../shared/functions';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
3
|
import { AccountUtils } from '../services/model/account.model';
|
|
3
4
|
export class MenuItems {
|
|
4
5
|
/**
|
|
@@ -22,6 +23,26 @@ export class MenuItems {
|
|
|
22
23
|
static isSameParams(mainParams, otherParams) {
|
|
23
24
|
return Object.entries(mainParams).every(([key, value]) => value === otherParams[key]);
|
|
24
25
|
}
|
|
26
|
+
// TODO : Replace this by a class ?
|
|
27
|
+
static prepareItem(item) {
|
|
28
|
+
item = {
|
|
29
|
+
$children: item.$children || new BehaviorSubject([]),
|
|
30
|
+
pinned: false,
|
|
31
|
+
...item,
|
|
32
|
+
};
|
|
33
|
+
// Clean
|
|
34
|
+
if (item.path) {
|
|
35
|
+
const { path, params } = MenuItems.parsePathWithQuery(item.path);
|
|
36
|
+
item.path = path;
|
|
37
|
+
item.pathParams = { ...item.pathParams, ...params };
|
|
38
|
+
}
|
|
39
|
+
if (item.parentPath) {
|
|
40
|
+
const { path, params } = MenuItems.parsePathWithQuery(item.parentPath);
|
|
41
|
+
item.parentPath = path;
|
|
42
|
+
item.parentPathParams = { ...item.parentPathParams, ...params };
|
|
43
|
+
}
|
|
44
|
+
return item;
|
|
45
|
+
}
|
|
25
46
|
static isParent(child, parent) {
|
|
26
47
|
return child.parentPath && child.parentPath === parent?.path
|
|
27
48
|
&& this.isSameParams(child.parentPathParams, parent['pathParams'] || parent['params']) || false;
|
|
@@ -56,6 +77,13 @@ export class MenuItems {
|
|
|
56
77
|
}
|
|
57
78
|
return true;
|
|
58
79
|
}
|
|
80
|
+
static isPinned(item) {
|
|
81
|
+
if (item?.pinned)
|
|
82
|
+
return true;
|
|
83
|
+
if (!item?.$children || item.$children.value.length < 1)
|
|
84
|
+
return false;
|
|
85
|
+
return item.$children.value.some(i => MenuItems.isPinned(i));
|
|
86
|
+
}
|
|
59
87
|
static parsePathWithQuery(pathWithQuery) {
|
|
60
88
|
const index = pathWithQuery.lastIndexOf('?');
|
|
61
89
|
if (index < 0)
|
|
@@ -77,4 +105,4 @@ export class MenuItems {
|
|
|
77
105
|
}
|
|
78
106
|
export class MenuOptions {
|
|
79
107
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3RELE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQTRCeEUsTUFBTSxPQUFPLFNBQVM7SUFFcEI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQWtCLEVBQUUsU0FBbUI7UUFDbkQsT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJO2VBQ3BDLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLFVBQVU7ZUFDNUMsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSztlQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBbUMsRUFBRSxXQUFvQztRQUMzRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFlLEVBQUUsTUFBZ0M7UUFDL0QsT0FBTyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssTUFBTSxFQUFFLElBQUk7ZUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJ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LE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEdBQUcsSUFBSSxJQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sV0FBVztDQUV2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJQcm9maWxlTGFiZWwgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51UGF0aFBhcmFtIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCwgQWNjb3VudFV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW0gZXh0ZW5kcyBJY29uUmVmIHtcbiAgaWQ/OiBudW1iZXI7IC8vIEludGVybmFsIGlkIChzZXQgYnkgbWVudS1zZXJ2aWNlKVxuICB0aXRsZTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8vIEluamVjdGlvbiBwb2ludFxuICBhZnRlcj86IHN0cmluZztcbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIGFjdGlvbj86IHN0cmluZyB8IGFueTtcbiAgcHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGV4YWN0UHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgLy8gQSBjb25maWcgcHJvcGVydHksIHRvIGVuYWJsZSB0aGUgbWVudSBpdGVtXG4gIGlmUHJvcGVydHk/OiBzdHJpbmc7XG4gIC8vIEEgY29uZmlnIHByb3BlcnR5LCB0byBvdmVycmlkZSB0aGUgdGl0bGVcbiAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZztcbiAgdGl0bGVBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGF0aFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHBhcmVudFBhdGg/OiBzdHJpbmc7XG4gIHBhcmVudFBhdGhQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICRjaGlsZHJlbj86IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPjtcbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtcyB7XG5cbiAgLyoqXG4gICAqIENvbXBhcmUsIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGNoaWxkcmVuXG4gICAqXG4gICAqIEBwYXJhbSBtYWluSXRlbVxuICAgKiBAcGFyYW0gb3RoZXJJdGVtXG4gICAqL1xuICBzdGF0aWMgaXNTYW1lKG1haW5JdGVtOiBNZW51SXRlbSwgb3RoZXJJdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiBtYWluSXRlbS5wYXRoID09PSBvdGhlckl0ZW0ucGF0aFxuICAgICYmIG1haW5JdGVtLnBhcmVudFBhdGggPT09IG90aGVySXRlbS5wYXJlbnRQYXRoXG4gICAgJiYgbWFpbkl0ZW0udGl0bGUgPT09IG90aGVySXRlbS50aXRsZVxuICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKG1haW5JdGVtLnBhdGhQYXJhbXMsIG90aGVySXRlbS5wYXRoUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwga2V5L3ZhbHVlIG9mIHRoZSBtYWluUGFyYW1zIHNob3VsZCBleGlzdCAoYW5kIGJlIGVxdWFscykgaW4gdGhlIG90aGVyIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gbWFpblBhcmFtc1xuICAgKiBAcGFyYW0gb3RoZXJQYXJhbXNcbiAgICovXG4gIHN0YXRpYyBpc1NhbWVQYXJhbXMobWFpblBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG90aGVyUGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYWluUGFyYW1zKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gb3RoZXJQYXJhbXNba2V5XSk7XG4gIH1cblxuICBzdGF0aWMgaXNQYXJlbnQoY2hpbGQ6IE1lbnVJdGVtLCBwYXJlbnQ6IE1lbnVJdGVtIHwgTWVudVBhdGhQYXJhbSkge1xuICAgIHJldHVybiBjaGlsZC5wYXJlbnRQYXRoICYmIGNoaWxkLnBhcmVudFBhdGggPT09IHBhcmVudD8ucGF0aFxuICAgICAgICAmJiB0aGlzLmlzU2FtZVBhcmFtcyhjaGlsZC5wYXJlbnRQYXRoUGFyYW1zLCBwYXJlbnRbJ3BhdGhQYXJhbXMnXSB8fCBwYXJlbnRbJ3BhcmFtcyddKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0lmVmlzaWJsZShpdGVtOiBNZW51SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQ6IEFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IENvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvZ2luPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dQcmVmaXg/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTogYm9vbGVhbiB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgaWYgKGl0ZW0ucHJvZmlsZSkge1xuICAgICAgY29uc3QgaGFzUHJvZmlsZSA9IEFjY291bnRVdGlscy5oYXNNaW5Qcm9maWxlKGFjY291bnQsIGl0ZW0ucHJvZmlsZSk7XG4gICAgICBpZiAoIWhhc1Byb2ZpbGUpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7b3B0cyAmJiBvcHRzLmxvZ1ByZWZpeCB8fCAnW21lbnUtc2VydmljZV0nfSBIaWRlIGl0ZW0gJyR7aXRlbS50aXRsZX0nOiBuZWVkIHRoZSBtaW4gcHJvZmlsZSAnJHtpdGVtLnByb2ZpbGV9JyB0byBhY2Nlc3MgcGF0aCAnJHtpdGVtLnBhdGh9J2ApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoaXRlbS5leGFjdFByb2ZpbGUpIHtcbiAgICAgIGNvbnN0IGhhc0V4YWN0UHJvZmlsZSA9IEFjY291bnRVdGlscy5oYXNFeGFjdFByb2ZpbGUoYWNjb3VudCwgaXRlbS5leGFjdFByb2ZpbGUpO1xuICAgICAgaWYgKCFoYXNFeGFjdFByb2ZpbGUpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7b3B0cyAmJiBvcHRzLmxvZ1ByZWZpeCB8fCAnW21lbnUtc2VydmljZV0nfSBIaWRlIGl0ZW0gJyR7aXRlbS50aXRsZX0nOiBuZWVkIGV4YWN0IHByb2ZpbGUgJyR7aXRlbS5leGFjdFByb2ZpbGV9JyB0byBhY2Nlc3MgcGF0aCAnJHtpdGVtLnBhdGh9J2ApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZW5hYmxlIGJ5IGNvbmZpZ1xuICAgIGlmIChpdGVtLmlmUHJvcGVydHkpIHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBDaGVja2luZyBpZiBwcm9wZXJ0eSBlbmFibGUgPyBcIiArIGl0ZW0uaWZQcm9wZXJ0eSwgY29uZmlnICYmIGNvbmZpZy5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IGlzRW5hYmxlQnlDb25maWcgPSBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXNbaXRlbS5pZlByb3BlcnR5XSA9PT0gJ3RydWUnO1xuICAgICAgaWYgKCFpc0VuYWJsZUJ5Q29uZmlnKSB7XG4gICAgICAgIGlmIChvcHRzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbbWVudS1zZXJ2aWNlXSBDb25maWcgcHJvcGVydHkgXFwnJyArIGl0ZW0uaWZQcm9wZXJ0eSArICdcXCcgbm90IFxcJ3RydWVcXCcgZm9yICcsIGl0ZW0ucGF0aCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVBhdGhXaXRoUXVlcnkocGF0aFdpdGhRdWVyeTogc3RyaW5nKTogTWVudVBhdGhQYXJhbSB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoV2l0aFF1ZXJ5Lmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHtwYXRoOiBwYXRoV2l0aFF1ZXJ5LCBwYXJhbXM6IHt9fTtcbiAgICBjb25zdCBwYXRoID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSk7XG4gICAgcmV0dXJuIHtwYXRoLCBwYXJhbXN9O1xuICB9XG5cbiAgc3RhdGljIGdldFVybChpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiB0aGlzLmdldFVybEZyb21QYXRoQW5kUGFyYW1zKGl0ZW0/LnBhdGgsIGl0ZW0/LnBhdGhQYXJhbXMpO1xuICB9XG4gIHN0YXRpYyBnZXRVcmxGcm9tUGF0aEFuZFBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmVudHJpZXMocGFyYW1zIHx8IHt9KS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApLmpvaW4oJyYnKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHF1ZXJ5U3RyaW5nKSkgcmV0dXJuIHBhdGggfHwgJyc7XG4gICAgcmV0dXJuIGAke3BhdGggfHwnJ30/JHtxdWVyeVN0cmluZ31gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZW51T3B0aW9ucyB7XG4gIC8vIFRPRE8gYWRkIG9wdGlvbnMsIHdoZW4gbmVlZCBzcGVjaWZpYyBiZWhhdmlvciBvbiBwcm9qZWN0c1xufVxuIl19
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBNkJ4RSxNQUFNLE9BQU8sU0FBUztJQUVwQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBa0IsRUFBRSxTQUFtQjtRQUNuRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUk7ZUFDcEMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsVUFBVTtlQUM1QyxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLO2VBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFtQyxFQUFFLFdBQW9DO1FBQzNGLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFjO1FBQy9CLElBQUksR0FBYTtZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksZUFBZSxDQUFhLEVBQUUsQ0FBQztZQUNoRSxNQUFNLEVBQUUsS0FB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RSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBWSxFQUFFLE1BQVk7UUFDdkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEdBQUcsSUFBSSxJQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sV0FBVztDQUV2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJQcm9maWxlTGFiZWwgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51UGF0aFBhcmFtIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCwgQWNjb3VudFV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW0gZXh0ZW5kcyBJY29uUmVmIHtcbiAgaWQ/OiBudW1iZXI7IC8vIEludGVybmFsIGlkIChzZXQgYnkgbWVudS1zZXJ2aWNlKVxuICB0aXRsZTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8vIEluamVjdGlvbiBwb2ludFxuICBhZnRlcj86IHN0cmluZztcbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIGFjdGlvbj86IHN0cmluZyB8IGFueTtcbiAgcHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGV4YWN0UHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgLy8gQSBjb25maWcgcHJvcGVydHksIHRvIGVuYWJsZSB0aGUgbWVudSBpdGVtXG4gIGlmUHJvcGVydHk/OiBzdHJpbmc7XG4gIC8vIEEgY29uZmlnIHByb3BlcnR5LCB0byBvdmVycmlkZSB0aGUgdGl0bGVcbiAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZztcbiAgdGl0bGVBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGF0aFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHBhcmVudFBhdGg/OiBzdHJpbmc7XG4gIHBhcmVudFBhdGhQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwaW5uZWQ/OiBib29sZWFuO1xuXG4gICRjaGlsZHJlbj86IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPjtcbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtcyB7XG5cbiAgLyoqXG4gICAqIENvbXBhcmUsIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGNoaWxkcmVuXG4gICAqXG4gICAqIEBwYXJhbSBtYWluSXRlbVxuICAgKiBAcGFyYW0gb3RoZXJJdGVtXG4gICAqL1xuICBzdGF0aWMgaXNTYW1lKG1haW5JdGVtOiBNZW51SXRlbSwgb3RoZXJJdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiBtYWluSXRlbS5wYXRoID09PSBvdGhlckl0ZW0ucGF0aFxuICAgICYmIG1haW5JdGVtLnBhcmVudFBhdGggPT09IG90aGVySXRlbS5wYXJlbnRQYXRoXG4gICAgJiYgbWFpbkl0ZW0udGl0bGUgPT09IG90aGVySXRlbS50aXRsZVxuICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKG1haW5JdGVtLnBhdGhQYXJhbXMsIG90aGVySXRlbS5wYXRoUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwga2V5L3ZhbHVlIG9mIHRoZSBtYWluUGFyYW1zIHNob3VsZCBleGlzdCAoYW5kIGJlIGVxdWFscykgaW4gdGhlIG90aGVyIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gbWFpblBhcmFtc1xuICAgKiBAcGFyYW0gb3RoZXJQYXJhbXNcbiAgICovXG4gIHN0YXRpYyBpc1NhbWVQYXJhbXMobWFpblBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG90aGVyUGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYWluUGFyYW1zKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gb3RoZXJQYXJhbXNba2V5XSk7XG4gIH1cblxuICAvLyBUT0RPIDogUmVwbGFjZSB0aGlzIGJ5IGEgY2xhc3MgP1xuICBzdGF0aWMgcHJlcGFyZUl0ZW0oaXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSB7XG4gICAgaXRlbSA9IDxNZW51SXRlbT57XG4gICAgICAkY2hpbGRyZW46IGl0ZW0uJGNoaWxkcmVuIHx8IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pLFxuICAgICAgcGlubmVkOiBmYWxzZSxcbiAgICAgIC4uLml0ZW0sXG4gICAgfTtcblxuICAgIC8vIENsZWFuXG4gICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgY29uc3Qge3BhdGgsIHBhcmFtc30gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGl0ZW0ucGF0aCk7XG4gICAgICBpdGVtLnBhdGggPSBwYXRoO1xuICAgICAgaXRlbS5wYXRoUGFyYW1zID0gey4uLml0ZW0ucGF0aFBhcmFtcywgLi4ucGFyYW1zfTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ucGFyZW50UGF0aCkge1xuICAgICAgY29uc3Qge3BhdGgsIHBhcmFtc30gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGl0ZW0ucGFyZW50UGF0aCk7XG4gICAgICBpdGVtLnBhcmVudFBhdGggPSBwYXRoO1xuICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gey4uLml0ZW0ucGFyZW50UGF0aFBhcmFtcywgLi4ucGFyYW1zfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhcmVudChjaGlsZDogTWVudUl0ZW0sIHBhcmVudDogTWVudUl0ZW0gfCBNZW51UGF0aFBhcmFtKSB7XG4gICAgcmV0dXJuIGNoaWxkLnBhcmVudFBhdGggJiYgY2hpbGQucGFyZW50UGF0aCA9PT0gcGFyZW50Py5wYXRoXG4gICAgICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKGNoaWxkLnBhcmVudFBhdGhQYXJhbXMsIHBhcmVudFsncGF0aFBhcmFtcyddIHx8IHBhcmVudFsncGFyYW1zJ10pIHx8IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrSWZWaXNpYmxlKGl0ZW06IE1lbnVJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogQWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9naW4/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1ByZWZpeD86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBpZiAoaXRlbS5wcm9maWxlKSB7XG4gICAgICBjb25zdCBoYXNQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc01pblByb2ZpbGUoYWNjb3VudCwgaXRlbS5wcm9maWxlKTtcbiAgICAgIGlmICghaGFzUHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudS1zZXJ2aWNlXSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgdGhlIG1pbiBwcm9maWxlICcke2l0ZW0ucHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmIChpdGVtLmV4YWN0UHJvZmlsZSkge1xuICAgICAgY29uc3QgaGFzRXhhY3RQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc0V4YWN0UHJvZmlsZShhY2NvdW50LCBpdGVtLmV4YWN0UHJvZmlsZSk7XG4gICAgICBpZiAoIWhhc0V4YWN0UHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudS1zZXJ2aWNlXSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgZXhhY3QgcHJvZmlsZSAnJHtpdGVtLmV4YWN0UHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBlbmFibGUgYnkgY29uZmlnXG4gICAgaWYgKGl0ZW0uaWZQcm9wZXJ0eSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENoZWNraW5nIGlmIHByb3BlcnR5IGVuYWJsZSA/IFwiICsgaXRlbS5pZlByb3BlcnR5LCBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgaXNFbmFibGVCeUNvbmZpZyA9IGNvbmZpZyAmJiBjb25maWcucHJvcGVydGllc1tpdGVtLmlmUHJvcGVydHldID09PSAndHJ1ZSc7XG4gICAgICBpZiAoIWlzRW5hYmxlQnlDb25maWcpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttZW51LXNlcnZpY2VdIENvbmZpZyBwcm9wZXJ0eSBcXCcnICsgaXRlbS5pZlByb3BlcnR5ICsgJ1xcJyBub3QgXFwndHJ1ZVxcJyBmb3IgJywgaXRlbS5wYXRoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGlzUGlubmVkKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKGl0ZW0/LnBpbm5lZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFpdGVtPy4kY2hpbGRyZW4gfHwgaXRlbS4kY2hpbGRyZW4udmFsdWUubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBpdGVtLiRjaGlsZHJlbi52YWx1ZS5zb21lKGkgPT4gTWVudUl0ZW1zLmlzUGlubmVkKGkpKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVBhdGhXaXRoUXVlcnkocGF0aFdpdGhRdWVyeTogc3RyaW5nKTogTWVudVBhdGhQYXJhbSB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoV2l0aFF1ZXJ5Lmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHtwYXRoOiBwYXRoV2l0aFF1ZXJ5LCBwYXJhbXM6IHt9fTtcbiAgICBjb25zdCBwYXRoID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSk7XG4gICAgcmV0dXJuIHtwYXRoLCBwYXJhbXN9O1xuICB9XG5cbiAgc3RhdGljIGdldFVybChpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiB0aGlzLmdldFVybEZyb21QYXRoQW5kUGFyYW1zKGl0ZW0/LnBhdGgsIGl0ZW0/LnBhdGhQYXJhbXMpO1xuICB9XG5cbiAgc3RhdGljIGdldFVybEZyb21QYXRoQW5kUGFyYW1zKHBhdGg6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3QuZW50cmllcyhwYXJhbXMgfHwge30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YCkuam9pbignJicpO1xuICAgIGlmIChpc05pbE9yQmxhbmsocXVlcnlTdHJpbmcpKSByZXR1cm4gcGF0aCB8fCAnJztcbiAgICByZXR1cm4gYCR7cGF0aCB8fCcnfT8ke3F1ZXJ5U3RyaW5nfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVPcHRpb25zIHtcbiAgLy8gVE9ETyBhZGQgb3B0aW9ucywgd2hlbiBuZWVkIHNwZWNpZmljIGJlaGF2aW9yIG9uIHByb2plY3RzXG59XG4iXX0=
|
|
@@ -4,6 +4,7 @@ import { MenuComponent } from './menu.component';
|
|
|
4
4
|
import { TranslateModule } from '@ngx-translate/core';
|
|
5
5
|
import { RouterModule } from '@angular/router';
|
|
6
6
|
import { ForModule } from '@rx-angular/template/for';
|
|
7
|
+
import { SubMenuTabDirective } from './sub-menu-tab.directive';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@ngx-translate/core";
|
|
9
10
|
export class AppMenuModule {
|
|
@@ -11,11 +12,15 @@ export class AppMenuModule {
|
|
|
11
12
|
AppMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
13
|
AppMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: AppMenuModule, declarations: [
|
|
13
14
|
// Components
|
|
14
|
-
MenuComponent
|
|
15
|
+
MenuComponent,
|
|
16
|
+
// Directive
|
|
17
|
+
SubMenuTabDirective], imports: [SharedModule, RouterModule, ForModule, i1.TranslateModule], exports: [
|
|
15
18
|
// Modules
|
|
16
19
|
TranslateModule,
|
|
17
20
|
// Components
|
|
18
|
-
MenuComponent
|
|
21
|
+
MenuComponent,
|
|
22
|
+
// Directive
|
|
23
|
+
SubMenuTabDirective] });
|
|
19
24
|
AppMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppMenuModule, imports: [SharedModule, RouterModule, ForModule, TranslateModule.forChild(),
|
|
20
25
|
// Modules
|
|
21
26
|
TranslateModule] });
|
|
@@ -26,13 +31,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
26
31
|
declarations: [
|
|
27
32
|
// Components
|
|
28
33
|
MenuComponent,
|
|
34
|
+
// Directive
|
|
35
|
+
SubMenuTabDirective,
|
|
29
36
|
],
|
|
30
37
|
exports: [
|
|
31
38
|
// Modules
|
|
32
39
|
TranslateModule,
|
|
33
40
|
// Components
|
|
34
41
|
MenuComponent,
|
|
42
|
+
// Directive
|
|
43
|
+
SubMenuTabDirective,
|
|
35
44
|
],
|
|
36
45
|
}]
|
|
37
46
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7OztBQW9CN0QsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYTtRQWR0QixhQUFhO1FBQ2IsYUFBYTtRQUNiLFlBQVk7UUFDWixtQkFBbUIsYUFOWCxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVM7UUFTN0MsVUFBVTtRQUNWLGVBQWU7UUFDZixhQUFhO1FBQ2IsYUFBYTtRQUNiLFlBQVk7UUFDWixtQkFBbUI7MkdBR1YsYUFBYSxZQWpCZCxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFO1FBU3pFLFVBQVU7UUFDVixlQUFlOzJGQU9OLGFBQWE7a0JBbEJ6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFFNUUsWUFBWSxFQUFFO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixtQkFBbUI7cUJBQ3BCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNoYXJlZE1vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZvck1vZHVsZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3RlbXBsYXRlL2Zvcic7XG5pbXBvcnQge1N1Yk1lbnVUYWJEaXJlY3RpdmV9IGZyb20gJy4vc3ViLW1lbnUtdGFiLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFJvdXRlck1vZHVsZSwgRm9yTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUuZm9yQ2hpbGQoKV0sXG5cbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIE1lbnVDb21wb25lbnQsXG4gICAgLy8gRGlyZWN0aXZlXG4gICAgU3ViTWVudVRhYkRpcmVjdGl2ZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIC8vIE1vZHVsZXNcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIE1lbnVDb21wb25lbnQsXG4gICAgLy8gRGlyZWN0aXZlXG4gICAgU3ViTWVudVRhYkRpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwTWVudU1vZHVsZSB7fVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest,
|
|
2
|
+
import { BehaviorSubject, combineLatest, merge, mergeMap, Subject } from 'rxjs';
|
|
3
3
|
import { MenuItems } from './menu.model';
|
|
4
4
|
import { APP_MENU_ITEMS } from './menu.component';
|
|
5
5
|
import { NavigationEnd } from '@angular/router';
|
|
@@ -33,7 +33,7 @@ export class MenuService extends StartableObservableService {
|
|
|
33
33
|
this._$listenRoute = new BehaviorSubject(false);
|
|
34
34
|
this._debug = !environment.production;
|
|
35
35
|
this._staticItems = (staticItems || []).map(i => {
|
|
36
|
-
const item =
|
|
36
|
+
const item = MenuItems.prepareItem(i);
|
|
37
37
|
item.id = this._itemCounter++;
|
|
38
38
|
return item;
|
|
39
39
|
});
|
|
@@ -79,15 +79,59 @@ export class MenuService extends StartableObservableService {
|
|
|
79
79
|
await this.ready();
|
|
80
80
|
return this._addSubMenuItem(newItem, opts);
|
|
81
81
|
}
|
|
82
|
+
removeSubMenuItem(item) {
|
|
83
|
+
const parent = this._findParent(item);
|
|
84
|
+
if (parent) {
|
|
85
|
+
const newChilds = parent.$children.value.filter(i => !MenuItems.isSame(item, i));
|
|
86
|
+
parent.$children.next(newChilds);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
detachSubMenuItem(pathParam) {
|
|
90
|
+
const excludedItems = [];
|
|
91
|
+
this._detachSubMenus(pathParam, this.data, excludedItems);
|
|
92
|
+
if (!excludedItems.length)
|
|
93
|
+
return; // Skip if no items detached
|
|
94
|
+
if (this._debug)
|
|
95
|
+
console.debug(`${this._logPrefix} Detached sub menus: `, excludedItems);
|
|
96
|
+
// TODO Store excluded items
|
|
97
|
+
// TODO Restore old excluded items
|
|
98
|
+
// this.addSubMenuItems();
|
|
99
|
+
}
|
|
100
|
+
async ngOnStart() {
|
|
101
|
+
console.info(`${this._logPrefix} Starting...`);
|
|
102
|
+
const [account, config] = await Promise.all([
|
|
103
|
+
this.accountService.ready(),
|
|
104
|
+
this.configService.ready(),
|
|
105
|
+
]);
|
|
106
|
+
await this._loadMenuItems(config, account);
|
|
107
|
+
const accountEvent$ = merge(this.accountService.onLogin, this.accountService.onLogout.pipe(map(_ => null))).pipe(distinctUntilChanged((a1, a2) => DateUtils.isSame(a1?.updateDate, a2?.updateDate)), map(account => isNotNil(account?.id) ? account : null));
|
|
108
|
+
this.registerSubscription(
|
|
109
|
+
// Combine config and account events
|
|
110
|
+
combineLatest([
|
|
111
|
+
this.configService.config,
|
|
112
|
+
accountEvent$
|
|
113
|
+
]).subscribe(async ([config, account]) => {
|
|
114
|
+
if (this._debug)
|
|
115
|
+
console.debug(`${this._logPrefix} Received config or account event. Refreshing items...`, account);
|
|
116
|
+
// Load all items
|
|
117
|
+
await this._loadMenuItems(config, account);
|
|
118
|
+
// Emit account changes event
|
|
119
|
+
this.accountChanges.next(account);
|
|
120
|
+
}));
|
|
121
|
+
this.registerSubscription(this._$listenRoute.pipe(filter(listen => listen === true), mergeMap(_ => this.router.events), filter(event => event instanceof NavigationEnd), map((event) => MenuItems.parsePathWithQuery(event.url))).subscribe(pathParam => {
|
|
122
|
+
this.detachSubMenuItem(pathParam);
|
|
123
|
+
}));
|
|
124
|
+
return this.dataSubject.value;
|
|
125
|
+
}
|
|
82
126
|
_addSubMenuItem(newItem, opts) {
|
|
83
127
|
opts = {
|
|
84
|
-
skipIfExists:
|
|
128
|
+
skipIfExists: true,
|
|
85
129
|
...opts,
|
|
86
130
|
};
|
|
87
131
|
// Make sure path (and pathParams) are filled in the same way
|
|
88
|
-
newItem =
|
|
132
|
+
newItem = MenuItems.prepareItem(newItem);
|
|
89
133
|
// Find if item already exists
|
|
90
|
-
const existingItem = this.
|
|
134
|
+
const existingItem = this._findExistingItem(newItem);
|
|
91
135
|
if (existingItem) {
|
|
92
136
|
if (opts.skipIfExists) {
|
|
93
137
|
// DEBUG
|
|
@@ -100,7 +144,7 @@ export class MenuService extends StartableObservableService {
|
|
|
100
144
|
// Replace existing item, but keep the existing id
|
|
101
145
|
newItem.id = existingItem.id;
|
|
102
146
|
}
|
|
103
|
-
const parent = this.
|
|
147
|
+
const parent = this._findParent(newItem, opts?.availableParents);
|
|
104
148
|
if (!parent) {
|
|
105
149
|
console.warn(`${this._logPrefix} Unable to add sub item: no parent found`);
|
|
106
150
|
return false;
|
|
@@ -108,42 +152,13 @@ export class MenuService extends StartableObservableService {
|
|
|
108
152
|
// Generate item's id (if need)
|
|
109
153
|
if (isNil(newItem.id))
|
|
110
154
|
newItem.id = this._itemCounter++;
|
|
111
|
-
this.
|
|
155
|
+
this._addMenuToParent(parent, newItem);
|
|
112
156
|
// Start listening route
|
|
113
157
|
if (!this._$listenRoute.value)
|
|
114
158
|
this._$listenRoute.next(true);
|
|
115
159
|
return true;
|
|
116
160
|
}
|
|
117
|
-
async
|
|
118
|
-
console.info(`${this._logPrefix} Starting...`);
|
|
119
|
-
const accountEvent$ = merge(from(this.accountService.ready()), merge(this.accountService.onLogin, this.accountService.onLogout.pipe(map(_ => null)))).pipe(distinctUntilChanged((a1, a2) => DateUtils.isSame(a1?.updateDate, a2?.updateDate)), map(account => isNotNil(account?.id) ? account : null));
|
|
120
|
-
this.registerSubscription(
|
|
121
|
-
// Combine config and account events
|
|
122
|
-
combineLatest([
|
|
123
|
-
this.configService.config,
|
|
124
|
-
accountEvent$
|
|
125
|
-
]).subscribe(async ([config, account]) => {
|
|
126
|
-
if (this._debug)
|
|
127
|
-
console.debug(`${this._logPrefix} Received config or account event. Refreshing items...`, account);
|
|
128
|
-
// Load all items
|
|
129
|
-
await this.loadMenuItems(config, account);
|
|
130
|
-
// Emit account changes event
|
|
131
|
-
this.accountChanges.next(account);
|
|
132
|
-
}));
|
|
133
|
-
this.registerSubscription(this._$listenRoute.pipe(filter(listen => listen === true), mergeMap(_ => this.router.events), filter(event => event instanceof NavigationEnd), map((event) => MenuItems.parsePathWithQuery(event.url))).subscribe(pathParam => {
|
|
134
|
-
const excludedItems = [];
|
|
135
|
-
this.detachSubMenus(pathParam, this.data, excludedItems);
|
|
136
|
-
if (!excludedItems.length)
|
|
137
|
-
return; // Skip if no items detached
|
|
138
|
-
if (this._debug)
|
|
139
|
-
console.debug(`${this._logPrefix} Detached sub menus: `, excludedItems);
|
|
140
|
-
// TODO Store excluded items
|
|
141
|
-
// TODO Restore old excluded items
|
|
142
|
-
// this.addSubMenuItems();
|
|
143
|
-
}));
|
|
144
|
-
return undefined; // not yet loaded
|
|
145
|
-
}
|
|
146
|
-
async loadMenuItems(config, account) {
|
|
161
|
+
async _loadMenuItems(config, account) {
|
|
147
162
|
if (this._debug)
|
|
148
163
|
console.debug(`${this._logPrefix} Loading menu items...`);
|
|
149
164
|
// Save previous children of root items
|
|
@@ -158,7 +173,7 @@ export class MenuService extends StartableObservableService {
|
|
|
158
173
|
const configItems = JSON.parse(configValue);
|
|
159
174
|
items = (configItems || []).reduce((res, item) => {
|
|
160
175
|
// Normalize the item
|
|
161
|
-
item =
|
|
176
|
+
item = MenuItems.prepareItem(item);
|
|
162
177
|
// Skip is already loaded
|
|
163
178
|
if (res.find((i) => MenuItems.isSame(i, item)))
|
|
164
179
|
return res;
|
|
@@ -214,37 +229,19 @@ export class MenuService extends StartableObservableService {
|
|
|
214
229
|
console.debug(`${this._logPrefix} Found ${items.length} visible items...`);
|
|
215
230
|
this.dataSubject.next(items);
|
|
216
231
|
}
|
|
217
|
-
|
|
218
|
-
item = {
|
|
219
|
-
...item,
|
|
220
|
-
$children: item.$children || new BehaviorSubject([])
|
|
221
|
-
};
|
|
222
|
-
// Clean
|
|
223
|
-
if (item.path) {
|
|
224
|
-
const { path, params } = MenuItems.parsePathWithQuery(item.path);
|
|
225
|
-
item.path = path;
|
|
226
|
-
item.pathParams = { ...item.pathParams, ...params };
|
|
227
|
-
}
|
|
228
|
-
if (item.parentPath) {
|
|
229
|
-
const { path, params } = MenuItems.parsePathWithQuery(item.parentPath);
|
|
230
|
-
item.parentPath = path;
|
|
231
|
-
item.parentPathParams = { ...item.parentPathParams, ...params };
|
|
232
|
-
}
|
|
233
|
-
return item;
|
|
234
|
-
}
|
|
235
|
-
findExistingItem(item, items) {
|
|
232
|
+
_findExistingItem(item, items) {
|
|
236
233
|
items = items || this.data;
|
|
237
234
|
if (!items.length)
|
|
238
235
|
return undefined; // Not found
|
|
239
236
|
for (const i of items) {
|
|
240
237
|
if (MenuItems.isSame(i, item))
|
|
241
238
|
return i;
|
|
242
|
-
const child = this.
|
|
239
|
+
const child = this._findExistingItem(item, i.$children.value);
|
|
243
240
|
if (child)
|
|
244
241
|
return child;
|
|
245
242
|
}
|
|
246
243
|
}
|
|
247
|
-
|
|
244
|
+
_findParent(childItem, availableParents) {
|
|
248
245
|
if (!childItem?.path)
|
|
249
246
|
return undefined;
|
|
250
247
|
availableParents = availableParents || this.data;
|
|
@@ -259,13 +256,13 @@ export class MenuService extends StartableObservableService {
|
|
|
259
256
|
if (MenuItems.isParent(childItem, item))
|
|
260
257
|
return item;
|
|
261
258
|
if (!res && item.$children?.value.length) {
|
|
262
|
-
return this.
|
|
259
|
+
return this._findParent(childItem, item.$children?.value);
|
|
263
260
|
}
|
|
264
261
|
return res;
|
|
265
262
|
}, undefined);
|
|
266
263
|
}
|
|
267
264
|
;
|
|
268
|
-
|
|
265
|
+
_addMenuToParent(parent, child) {
|
|
269
266
|
if (this._debug)
|
|
270
267
|
console.debug(`${this._logPrefix}Adding a sub-menu ${MenuItems.getUrl(child)} to parent menu ${MenuItems.getUrl(parent)}`);
|
|
271
268
|
// Avoid to keep identical menu item (we replace it with the new child menu item)
|
|
@@ -280,16 +277,25 @@ export class MenuService extends StartableObservableService {
|
|
|
280
277
|
}
|
|
281
278
|
parent.$children.next(children);
|
|
282
279
|
}
|
|
283
|
-
|
|
280
|
+
_detachStoreAndRestore(pathParam) {
|
|
281
|
+
const excludedItems = [];
|
|
282
|
+
this._detachSubMenus(pathParam, this.data, excludedItems);
|
|
283
|
+
if (!excludedItems.length)
|
|
284
|
+
return; // Skip if no items detached
|
|
285
|
+
if (this._debug)
|
|
286
|
+
console.debug(`${this._logPrefix} Detached sub menus: `, excludedItems);
|
|
287
|
+
// TODO Store excluded items
|
|
288
|
+
// TODO Restore old excluded items
|
|
289
|
+
// this.addSubMenuItems();
|
|
290
|
+
}
|
|
291
|
+
_detachSubMenus(currentPathParam, items, excludedItems) {
|
|
284
292
|
items = items || this.data;
|
|
285
293
|
excludedItems = excludedItems || [];
|
|
286
294
|
items = items.filter(item => {
|
|
287
295
|
if (!item.parentPath)
|
|
288
296
|
return true; // Always keep root items
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
// Item parent path starts with the current path: keep it
|
|
292
|
-
// if (item.path?.startsWith(currentPathParam.path)) return true;
|
|
297
|
+
if (MenuItems.isPinned(item))
|
|
298
|
+
return true; // Always keep pinned items
|
|
293
299
|
// Keep each menu items in the scope of the current url path
|
|
294
300
|
if (currentPathParam.path.startsWith(item.path))
|
|
295
301
|
return true;
|
|
@@ -298,7 +304,7 @@ export class MenuService extends StartableObservableService {
|
|
|
298
304
|
return false;
|
|
299
305
|
});
|
|
300
306
|
items.forEach(item => {
|
|
301
|
-
const children = this.
|
|
307
|
+
const children = this._detachSubMenus(currentPathParam, item.$children.value || [], excludedItems);
|
|
302
308
|
item.$children.next(children);
|
|
303
309
|
});
|
|
304
310
|
return items;
|
|
@@ -320,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
320
326
|
type: Inject,
|
|
321
327
|
args: [APP_MENU_ITEMS]
|
|
322
328
|
}] }]; } });
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEcsT0FBTyxFQUFZLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUluRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7OztBQUd0RyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBc0IsSUFBSSxDQUFDO0FBZTlELE1BQU0sT0FBTyxXQUFZLFNBQVEsMEJBQXNDO0lBWXJFLFlBQ1ksZUFBZ0MsRUFDaEMsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsTUFBYyxFQUNPLFdBQXdCLEVBQ25CLFdBQXdCO1FBRTVELEtBQUssQ0FBQyxl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UUFDcEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMseUJBQXlCO1lBRTVELGlDQUFpQztZQUNqQywrREFBK0Q7WUFFL0QseURBQXlEO1lBQ3pELGlFQUFpRTtZQUVqRSw0REFBNEQ7WUFDNUQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFN0QsZ0JBQWdCO1lBQ2hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O3dHQXpWVSxXQUFXLGtJQWlCWixXQUFXLGFBQ0MsY0FBYzs0R0FsQnpCLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFrQkksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBtZXJnZSwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51SXRlbXMgfSBmcm9tICcuL21lbnUubW9kZWwnO1xuaW1wb3J0IHsgQVBQX01FTlVfSVRFTVMgfSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCB0eXBlIFNwbGl0UGFuZVNob3dXaGVuID0gYm9vbGVhbiB8ICdsZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NRU5VX1NIT1dfV0hFTjogU3BsaXRQYW5lU2hvd1doZW4gPSAnbGcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFN1Yk1lbnVJdGVtc09wdGlvbiB7XG4gIHNraXBJZkV4aXN0cz86IGJvb2xlYW47XG4gIGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVQYXRoUGFyYW0ge1xuICBwYXRoOiBzdHJpbmc7XG4gIHBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2U8TWVudUl0ZW1bXT4ge1xuXG4gIHJlYWRvbmx5IGFjY291bnRDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBY2NvdW50Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3N0YXRpY0l0ZW1zOiBNZW51SXRlbVtdO1xuICBwcml2YXRlIF9pdGVtQ291bnRlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ1ByZWZpeCA9ICdbbWVudS1zZXJ2aWNlXSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRvcGVuZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kc3BsaXRQYW5lV2hlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BsaXRQYW5lU2hvd1doZW4+KERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRsaXN0ZW5Sb3V0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybVNlcnZpY2U6IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHN0YXRpY0l0ZW1zPzogTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybVNlcnZpY2UpO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5fc3RhdGljSXRlbXMgPSAoc3RhdGljSXRlbXMgfHwgW10pLm1hcChpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByZXBhcmVJdGVtKGkpO1xuICAgICAgaXRlbS5pZCA9IHRoaXMuX2l0ZW1Db3VudGVyKys7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBvcGVuZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRvcGVuZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3BsaXRQYW5lV2hlbigpOiBPYnNlcnZhYmxlPFNwbGl0UGFuZVNob3dXaGVuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRzcGxpdFBhbmVXaGVuLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRlbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZW5hYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fJGVuYWJsZWQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBzZXRTcGxpdFBhbmVTaG93V2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBpZiAodGhpcy5fJHNwbGl0UGFuZVdoZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl8kc3BsaXRQYW5lV2hlbi5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVXaGVuKCkge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbXMobmV3SXRlbXM6IE1lbnVJdGVtW10sIG9wdHM/OiBBZGRTdWJNZW51SXRlbXNPcHRpb24pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiBuZXdJdGVtcy5tYXAoaSA9PiB0aGlzLl9hZGRTdWJNZW51SXRlbShpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShuZXdJdGVtOiBNZW51SXRlbSwgb3B0cz86IEFkZFN1Yk1lbnVJdGVtc09wdGlvbikge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFN1Yk1lbnVJdGVtKG5ld0l0ZW0sIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9hZGRTdWJNZW51SXRlbShuZXdJdGVtOiBNZW51SXRlbSwgb3B0cz86IEFkZFN1Yk1lbnVJdGVtc09wdGlvbikge1xuICAgIG9wdHMgPSB7XG4gICAgICBza2lwSWZFeGlzdHM6IGZhbHNlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgLy8gTWFrZSBzdXJlIHBhdGggKGFuZCBwYXRoUGFyYW1zKSBhcmUgZmlsbGVkIGluIHRoZSBzYW1lIHdheVxuICAgIG5ld0l0ZW0gPSB0aGlzLnByZXBhcmVJdGVtKG5ld0l0ZW0pO1xuXG4gICAgLy8gRmluZCBpZiBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5maW5kRXhpc3RpbmdJdGVtKG5ld0l0ZW0pO1xuICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcbiAgICAgIGlmIChvcHRzLnNraXBJZkV4aXN0cykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBTa2lwcGluZyBzdWIgaXRlbSAoYWxyZWFkeSBleGlzdClgLCBuZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBVcGRhdGluZyBleGlzdGluZyBzdWIgaXRlbSAjYCwgZXhpc3RpbmdJdGVtLmlkKTtcbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBuZXdJdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChuZXdJdGVtLCBvcHRzPy5hdmFpbGFibGVQYXJlbnRzKTtcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH0gVW5hYmxlIHRvIGFkZCBzdWIgaXRlbTogbm8gcGFyZW50IGZvdW5kYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaXRlbSdzIGlkIChpZiBuZWVkKVxuICAgIGlmIChpc05pbChuZXdJdGVtLmlkKSkgbmV3SXRlbS5pZCA9IHRoaXMuX2l0ZW1Db3VudGVyKys7XG5cbiAgICB0aGlzLmFkZE1lbnVUb1BhcmVudChwYXJlbnQsIG5ld0l0ZW0pO1xuXG4gICAgLy8gU3RhcnQgbGlzdGVuaW5nIHJvdXRlXG4gICAgaWYgKCF0aGlzLl8kbGlzdGVuUm91dGUudmFsdWUpIHRoaXMuXyRsaXN0ZW5Sb3V0ZS5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHt0aGlzLl9sb2dQcmVmaXh9IFN0YXJ0aW5nLi4uYCk7XG5cbiAgICBjb25zdCBhY2NvdW50RXZlbnQkID0gbWVyZ2UoXG4gICAgICBmcm9tKHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKSksXG4gICAgICBtZXJnZShcbiAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLFxuICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnBpcGUoXG4gICAgICAgICAgbWFwKF8gPT4gbnVsbClcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICApLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYTEsIGEyKSA9PiBEYXRlVXRpbHMuaXNTYW1lKGExPy51cGRhdGVEYXRlLCBhMj8udXBkYXRlRGF0ZSkpLFxuICAgICAgbWFwKGFjY291bnQgPT4gaXNOb3ROaWwoYWNjb3VudD8uaWQpID8gYWNjb3VudCA6IG51bGwpXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAvLyBDb21iaW5lIGNvbmZpZyBhbmQgYWNjb3VudCBldmVudHNcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLFxuICAgICAgICBhY2NvdW50RXZlbnQkXG4gICAgICBdKS5zdWJzY3JpYmUoYXN5bmMgKFtjb25maWcsIGFjY291bnRdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IFJlY2VpdmVkIGNvbmZpZyBvciBhY2NvdW50IGV2ZW50LiBSZWZyZXNoaW5nIGl0ZW1zLi4uYCwgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gTG9hZCBhbGwgaXRlbXNcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBhY2NvdW50IGNoYW5nZXMgZXZlbnRcbiAgICAgICAgdGhpcy5hY2NvdW50Q2hhbmdlcy5uZXh0KGFjY291bnQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuXyRsaXN0ZW5Sb3V0ZS5waXBlKFxuICAgICAgICBmaWx0ZXIobGlzdGVuID0+IGxpc3RlbiA9PT0gdHJ1ZSksXG4gICAgICAgIG1lcmdlTWFwKF8gPT4gdGhpcy5yb3V0ZXIuZXZlbnRzKSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIG1hcCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkoZXZlbnQudXJsKSksXG4gICAgICApLnN1YnNjcmliZShwYXRoUGFyYW0gPT4ge1xuICAgICAgICBjb25zdCBleGNsdWRlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuZGV0YWNoU3ViTWVudXMocGF0aFBhcmFtLCB0aGlzLmRhdGEsIGV4Y2x1ZGVkSXRlbXMpO1xuICAgICAgICBpZiAoIWV4Y2x1ZGVkSXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIFNraXAgaWYgbm8gaXRlbXMgZGV0YWNoZWRcblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBEZXRhY2hlZCBzdWIgbWVudXM6IGAsIGV4Y2x1ZGVkSXRlbXMpO1xuICAgICAgICAvLyBUT0RPIFN0b3JlIGV4Y2x1ZGVkIGl0ZW1zXG4gICAgICAgIC8vIFRPRE8gUmVzdG9yZSBvbGQgZXhjbHVkZWQgaXRlbXNcbiAgICAgICAgLy8gdGhpcy5hZGRTdWJNZW51SXRlbXMoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCB5ZXQgbG9hZGVkXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb258bnVsbCwgYWNjb3VudDogQWNjb3VudHxudWxsKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0gTG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCByb290Q2hpbGRyZW4gPSAodGhpcy5kYXRhIHx8IFtdKVxuICAgICAgLnJlZHVjZSgocmVzLCByb290SXRlbSkgPT4gcmVzLmNvbmNhdChyb290SXRlbT8uJGNoaWxkcmVuPy52YWx1ZSB8fCBbXSksIFtdKTtcblxuICAgIC8vIFJlc2V0IGJhc2Ugcm9vdCBpdGVtcyAoY2xlYW4gaXRlbXMgYWRkZWQgYnkgY29uZmlnKVxuICAgIGxldCBpdGVtcyA9IHRoaXMuX3N0YXRpY0l0ZW1zLnNsaWNlKCk7XG5cbiAgICAvLyBDb25jYXQgY29uZmlnJ3MgaXRlbXNcbiAgICBjb25zdCBjb25maWdWYWx1ZTogc3RyaW5nID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsoY29uZmlnVmFsdWUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWdJdGVtcyA9IEpTT04ucGFyc2UoY29uZmlnVmFsdWUpIGFzIE1lbnVJdGVtW107XG4gICAgICAgIGl0ZW1zID0gKGNvbmZpZ0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlczogTWVudUl0ZW1bXSwgaXRlbSkgPT4ge1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBpdGVtXG4gICAgICAgICAgaXRlbSA9IHRoaXMucHJlcGFyZUl0ZW0oaXRlbSk7XG5cbiAgICAgICAgICAvLyBTa2lwIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgICAgaWYgKHJlcy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKSkgcmV0dXJuIHJlcztcblxuICAgICAgICAgIC8vIFJldXNlIGV4aXN0aW5nIGlkLCBpZiBwb3NzaWJsZVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuZGF0YT8uZmluZCgoaSkgPT4gTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KGkgPT4gaS50aXRsZSA9PT0gaXRlbS5hZnRlcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgaW5kZXggKyAxKVxuICAgICAgICAgICAgICAgIC5jb25jYXQoaXRlbSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KHJlcy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXRlbS5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzLmZpbmRJbmRleChpID0+IGkudGl0bGUgPT09IGl0ZW0uYmVmb3JlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgICAgICAuY29uY2F0KGl0ZW0pXG4gICAgICAgICAgICAgICAgLmNvbmNhdChyZXMuc2xpY2UoaW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoaXRlbSk7XG4gICAgICAgIH0sIGl0ZW1zKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuX2xvZ1ByZWZpeH0gSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uICcke0NPUkVfQ09ORklHX09QVElPTlMuTUVOVV9JVEVNUy5rZXl9Jy4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgbWVudSBpdGVtYCwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgaXRlbSB1c2luZyBhY2NvdW50IHJpZ2h0c1xuICAgIGNvbnN0IG9wdHMgPSB7ZGVidWc6IHRoaXMuX2RlYnVnfTtcbiAgICBpdGVtcyA9IGl0ZW1zXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gTWVudUl0ZW1zLmNoZWNrSWZWaXNpYmxlKGl0ZW0sIGFjY291bnQsIGNvbmZpZywgb3B0cykpXG4gICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAvLyBHZW5lcmF0ZSBpdGVtJ3MgaWQgKGlmIG5lZWQpXG4gICAgICAgIGlmIChpc05pbChpdGVtLmlkKSkgaXRlbS5pZCA9IHRoaXMuX2l0ZW1Db3VudGVyKys7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoaXRlbS50aXRsZVByb3BlcnR5KSAmJiBjb25maWcpIHtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IGNvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHRpdGxlKSByZXR1cm4gey4uLml0ZW0sIHRpdGxlfTsgLy8gQ3JlYXRlIGEgY29weSwgdG8ga2VlcCB0aGUgb3JpZ2luYWwgaXRlbS50aXRsZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICAvLyBSZS1hdHRhY2ggc3ViIG1lbnUgaXRlbXNcbiAgICBpZiAocm9vdENoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRTdWJNZW51SXRlbXMocm9vdENoaWxkcmVuLCB7c2tpcElmRXhpc3RzOiBmYWxzZSwgYXZhaWxhYmxlUGFyZW50czogaXRlbXN9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBGb3VuZCAke2l0ZW1zLmxlbmd0aH0gdmlzaWJsZSBpdGVtcy4uLmApO1xuXG4gICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwYXJlSXRlbShpdGVtOiBNZW51SXRlbSk6IE1lbnVJdGVtIHtcblxuICAgIGl0ZW0gPSA8TWVudUl0ZW0+e1xuICAgICAgLi4uaXRlbSxcbiAgICAgICRjaGlsZHJlbjogaXRlbS4kY2hpbGRyZW4gfHwgbmV3IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPihbXSlcbiAgICB9O1xuXG4gICAgLy8gQ2xlYW5cbiAgICBpZiAoaXRlbS5wYXRoKSB7XG4gICAgICBjb25zdCB7cGF0aCwgcGFyYW1zfSA9IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkoaXRlbS5wYXRoKTtcbiAgICAgIGl0ZW0ucGF0aCA9IHBhdGg7XG4gICAgICBpdGVtLnBhdGhQYXJhbXMgPSB7Li4uaXRlbS5wYXRoUGFyYW1zLCAuLi5wYXJhbXN9O1xuICAgIH1cbiAgICBpZiAoaXRlbS5wYXJlbnRQYXRoKSB7XG4gICAgICBjb25zdCB7cGF0aCwgcGFyYW1zfSA9IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkoaXRlbS5wYXJlbnRQYXRoKTtcbiAgICAgIGl0ZW0ucGFyZW50UGF0aCA9IHBhdGg7XG4gICAgICBpdGVtLnBhcmVudFBhdGhQYXJhbXMgPSB7Li4uaXRlbS5wYXJlbnRQYXRoUGFyYW1zLCAuLi5wYXJhbXN9O1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmRFeGlzdGluZ0l0ZW0oaXRlbTogTWVudUl0ZW0sIGl0ZW1zPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IHRoaXMuZGF0YTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gTm90IGZvdW5kXG4gICAgZm9yIChjb25zdCBpIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSkgcmV0dXJuIGk7XG4gICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZmluZEV4aXN0aW5nSXRlbShpdGVtLCBpLiRjaGlsZHJlbi52YWx1ZSk7XG4gICAgICBpZiAoY2hpbGQpIHJldHVybiBjaGlsZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCB0aGlzLmRhdGE7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlUGFyZW50cy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtPy5wYXRoKSByZXR1cm4gcmVzO1xuXG4gICAgICAvLyBBIGZvdW5kIGl0ZW0gYWxyZWFkeSBtYXRjaCB3aXRoIHRoZSBtZW51SXRlbS5wYXJlbnRQYXRoIDoga2VlcCBpdCBhcyBpdFxuICAgICAgLy8gVGhlcmUgaXMgYSBmb3VuZCBjYW5kaWRhdGUgdGhhdCBhbHJlYWR5IG1hdGNoIHRoZSBjdXJyZW50IGNhbmRpZGF0ZSA6IGtlZXAgaXRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCByZXMpKSByZXR1cm4gcmVzO1xuXG4gICAgICAvLyBJZiB0aGUgbWVudSBpdGVtIGhhcyBleHBsaWNpdCBwYXJlbnRQYXRoIGFuZCBpdHMgcGF0aCBhbmQgcGF0aCBwYXJhbSBhcmUgdGhlIHNhbWUgYXMgdGhlIGNhbmRpZGF0ZSAgOiB1c2UgaXQgYXMgcGFyZW50XG4gICAgICBpZiAoTWVudUl0ZW1zLmlzUGFyZW50KGNoaWxkSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuXG4gICAgICBpZiAoIXJlcyAmJiBpdGVtLiRjaGlsZHJlbj8udmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRQYXJlbnQoY2hpbGRJdGVtLCBpdGVtLiRjaGlsZHJlbj8udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHVuZGVmaW5lZCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFkZE1lbnVUb1BhcmVudChwYXJlbnQ6IE1lbnVJdGVtLCBjaGlsZDogTWVudUl0ZW0pIHtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9QWRkaW5nIGEgc3ViLW1lbnUgJHtNZW51SXRlbXMuZ2V0VXJsKGNoaWxkKX0gdG8gcGFyZW50IG1lbnUgJHtNZW51SXRlbXMuZ2V0VXJsKHBhcmVudCl9YCk7XG5cbiAgICAvLyBBdm9pZCB0byBrZWVwIGlkZW50aWNhbCBtZW51IGl0ZW0gKHdlIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IGNoaWxkIG1lbnUgaXRlbSlcbiAgICAvL2lmICghcGFyZW50Py4kY2hpbGRyZW4pIHBhcmVudC4kY2hpbGRyZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVJdGVtW10+KFtdKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC4kY2hpbGRyZW4udmFsdWUgfHwgW107XG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IE1lbnVJdGVtcy5pc1NhbWUoY2hpbGQsIGl0ZW0pKTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNoaWxkcmVuW2V4aXN0aW5nSW5kZXhdID0gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuICAgIHBhcmVudC4kY2hpbGRyZW4ubmV4dChjaGlsZHJlbik7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRhY2hTdWJNZW51cyhjdXJyZW50UGF0aFBhcmFtOiBNZW51UGF0aFBhcmFtLCBpdGVtcz86IE1lbnVJdGVtW10sIGV4Y2x1ZGVkSXRlbXM/OiBNZW51SXRlbVtdKSB7XG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLmRhdGE7XG4gICAgZXhjbHVkZWRJdGVtcyA9IGV4Y2x1ZGVkSXRlbXMgfHwgW107XG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0ucGFyZW50UGF0aCkgcmV0dXJuIHRydWU7IC8vIEFsd2F5cyBrZWVwIHJvb3QgaXRlbXNcblxuICAgICAgLy8gQ3VycmVudCByb3V0ZSA9IHBhcmFtOiBrZWVwIGl0XG4gICAgICAvLyBpZiAoTWVudUl0ZW1zLmlzUGFyZW50KGl0ZW0sIGN1cnJlbnRQYXRoUGFyYW0pKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gSXRlbSBwYXJlbnQgcGF0aCBzdGFydHMgd2l0aCB0aGUgY3VycmVudCBwYXRoOiBrZWVwIGl0XG4gICAgICAvLyBpZiAoaXRlbS5wYXRoPy5zdGFydHNXaXRoKGN1cnJlbnRQYXRoUGFyYW0ucGF0aCkpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBLZWVwIGVhY2ggbWVudSBpdGVtcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGN1cnJlbnQgdXJsIHBhdGhcbiAgICAgIGlmIChjdXJyZW50UGF0aFBhcmFtLnBhdGguc3RhcnRzV2l0aChpdGVtLnBhdGgpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gRWxzZSwgZXhjbHVkZVxuICAgICAgZXhjbHVkZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGV0YWNoU3ViTWVudXMoY3VycmVudFBhdGhQYXJhbSwgaXRlbS4kY2hpbGRyZW4udmFsdWUgfHwgW10sIGV4Y2x1ZGVkSXRlbXMpO1xuICAgICAgaXRlbS4kY2hpbGRyZW4ubmV4dChjaGlsZHJlbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbn1cbiJdfQ==
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBUSxLQUFLLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRyxPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDOzs7Ozs7O0FBR3RHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFzQixJQUFJLENBQUM7QUFlOUQsTUFBTSxPQUFPLFdBQVksU0FBUSwwQkFBc0M7SUFZckUsWUFDWSxlQUFnQyxFQUNoQyxhQUE0QixFQUM1QixjQUE4QixFQUM5QixNQUFjLEVBQ08sV0FBd0IsRUFDbkIsV0FBd0I7UUFFNUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxD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RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBa0JJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUl0ZW1zIH0gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7IEFQUF9NRU5VX0lURU1TIH0gZnJvbSAnLi9tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7IFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1vYnNlcnZhYmxlLXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBTcGxpdFBhbmVTaG93V2hlbiA9IGJvb2xlYW4gfCAnbGcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUVOVV9TSE9XX1dIRU46IFNwbGl0UGFuZVNob3dXaGVuID0gJ2xnJztcblxuZXhwb3J0IGludGVyZmFjZSBBZGRTdWJNZW51SXRlbXNPcHRpb24ge1xuICBza2lwSWZFeGlzdHM/OiBib29sZWFuO1xuICBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51UGF0aFBhcmFtIHtcbiAgcGF0aDogc3RyaW5nO1xuICBwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPE1lbnVJdGVtW10+IHtcblxuICByZWFkb25seSBhY2NvdW50Q2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWNjb3VudD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9zdGF0aWNJdGVtczogTWVudUl0ZW1bXTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dQcmVmaXggPSAnW21lbnUtc2VydmljZV0nO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kb3BlbmVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJHNwbGl0UGFuZVdoZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwbGl0UGFuZVNob3dXaGVuPihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJGVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kbGlzdGVuUm91dGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9NRU5VX0lURU1TKSBzdGF0aWNJdGVtcz86IE1lbnVJdGVtW11cbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm1TZXJ2aWNlKTtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIHRoaXMuX3N0YXRpY0l0ZW1zID0gKHN0YXRpY0l0ZW1zIHx8IFtdKS5tYXAoaSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gTWVudUl0ZW1zLnByZXBhcmVJdGVtKGkpO1xuICAgICAgaXRlbS5pZCA9IHRoaXMuX2l0ZW1Db3VudGVyKys7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBvcGVuZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRvcGVuZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3BsaXRQYW5lV2hlbigpOiBPYnNlcnZhYmxlPFNwbGl0UGFuZVNob3dXaGVuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRzcGxpdFBhbmVXaGVuLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRlbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZW5hYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fJGVuYWJsZWQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBzZXRTcGxpdFBhbmVTaG93V2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBpZiAodGhpcy5fJHNwbGl0UGFuZVdoZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl8kc3BsaXRQYW5lV2hlbi5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVXaGVuKCkge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbXMobmV3SXRlbXM6IE1lbnVJdGVtW10sIG9wdHM/OiBBZGRTdWJNZW51SXRlbXNPcHRpb24pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiBuZXdJdGVtcy5tYXAoaSA9PiB0aGlzLl9hZGRTdWJNZW51SXRlbShpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShuZXdJdGVtOiBNZW51SXRlbSwgb3B0cz86IEFkZFN1Yk1lbnVJdGVtc09wdGlvbikge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFN1Yk1lbnVJdGVtKG5ld0l0ZW0sIG9wdHMpO1xuICB9XG5cbiAgcmVtb3ZlU3ViTWVudUl0ZW0oaXRlbTogTWVudUl0ZW0pIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kUGFyZW50KGl0ZW0pO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcyA9IHBhcmVudC4kY2hpbGRyZW4udmFsdWUuZmlsdGVyKGkgPT4gIU1lbnVJdGVtcy5pc1NhbWUoaXRlbSwgaSkpO1xuICAgICAgcGFyZW50LiRjaGlsZHJlbi5uZXh0KG5ld0NoaWxkcyk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoU3ViTWVudUl0ZW0ocGF0aFBhcmFtOiBNZW51UGF0aFBhcmFtKSB7XG4gICAgY29uc3QgZXhjbHVkZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMuX2RldGFjaFN1Yk1lbnVzKHBhdGhQYXJhbSwgdGhpcy5kYXRhLCBleGNsdWRlZEl0ZW1zKTtcbiAgICBpZiAoIWV4Y2x1ZGVkSXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIFNraXAgaWYgbm8gaXRlbXMgZGV0YWNoZWRcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IERldGFjaGVkIHN1YiBtZW51czogYCwgZXhjbHVkZWRJdGVtcyk7XG4gICAgLy8gVE9ETyBTdG9yZSBleGNsdWRlZCBpdGVtc1xuICAgIC8vIFRPRE8gUmVzdG9yZSBvbGQgZXhjbHVkZWQgaXRlbXNcbiAgICAvLyB0aGlzLmFkZFN1Yk1lbnVJdGVtcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpIHtcbiAgICBjb25zb2xlLmluZm8oYCR7dGhpcy5fbG9nUHJlZml4fSBTdGFydGluZy4uLmApO1xuXG4gICAgY29uc3QgW2FjY291bnQsIGNvbmZpZ10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCksXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZHkoKSxcbiAgICBdKTtcbiAgICBhd2FpdCB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICBjb25zdCBhY2NvdW50RXZlbnQkID0gbWVyZ2UoXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnBpcGUoXG4gICAgICAgIG1hcChfID0+IG51bGwpXG4gICAgICApLFxuICAgICkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhMSwgYTIpID0+IERhdGVVdGlscy5pc1NhbWUoYTE/LnVwZGF0ZURhdGUsIGEyPy51cGRhdGVEYXRlKSksXG4gICAgICBtYXAoYWNjb3VudCA9PiBpc05vdE5pbChhY2NvdW50Py5pZCkgPyBhY2NvdW50IDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIC8vIENvbWJpbmUgY29uZmlnIGFuZCBhY2NvdW50IGV2ZW50c1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcsXG4gICAgICAgIGFjY291bnRFdmVudCRcbiAgICAgIF0pLnN1YnNjcmliZShhc3luYyAoW2NvbmZpZywgYWNjb3VudF0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0gUmVjZWl2ZWQgY29uZmlnIG9yIGFjY291bnQgZXZlbnQuIFJlZnJlc2hpbmcgaXRlbXMuLi5gLCBhY2NvdW50KTtcblxuICAgICAgICAvLyBMb2FkIGFsbCBpdGVtc1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBhY2NvdW50IGNoYW5nZXMgZXZlbnRcbiAgICAgICAgdGhpcy5hY2NvdW50Q2hhbmdlcy5uZXh0KGFjY291bnQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuXyRsaXN0ZW5Sb3V0ZS5waXBlKFxuICAgICAgICBmaWx0ZXIobGlzdGVuID0+IGxpc3RlbiA9PT0gdHJ1ZSksXG4gICAgICAgIG1lcmdlTWFwKF8gPT4gdGhpcy5yb3V0ZXIuZXZlbnRzKSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIG1hcCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkoZXZlbnQudXJsKSksXG4gICAgICApLnN1YnNjcmliZShwYXRoUGFyYW0gPT4ge1xuICAgICAgICB0aGlzLmRldGFjaFN1Yk1lbnVJdGVtKHBhdGhQYXJhbSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfYWRkU3ViTWVudUl0ZW0obmV3SXRlbTogTWVudUl0ZW0sIG9wdHM/OiBBZGRTdWJNZW51SXRlbXNPcHRpb24pIHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmRXhpc3RzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgLy8gTWFrZSBzdXJlIHBhdGggKGFuZCBwYXRoUGFyYW1zKSBhcmUgZmlsbGVkIGluIHRoZSBzYW1lIHdheVxuICAgIG5ld0l0ZW0gPSBNZW51SXRlbXMucHJlcGFyZUl0ZW0obmV3SXRlbSk7XG5cbiAgICAvLyBGaW5kIGlmIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBleGlzdGluZ0l0ZW0gPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKG5ld0l0ZW0pO1xuICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcbiAgICAgIGlmIChvcHRzLnNraXBJZkV4aXN0cykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBTa2lwcGluZyBzdWIgaXRlbSAoYWxyZWFkeSBleGlzdClgLCBuZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBVcGRhdGluZyBleGlzdGluZyBzdWIgaXRlbSAjYCwgZXhpc3RpbmdJdGVtLmlkKTtcbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBuZXdJdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQobmV3SXRlbSwgb3B0cz8uYXZhaWxhYmxlUGFyZW50cyk7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9IFVuYWJsZSB0byBhZGQgc3ViIGl0ZW06IG5vIHBhcmVudCBmb3VuZGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGl0ZW0ncyBpZCAoaWYgbmVlZClcbiAgICBpZiAoaXNOaWwobmV3SXRlbS5pZCkpIG5ld0l0ZW0uaWQgPSB0aGlzLl9pdGVtQ291bnRlcisrO1xuXG4gICAgdGhpcy5fYWRkTWVudVRvUGFyZW50KHBhcmVudCwgbmV3SXRlbSk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgcm91dGVcbiAgICBpZiAoIXRoaXMuXyRsaXN0ZW5Sb3V0ZS52YWx1ZSkgdGhpcy5fJGxpc3RlblJvdXRlLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb258bnVsbCwgYWNjb3VudDogQWNjb3VudHxudWxsKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0gTG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCByb290Q2hpbGRyZW4gPSAodGhpcy5kYXRhIHx8IFtdKVxuICAgICAgLnJlZHVjZSgocmVzLCByb290SXRlbSkgPT4gcmVzLmNvbmNhdChyb290SXRlbT8uJGNoaWxkcmVuPy52YWx1ZSB8fCBbXSksIFtdKTtcblxuICAgIC8vIFJlc2V0IGJhc2Ugcm9vdCBpdGVtcyAoY2xlYW4gaXRlbXMgYWRkZWQgYnkgY29uZmlnKVxuICAgIGxldCBpdGVtcyA9IHRoaXMuX3N0YXRpY0l0ZW1zLnNsaWNlKCk7XG5cbiAgICAvLyBDb25jYXQgY29uZmlnJ3MgaXRlbXNcbiAgICBjb25zdCBjb25maWdWYWx1ZTogc3RyaW5nID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsoY29uZmlnVmFsdWUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWdJdGVtcyA9IEpTT04ucGFyc2UoY29uZmlnVmFsdWUpIGFzIE1lbnVJdGVtW107XG4gICAgICAgIGl0ZW1zID0gKGNvbmZpZ0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlczogTWVudUl0ZW1bXSwgaXRlbSkgPT4ge1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBpdGVtXG4gICAgICAgICAgaXRlbSA9IE1lbnVJdGVtcy5wcmVwYXJlSXRlbShpdGVtKTtcblxuICAgICAgICAgIC8vIFNraXAgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgICBpZiAocmVzLmZpbmQoKGkpID0+IE1lbnVJdGVtcy5pc1NhbWUoaSwgaXRlbSkpKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gUmV1c2UgZXhpc3RpbmcgaWQsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5kYXRhPy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpdGVtLmFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgoaSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpdGVtLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KGkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgICAgIC5jb25jYXQoaXRlbSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KHJlcy5zbGljZShpbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgICAgICAgfSwgaXRlbXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fSBJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gJyR7Q09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TLmtleX0nLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBtZW51IGl0ZW1gLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBpdGVtIHVzaW5nIGFjY291bnQgcmlnaHRzXG4gICAgY29uc3Qgb3B0cyA9IHtkZWJ1ZzogdGhpcy5fZGVidWd9O1xuICAgIGl0ZW1zID0gaXRlbXNcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgIC8vIEdlbmVyYXRlIGl0ZW0ncyBpZCAoaWYgbmVlZClcbiAgICAgICAgaWYgKGlzTmlsKGl0ZW0uaWQpKSBpdGVtLmlkID0gdGhpcy5faXRlbUNvdW50ZXIrKztcblxuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhpdGVtLnRpdGxlUHJvcGVydHkpICYmIGNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICBpZiAodGl0bGUpIHJldHVybiB7Li4uaXRlbSwgdGl0bGV9OyAvLyBDcmVhdGUgYSBjb3B5LCB0byBrZWVwIHRoZSBvcmlnaW5hbCBpdGVtLnRpdGxlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmIChyb290Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFN1Yk1lbnVJdGVtcyhyb290Q2hpbGRyZW4sIHtza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBpdGVtc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IEZvdW5kICR7aXRlbXMubGVuZ3RofSB2aXNpYmxlIGl0ZW1zLi4uYCk7XG5cbiAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoaXRlbXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9maW5kRXhpc3RpbmdJdGVtKGl0ZW06IE1lbnVJdGVtLCBpdGVtcz86IE1lbnVJdGVtW10pOiBNZW51SXRlbSB7XG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLmRhdGE7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vdCBmb3VuZFxuICAgIGZvciAoY29uc3QgaSBvZiBpdGVtcykge1xuICAgICAgaWYgKE1lbnVJdGVtcy5pc1NhbWUoaSwgaXRlbSkpIHJldHVybiBpO1xuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKGl0ZW0sIGkuJGNoaWxkcmVuLnZhbHVlKTtcbiAgICAgIGlmIChjaGlsZCkgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCB0aGlzLmRhdGE7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlUGFyZW50cy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtPy5wYXRoKSByZXR1cm4gcmVzO1xuXG4gICAgICAvLyBBIGZvdW5kIGl0ZW0gYWxyZWFkeSBtYXRjaCB3aXRoIHRoZSBtZW51SXRlbS5wYXJlbnRQYXRoIDoga2VlcCBpdCBhcyBpdFxuICAgICAgLy8gVGhlcmUgaXMgYSBmb3VuZCBjYW5kaWRhdGUgdGhhdCBhbHJlYWR5IG1hdGNoIHRoZSBjdXJyZW50IGNhbmRpZGF0ZSA6IGtlZXAgaXRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCByZXMpKSByZXR1cm4gcmVzO1xuXG4gICAgICAvLyBJZiB0aGUgbWVudSBpdGVtIGhhcyBleHBsaWNpdCBwYXJlbnRQYXRoIGFuZCBpdHMgcGF0aCBhbmQgcGF0aCBwYXJhbSBhcmUgdGhlIHNhbWUgYXMgdGhlIGNhbmRpZGF0ZSAgOiB1c2UgaXQgYXMgcGFyZW50XG4gICAgICBpZiAoTWVudUl0ZW1zLmlzUGFyZW50KGNoaWxkSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuXG4gICAgICBpZiAoIXJlcyAmJiBpdGVtLiRjaGlsZHJlbj8udmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgaXRlbS4kY2hpbGRyZW4/LnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB1bmRlZmluZWQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBfYWRkTWVudVRvUGFyZW50KHBhcmVudDogTWVudUl0ZW0sIGNoaWxkOiBNZW51SXRlbSkge1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BZGRpbmcgYSBzdWItbWVudSAke01lbnVJdGVtcy5nZXRVcmwoY2hpbGQpfSB0byBwYXJlbnQgbWVudSAke01lbnVJdGVtcy5nZXRVcmwocGFyZW50KX1gKTtcblxuICAgIC8vIEF2b2lkIHRvIGtlZXAgaWRlbnRpY2FsIG1lbnUgaXRlbSAod2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgY2hpbGQgbWVudSBpdGVtKVxuICAgIC8vaWYgKCFwYXJlbnQ/LiRjaGlsZHJlbikgcGFyZW50LiRjaGlsZHJlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LiRjaGlsZHJlbi52YWx1ZSB8fCBbXTtcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KGl0ZW0gPT4gTWVudUl0ZW1zLmlzU2FtZShjaGlsZCwgaXRlbSkpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgY2hpbGRyZW5bZXhpc3RpbmdJbmRleF0gPSBjaGlsZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5uZXh0KGNoaWxkcmVuKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIF9kZXRhY2hTdG9yZUFuZFJlc3RvcmUocGF0aFBhcmFtOiBNZW51UGF0aFBhcmFtKSB7XG4gICAgY29uc3QgZXhjbHVkZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMuX2RldGFjaFN1Yk1lbnVzKHBhdGhQYXJhbSwgdGhpcy5kYXRhLCBleGNsdWRlZEl0ZW1zKTtcbiAgICBpZiAoIWV4Y2x1ZGVkSXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIFNraXAgaWYgbm8gaXRlbXMgZGV0YWNoZWRcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IERldGFjaGVkIHN1YiBtZW51czogYCwgZXhjbHVkZWRJdGVtcyk7XG4gICAgLy8gVE9ETyBTdG9yZSBleGNsdWRlZCBpdGVtc1xuICAgIC8vIFRPRE8gUmVzdG9yZSBvbGQgZXhjbHVkZWQgaXRlbXNcbiAgICAvLyB0aGlzLmFkZFN1Yk1lbnVJdGVtcygpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgX2RldGFjaFN1Yk1lbnVzKGN1cnJlbnRQYXRoUGFyYW06IE1lbnVQYXRoUGFyYW0sIGl0ZW1zPzogTWVudUl0ZW1bXSwgZXhjbHVkZWRJdGVtcz86IE1lbnVJdGVtW10pIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IHRoaXMuZGF0YTtcbiAgICBleGNsdWRlZEl0ZW1zID0gZXhjbHVkZWRJdGVtcyB8fCBbXTtcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGlmICghaXRlbS5wYXJlbnRQYXRoKSByZXR1cm4gdHJ1ZTsgLy8gQWx3YXlzIGtlZXAgcm9vdCBpdGVtc1xuICAgICAgaWYgKE1lbnVJdGVtcy5pc1Bpbm5lZChpdGVtKSkgcmV0dXJuIHRydWU7IC8vIEFsd2F5cyBrZWVwIHBpbm5lZCBpdGVtc1xuXG4gICAgICAvLyBLZWVwIGVhY2ggbWVudSBpdGVtcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGN1cnJlbnQgdXJsIHBhdGhcbiAgICAgIGlmIChjdXJyZW50UGF0aFBhcmFtLnBhdGguc3RhcnRzV2l0aChpdGVtLnBhdGgpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gRWxzZSwgZXhjbHVkZVxuICAgICAgZXhjbHVkZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2RldGFjaFN1Yk1lbnVzKGN1cnJlbnRQYXRoUGFyYW0sIGl0ZW0uJGNoaWxkcmVuLnZhbHVlIHx8IFtdLCBleGNsdWRlZEl0ZW1zKTtcbiAgICAgIGl0ZW0uJGNoaWxkcmVuLm5leHQoY2hpbGRyZW4pO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Directive, Input, } from '@angular/core';
|
|
2
|
+
import { MenuItems } from './menu.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./menu.service";
|
|
5
|
+
import * as i2 from "@angular/material/tabs";
|
|
6
|
+
import * as i3 from "@angular/router";
|
|
7
|
+
export class SubMenuTabDirective {
|
|
8
|
+
constructor(menuService, tabGroup, tab, router) {
|
|
9
|
+
this.menuService = menuService;
|
|
10
|
+
this.tabGroup = tabGroup;
|
|
11
|
+
this.tab = tab;
|
|
12
|
+
this.router = router;
|
|
13
|
+
this.path = MenuItems.parsePathWithQuery(this.router.routerState.snapshot.url).path;
|
|
14
|
+
}
|
|
15
|
+
ngAfterViewInit() {
|
|
16
|
+
if (!this.tab.disabled)
|
|
17
|
+
this._addItemToMenu();
|
|
18
|
+
}
|
|
19
|
+
ngOnChanges(changes) {
|
|
20
|
+
if (changes.disabled || changes.label || changes.parentPath) {
|
|
21
|
+
if (this.disabled) {
|
|
22
|
+
if (this._menuItem)
|
|
23
|
+
this.menuService.removeSubMenuItem(this._menuItem);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this._addItemToMenu();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
_computeMenuItem() {
|
|
31
|
+
const index = this.tabGroup.selectedIndex + this.tab.position;
|
|
32
|
+
const pathParams = index === 0 ? {} : { tab: index.toString() };
|
|
33
|
+
const parentPath = index === 0 ? this.parentPath : this.path;
|
|
34
|
+
return MenuItems.prepareItem({
|
|
35
|
+
title: this.subMenuTitle || this.label,
|
|
36
|
+
parentPath,
|
|
37
|
+
icon: 'none',
|
|
38
|
+
path: this.path,
|
|
39
|
+
pathParams
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async _addItemToMenu() {
|
|
43
|
+
if (this._menuItem) {
|
|
44
|
+
const newItem = this._computeMenuItem();
|
|
45
|
+
if (!MenuItems.isSame(newItem, this._menuItem))
|
|
46
|
+
this._menuItem = newItem;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this._menuItem = this._computeMenuItem();
|
|
50
|
+
}
|
|
51
|
+
if (!this._menuItem.parentPath)
|
|
52
|
+
return; // Skip
|
|
53
|
+
this.menuService.addSubMenuItem(this._menuItem);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
SubMenuTabDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SubMenuTabDirective, deps: [{ token: i1.MenuService }, { token: i2.MatTabGroup }, { token: i2.MatTab }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Directive });
|
|
57
|
+
SubMenuTabDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: SubMenuTabDirective, selector: "[appSubMenuTab]", inputs: { label: "label", disabled: "disabled", parentPath: "parentPath", path: "path", subMenuTitle: "subMenuTitle" }, usesOnChanges: true, ngImport: i0 });
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SubMenuTabDirective, decorators: [{
|
|
59
|
+
type: Directive,
|
|
60
|
+
args: [{
|
|
61
|
+
selector: '[appSubMenuTab]'
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: function () { return [{ type: i1.MenuService }, { type: i2.MatTabGroup }, { type: i2.MatTab }, { type: i3.Router }]; }, propDecorators: { label: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], disabled: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], parentPath: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], path: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], subMenuTitle: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}] } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLW1lbnUtdGFiLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L3N1Yi1tZW51LXRhYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFXLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFNakQsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUNVLFdBQXdCLEVBQ3hCLFFBQXFCLEVBQ3JCLEdBQVcsRUFDWCxNQUFjO1FBSGQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3hFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBQyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0QsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ3RDLFVBQVU7WUFDVixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFVBQVU7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWM7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1NBQzFFO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDOztnSEF4RFUsbUJBQW1CO29HQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFIL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QjtzS0FHVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCwgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0VGFiLCBNYXRUYWJHcm91cH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7TWVudUl0ZW0sIE1lbnVJdGVtc30gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7ZXF1YWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFN1Yk1lbnVUYWJdJ1xufSlcbmV4cG9ydCBjbGFzcyBTdWJNZW51VGFiRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFyZW50UGF0aDogc3RyaW5nO1xuICBASW5wdXQoKSBwYXRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Yk1lbnVUaXRsZTogc3RyaW5nO1xuXG5cbiAgcHJpdmF0ZSBfbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFiR3JvdXA6IE1hdFRhYkdyb3VwLFxuICAgIHByaXZhdGUgdGFiOiBNYXRUYWIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgKSB7XG4gICAgdGhpcy5wYXRoID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpLnBhdGg7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRhYi5kaXNhYmxlZCkgdGhpcy5fYWRkSXRlbVRvTWVudSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkIHx8IGNoYW5nZXMubGFiZWwgfHwgY2hhbmdlcy5wYXJlbnRQYXRoKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5fbWVudUl0ZW0pIHRoaXMubWVudVNlcnZpY2UucmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5fbWVudUl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWRkSXRlbVRvTWVudSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVNZW51SXRlbSgpOiBNZW51SXRlbSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggKyB0aGlzLnRhYi5wb3NpdGlvbjtcbiAgICBjb25zdCBwYXRoUGFyYW1zID0gaW5kZXggPT09IDAgPyB7fSA6IHt0YWI6IGluZGV4LnRvU3RyaW5nKCl9O1xuICAgIGNvbnN0IHBhcmVudFBhdGggPSBpbmRleCA9PT0gMCA/IHRoaXMucGFyZW50UGF0aCA6IHRoaXMucGF0aDtcbiAgICByZXR1cm4gTWVudUl0ZW1zLnByZXBhcmVJdGVtKHtcbiAgICAgIHRpdGxlOiB0aGlzLnN1Yk1lbnVUaXRsZSB8fCB0aGlzLmxhYmVsLFxuICAgICAgcGFyZW50UGF0aCxcbiAgICAgIGljb246ICdub25lJyxcbiAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgIHBhdGhQYXJhbXNcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2FkZEl0ZW1Ub01lbnUoKSB7XG4gICAgaWYgKHRoaXMuX21lbnVJdGVtKSB7XG4gICAgICBjb25zdCBuZXdJdGVtID0gdGhpcy5fY29tcHV0ZU1lbnVJdGVtKCk7XG4gICAgICBpZiAoIU1lbnVJdGVtcy5pc1NhbWUobmV3SXRlbSwgdGhpcy5fbWVudUl0ZW0pKSB0aGlzLl9tZW51SXRlbSA9IG5ld0l0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21lbnVJdGVtID0gdGhpcy5fY29tcHV0ZU1lbnVJdGVtKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fbWVudUl0ZW0ucGFyZW50UGF0aCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgdGhpcy5tZW51U2VydmljZS5hZGRTdWJNZW51SXRlbSh0aGlzLl9tZW51SXRlbSk7XG4gIH1cblxufVxuIl19
|