@yelon/bis 17.2.0 → 17.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/config/index.d.ts +5 -0
  2. package/config/public_api.d.ts +1 -0
  3. package/esm2022/bis.mjs +2 -2
  4. package/esm2022/{layout → config}/bis.config.mjs +1 -1
  5. package/esm2022/config/config.mjs +5 -0
  6. package/esm2022/config/public_api.mjs +2 -0
  7. package/esm2022/layout/layout-basic.component.mjs +376 -0
  8. package/esm2022/layout/layout-nav-application.component.mjs +368 -0
  9. package/esm2022/layout/layout-nav-group.component.mjs +159 -0
  10. package/esm2022/layout/layout-nav-tile.component.mjs +15 -0
  11. package/esm2022/layout/layout.module.mjs +54 -0
  12. package/esm2022/layout/public_api.mjs +6 -14
  13. package/esm2022/public_api.mjs +9 -2
  14. package/esm2022/src/bis.module.mjs +17 -0
  15. package/esm2022/src/helper.mjs +45 -0
  16. package/esm2022/src/provide.mjs +8 -0
  17. package/esm2022/src/refresh-token.mjs +79 -0
  18. package/esm2022/src/startup.service.mjs +182 -0
  19. package/esm2022/src/yunzai-act.guard.mjs +88 -0
  20. package/esm2022/src/yunzai-analysis-addon.guard.mjs +99 -0
  21. package/esm2022/src/yunzai-default.interceptor.mjs +63 -0
  22. package/esm2022/yunzai-widgets/public_api.mjs +7 -0
  23. package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +47 -0
  24. package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +47 -0
  25. package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +139 -0
  26. package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +179 -0
  27. package/esm2022/yunzai-widgets/yunzai-user.component.mjs +119 -0
  28. package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +62 -0
  29. package/esm2022/yunzai-widgets/yunzai-widgets.mjs +5 -0
  30. package/fesm2022/bis.mjs +552 -1
  31. package/fesm2022/bis.mjs.map +1 -1
  32. package/fesm2022/config.mjs +21 -0
  33. package/fesm2022/config.mjs.map +1 -0
  34. package/fesm2022/layout.mjs +395 -2781
  35. package/fesm2022/layout.mjs.map +1 -1
  36. package/fesm2022/yunzai-widgets.mjs +561 -0
  37. package/fesm2022/yunzai-widgets.mjs.map +1 -0
  38. package/index.d.ts +4 -0
  39. package/layout/{layout-basic/layout-basic.component.d.ts → layout-basic.component.d.ts} +12 -8
  40. package/layout/layout-nav-application.component.d.ts +26 -0
  41. package/layout/layout-nav-group.component.d.ts +13 -0
  42. package/layout/layout-nav-tile.component.d.ts +5 -0
  43. package/layout/layout.module.d.ts +18 -0
  44. package/layout/public_api.d.ts +5 -13
  45. package/package.json +40 -11
  46. package/public_api.d.ts +8 -2
  47. package/src/bis.module.d.ts +8 -0
  48. package/src/helper.d.ts +16 -0
  49. package/src/provide.d.ts +2 -0
  50. package/src/refresh-token.d.ts +6 -0
  51. package/src/startup.service.d.ts +22 -0
  52. package/src/yunzai-default.interceptor.d.ts +2 -0
  53. package/yunzai-widgets/index.d.ts +5 -0
  54. package/{layout/widgets/index.d.ts → yunzai-widgets/public_api.d.ts} +2 -2
  55. package/yunzai-widgets/yunzai-clear-storage.component.d.ts +8 -0
  56. package/yunzai-widgets/yunzai-fullscreen.component.d.ts +8 -0
  57. package/yunzai-widgets/yunzai-i18n.component.d.ts +19 -0
  58. package/yunzai-widgets/yunzai-notify.component.d.ts +24 -0
  59. package/yunzai-widgets/yunzai-user.component.d.ts +21 -0
  60. package/yunzai-widgets/yunzai-widget.module.d.ts +18 -0
  61. package/README.md +0 -23
  62. package/esm2022/index.mjs +0 -2
  63. package/esm2022/layout/html-names.mjs +0 -33
  64. package/esm2022/layout/icon/style-icons.mjs +0 -796
  65. package/esm2022/layout/layout-basic/index.mjs +0 -3
  66. package/esm2022/layout/layout-basic/interface.mjs +0 -2
  67. package/esm2022/layout/layout-basic/layout-basic.component.mjs +0 -368
  68. package/esm2022/layout/layout-nav/index.mjs +0 -4
  69. package/esm2022/layout/layout-nav/layout-nav-application.component.mjs +0 -382
  70. package/esm2022/layout/layout-nav/layout-nav-group.component.mjs +0 -122
  71. package/esm2022/layout/layout-nav/layout-nav-tile.component.mjs +0 -15
  72. package/esm2022/layout/widgets/index.mjs +0 -7
  73. package/esm2022/layout/widgets/yunzai-clear-storage.component.mjs +0 -44
  74. package/esm2022/layout/widgets/yunzai-fullscreen.component.mjs +0 -44
  75. package/esm2022/layout/widgets/yunzai-i18n.component.mjs +0 -140
  76. package/esm2022/layout/widgets/yunzai-notify.component.mjs +0 -185
  77. package/esm2022/layout/widgets/yunzai-theme-btn.component.mjs +0 -200
  78. package/esm2022/layout/widgets/yunzai-user.component.mjs +0 -129
  79. package/esm2022/layout/yunzai-act.guard.mjs +0 -88
  80. package/esm2022/layout/yunzai-analysis-addon.guard.mjs +0 -100
  81. package/esm2022/layout/yunzai-auth.service.mjs +0 -108
  82. package/esm2022/layout/yunzai-default.interceptor.mjs +0 -201
  83. package/esm2022/layout/yunzai-i18n.service.mjs +0 -107
  84. package/esm2022/layout/yunzai-lang.mjs +0 -114
  85. package/esm2022/layout/yunzai-layout.module.mjs +0 -118
  86. package/esm2022/layout/yunzai-startup.service.mjs +0 -152
  87. package/layout/html-names.d.ts +0 -31
  88. package/layout/icon/style-icons.d.ts +0 -1
  89. package/layout/layout-basic/index.d.ts +0 -2
  90. package/layout/layout-basic/interface.d.ts +0 -8
  91. package/layout/layout-nav/index.d.ts +0 -3
  92. package/layout/layout-nav/layout-nav-application.component.d.ts +0 -32
  93. package/layout/layout-nav/layout-nav-group.component.d.ts +0 -16
  94. package/layout/layout-nav/layout-nav-tile.component.d.ts +0 -6
  95. package/layout/widgets/yunzai-clear-storage.component.d.ts +0 -11
  96. package/layout/widgets/yunzai-fullscreen.component.d.ts +0 -8
  97. package/layout/widgets/yunzai-i18n.component.d.ts +0 -22
  98. package/layout/widgets/yunzai-notify.component.d.ts +0 -30
  99. package/layout/widgets/yunzai-theme-btn.component.d.ts +0 -32
  100. package/layout/widgets/yunzai-user.component.d.ts +0 -26
  101. package/layout/yunzai-auth.service.d.ts +0 -19
  102. package/layout/yunzai-default.interceptor.d.ts +0 -28
  103. package/layout/yunzai-i18n.service.d.ts +0 -27
  104. package/layout/yunzai-lang.d.ts +0 -12
  105. package/layout/yunzai-layout.module.d.ts +0 -30
  106. package/layout/yunzai-startup.service.d.ts +0 -34
  107. /package/{layout → config}/bis.config.d.ts +0 -0
  108. /package/{layout → src}/yunzai-act.guard.d.ts +0 -0
  109. /package/{layout → src}/yunzai-analysis-addon.guard.d.ts +0 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@yelon/bis/config" />
5
+ export * from './public_api';
@@ -0,0 +1 @@
1
+ export * from './bis.config';
package/esm2022/bis.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2Jpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2Jpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
@@ -12,4 +12,4 @@ export const BUSINESS_DEFAULT_CONFIG = {
12
12
  export function mergeBisConfig(srv) {
13
13
  return srv.merge('bis', BUSINESS_DEFAULT_CONFIG);
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlzLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvYmlzLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBeUI7SUFDM0QsT0FBTyxFQUFFLFlBQVk7SUFDckIsVUFBVSxFQUFFLFFBQVE7SUFDcEIsR0FBRyxFQUFFO1FBQ0gsSUFBSSxFQUFFLElBQUk7UUFDVixHQUFHLEVBQUUsSUFBSTtLQUNWO0lBQ0QsU0FBUyxFQUFFLElBQUk7SUFDZixtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLGdCQUFnQixFQUFFLFlBQVk7Q0FDL0IsQ0FBQztBQUVGLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBd0I7SUFDckQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBRSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBZdW56YWlCdXNpbmVzc0NvbmZpZywgWXVuemFpQ29uZmlnU2VydmljZSB9IGZyb20gJ0B5ZWxvbi91dGlsJztcblxuZXhwb3J0IGNvbnN0IEJVU0lORVNTX0RFRkFVTFRfQ09ORklHOiBZdW56YWlCdXNpbmVzc0NvbmZpZyA9IHtcbiAgYmFzZVVybDogJy9iYWNrc3RhZ2UnLFxuICBzeXN0ZW1Db2RlOiAncG9ydGFsJyxcbiAgbmF2OiB7XG4gICAgbWluZTogdHJ1ZSxcbiAgICBhbGw6IHRydWVcbiAgfSxcbiAgbG9naW5Gb3JtOiBudWxsLFxuICByZWZyZXNoVG9rZW5FbmFibGVkOiB0cnVlLFxuICByZWZyZXNoVG9rZW5UeXBlOiAncmUtcmVxdWVzdCdcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJpc0NvbmZpZyhzcnY6IFl1bnphaUNvbmZpZ1NlcnZpY2UpOiBZdW56YWlCdXNpbmVzc0NvbmZpZyB7XG4gIHJldHVybiBzcnYubWVyZ2UoJ2JpcycsIEJVU0lORVNTX0RFRkFVTFRfQ09ORklHKSE7XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlzLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9jb25maWcvYmlzLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBeUI7SUFDM0QsT0FBTyxFQUFFLFlBQVk7SUFDckIsVUFBVSxFQUFFLFFBQVE7SUFDcEIsR0FBRyxFQUFFO1FBQ0gsSUFBSSxFQUFFLElBQUk7UUFDVixHQUFHLEVBQUUsSUFBSTtLQUNWO0lBQ0QsU0FBUyxFQUFFLElBQUk7SUFDZixtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLGdCQUFnQixFQUFFLFlBQVk7Q0FDL0IsQ0FBQztBQUVGLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBd0I7SUFDckQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBRSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBZdW56YWlCdXNpbmVzc0NvbmZpZywgWXVuemFpQ29uZmlnU2VydmljZSB9IGZyb20gJ0B5ZWxvbi91dGlsJztcblxuZXhwb3J0IGNvbnN0IEJVU0lORVNTX0RFRkFVTFRfQ09ORklHOiBZdW56YWlCdXNpbmVzc0NvbmZpZyA9IHtcbiAgYmFzZVVybDogJy9iYWNrc3RhZ2UnLFxuICBzeXN0ZW1Db2RlOiAncG9ydGFsJyxcbiAgbmF2OiB7XG4gICAgbWluZTogdHJ1ZSxcbiAgICBhbGw6IHRydWVcbiAgfSxcbiAgbG9naW5Gb3JtOiBudWxsLFxuICByZWZyZXNoVG9rZW5FbmFibGVkOiB0cnVlLFxuICByZWZyZXNoVG9rZW5UeXBlOiAncmUtcmVxdWVzdCdcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJpc0NvbmZpZyhzcnY6IFl1bnphaUNvbmZpZ1NlcnZpY2UpOiBZdW56YWlCdXNpbmVzc0NvbmZpZyB7XG4gIHJldHVybiBzcnYubWVyZ2UoJ2JpcycsIEJVU0lORVNTX0RFRkFVTFRfQ09ORklHKSE7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2NvbmZpZy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './bis.config';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9jb25maWcvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmlzLmNvbmZpZyc7XG4iXX0=
@@ -0,0 +1,376 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, inject } from '@angular/core';
3
+ import { RouterModule } from '@angular/router';
4
+ import { ReuseTabModule } from '@yelon/abc/reuse-tab';
5
+ import { YunzaiWidgetsModule } from '@yelon/bis/yunzai-widgets';
6
+ import { StompService } from '@yelon/socket';
7
+ import { I18nPipe } from '@yelon/theme';
8
+ import { LayoutDefaultModule, LayoutDisplayService } from '@yelon/theme/layout-default';
9
+ import { ThemeBtnModule } from '@yelon/theme/theme-btn';
10
+ import { hasFavicon, log, NavType, setFavicon, useLocalStorageCurrent, useLocalStorageDefaultRoute, useLocalStorageHeaderType, useLocalStorageProjectInfo, WINDOW } from '@yelon/util';
11
+ import { NzAvatarModule } from 'ng-zorro-antd/avatar';
12
+ import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
13
+ import { NzIconModule } from 'ng-zorro-antd/icon';
14
+ import { YunzaiNavApplicationComponent } from './layout-nav-application.component';
15
+ import { YunzaiLayoutNavGroupComponent } from './layout-nav-group.component';
16
+ import { YunzaiLayoutNavTileComponent } from './layout-nav-tile.component';
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "@yelon/theme/layout-default";
19
+ import * as i2 from "@angular/router";
20
+ import * as i3 from "@yelon/abc/reuse-tab";
21
+ import * as i4 from "@angular/common";
22
+ import * as i5 from "ng-zorro-antd/menu";
23
+ import * as i6 from "ng-zorro-antd/dropdown";
24
+ import * as i7 from "ng-zorro-antd/avatar";
25
+ import * as i8 from "ng-zorro-antd/icon";
26
+ import * as i9 from "@yelon/theme/theme-btn";
27
+ import * as i10 from "@yelon/bis/yunzai-widgets";
28
+ export class YunzaiLayoutBasicComponent {
29
+ constructor() {
30
+ this.stomp = inject(StompService);
31
+ this.win = inject(WINDOW);
32
+ this.layoutDisplayService = inject(LayoutDisplayService);
33
+ this.NavType = NavType;
34
+ this.state = {
35
+ options: {
36
+ logoExpanded: `./assets/logo-full.svg`,
37
+ logoCollapsed: `./assets/logo.svg`
38
+ },
39
+ aside: {
40
+ name: '',
41
+ intro: '',
42
+ icon: ''
43
+ },
44
+ display: {
45
+ nav: true,
46
+ aside: true,
47
+ reusetab: true
48
+ },
49
+ navType: NavType.APPLICATION
50
+ };
51
+ }
52
+ get options() {
53
+ return this.state.options;
54
+ }
55
+ get navType() {
56
+ return this.state.navType;
57
+ }
58
+ get aside() {
59
+ return this.state.aside;
60
+ }
61
+ get displayReusetab() {
62
+ return this.state.display.reusetab;
63
+ }
64
+ get reusetabCSS() {
65
+ let cascadingStyleSheet = {};
66
+ if (!this.state.display.nav) {
67
+ cascadingStyleSheet = {
68
+ ...cascadingStyleSheet,
69
+ top: '0px'
70
+ };
71
+ }
72
+ if (!this.state.display.aside) {
73
+ cascadingStyleSheet = {
74
+ ...cascadingStyleSheet,
75
+ left: '24px'
76
+ };
77
+ }
78
+ return cascadingStyleSheet;
79
+ }
80
+ ngOnInit() {
81
+ this.initLogo();
82
+ this.initFavicon();
83
+ this.initNavType();
84
+ this.initAside();
85
+ this.addLayoutDisplayListener();
86
+ this.stomp.listen();
87
+ this.toIndex();
88
+ }
89
+ initFavicon() {
90
+ const [, getProjectInfo] = useLocalStorageProjectInfo();
91
+ const projectInfo = getProjectInfo();
92
+ if (projectInfo.faviconUrl) {
93
+ hasFavicon(projectInfo.faviconUrl).then((has) => {
94
+ if (has) {
95
+ setFavicon(projectInfo.faviconUrl);
96
+ }
97
+ else {
98
+ setFavicon('./assets/favicon.ico');
99
+ }
100
+ });
101
+ }
102
+ }
103
+ initAside() {
104
+ const [, getCurrent] = useLocalStorageCurrent();
105
+ const aside = getCurrent();
106
+ this.state.aside = { ...aside };
107
+ }
108
+ initLogo() {
109
+ const [, getProjectInfo] = useLocalStorageProjectInfo();
110
+ const projectInfo = getProjectInfo();
111
+ this.state.options.logoExpanded = projectInfo.maxLogoUrl ? projectInfo.maxLogoUrl : `./assets/logo-full.svg`;
112
+ this.state.options.logoCollapsed = projectInfo.miniLogoUrl ? projectInfo.miniLogoUrl : `./assets/logo.svg`;
113
+ }
114
+ initNavType() {
115
+ const [, getHeaderType] = useLocalStorageHeaderType();
116
+ const [, getProjectInfo] = useLocalStorageProjectInfo();
117
+ const navType = getHeaderType();
118
+ const projectInfo = getProjectInfo();
119
+ if (navType !== null) {
120
+ this.state.navType = navType;
121
+ return;
122
+ }
123
+ let fetchedNavType;
124
+ if (projectInfo.headerStyle && projectInfo.headerStyle.length > 0) {
125
+ fetchedNavType = projectInfo.headerStyle.pop()?.value;
126
+ }
127
+ // default value
128
+ if (!fetchedNavType) {
129
+ fetchedNavType = NavType.APPLICATION;
130
+ }
131
+ this.state.navType = fetchedNavType;
132
+ }
133
+ toIndex() {
134
+ const [, getDefaultRoute] = useLocalStorageDefaultRoute();
135
+ const defaultRoute = getDefaultRoute();
136
+ log('YunzaiLayoutBasicComponent: ', `todo: the default route was ${defaultRoute}, 但是还没想好如何实现.`);
137
+ }
138
+ onNavTypeChange(type) {
139
+ const [setHeaderType] = useLocalStorageHeaderType();
140
+ setHeaderType(type);
141
+ this.win.location.reload();
142
+ }
143
+ addLayoutDisplayListener() {
144
+ this.layoutDisplayService.listen('reuseTab', (display) => {
145
+ this.state.display.reusetab = display;
146
+ });
147
+ this.layoutDisplayService.listen('nav', (display) => {
148
+ this.state.display.nav = display;
149
+ });
150
+ this.layoutDisplayService.listen('aside', (display) => {
151
+ this.state.display.aside = display;
152
+ });
153
+ }
154
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutBasicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
155
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: YunzaiLayoutBasicComponent, isStandalone: true, selector: "yunzai-layout-basic", ngImport: i0, template: `
156
+ <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
157
+ <layout-default-header-item direction="left">
158
+ <ng-container [ngSwitch]="navType">
159
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
160
+ <yunzai-layout-nav-application />
161
+ </ng-container>
162
+ <ng-container *ngSwitchCase="NavType.GROUP">
163
+ <yunzai-layout-nav-group />
164
+ </ng-container>
165
+ <ng-container *ngSwitchCase="NavType.TILE">
166
+ <yunzai-layout-nav-tile />
167
+ </ng-container>
168
+ <ng-container *ngSwitchDefault>
169
+ <yunzai-layout-nav-application />
170
+ </ng-container>
171
+ </ng-container>
172
+ </layout-default-header-item>
173
+ <layout-default-header-item direction="right" hidden="mobile">
174
+ <yunzai-header-notify />
175
+ </layout-default-header-item>
176
+ <layout-default-header-item direction="right" hidden="mobile">
177
+ <theme-btn />
178
+ </layout-default-header-item>
179
+ <layout-default-header-item direction="right" hidden="mobile">
180
+ <div
181
+ data-event-id="_nav_settings"
182
+ layout-default-header-item-trigger
183
+ nz-dropdown
184
+ [nzDropdownMenu]="settingsMenu"
185
+ nzTrigger="click"
186
+ nzPlacement="bottomRight"
187
+ >
188
+ <i nz-icon nzType="setting"></i>
189
+ </div>
190
+ <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
191
+ <div nz-menu style="width: 200px;">
192
+ <div data-event-id="_nav_mode" nz-menu-item>
193
+ {{ 'mode.nav' | i18n }}
194
+ </div>
195
+ <div
196
+ data-event-id="_nav_mode"
197
+ data-type="application"
198
+ nz-menu-item
199
+ (click)="onNavTypeChange(NavType.APPLICATION)"
200
+ >
201
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
202
+ {{ 'mode.nav.application' | i18n }}
203
+ </div>
204
+ <div data-event-id="_nav_mode" data-type="group" nz-menu-item (click)="onNavTypeChange(NavType.GROUP)">
205
+ <i nz-icon nzType="group" class="mr-sm"></i>
206
+ {{ 'mode.nav.group' | i18n }}
207
+ </div>
208
+ <div data-event-id="_nav_mode" data-type="tile" nz-menu-item (click)="onNavTypeChange(NavType.TILE)">
209
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
210
+ {{ 'mode.nav.tile' | i18n }}
211
+ </div>
212
+ <div data-event-id="_nav_fullscreen" nz-menu-item>
213
+ <yunzai-header-fullscreen />
214
+ </div>
215
+ <div data-event-id="_nav_clearstorage" nz-menu-item>
216
+ <yunzai-header-clear-storage />
217
+ </div>
218
+ <div data-event-id="_nav_i18n" nz-menu-item>
219
+ <yunzai-header-i18n />
220
+ </div>
221
+ </div>
222
+ </nz-dropdown-menu>
223
+ </layout-default-header-item>
224
+ <layout-default-header-item direction="right">
225
+ <yunzai-header-user />
226
+ </layout-default-header-item>
227
+ </layout-default>
228
+ <ng-template #asideUserTpl>
229
+ <div
230
+ data-event-id="_route_user"
231
+ nz-dropdown
232
+ nzTrigger="click"
233
+ [nzDropdownMenu]="userMenu"
234
+ class="yunzai-default__aside-user"
235
+ >
236
+ <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="aside.icon" />
237
+ <div class="yunzai-default__aside-user-info">
238
+ <strong>{{ aside.name | i18n }}</strong>
239
+ <p class="mb0">{{ aside.intro | i18n }}</p>
240
+ </div>
241
+ </div>
242
+ <nz-dropdown-menu #userMenu="nzDropdownMenu">
243
+ <ul nz-menu>
244
+ <li data-event-id="_route_backhome" nz-menu-item routerLink="/">{{ 'back.home' | i18n }}</li>
245
+ </ul>
246
+ </nz-dropdown-menu>
247
+ </ng-template>
248
+ <ng-template #contentTpl>
249
+ <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
250
+ <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
251
+ </ng-template>
252
+ <ng-template #noneTpl> <router-outlet /> </ng-template>
253
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: LayoutDefaultModule }, { kind: "component", type: i1.LayoutDefaultComponent, selector: "layout-default", inputs: ["options", "asideUser", "asideBottom", "nav", "content", "customError", "fetchingStrictly", "fetching"], exportAs: ["layoutDefault"] }, { kind: "component", type: i1.LayoutDefaultHeaderItemComponent, selector: "layout-default-header-item", inputs: ["hidden", "direction"] }, { kind: "directive", type: i1.LayoutDefaultHeaderItemTriggerDirective, selector: "[layout-default-header-item-trigger]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReuseTabModule }, { kind: "component", type: i3.ReuseTabComponent, selector: "reuse-tab, [reuse-tab]", inputs: ["mode", "i18n", "debug", "max", "tabMaxWidth", "excludes", "allowClose", "keepingScroll", "storageState", "keepingScrollContainer", "customContextMenu", "tabBarExtraContent", "tabBarGutter", "tabBarStyle", "tabType", "routeParamMatchMode", "disabled", "titleRender", "canClose"], outputs: ["change", "close"], exportAs: ["reuseTab"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i5.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i5.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i6.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i6.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "ngmodule", type: NzAvatarModule }, { kind: "component", type: i7.NzAvatarComponent, selector: "nz-avatar", inputs: ["nzShape", "nzSize", "nzGap", "nzText", "nzSrc", "nzSrcSet", "nzAlt", "nzIcon"], outputs: ["nzError"], exportAs: ["nzAvatar"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i8.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: ThemeBtnModule }, { kind: "component", type: i9.ThemeBtnComponent, selector: "theme-btn", inputs: ["types", "devTips", "deployUrl"], outputs: ["themeChange"] }, { kind: "ngmodule", type: YunzaiWidgetsModule }, { kind: "component", type: i10.YunzaiHeaderClearStorageComponent, selector: "yunzai-header-clear-storage" }, { kind: "component", type: i10.YunzaiHeaderFullScreenComponent, selector: "yunzai-header-fullscreen" }, { kind: "component", type: i10.YunzaiHeaderNotifyComponent, selector: "yunzai-header-notify" }, { kind: "component", type: i10.YunzaiHeaderI18nComponent, selector: "yunzai-header-i18n", inputs: ["showLangText"] }, { kind: "component", type: i10.YunzaiHeaderUserComponent, selector: "yunzai-header-user" }, { kind: "component", type: YunzaiNavApplicationComponent, selector: "yunzai-layout-nav-application" }, { kind: "component", type: YunzaiLayoutNavGroupComponent, selector: "yunzai-layout-nav-group" }, { kind: "component", type: YunzaiLayoutNavTileComponent, selector: "yunzai-layout-nav-tile" }] }); }
254
+ }
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutBasicComponent, decorators: [{
256
+ type: Component,
257
+ args: [{
258
+ selector: `yunzai-layout-basic`,
259
+ template: `
260
+ <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
261
+ <layout-default-header-item direction="left">
262
+ <ng-container [ngSwitch]="navType">
263
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
264
+ <yunzai-layout-nav-application />
265
+ </ng-container>
266
+ <ng-container *ngSwitchCase="NavType.GROUP">
267
+ <yunzai-layout-nav-group />
268
+ </ng-container>
269
+ <ng-container *ngSwitchCase="NavType.TILE">
270
+ <yunzai-layout-nav-tile />
271
+ </ng-container>
272
+ <ng-container *ngSwitchDefault>
273
+ <yunzai-layout-nav-application />
274
+ </ng-container>
275
+ </ng-container>
276
+ </layout-default-header-item>
277
+ <layout-default-header-item direction="right" hidden="mobile">
278
+ <yunzai-header-notify />
279
+ </layout-default-header-item>
280
+ <layout-default-header-item direction="right" hidden="mobile">
281
+ <theme-btn />
282
+ </layout-default-header-item>
283
+ <layout-default-header-item direction="right" hidden="mobile">
284
+ <div
285
+ data-event-id="_nav_settings"
286
+ layout-default-header-item-trigger
287
+ nz-dropdown
288
+ [nzDropdownMenu]="settingsMenu"
289
+ nzTrigger="click"
290
+ nzPlacement="bottomRight"
291
+ >
292
+ <i nz-icon nzType="setting"></i>
293
+ </div>
294
+ <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
295
+ <div nz-menu style="width: 200px;">
296
+ <div data-event-id="_nav_mode" nz-menu-item>
297
+ {{ 'mode.nav' | i18n }}
298
+ </div>
299
+ <div
300
+ data-event-id="_nav_mode"
301
+ data-type="application"
302
+ nz-menu-item
303
+ (click)="onNavTypeChange(NavType.APPLICATION)"
304
+ >
305
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
306
+ {{ 'mode.nav.application' | i18n }}
307
+ </div>
308
+ <div data-event-id="_nav_mode" data-type="group" nz-menu-item (click)="onNavTypeChange(NavType.GROUP)">
309
+ <i nz-icon nzType="group" class="mr-sm"></i>
310
+ {{ 'mode.nav.group' | i18n }}
311
+ </div>
312
+ <div data-event-id="_nav_mode" data-type="tile" nz-menu-item (click)="onNavTypeChange(NavType.TILE)">
313
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
314
+ {{ 'mode.nav.tile' | i18n }}
315
+ </div>
316
+ <div data-event-id="_nav_fullscreen" nz-menu-item>
317
+ <yunzai-header-fullscreen />
318
+ </div>
319
+ <div data-event-id="_nav_clearstorage" nz-menu-item>
320
+ <yunzai-header-clear-storage />
321
+ </div>
322
+ <div data-event-id="_nav_i18n" nz-menu-item>
323
+ <yunzai-header-i18n />
324
+ </div>
325
+ </div>
326
+ </nz-dropdown-menu>
327
+ </layout-default-header-item>
328
+ <layout-default-header-item direction="right">
329
+ <yunzai-header-user />
330
+ </layout-default-header-item>
331
+ </layout-default>
332
+ <ng-template #asideUserTpl>
333
+ <div
334
+ data-event-id="_route_user"
335
+ nz-dropdown
336
+ nzTrigger="click"
337
+ [nzDropdownMenu]="userMenu"
338
+ class="yunzai-default__aside-user"
339
+ >
340
+ <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="aside.icon" />
341
+ <div class="yunzai-default__aside-user-info">
342
+ <strong>{{ aside.name | i18n }}</strong>
343
+ <p class="mb0">{{ aside.intro | i18n }}</p>
344
+ </div>
345
+ </div>
346
+ <nz-dropdown-menu #userMenu="nzDropdownMenu">
347
+ <ul nz-menu>
348
+ <li data-event-id="_route_backhome" nz-menu-item routerLink="/">{{ 'back.home' | i18n }}</li>
349
+ </ul>
350
+ </nz-dropdown-menu>
351
+ </ng-template>
352
+ <ng-template #contentTpl>
353
+ <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
354
+ <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
355
+ </ng-template>
356
+ <ng-template #noneTpl> <router-outlet /> </ng-template>
357
+ `,
358
+ standalone: true,
359
+ imports: [
360
+ LayoutDefaultModule,
361
+ RouterModule,
362
+ ReuseTabModule,
363
+ CommonModule,
364
+ I18nPipe,
365
+ NzDropDownModule,
366
+ NzAvatarModule,
367
+ NzIconModule,
368
+ ThemeBtnModule,
369
+ YunzaiWidgetsModule,
370
+ YunzaiNavApplicationComponent,
371
+ YunzaiLayoutNavGroupComponent,
372
+ YunzaiLayoutNavTileComponent
373
+ ]
374
+ }]
375
+ }] });
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJhc2ljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvbGF5b3V0LWJhc2ljLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsVUFBVSxFQUdWLEdBQUcsRUFDSCxPQUFPLEVBQ1AsVUFBVSxFQUNWLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUMxQixNQUFNLEVBRVAsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsNkJBQTZC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b0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXpJVSwwQkFBMEI7a0dBQTFCLDBCQUEwQiwrRUFwSDNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtHVCwyREFHQyxtQkFBbUIsdWdCQUNuQixZQUFZLHliQUNaLGNBQWMsNGNBQ2QsWUFBWSwyWEFDWixRQUFRLDRDQUNSLGdCQUFnQix5MkJBQ2hCLGNBQWMsZ1BBQ2QsWUFBWSxpTkFDWixjQUFjLDZLQUNkLG1CQUFtQixzaUJBQ25CLDZCQUE2QiwwRUFDN0IsNkJBQTZCLG9FQUM3Qiw0QkFBNEI7OzJGQUduQiwwQkFBMEI7a0JBdEh0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrR1Q7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLDZCQUE2Qjt3QkFDN0IsNkJBQTZCO3dCQUM3Qiw0QkFBNEI7cUJBQzdCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IFJldXNlVGFiTW9kdWxlIH0gZnJvbSAnQHllbG9uL2FiYy9yZXVzZS10YWInO1xuaW1wb3J0IHsgWXVuemFpV2lkZ2V0c01vZHVsZSB9IGZyb20gJ0B5ZWxvbi9iaXMveXVuemFpLXdpZGdldHMnO1xuaW1wb3J0IHsgU3RvbXBTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL3NvY2tldCc7XG5pbXBvcnQgeyBJMThuUGlwZSB9IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBMYXlvdXREZWZhdWx0TW9kdWxlLCBMYXlvdXREZWZhdWx0T3B0aW9ucywgTGF5b3V0RGlzcGxheVNlcnZpY2UgfSBmcm9tICdAeWVsb24vdGhlbWUvbGF5b3V0LWRlZmF1bHQnO1xuaW1wb3J0IHsgVGhlbWVCdG5Nb2R1bGUgfSBmcm9tICdAeWVsb24vdGhlbWUvdGhlbWUtYnRuJztcbmltcG9ydCB7XG4gIGhhc0Zhdmljb24sXG4gIExheW91dEJhc2ljQXNpZGUsXG4gIExheW91dEJhc2ljRGlzcGxheSxcbiAgbG9nLFxuICBOYXZUeXBlLFxuICBzZXRGYXZpY29uLFxuICB1c2VMb2NhbFN0b3JhZ2VDdXJyZW50LFxuICB1c2VMb2NhbFN0b3JhZ2VEZWZhdWx0Um91dGUsXG4gIHVzZUxvY2FsU3RvcmFnZUhlYWRlclR5cGUsXG4gIHVzZUxvY2FsU3RvcmFnZVByb2plY3RJbmZvLFxuICBXSU5ET1csXG4gIFl1bnphaVByb2plY3RJbmZvXG59IGZyb20gJ0B5ZWxvbi91dGlsJztcbmltcG9ydCB7IE56QXZhdGFyTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9hdmF0YXInO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56RHJvcERvd25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2Ryb3Bkb3duJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5cbmltcG9ydCB7IFl1bnphaU5hdkFwcGxpY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtbmF2LWFwcGxpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBZdW56YWlMYXlvdXROYXZHcm91cENvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LW5hdi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgWXVuemFpTGF5b3V0TmF2VGlsZUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LW5hdi10aWxlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0QmFzaWNTdGF0ZSB7XG4gIG9wdGlvbnM6IExheW91dERlZmF1bHRPcHRpb25zO1xuICBhc2lkZTogTGF5b3V0QmFzaWNBc2lkZTtcbiAgZGlzcGxheTogTGF5b3V0QmFzaWNEaXNwbGF5O1xuICBuYXZUeXBlOiBOYXZUeXBlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IGB5dW56YWktbGF5b3V0LWJhc2ljYCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bGF5b3V0LWRlZmF1bHQgW29wdGlvbnNdPVwib3B0aW9uc1wiIFthc2lkZVVzZXJdPVwiYXNpZGVVc2VyVHBsXCIgW2NvbnRlbnRdPVwiZGlzcGxheVJldXNldGFiID8gY29udGVudFRwbCA6IG5vbmVUcGxcIj5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJsZWZ0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIm5hdlR5cGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJOYXZUeXBlLkFQUExJQ0FUSU9OXCI+XG4gICAgICAgICAgICA8eXVuemFpLWxheW91dC1uYXYtYXBwbGljYXRpb24gLz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJOYXZUeXBlLkdST1VQXCI+XG4gICAgICAgICAgICA8eXVuemFpLWxheW91dC1uYXYtZ3JvdXAgLz5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJOYXZUeXBlLlRJTEVcIj5cbiAgICAgICAgICAgIDx5dW56YWktbGF5b3V0LW5hdi10aWxlIC8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPHl1bnphaS1sYXlvdXQtbmF2LWFwcGxpY2F0aW9uIC8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJyaWdodFwiIGhpZGRlbj1cIm1vYmlsZVwiPlxuICAgICAgICA8eXVuemFpLWhlYWRlci1ub3RpZnkgLz5cbiAgICAgIDwvbGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0+XG4gICAgICA8bGF5b3V0LWRlZmF1bHQtaGVhZGVyLWl0ZW0gZGlyZWN0aW9uPVwicmlnaHRcIiBoaWRkZW49XCJtb2JpbGVcIj5cbiAgICAgICAgPHRoZW1lLWJ0biAvPlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJyaWdodFwiIGhpZGRlbj1cIm1vYmlsZVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1ldmVudC1pZD1cIl9uYXZfc2V0dGluZ3NcIlxuICAgICAgICAgIGxheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtLXRyaWdnZXJcbiAgICAgICAgICBuei1kcm9wZG93blxuICAgICAgICAgIFtuekRyb3Bkb3duTWVudV09XCJzZXR0aW5nc01lbnVcIlxuICAgICAgICAgIG56VHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgICBuelBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwic2V0dGluZ1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuei1kcm9wZG93bi1tZW51ICNzZXR0aW5nc01lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxuICAgICAgICAgIDxkaXYgbnotbWVudSBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1ldmVudC1pZD1cIl9uYXZfbW9kZVwiIG56LW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAge3sgJ21vZGUubmF2JyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLWV2ZW50LWlkPVwiX25hdl9tb2RlXCJcbiAgICAgICAgICAgICAgZGF0YS10eXBlPVwiYXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICBuei1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTmF2VHlwZUNoYW5nZShOYXZUeXBlLkFQUExJQ0FUSU9OKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiYXBwc3RvcmVcIiBjbGFzcz1cIm1yLXNtXCI+PC9pPlxuICAgICAgICAgICAgICB7eyAnbW9kZS5uYXYuYXBwbGljYXRpb24nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtZXZlbnQtaWQ9XCJfbmF2X21vZGVcIiBkYXRhLXR5cGU9XCJncm91cFwiIG56LW1lbnUtaXRlbSAoY2xpY2spPVwib25OYXZUeXBlQ2hhbmdlKE5hdlR5cGUuR1JPVVApXCI+XG4gICAgICAgICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiZ3JvdXBcIiBjbGFzcz1cIm1yLXNtXCI+PC9pPlxuICAgICAgICAgICAgICB7eyAnbW9kZS5uYXYuZ3JvdXAnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtZXZlbnQtaWQ9XCJfbmF2X21vZGVcIiBkYXRhLXR5cGU9XCJ0aWxlXCIgbnotbWVudS1pdGVtIChjbGljayk9XCJvbk5hdlR5cGVDaGFuZ2UoTmF2VHlwZS5USUxFKVwiPlxuICAgICAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImFwcHN0b3JlXCIgY2xhc3M9XCJtci1zbVwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ21vZGUubmF2LnRpbGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtZXZlbnQtaWQ9XCJfbmF2X2Z1bGxzY3JlZW5cIiBuei1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgIDx5dW56YWktaGVhZGVyLWZ1bGxzY3JlZW4gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLWV2ZW50LWlkPVwiX25hdl9jbGVhcnN0b3JhZ2VcIiBuei1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgIDx5dW56YWktaGVhZGVyLWNsZWFyLXN0b3JhZ2UgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLWV2ZW50LWlkPVwiX25hdl9pMThuXCIgbnotbWVudS1pdGVtPlxuICAgICAgICAgICAgICA8eXVuemFpLWhlYWRlci1pMThuIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uei1kcm9wZG93bi1tZW51PlxuICAgICAgPC9sYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbT5cbiAgICAgIDxsYXlvdXQtZGVmYXVsdC1oZWFkZXItaXRlbSBkaXJlY3Rpb249XCJyaWdodFwiPlxuICAgICAgICA8eXVuemFpLWhlYWRlci11c2VyIC8+XG4gICAgICA8L2xheW91dC1kZWZhdWx0LWhlYWRlci1pdGVtPlxuICAgIDwvbGF5b3V0LWRlZmF1bHQ+XG4gICAgPG5nLXRlbXBsYXRlICNhc2lkZVVzZXJUcGw+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtZXZlbnQtaWQ9XCJfcm91dGVfdXNlclwiXG4gICAgICAgIG56LWRyb3Bkb3duXG4gICAgICAgIG56VHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgW256RHJvcGRvd25NZW51XT1cInVzZXJNZW51XCJcbiAgICAgICAgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fYXNpZGUtdXNlclwiXG4gICAgICA+XG4gICAgICAgIDxuei1hdmF0YXIgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fYXNpZGUtdXNlci1hdmF0YXJcIiBbbnpTcmNdPVwiYXNpZGUuaWNvblwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fYXNpZGUtdXNlci1pbmZvXCI+XG4gICAgICAgICAgPHN0cm9uZz57eyBhc2lkZS5uYW1lIHwgaTE4biB9fTwvc3Ryb25nPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWIwXCI+e3sgYXNpZGUuaW50cm8gfCBpMThuIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG56LWRyb3Bkb3duLW1lbnUgI3VzZXJNZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgICAgPHVsIG56LW1lbnU+XG4gICAgICAgICAgPGxpIGRhdGEtZXZlbnQtaWQ9XCJfcm91dGVfYmFja2hvbWVcIiBuei1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi9cIj57eyAnYmFjay5ob21lJyB8IGkxOG4gfX08L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9uei1kcm9wZG93bi1tZW51PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50VHBsPlxuICAgICAgPHJldXNlLXRhYiAjcmV1c2VUYWIgW25nU3R5bGVdPVwicmV1c2V0YWJDU1NcIiAvPlxuICAgICAgPHJvdXRlci1vdXRsZXQgKGFjdGl2YXRlKT1cInJldXNlVGFiLmFjdGl2YXRlKCRldmVudClcIiAoYXR0YWNoKT1cInJldXNlVGFiLmFjdGl2YXRlKCRldmVudClcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNub25lVHBsPiA8cm91dGVyLW91dGxldCAvPiA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTGF5b3V0RGVmYXVsdE1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgUmV1c2VUYWJNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEkxOG5QaXBlLFxuICAgIE56RHJvcERvd25Nb2R1bGUsXG4gICAgTnpBdmF0YXJNb2R1bGUsXG4gICAgTnpJY29uTW9kdWxlLFxuICAgIFRoZW1lQnRuTW9kdWxlLFxuICAgIFl1bnphaVdpZGdldHNNb2R1bGUsXG4gICAgWXVuemFpTmF2QXBwbGljYXRpb25Db21wb25lbnQsXG4gICAgWXVuemFpTGF5b3V0TmF2R3JvdXBDb21wb25lbnQsXG4gICAgWXVuemFpTGF5b3V0TmF2VGlsZUNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFl1bnphaUxheW91dEJhc2ljQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9tcCA9IGluamVjdChTdG9tcFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbiA9IGluamVjdChXSU5ET1cpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dERpc3BsYXlTZXJ2aWNlID0gaW5qZWN0KExheW91dERpc3BsYXlTZXJ2aWNlKTtcblxuICBwdWJsaWMgTmF2VHlwZSA9IE5hdlR5cGU7XG4gIHByaXZhdGUgc3RhdGU6IExheW91dEJhc2ljU3RhdGUgPSB7XG4gICAgb3B0aW9uczoge1xuICAgICAgbG9nb0V4cGFuZGVkOiBgLi9hc3NldHMvbG9nby1mdWxsLnN2Z2AsXG4gICAgICBsb2dvQ29sbGFwc2VkOiBgLi9hc3NldHMvbG9nby5zdmdgXG4gICAgfSxcbiAgICBhc2lkZToge1xuICAgICAgbmFtZTogJycsXG4gICAgICBpbnRybzogJycsXG4gICAgICBpY29uOiAnJ1xuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgbmF2OiB0cnVlLFxuICAgICAgYXNpZGU6IHRydWUsXG4gICAgICByZXVzZXRhYjogdHJ1ZVxuICAgIH0sXG4gICAgbmF2VHlwZTogTmF2VHlwZS5BUFBMSUNBVElPTlxuICB9O1xuXG4gIGdldCBvcHRpb25zKCk6IExheW91dERlZmF1bHRPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5vcHRpb25zO1xuICB9XG5cbiAgZ2V0IG5hdlR5cGUoKTogTmF2VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUubmF2VHlwZTtcbiAgfVxuXG4gIGdldCBhc2lkZSgpOiBMYXlvdXRCYXNpY0FzaWRlIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hc2lkZTtcbiAgfVxuXG4gIGdldCBkaXNwbGF5UmV1c2V0YWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZGlzcGxheS5yZXVzZXRhYjtcbiAgfVxuXG4gIGdldCByZXVzZXRhYkNTUygpOiBOelNhZmVBbnkge1xuICAgIGxldCBjYXNjYWRpbmdTdHlsZVNoZWV0ID0ge307XG4gICAgaWYgKCF0aGlzLnN0YXRlLmRpc3BsYXkubmF2KSB7XG4gICAgICBjYXNjYWRpbmdTdHlsZVNoZWV0ID0ge1xuICAgICAgICAuLi5jYXNjYWRpbmdTdHlsZVNoZWV0LFxuICAgICAgICB0b3A6ICcwcHgnXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZGlzcGxheS5hc2lkZSkge1xuICAgICAgY2FzY2FkaW5nU3R5bGVTaGVldCA9IHtcbiAgICAgICAgLi4uY2FzY2FkaW5nU3R5bGVTaGVldCxcbiAgICAgICAgbGVmdDogJzI0cHgnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gY2FzY2FkaW5nU3R5bGVTaGVldDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdExvZ28oKTtcbiAgICB0aGlzLmluaXRGYXZpY29uKCk7XG4gICAgdGhpcy5pbml0TmF2VHlwZSgpO1xuICAgIHRoaXMuaW5pdEFzaWRlKCk7XG4gICAgdGhpcy5hZGRMYXlvdXREaXNwbGF5TGlzdGVuZXIoKTtcbiAgICB0aGlzLnN0b21wLmxpc3RlbigpO1xuICAgIHRoaXMudG9JbmRleCgpO1xuICB9XG5cbiAgaW5pdEZhdmljb24oKTogdm9pZCB7XG4gICAgY29uc3QgWywgZ2V0UHJvamVjdEluZm9dID0gdXNlTG9jYWxTdG9yYWdlUHJvamVjdEluZm8oKTtcbiAgICBjb25zdCBwcm9qZWN0SW5mbzogWXVuemFpUHJvamVjdEluZm8gPSBnZXRQcm9qZWN0SW5mbygpITtcbiAgICBpZiAocHJvamVjdEluZm8uZmF2aWNvblVybCkge1xuICAgICAgaGFzRmF2aWNvbihwcm9qZWN0SW5mby5mYXZpY29uVXJsKS50aGVuKChoYXM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKGhhcykge1xuICAgICAgICAgIHNldEZhdmljb24ocHJvamVjdEluZm8uZmF2aWNvblVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0RmF2aWNvbignLi9hc3NldHMvZmF2aWNvbi5pY28nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdEFzaWRlKCk6IHZvaWQge1xuICAgIGNvbnN0IFssIGdldEN1cnJlbnRdID0gdXNlTG9jYWxTdG9yYWdlQ3VycmVudCgpO1xuICAgIGNvbnN0IGFzaWRlOiBMYXlvdXRCYXNpY0FzaWRlID0gZ2V0Q3VycmVudCgpITtcbiAgICB0aGlzLnN0YXRlLmFzaWRlID0geyAuLi5hc2lkZSB9O1xuICB9XG5cbiAgaW5pdExvZ28oKTogdm9pZCB7XG4gICAgY29uc3QgWywgZ2V0UHJvamVjdEluZm9dID0gdXNlTG9jYWxTdG9yYWdlUHJvamVjdEluZm8oKTtcbiAgICBjb25zdCBwcm9qZWN0SW5mbzogWXVuemFpUHJvamVjdEluZm8gPSBnZXRQcm9qZWN0SW5mbygpITtcbiAgICB0aGlzLnN0YXRlLm9wdGlvbnMubG9nb0V4cGFuZGVkID0gcHJvamVjdEluZm8ubWF4TG9nb1VybCA/IHByb2plY3RJbmZvLm1heExvZ29VcmwgOiBgLi9hc3NldHMvbG9nby1mdWxsLnN2Z2A7XG4gICAgdGhpcy5zdGF0ZS5vcHRpb25zLmxvZ29Db2xsYXBzZWQgPSBwcm9qZWN0SW5mby5taW5pTG9nb1VybCA/IHByb2plY3RJbmZvLm1pbmlMb2dvVXJsIDogYC4vYXNzZXRzL2xvZ28uc3ZnYDtcbiAgfVxuXG4gIGluaXROYXZUeXBlKCk6IHZvaWQge1xuICAgIGNvbnN0IFssIGdldEhlYWRlclR5cGVdID0gdXNlTG9jYWxTdG9yYWdlSGVhZGVyVHlwZSgpO1xuICAgIGNvbnN0IFssIGdldFByb2plY3RJbmZvXSA9IHVzZUxvY2FsU3RvcmFnZVByb2plY3RJbmZvKCk7XG4gICAgY29uc3QgbmF2VHlwZTogTmF2VHlwZSB8IG51bGwgPSBnZXRIZWFkZXJUeXBlKCk7XG4gICAgY29uc3QgcHJvamVjdEluZm86IFl1bnphaVByb2plY3RJbmZvID0gZ2V0UHJvamVjdEluZm8oKSE7XG4gICAgaWYgKG5hdlR5cGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuc3RhdGUubmF2VHlwZSA9IG5hdlR5cGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmZXRjaGVkTmF2VHlwZTogTnpTYWZlQW55O1xuICAgIGlmIChwcm9qZWN0SW5mby5oZWFkZXJTdHlsZSAmJiBwcm9qZWN0SW5mby5oZWFkZXJTdHlsZS5sZW5ndGggPiAwKSB7XG4gICAgICBmZXRjaGVkTmF2VHlwZSA9IHByb2plY3RJbmZvLmhlYWRlclN0eWxlLnBvcCgpPy52YWx1ZTtcbiAgICB9XG4gICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgIGlmICghZmV0Y2hlZE5hdlR5cGUpIHtcbiAgICAgIGZldGNoZWROYXZUeXBlID0gTmF2VHlwZS5BUFBMSUNBVElPTjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5uYXZUeXBlID0gZmV0Y2hlZE5hdlR5cGU7XG4gIH1cblxuICB0b0luZGV4KCk6IHZvaWQge1xuICAgIGNvbnN0IFssIGdldERlZmF1bHRSb3V0ZV0gPSB1c2VMb2NhbFN0b3JhZ2VEZWZhdWx0Um91dGUoKTtcbiAgICBjb25zdCBkZWZhdWx0Um91dGUgPSBnZXREZWZhdWx0Um91dGUoKSE7XG4gICAgbG9nKCdZdW56YWlMYXlvdXRCYXNpY0NvbXBvbmVudDogJywgYHRvZG86IHRoZSBkZWZhdWx0IHJvdXRlIHdhcyAke2RlZmF1bHRSb3V0ZX0sIOS9huaYr+i/mOayoeaDs+WlveWmguS9leWunueOsC5gKTtcbiAgfVxuXG4gIG9uTmF2VHlwZUNoYW5nZSh0eXBlOiBOYXZUeXBlKTogdm9pZCB7XG4gICAgY29uc3QgW3NldEhlYWRlclR5cGVdID0gdXNlTG9jYWxTdG9yYWdlSGVhZGVyVHlwZSgpO1xuICAgIHNldEhlYWRlclR5cGUodHlwZSk7XG4gICAgdGhpcy53aW4ubG9jYXRpb24ucmVsb2FkKCk7XG4gIH1cblxuICBhZGRMYXlvdXREaXNwbGF5TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5sYXlvdXREaXNwbGF5U2VydmljZS5saXN0ZW4oJ3JldXNlVGFiJywgKGRpc3BsYXk6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMuc3RhdGUuZGlzcGxheS5yZXVzZXRhYiA9IGRpc3BsYXk7XG4gICAgfSk7XG4gICAgdGhpcy5sYXlvdXREaXNwbGF5U2VydmljZS5saXN0ZW4oJ25hdicsIChkaXNwbGF5OiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlLmRpc3BsYXkubmF2ID0gZGlzcGxheTtcbiAgICB9KTtcblxuICAgIHRoaXMubGF5b3V0RGlzcGxheVNlcnZpY2UubGlzdGVuKCdhc2lkZScsIChkaXNwbGF5OiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlLmRpc3BsYXkuYXNpZGUgPSBkaXNwbGF5O1xuICAgIH0pO1xuICB9XG59XG4iXX0=