@esfaenza/core 15.2.284 → 16.2.26

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 (171) hide show
  1. package/components/back-top/back-top.component.d.ts +1 -1
  2. package/components/error/404/pagenotfound.component.d.ts +2 -1
  3. package/components/error/500/servererror.component.d.ts +2 -1
  4. package/components/error/Angular/angularerror.component.d.ts +2 -1
  5. package/components/es-image-cropper/es-image-cropper.component.d.ts +1 -1
  6. package/components/es-modal/es-modal.component.d.ts +1 -1
  7. package/components/jace-resource/jace-resource.component.d.ts +1 -1
  8. package/components/labeled-span/labeled-span.component.d.ts +1 -1
  9. package/components/navbar/navbar.component.d.ts +2 -1
  10. package/directives/componentHost/componentHost.directive.d.ts +1 -1
  11. package/directives/draggable/draggable.directive.d.ts +1 -1
  12. package/directives/es-routerLink/es-routerLink.directive.d.ts +1 -1
  13. package/directives/slim-scroll/slim-scroll.directive.d.ts +1 -1
  14. package/domain/tokens.d.ts +2 -0
  15. package/{esm2020 → esm2022}/components/back-top/back-top.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/components/base/base.component.mjs +6 -5
  17. package/esm2022/components/base/embedding.component.mjs +64 -0
  18. package/{esm2020 → esm2022}/components/base/reactive.component.mjs +4 -4
  19. package/{esm2020 → esm2022}/components/breadcrumb/breadcrumb.component.mjs +4 -4
  20. package/esm2022/components/components.module.mjs +97 -0
  21. package/esm2022/components/error/404/pagenotfound.component.mjs +36 -0
  22. package/esm2022/components/error/500/servererror.component.mjs +47 -0
  23. package/esm2022/components/error/Angular/angularerror.component.mjs +62 -0
  24. package/esm2022/components/es-image-cropper/es-image-cropper.component.mjs +82 -0
  25. package/{esm2020 → esm2022}/components/es-modal/es-modal-head/es-modal-head.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/components/es-modal/es-modal.component.mjs +4 -4
  27. package/esm2022/components/external-page/external_pages.component.mjs +48 -0
  28. package/{esm2020 → esm2022}/components/jace-login/jace-login.component.mjs +4 -4
  29. package/{esm2020 → esm2022}/components/jace-resource/jace-resource.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/components/labeled-span/labeled-span.component.mjs +4 -4
  31. package/{esm2020 → esm2022}/components/navbar/navbar.component.loc.mjs +4 -4
  32. package/esm2022/components/navbar/navbar.component.mjs +223 -0
  33. package/{esm2020 → esm2022}/components/page/pages.component.mjs +5 -5
  34. package/{esm2020 → esm2022}/components/redirecter/redirecter.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/components/sidebar/sidebar.component.loc.mjs +4 -4
  36. package/{esm2020 → esm2022}/components/sidebar/sidebar.component.mjs +5 -5
  37. package/{esm2020 → esm2022}/components/user_infos/user_infos.component.loc.mjs +4 -4
  38. package/esm2022/components/user_infos/user_infos.component.mjs +148 -0
  39. package/{esm2020 → esm2022}/directives/componentHost/componentHost.directive.mjs +4 -4
  40. package/{esm2020 → esm2022}/directives/directives.module.mjs +5 -5
  41. package/{esm2020 → esm2022}/directives/draggable/draggable.directive.mjs +4 -4
  42. package/{esm2020 → esm2022}/directives/es-modal/es-modal.directive.mjs +4 -4
  43. package/{esm2020 → esm2022}/directives/es-routerLink/es-routerLink.directive.mjs +4 -4
  44. package/{esm2020 → esm2022}/directives/slim-scroll/slim-scroll.directive.mjs +4 -4
  45. package/{esm2020 → esm2022}/directives/widget/widget.directive.mjs +4 -4
  46. package/{esm2020 → esm2022}/domain/models/core/ApplicationMenu.mjs +2 -2
  47. package/esm2022/domain/tokens.mjs +17 -0
  48. package/esm2022/lib/app.component.mjs +34 -0
  49. package/esm2022/lib/core.module.mjs +258 -0
  50. package/{esm2020 → esm2022}/modules/classes/_embedding.module.mjs +5 -5
  51. package/{esm2020 → esm2022}/modules/classes/_shared.module.mjs +11 -11
  52. package/{esm2020 → esm2022}/modules/classes/t_c.module.mjs +44 -44
  53. package/{esm2020 → esm2022}/pipes/classes/included_in.pipe.mjs +4 -4
  54. package/{esm2020 → esm2022}/pipes/classes/safe_html.pipe.mjs +4 -4
  55. package/{esm2020 → esm2022}/pipes/classes/safe_script.pipe.mjs +4 -4
  56. package/{esm2020 → esm2022}/pipes/classes/safe_style.pipe.mjs +4 -4
  57. package/{esm2020 → esm2022}/pipes/classes/safe_url.pipe.mjs +4 -4
  58. package/{esm2020 → esm2022}/pipes/pipes.module.mjs +5 -5
  59. package/esm2022/services/classes/app.accesstoken.mjs +1042 -0
  60. package/{esm2020 → esm2022}/services/classes/app.completedjobredirection.mjs +4 -4
  61. package/{esm2020 → esm2022}/services/classes/app.errorhandler.mjs +4 -4
  62. package/{esm2020 → esm2022}/services/classes/app.event.mjs +4 -4
  63. package/{esm2020 → esm2022}/services/classes/app.globalsearch.mjs +4 -4
  64. package/{esm2020 → esm2022}/services/classes/app.httpextensions.loc.mjs +4 -4
  65. package/{esm2020 → esm2022}/services/classes/app.httpextensions.mjs +6 -12
  66. package/{esm2020 → esm2022}/services/classes/app.menufilter.mjs +4 -4
  67. package/esm2022/services/classes/app.routeguard.mjs +23 -0
  68. package/esm2022/services/classes/app.session.mjs +40 -0
  69. package/esm2022/services/classes/app.state.mjs +229 -0
  70. package/{esm2020 → esm2022}/services/classes/preferences/app.cache.persistor.mjs +4 -4
  71. package/{esm2020 → esm2022}/services/classes/preferences/app.preference.persistor.mjs +4 -4
  72. package/esm2022/services/classes/preferences/user/app.userpreferences.base.mjs +101 -0
  73. package/{fesm2020 → fesm2022}/esfaenza-core-components.mjs +169 -149
  74. package/fesm2022/esfaenza-core-components.mjs.map +1 -0
  75. package/{fesm2020 → fesm2022}/esfaenza-core-directives.mjs +22 -22
  76. package/{fesm2015 → fesm2022}/esfaenza-core-directives.mjs.map +1 -1
  77. package/{fesm2020 → fesm2022}/esfaenza-core-domain.mjs +5 -3
  78. package/{fesm2020 → fesm2022}/esfaenza-core-domain.mjs.map +1 -1
  79. package/{fesm2020 → fesm2022}/esfaenza-core-modules.mjs +57 -57
  80. package/{fesm2020 → fesm2022}/esfaenza-core-modules.mjs.map +1 -1
  81. package/{fesm2015 → fesm2022}/esfaenza-core-pipes.mjs +19 -19
  82. package/{fesm2020 → fesm2022}/esfaenza-core-pipes.mjs.map +1 -1
  83. package/{fesm2020 → fesm2022}/esfaenza-core-services.mjs +83 -61
  84. package/fesm2022/esfaenza-core-services.mjs.map +1 -0
  85. package/fesm2022/esfaenza-core.mjs +287 -0
  86. package/fesm2022/esfaenza-core.mjs.map +1 -0
  87. package/lib/app.component.d.ts +1 -1
  88. package/lib/core.module.d.ts +1 -0
  89. package/package.json +117 -112
  90. package/services/classes/app.accesstoken.d.ts +3 -2
  91. package/services/classes/app.session.d.ts +2 -1
  92. package/services/classes/app.state.d.ts +2 -1
  93. package/theme/styles/_mat_datepicker_bugfix.scss +933 -0
  94. package/theme/styles/_material-override.scss +17 -7
  95. package/esm2020/components/base/embedding.component.mjs +0 -68
  96. package/esm2020/components/components.module.mjs +0 -94
  97. package/esm2020/components/error/404/pagenotfound.component.mjs +0 -30
  98. package/esm2020/components/error/500/servererror.component.mjs +0 -41
  99. package/esm2020/components/error/Angular/angularerror.component.mjs +0 -56
  100. package/esm2020/components/es-image-cropper/es-image-cropper.component.mjs +0 -83
  101. package/esm2020/components/external-page/external_pages.component.mjs +0 -48
  102. package/esm2020/components/navbar/navbar.component.mjs +0 -219
  103. package/esm2020/components/user_infos/user_infos.component.mjs +0 -146
  104. package/esm2020/domain/tokens.mjs +0 -15
  105. package/esm2020/lib/app.component.mjs +0 -30
  106. package/esm2020/lib/core.module.mjs +0 -241
  107. package/esm2020/services/classes/app.accesstoken.mjs +0 -1032
  108. package/esm2020/services/classes/app.routeguard.mjs +0 -22
  109. package/esm2020/services/classes/app.session.mjs +0 -32
  110. package/esm2020/services/classes/app.state.mjs +0 -219
  111. package/esm2020/services/classes/preferences/user/app.userpreferences.base.mjs +0 -98
  112. package/fesm2015/esfaenza-core-components.mjs +0 -1549
  113. package/fesm2015/esfaenza-core-components.mjs.map +0 -1
  114. package/fesm2015/esfaenza-core-directives.mjs +0 -300
  115. package/fesm2015/esfaenza-core-domain.mjs +0 -200
  116. package/fesm2015/esfaenza-core-domain.mjs.map +0 -1
  117. package/fesm2015/esfaenza-core-helpers.mjs.map +0 -1
  118. package/fesm2015/esfaenza-core-modules.mjs +0 -183
  119. package/fesm2015/esfaenza-core-modules.mjs.map +0 -1
  120. package/fesm2015/esfaenza-core-pipes.mjs.map +0 -1
  121. package/fesm2015/esfaenza-core-services.mjs +0 -1800
  122. package/fesm2015/esfaenza-core-services.mjs.map +0 -1
  123. package/fesm2015/esfaenza-core.mjs +0 -267
  124. package/fesm2015/esfaenza-core.mjs.map +0 -1
  125. package/fesm2020/esfaenza-core-components.mjs.map +0 -1
  126. package/fesm2020/esfaenza-core-directives.mjs.map +0 -1
  127. package/fesm2020/esfaenza-core-helpers.mjs +0 -44
  128. package/fesm2020/esfaenza-core-pipes.mjs +0 -112
  129. package/fesm2020/esfaenza-core-services.mjs.map +0 -1
  130. package/fesm2020/esfaenza-core.mjs +0 -267
  131. package/fesm2020/esfaenza-core.mjs.map +0 -1
  132. /package/{esm2020 → esm2022}/components/esfaenza-core-components.mjs +0 -0
  133. /package/{esm2020 → esm2022}/components/public-api.mjs +0 -0
  134. /package/{esm2020 → esm2022}/directives/esfaenza-core-directives.mjs +0 -0
  135. /package/{esm2020 → esm2022}/directives/public-api.mjs +0 -0
  136. /package/{esm2020 → esm2022}/domain/esfaenza-core-domain.mjs +0 -0
  137. /package/{esm2020 → esm2022}/domain/models/core/ApplicationJob.mjs +0 -0
  138. /package/{esm2020 → esm2022}/domain/models/core/ApplicationRoutes.mjs +0 -0
  139. /package/{esm2020 → esm2022}/domain/models/core/EnvOptions.mjs +0 -0
  140. /package/{esm2020 → esm2022}/domain/models/core/GenericItem.mjs +0 -0
  141. /package/{esm2020 → esm2022}/domain/models/core/KeyValue.mjs +0 -0
  142. /package/{esm2020 → esm2022}/domain/models/global_search/SaerchResultContainer.mjs +0 -0
  143. /package/{esm2020 → esm2022}/domain/models/global_search/SearchResult.mjs +0 -0
  144. /package/{esm2020 → esm2022}/domain/models/jace/AccountScope.mjs +0 -0
  145. /package/{esm2020 → esm2022}/domain/models/jace/ActiveModuleView.mjs +0 -0
  146. /package/{esm2020 → esm2022}/domain/models/jace/CategoriesWithModules.mjs +0 -0
  147. /package/{esm2020 → esm2022}/domain/models/jace/JaceAccount.mjs +0 -0
  148. /package/{esm2020 → esm2022}/domain/models/jace/JaceIdentity.mjs +0 -0
  149. /package/{esm2020 → esm2022}/domain/models/jace/JaceModule.mjs +0 -0
  150. /package/{esm2020 → esm2022}/domain/models/jace/JacePermission.mjs +0 -0
  151. /package/{esm2020 → esm2022}/domain/models/jace/JaceRole.mjs +0 -0
  152. /package/{esm2020 → esm2022}/domain/models/jace/JaceUser.mjs +0 -0
  153. /package/{esm2020 → esm2022}/domain/models/user/UpdateAccountRecoverySettingsDto.mjs +0 -0
  154. /package/{esm2020 → esm2022}/domain/models/user/UpdatePasswordDto.mjs +0 -0
  155. /package/{esm2020 → esm2022}/domain/models/user/UpdateProfilePictureDto.mjs +0 -0
  156. /package/{esm2020 → esm2022}/domain/models/user/UserAccount.mjs +0 -0
  157. /package/{esm2020 → esm2022}/domain/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/esfaenza-core.mjs +0 -0
  159. /package/{esm2020 → esm2022}/helpers/classes/ResizeListener.mjs +0 -0
  160. /package/{esm2020 → esm2022}/helpers/esfaenza-core-helpers.mjs +0 -0
  161. /package/{esm2020 → esm2022}/helpers/public-api.mjs +0 -0
  162. /package/{esm2020 → esm2022}/modules/classes/_base.module.mjs +0 -0
  163. /package/{esm2020 → esm2022}/modules/esfaenza-core-modules.mjs +0 -0
  164. /package/{esm2020 → esm2022}/modules/public-api.mjs +0 -0
  165. /package/{esm2020 → esm2022}/pipes/esfaenza-core-pipes.mjs +0 -0
  166. /package/{esm2020 → esm2022}/pipes/public-api.mjs +0 -0
  167. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  168. /package/{esm2020 → esm2022}/services/esfaenza-core-services.mjs +0 -0
  169. /package/{esm2020 → esm2022}/services/public-api.mjs +0 -0
  170. /package/{fesm2015 → fesm2022}/esfaenza-core-helpers.mjs +0 -0
  171. /package/{fesm2020 → fesm2022}/esfaenza-core-helpers.mjs.map +0 -0
@@ -1,241 +0,0 @@
1
- // Angular
2
- import { NgModule, ErrorHandler, LOCALE_ID, APP_INITIALIZER, isDevMode } from "@angular/core";
3
- import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
4
- import { RouterModule, NoPreloading, ROUTES } from "@angular/router";
5
- import { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core";
6
- import { EVENT_MANAGER_PLUGINS } from "@angular/platform-browser";
7
- import { ServiceWorkerModule } from "@angular/service-worker";
8
- import { HttpClientModule } from "@angular/common/http";
9
- import "@angular/common/locales/global/it";
10
- // Plugins
11
- import { NgxMatDateAdapter, NGX_MAT_DATE_FORMATS } from "@angular-material-components/datetime-picker";
12
- import { CookieService } from "ngx-cookie-service";
13
- import { ToastrModule } from "ngx-toastr";
14
- import "widgster/widgster.js";
15
- // ES
16
- import { PreferencesModule, PREF_DEBUG_MODE, PreferencesPersistor, LocalStoragePreferencesPersistor, CachePersistor, LocalStorageCachePersistor } from "@esfaenza/preferences";
17
- import { LocalizationModule, LocalizationService, LocalizationMissingPolicy, LOC_DEBUG_MODE, BaseLocalization } from "@esfaenza/localizations";
18
- import { HttpserviceModule, HttpServiceExtensions, HTTPService, HTTP_DEBUG_MODE, HTTP_INVALIDATION } from "@esfaenza/httpservice";
19
- import { SignalrNotificationsModule, SGR_DEBUG_MODE, BaseMessageService } from "@esfaenza/signalr-notifications";
20
- import { FormsAndValidationsModule, NgxExpandedDayJsDateAdapter } from "@esfaenza/forms-and-validations";
21
- import { AccessControlModule, AccessControlService, ACC_DEBUG_MODE } from "@esfaenza/access-control";
22
- import { BaseAdapter, EsChartsModule, ESC_DEBUG_MODE } from "@esfaenza/es-charts";
23
- import { ExtensionsModule, EXT_DEBUG_MODE } from "@esfaenza/extensions";
24
- import { ContextMenuModule } from "@esfaenza/ngx-contextmenu";
25
- import { DragulaModule } from '@esfaenza/ngx-dragula';
26
- import { EsTableModule } from "@esfaenza/es-table";
27
- import { TAB_DEBUG_MODE } from "@esfaenza/tabber";
28
- // Core
29
- import { APPErrorHandler, HTTPServiceExtensions, ApplicationPreferencesPersistor, ApplicationCachePersistor, SessionRetriever, OutZoneEventPlugin, TokenService, GlobalSearchService, CompletedJobRedirectionService, MenuFilteringService, UserPreferencesService } from "@esfaenza/core/services";
30
- import { PageNotFoundComponent, ServerErrorComponent, AngularErrorComponent, ExternalPagesComponent, JaceLoginComponent, PagesComponent, RedirecterComponent, ComponentsModule, UserInfosComponent } from "@esfaenza/core/components";
31
- import { MENU, MENU_LOCALIZATION, REDIRECT_MAP, USE_FAKE_ACCESS_TOKEN, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY } from "@esfaenza/core/domain";
32
- import { ROUTE, EMBEDDED_ROUTE } from "@esfaenza/core/domain";
33
- import { TemplateCommon } from "@esfaenza/core/modules";
34
- // RxJs
35
- import { catchError, switchMap, take, tap } from "rxjs/operators";
36
- import { forkJoin, of } from "rxjs";
37
- // Bootstrap
38
- import { ProgressbarModule } from "ngx-bootstrap/progressbar";
39
- import { TimepickerModule } from "ngx-bootstrap/timepicker";
40
- import { BsDropdownModule } from "ngx-bootstrap/dropdown";
41
- import { TooltipModule } from "ngx-bootstrap/tooltip";
42
- import { ModalModule } from "ngx-bootstrap/modal";
43
- // Applicazione
44
- import { AppComponent } from "./app.component";
45
- import * as i0 from "@angular/core";
46
- import * as i1 from "@angular/service-worker";
47
- import * as i2 from "@angular/router";
48
- import * as i3 from "@esfaenza/es-table";
49
- import * as i4 from "@esfaenza/forms-and-validations";
50
- import * as i5 from "@esfaenza/extensions";
51
- import * as i6 from "@esfaenza/localizations";
52
- import * as i7 from "@esfaenza/access-control";
53
- import * as i8 from "@esfaenza/httpservice";
54
- import * as i9 from "@esfaenza/signalr-notifications";
55
- import * as i10 from "@esfaenza/preferences";
56
- import * as i11 from "@esfaenza/es-charts";
57
- import * as i12 from "ngx-bootstrap/tooltip";
58
- import * as i13 from "ngx-bootstrap/modal";
59
- import * as i14 from "ngx-bootstrap/progressbar";
60
- import * as i15 from "ngx-bootstrap/dropdown";
61
- import * as i16 from "ngx-toastr";
62
- import * as i17 from "ngx-bootstrap/timepicker";
63
- import * as i18 from "@esfaenza/ngx-contextmenu";
64
- import * as i19 from "@esfaenza/ngx-dragula";
65
- // Repositories
66
- const GET_Jace_GetAccountScope = "/api/Jace/GetAccountScope";
67
- const GET_AppConfig_GetAppConfig = "/api/AppConfig/GetAppConfig";
68
- const baseAppRoutes = [
69
- { path: "", redirectTo: "pages/{emptyRouteRedirect}", pathMatch: "full" },
70
- { path: EMBEDDED_ROUTE, component: ExternalPagesComponent },
71
- { path: ROUTE, component: PagesComponent },
72
- { path: "rd", component: RedirecterComponent },
73
- { path: "rd/:tenant", component: RedirecterComponent },
74
- { path: "login", component: JaceLoginComponent },
75
- { path: "iserr", component: ServerErrorComponent },
76
- { path: "anerr", component: AngularErrorComponent },
77
- { path: "**", component: PageNotFoundComponent },
78
- ];
79
- const MODULES = [
80
- BrowserAnimationsModule,
81
- HttpClientModule,
82
- TemplateCommon,
83
- ComponentsModule,
84
- // Attenzione a lasciarlo attivo in ng serve: https://github.com/angular/angular/issues/47455
85
- ServiceWorkerModule.register('ngsw-worker.js', { enabled: !isDevMode() }),
86
- RouterModule.forRoot([], { useHash: true, preloadingStrategy: NoPreloading, onSameUrlNavigation: "reload" }),
87
- // ES
88
- EsTableModule.forRoot(),
89
- FormsAndValidationsModule.forRoot({ acocustom: "O", sliderMode: true }),
90
- ExtensionsModule.forRoot(),
91
- LocalizationModule.forRoot({ localizationMissingPolicy: LocalizationMissingPolicy.PrintSource, defaultLocale: 'it-IT' }),
92
- AccessControlModule.forRoot({ contextAwareKey: "O", defaultCondition: '(R:Jace Admin || R:Jace Support)' }),
93
- HttpserviceModule.forRoot(),
94
- SignalrNotificationsModule.forRoot({ endpointUrl: 'notify', useMessagePack: true }),
95
- PreferencesModule.forRoot({ retrieveAllAtStart: true, sessionRetriever: SessionRetriever, preferencePersistor: ApplicationPreferencesPersistor, cachePersistor: ApplicationCachePersistor }),
96
- EsChartsModule.forRoot(),
97
- // Bootstrap
98
- TooltipModule.forRoot(),
99
- ModalModule.forRoot(),
100
- ProgressbarModule.forRoot(),
101
- BsDropdownModule.forRoot(),
102
- ToastrModule.forRoot(),
103
- TimepickerModule.forRoot(),
104
- ContextMenuModule.forRoot(),
105
- DragulaModule.forRoot()
106
- ];
107
- // Generatore dei formati data
108
- var formats = (style) => {
109
- return {
110
- parse: { dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : '') },
111
- display: {
112
- dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),
113
- monthYearLabel: 'MM YYYY',
114
- dateA11yLabel: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),
115
- monthYearA11yLabel: 'MM YYYY',
116
- }
117
- };
118
- };
119
- const localeFactory = (loc) => loc.SmallLocale;
120
- const PROVIDERS = [
121
- CookieService,
122
- // Providers applicativi
123
- { provide: ErrorHandler, useClass: APPErrorHandler },
124
- { provide: EVENT_MANAGER_PLUGINS, useExisting: OutZoneEventPlugin, multi: true },
125
- { provide: HttpServiceExtensions, useClass: HTTPServiceExtensions },
126
- // Locale e gestioni delle date
127
- { provide: LOCALE_ID, useFactory: localeFactory, deps: [LocalizationService] },
128
- { provide: MAT_DATE_LOCALE, useFactory: localeFactory, deps: [LocalizationService] },
129
- { provide: MAT_DATE_FORMATS, useValue: formats('short') },
130
- // Questi due sono providati dal FormsAndValidationModule stesso, però quest'ultimo è definito in forRoot solo lato componenti shared,
131
- // quindi per rendere questi provider disponibili anche a moduli esterni devo riprovidarli anche qui
132
- { provide: NGX_MAT_DATE_FORMATS, useValue: formats('long') },
133
- { provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter }
134
- ];
135
- export class EsFaenzaCoreModule {
136
- static forRoot(config) {
137
- if (config.routes) {
138
- // Aggiunta della route di embedding se non dichiarata, lato aggiunta faccio in modo che l'embedding sia disponibile solo da route interne (pages OK, pages_ext NON OK)
139
- if (!config.routes.find(t => t.path.startsWith("embed")))
140
- config.routes = [...config.routes, { path: "embed/:module", loadChildren: () => import('@esfaenza/core/modules').then(m => m.EmbeddingModule) }];
141
- baseAppRoutes[0].redirectTo = `pages/${config.emptyRouteRedirect || 'dashboard'}`;
142
- baseAppRoutes.filter(t => ["pages", "pages_ext"].includes(t.path)).forEach(path => {
143
- path.children = [
144
- { path: "profile", component: UserInfosComponent, data: { InternalNavigation: true, title: "profilo" } },
145
- ...config.routes.filter(r => !path.path.includes("pages_ext") || !r.path.startsWith("embed"))
146
- ];
147
- });
148
- }
149
- config.debugMode = (!isDevMode() && !config.forceDebugModeForProdBuilds) ? DebugFlags.None : (config.debugMode || DebugFlags.All);
150
- let mergedAppInitializer = (http, bts, aac, loc) => {
151
- return () => {
152
- console.log("%c[APP_INITIALIZER] Loading AppConfig and Account Scope...", "background-color: yellow");
153
- let realObservable = forkJoin({
154
- appConfig: http.get(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))),
155
- scope: http.get(GET_Jace_GetAccountScope, null, null, false).pipe(catchError(_ => of(null))),
156
- locale: loc.Locale.pipe(take(1), catchError(_ => of('it-IT'))),
157
- });
158
- let usedObservable = config.optionsAndScopeProvider || realObservable;
159
- return usedObservable.pipe(tap((res) => {
160
- myconfig = res.appConfig;
161
- http.setAppConfig(myconfig);
162
- // L'account scope lo prendo dalla Query a backend solo se non uso il Fake token
163
- if (!bts.USE_FAKE_ACCESS_TOKEN)
164
- bts.accountScope = res.scope;
165
- console.log("%c[APP_INITIALIZER] appConfig and scope registered", "background-color: yellow");
166
- if (bts.accountScope)
167
- aac.initializeIdentity(bts.getJaceIdentity());
168
- }), switchMap(_ => {
169
- if (!config.initializerFunction)
170
- return of();
171
- console.log("%c[APP_INITIALIZER] Loading custom application initialization", "background-color: yellow");
172
- return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {
173
- console.log("%c[APP_INITIALIZER] Initialization is over", "background-color: yellow");
174
- }));
175
- }));
176
- };
177
- };
178
- return {
179
- ngModule: EsFaenzaCoreModule,
180
- providers: [
181
- // *************************** Provider statici ***************************
182
- ...PROVIDERS,
183
- // ************************ Provider customizzabili ************************
184
- ...(!config.redirectionMap ? [] : [{ provide: REDIRECT_MAP, useValue: config.redirectionMap }]),
185
- { provide: APP_INITIALIZER, useFactory: mergedAppInitializer, deps: [HTTPService, TokenService, AccessControlService, BaseLocalization], multi: true },
186
- { provide: ROUTES, useValue: baseAppRoutes, multi: true },
187
- { provide: LOC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Localizations) == DebugFlags.Localizations : false },
188
- { provide: EXT_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Extensions) == DebugFlags.Extensions : false },
189
- { provide: ACC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.AccessControl) == DebugFlags.AccessControl : false },
190
- { provide: HTTP_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Http) == DebugFlags.Http : false },
191
- { provide: HTTP_INVALIDATION, useValue: config?.httpInvalidationCache },
192
- { provide: TAB_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Tabber) == DebugFlags.Tabber : false },
193
- { provide: SGR_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.SignalR) == DebugFlags.SignalR : false },
194
- { provide: PREF_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Preferences) == DebugFlags.Preferences : false },
195
- { provide: ESC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Charts) == DebugFlags.Charts : false },
196
- { provide: LOGIN_URL_LEGACY, useValue: config.legacyLogin !== null && config.legacyLogin !== undefined ? config.legacyLogin : false },
197
- { provide: NAVBAR_EXTENSIONS, useValue: config.navbarExtensions ? config.navbarExtensions : [] },
198
- { provide: BaseAdapter, useClass: config?.chartsAdapter || BaseAdapter },
199
- { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },
200
- { provide: GlobalSearchService, useClass: config?.globalSearchService || GlobalSearchService },
201
- { provide: CompletedJobRedirectionService, useClass: config?.completedJobRedirectionService || CompletedJobRedirectionService },
202
- { provide: MenuFilteringService, useClass: config?.menuFilteringService || MenuFilteringService },
203
- { provide: UserPreferencesService, useClass: config?.userPreferencesProvider || UserPreferencesService },
204
- { provide: MENU_LOCALIZATION, useValue: config.menuLoc || null },
205
- { provide: MENU, useValue: config.menu },
206
- { provide: USE_FAKE_ACCESS_TOKEN, useValue: !!config.fakeAccessToken },
207
- { provide: PreferencesPersistor, useClass: config.fakeAccessToken ? LocalStoragePreferencesPersistor : ApplicationPreferencesPersistor },
208
- { provide: CachePersistor, useClass: config.fakeAccessToken ? LocalStorageCachePersistor : ApplicationCachePersistor }
209
- ]
210
- };
211
- }
212
- }
213
- EsFaenzaCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsFaenzaCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
214
- EsFaenzaCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: EsFaenzaCoreModule, declarations: [AppComponent], imports: [BrowserAnimationsModule,
215
- HttpClientModule,
216
- TemplateCommon,
217
- ComponentsModule, i1.ServiceWorkerModule, i2.RouterModule, i3.EsTableModule, i4.FormsAndValidationsModule, i5.ExtensionsModule, i6.LocalizationModule, i7.AccessControlModule, i8.HttpserviceModule, i9.SignalrNotificationsModule, i10.PreferencesModule, i11.EsChartsModule, i12.TooltipModule, i13.ModalModule, i14.ProgressbarModule, i15.BsDropdownModule, i16.ToastrModule, i17.TimepickerModule, i18.ContextMenuModule, i19.DragulaModule] });
218
- EsFaenzaCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsFaenzaCoreModule, imports: [MODULES] });
219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsFaenzaCoreModule, decorators: [{
220
- type: NgModule,
221
- args: [{
222
- declarations: [AppComponent],
223
- imports: [...MODULES]
224
- }]
225
- }] });
226
- export class EsFaenzaCoreModuleConfig {
227
- }
228
- export var DebugFlags;
229
- (function (DebugFlags) {
230
- DebugFlags[DebugFlags["None"] = 0] = "None";
231
- DebugFlags[DebugFlags["Localizations"] = 1] = "Localizations";
232
- DebugFlags[DebugFlags["Extensions"] = 2] = "Extensions";
233
- DebugFlags[DebugFlags["AccessControl"] = 4] = "AccessControl";
234
- DebugFlags[DebugFlags["Http"] = 8] = "Http";
235
- DebugFlags[DebugFlags["SignalR"] = 16] = "SignalR";
236
- DebugFlags[DebugFlags["Preferences"] = 32] = "Preferences";
237
- DebugFlags[DebugFlags["Charts"] = 64] = "Charts";
238
- DebugFlags[DebugFlags["Tabber"] = 128] = "Tabber";
239
- DebugFlags[DebugFlags["All"] = 255] = "All";
240
- })(DebugFlags || (DebugFlags = {}));
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQTZCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQVUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxzQkFBc0IsQ0FBQztBQUU5QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGdC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RUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQy9GLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQ3RKLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQ3pELEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNJLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JJLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNJLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVB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QUFRLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUFFO2FBQ3pIO1NBQ0osQ0FBQztJQUNOLENBQUM7O2dIQTFGUSxrQkFBa0I7aUhBQWxCLGtCQUFrQixpQkFIWixZQUFZLGFBbEUzQix1QkFBdUI7UUFDdkIsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxnQkFBZ0I7aUhBa0VQLGtCQUFrQixZQUZkLE9BQU87NEZBRVgsa0JBQWtCO2tCQUo5QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDNUIsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7aUJBQ3hCOztBQThGRCxNQUFNLE9BQU8sd0JBQXdCO0NBdUNwQztBQUVELE1BQU0sQ0FBTixJQUFZLFVBV1g7QUFYRCxXQUFZLFVBQVU7SUFDbEIsMkNBQVEsQ0FBQTtJQUNSLDZEQUFzQixDQUFBO0lBQ3RCLHVEQUFtQixDQUFBO0lBQ25CLDZEQUFzQixDQUFBO0lBQ3RCLDJDQUFhLENBQUE7SUFDYixrREFBZ0IsQ0FBQTtJQUNoQiwwREFBb0IsQ0FBQTtJQUNwQixnREFBZSxDQUFBO0lBQ2YsaURBQWUsQ0FBQTtJQUNmLDJDQUFnQixDQUFBO0FBQ3BCLENBQUMsRUFYVyxVQUFVLEtBQVYsVUFBVSxRQVdyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgTmdNb2R1bGUsIEVycm9ySGFuZGxlciwgTE9DQUxFX0lELCBBUFBfSU5JVElBTElaRVIsIE1vZHVsZVdpdGhQcm92aWRlcnMsIFR5cGUsIGlzRGV2TW9kZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUm91dGVzLCBSb3V0ZXJNb2R1bGUsIE5vUHJlbG9hZGluZywgUk9VVEVTIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBNQVRfREFURV9GT1JNQVRTLCBNQVRfREFURV9MT0NBTEUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5pbXBvcnQgeyBFVkVOVF9NQU5BR0VSX1BMVUdJTlMgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlV29ya2VyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL3NlcnZpY2Utd29ya2VyXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IFwiQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZ2xvYmFsL2l0XCI7XHJcblxyXG4vLyBQbHVnaW5zXHJcbmltcG9ydCB7IE5neE1hdERhdGVBZGFwdGVyLCBOR1hfTUFUX0RBVEVfRk9STUFUUyB9IGZyb20gXCJAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlclwiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUb2FzdHJNb2R1bGUgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgXCJ3aWRnc3Rlci93aWRnc3Rlci5qc1wiO1xyXG5cclxuLy8gRVNcclxuaW1wb3J0IHsgUHJlZmVyZW5jZXNNb2R1bGUsIFBSRUZfREVCVUdfTU9ERSwgUHJlZmVyZW5jZXNQZXJzaXN0b3IsIExvY2FsU3RvcmFnZVByZWZlcmVuY2VzUGVyc2lzdG9yLCBDYWNoZVBlcnNpc3RvciwgTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZSwgTG9jYWxpemF0aW9uU2VydmljZSwgTG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeSwgTE9DX0RFQlVHX01PREUsIEJhc2VMb2NhbGl6YXRpb24gfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgSHR0cHNlcnZpY2VNb2R1bGUsIEh0dHBTZXJ2aWNlRXh0ZW5zaW9ucywgSFRUUFNlcnZpY2UsIEhUVFBfREVCVUdfTU9ERSwgSFRUUF9JTlZBTElEQVRJT04gfSBmcm9tIFwiQGVzZmFlbnphL2h0dHBzZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlLCBTR1JfREVCVUdfTU9ERSwgQmFzZU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9zaWduYWxyLW5vdGlmaWNhdGlvbnNcIjtcclxuaW1wb3J0IHsgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSwgTmd4RXhwYW5kZWREYXlKc0RhdGVBZGFwdGVyIH0gZnJvbSBcIkBlc2ZhZW56YS9mb3Jtcy1hbmQtdmFsaWRhdGlvbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbE1vZHVsZSwgQWNjZXNzQ29udHJvbFNlcnZpY2UsIEFDQ19ERUJVR19NT0RFIH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBCYXNlQWRhcHRlciwgRXNDaGFydHNNb2R1bGUsIEVTQ19ERUJVR19NT0RFIH0gZnJvbSBcIkBlc2ZhZW56YS9lcy1jaGFydHNcIjtcclxuaW1wb3J0IHsgRXh0ZW5zaW9uc01vZHVsZSwgRVhUX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVNb2R1bGUgfSBmcm9tIFwiQGVzZmFlbnphL25neC1jb250ZXh0bWVudVwiO1xyXG5pbXBvcnQgeyBEcmFndWxhTW9kdWxlIH0gZnJvbSAnQGVzZmFlbnphL25neC1kcmFndWxhJztcclxuaW1wb3J0IHsgRXNUYWJsZU1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvZXMtdGFibGVcIjtcclxuaW1wb3J0IHsgVEFCX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL3RhYmJlclwiO1xyXG5cclxuLy8gQ29yZVxyXG5pbXBvcnQgeyBBUFBFcnJvckhhbmRsZXIsIEhUVFBTZXJ2aWNlRXh0ZW5zaW9ucywgQXBwbGljYXRpb25QcmVmZXJlbmNlc1BlcnNpc3RvciwgQXBwbGljYXRpb25DYWNoZVBlcnNpc3RvciwgU2Vzc2lvblJldHJpZXZlciwgT3V0Wm9uZUV2ZW50UGx1Z2luLCBUb2tlblNlcnZpY2UsIEdsb2JhbFNlYXJjaFNlcnZpY2UsIENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSwgTWVudUZpbHRlcmluZ1NlcnZpY2UsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvc2VydmljZXNcIjtcclxuaW1wb3J0IHsgUGFnZU5vdEZvdW5kQ29tcG9uZW50LCBTZXJ2ZXJFcnJvckNvbXBvbmVudCwgQW5ndWxhckVycm9yQ29tcG9uZW50LCBFeHRlcm5hbFBhZ2VzQ29tcG9uZW50LCBKYWNlTG9naW5Db21wb25lbnQsIFBhZ2VzQ29tcG9uZW50LCBSZWRpcmVjdGVyQ29tcG9uZW50LCBDb21wb25lbnRzTW9kdWxlLCBVc2VySW5mb3NDb21wb25lbnQgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvY29tcG9uZW50c1wiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbk1lbnUsIEVudk9wdGlvbnMsIEFjY291bnRTY29wZSwgTUVOVSwgTUVOVV9MT0NBTElaQVRJT04sIFJFRElSRUNUX01BUCwgVVNFX0ZBS0VfQUNDRVNTX1RPS0VOLCBOQVZCQVJfRVhURU5TSU9OUywgTE9HSU5fVVJMX0xFR0FDWSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIlxyXG5pbXBvcnQgeyBST1VURSwgRU1CRURERURfUk9VVEUgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCJcclxuaW1wb3J0IHsgVGVtcGxhdGVDb21tb24gfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvbW9kdWxlc1wiO1xyXG5cclxuLy8gUnhKc1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLy8gQm9vdHN0cmFwXHJcbmltcG9ydCB7IFByb2dyZXNzYmFyTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXJcIjtcclxuaW1wb3J0IHsgVGltZXBpY2tlck1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL3RpbWVwaWNrZXJcIjtcclxuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC90b29sdGlwXCI7XHJcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tIFwiLi9hcHAuY29tcG9uZW50XCI7XHJcblxyXG4vLyBSZXBvc2l0b3JpZXNcclxuY29uc3QgR0VUX0phY2VfR2V0QWNjb3VudFNjb3BlOiBzdHJpbmcgPSBcIi9hcGkvSmFjZS9HZXRBY2NvdW50U2NvcGVcIjtcclxuY29uc3QgR0VUX0FwcENvbmZpZ19HZXRBcHBDb25maWc6IHN0cmluZyA9IFwiL2FwaS9BcHBDb25maWcvR2V0QXBwQ29uZmlnXCI7XHJcblxyXG5kZWNsYXJlIHZhciBteWNvbmZpZzogRW52T3B0aW9ucztcclxuXHJcbmNvbnN0IGJhc2VBcHBSb3V0ZXM6IFJvdXRlcyA9IFtcclxuICAgIHsgcGF0aDogXCJcIiwgcmVkaXJlY3RUbzogXCJwYWdlcy97ZW1wdHlSb3V0ZVJlZGlyZWN0fVwiLCBwYXRoTWF0Y2g6IFwiZnVsbFwiIH0sXHJcbiAgICB7IHBhdGg6IEVNQkVEREVEX1JPVVRFLCBjb21wb25lbnQ6IEV4dGVybmFsUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogUk9VVEUsIGNvbXBvbmVudDogUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZFwiLCBjb21wb25lbnQ6IFJlZGlyZWN0ZXJDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZC86dGVuYW50XCIsIGNvbXBvbmVudDogUmVkaXJlY3RlckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImxvZ2luXCIsIGNvbXBvbmVudDogSmFjZUxvZ2luQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiaXNlcnJcIiwgY29tcG9uZW50OiBTZXJ2ZXJFcnJvckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImFuZXJyXCIsIGNvbXBvbmVudDogQW5ndWxhckVycm9yQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiKipcIiwgY29tcG9uZW50OiBQYWdlTm90Rm91bmRDb21wb25lbnQgfSxcclxuICAgIFxyXG5dO1xyXG5cclxuY29uc3QgTU9EVUxFUyA9IFtcclxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxyXG4gICAgSHR0cENsaWVudE1vZHVsZSxcclxuICAgIFRlbXBsYXRlQ29tbW9uLFxyXG4gICAgQ29tcG9uZW50c01vZHVsZSxcclxuXHJcbiAgICAvLyBBdHRlbnppb25lIGEgbGFzY2lhcmxvIGF0dGl2byBpbiBuZyBzZXJ2ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNDc0NTVcclxuICAgIFNlcnZpY2VXb3JrZXJNb2R1bGUucmVnaXN0ZXIoJ25nc3ctd29ya2VyLmpzJywgeyBlbmFibGVkOiAhaXNEZXZNb2RlKCkgfSksXHJcbiAgICBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbXSwgeyB1c2VIYXNoOiB0cnVlLCBwcmVsb2FkaW5nU3RyYXRlZ3k6IE5vUHJlbG9hZGluZywgb25TYW1lVXJsTmF2aWdhdGlvbjogXCJyZWxvYWRcIiB9KSxcclxuXHJcbiAgICAvLyBFU1xyXG4gICAgRXNUYWJsZU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBGb3Jtc0FuZFZhbGlkYXRpb25zTW9kdWxlLmZvclJvb3QoeyBhY29jdXN0b206IFwiT1wiLCBzbGlkZXJNb2RlOiB0cnVlIH0pLFxyXG4gICAgRXh0ZW5zaW9uc01vZHVsZS5mb3JSb290KCksXHJcbiAgICBMb2NhbGl6YXRpb25Nb2R1bGUuZm9yUm9vdCh7IGxvY2FsaXphdGlvbk1pc3NpbmdQb2xpY3k6IExvY2FsaXphdGlvbk1pc3NpbmdQb2xpY3kuUHJpbnRTb3VyY2UsIGRlZmF1bHRMb2NhbGU6ICdpdC1JVCcgfSksXHJcbiAgICBBY2Nlc3NDb250cm9sTW9kdWxlLmZvclJvb3QoeyBjb250ZXh0QXdhcmVLZXk6IFwiT1wiLCBkZWZhdWx0Q29uZGl0aW9uOiAnKFI6SmFjZSBBZG1pbiB8fCBSOkphY2UgU3VwcG9ydCknIH0pLFxyXG4gICAgSHR0cHNlcnZpY2VNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUuZm9yUm9vdCh7IGVuZHBvaW50VXJsOiAnbm90aWZ5JywgdXNlTWVzc2FnZVBhY2s6IHRydWUgfSksXHJcbiAgICBQcmVmZXJlbmNlc01vZHVsZS5mb3JSb290KHsgcmV0cmlldmVBbGxBdFN0YXJ0OiB0cnVlLCBzZXNzaW9uUmV0cmlldmVyOiBTZXNzaW9uUmV0cmlldmVyLCBwcmVmZXJlbmNlUGVyc2lzdG9yOiBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yLCBjYWNoZVBlcnNpc3RvcjogQXBwbGljYXRpb25DYWNoZVBlcnNpc3RvciB9KSxcclxuICAgIEVzQ2hhcnRzTW9kdWxlLmZvclJvb3QoKSxcclxuXHJcbiAgICAvLyBCb290c3RyYXBcclxuICAgIFRvb2x0aXBNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgTW9kYWxNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgUHJvZ3Jlc3NiYXJNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgQnNEcm9wZG93bk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBUb2FzdHJNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgVGltZXBpY2tlck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBDb250ZXh0TWVudU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBEcmFndWxhTW9kdWxlLmZvclJvb3QoKVxyXG5dO1xyXG5cclxuLy8gR2VuZXJhdG9yZSBkZWkgZm9ybWF0aSBkYXRhXHJcbnZhciBmb3JtYXRzID0gKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHBhcnNlOiB7IGRhdGVJbnB1dDogJ0REL01NL1lZWVknICsgKHN0eWxlID09PSAnbG9uZycgPyAnIEhIOm1tOnNzJyA6ICcnKSB9LFxyXG4gICAgICAgIGRpc3BsYXk6IHtcclxuICAgICAgICAgICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpLFxyXG4gICAgICAgICAgICBtb250aFllYXJMYWJlbDogJ01NIFlZWVknLFxyXG4gICAgICAgICAgICBkYXRlQTExeUxhYmVsOiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpLFxyXG4gICAgICAgICAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTSBZWVlZJyxcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5jb25zdCBsb2NhbGVGYWN0b3J5ID0gKGxvYzogTG9jYWxpemF0aW9uU2VydmljZSkgPT4gbG9jLlNtYWxsTG9jYWxlO1xyXG5cclxuY29uc3QgUFJPVklERVJTID0gW1xyXG4gICAgQ29va2llU2VydmljZSxcclxuXHJcbiAgICAvLyBQcm92aWRlcnMgYXBwbGljYXRpdmlcclxuICAgIHsgcHJvdmlkZTogRXJyb3JIYW5kbGVyLCB1c2VDbGFzczogQVBQRXJyb3JIYW5kbGVyIH0sXHJcbiAgICB7IHByb3ZpZGU6IEVWRU5UX01BTkFHRVJfUExVR0lOUywgdXNlRXhpc3Rpbmc6IE91dFpvbmVFdmVudFBsdWdpbiwgbXVsdGk6IHRydWUgfSxcclxuICAgIHsgcHJvdmlkZTogSHR0cFNlcnZpY2VFeHRlbnNpb25zLCB1c2VDbGFzczogSFRUUFNlcnZpY2VFeHRlbnNpb25zIH0sXHJcblxyXG4gICAgLy8gTG9jYWxlIGUgZ2VzdGlvbmkgZGVsbGUgZGF0ZVxyXG4gICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZUZhY3Rvcnk6IGxvY2FsZUZhY3RvcnksIGRlcHM6IFtMb2NhbGl6YXRpb25TZXJ2aWNlXSB9LFxyXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9MT0NBTEUsIHVzZUZhY3Rvcnk6IGxvY2FsZUZhY3RvcnksIGRlcHM6IFtMb2NhbGl6YXRpb25TZXJ2aWNlXSB9LFxyXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogZm9ybWF0cygnc2hvcnQnKSB9LFxyXG5cclxuICAgIC8vIFF1ZXN0aSBkdWUgc29ubyBwcm92aWRhdGkgZGFsIEZvcm1zQW5kVmFsaWRhdGlvbk1vZHVsZSBzdGVzc28sIHBlcsOyIHF1ZXN0J3VsdGltbyDDqCBkZWZpbml0byBpbiBmb3JSb290IHNvbG8gbGF0byBjb21wb25lbnRpIHNoYXJlZCwgXHJcbiAgICAvLyBxdWluZGkgcGVyIHJlbmRlcmUgcXVlc3RpIHByb3ZpZGVyIGRpc3BvbmliaWxpIGFuY2hlIGEgbW9kdWxpIGVzdGVybmkgZGV2byByaXByb3ZpZGFybGkgYW5jaGUgcXVpXHJcbiAgICB7IHByb3ZpZGU6IE5HWF9NQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogZm9ybWF0cygnbG9uZycpIH0sXHJcbiAgICB7IHByb3ZpZGU6IE5neE1hdERhdGVBZGFwdGVyLCB1c2VDbGFzczogTmd4RXhwYW5kZWREYXlKc0RhdGVBZGFwdGVyIH1cclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogWy4uLk1PRFVMRVNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc0ZhZW56YUNvcmVNb2R1bGUge1xyXG4gICAgc3RhdGljIGZvclJvb3QoY29uZmlnPzogRXNGYWVuemFDb3JlTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxFc0ZhZW56YUNvcmVNb2R1bGU+IHtcclxuICAgICAgICBpZiAoY29uZmlnLnJvdXRlcykge1xyXG4gICAgICAgICAgICAvLyBBZ2dpdW50YSBkZWxsYSByb3V0ZSBkaSBlbWJlZGRpbmcgc2Ugbm9uIGRpY2hpYXJhdGEsIGxhdG8gYWdnaXVudGEgZmFjY2lvIGluIG1vZG8gY2hlIGwnZW1iZWRkaW5nIHNpYSBkaXNwb25pYmlsZSBzb2xvIGRhIHJvdXRlIGludGVybmUgKHBhZ2VzIE9LLCBwYWdlc19leHQgTk9OIE9LKVxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yb3V0ZXMuZmluZCh0ID0+IHQucGF0aC5zdGFydHNXaXRoKFwiZW1iZWRcIikpKVxyXG4gICAgICAgICAgICAgICAgY29uZmlnLnJvdXRlcyA9IFsuLi5jb25maWcucm91dGVzLCB7IHBhdGg6IFwiZW1iZWQvOm1vZHVsZVwiLCBsb2FkQ2hpbGRyZW46ICgpID0+IGltcG9ydCgnQGVzZmFlbnphL2NvcmUvbW9kdWxlcycpLnRoZW4obSA9PiBtLkVtYmVkZGluZ01vZHVsZSkgfV1cclxuXHJcbiAgICAgICAgICAgIGJhc2VBcHBSb3V0ZXNbMF0ucmVkaXJlY3RUbyA9IGBwYWdlcy8ke2NvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJ2Rhc2hib2FyZCd9YDtcclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlcy5maWx0ZXIodCA9PiBbXCJwYWdlc1wiLCBcInBhZ2VzX2V4dFwiXS5pbmNsdWRlcyh0LnBhdGgpKS5mb3JFYWNoKHBhdGggPT4geyBcclxuICAgICAgICAgICAgICAgIHBhdGguY2hpbGRyZW4gPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBwYXRoOiBcInByb2ZpbGVcIiwgY29tcG9uZW50OiBVc2VySW5mb3NDb21wb25lbnQsIGRhdGE6IHsgSW50ZXJuYWxOYXZpZ2F0aW9uOiB0cnVlLCB0aXRsZTogXCJwcm9maWxvXCIgfSB9LCBcclxuICAgICAgICAgICAgICAgICAgICAuLi5jb25maWcucm91dGVzLmZpbHRlcihyID0+ICFwYXRoLnBhdGguaW5jbHVkZXMoXCJwYWdlc19leHRcIikgfHwgIXIucGF0aC5zdGFydHNXaXRoKFwiZW1iZWRcIikpXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uZmlnLmRlYnVnTW9kZSA9ICghaXNEZXZNb2RlKCkgJiYgIWNvbmZpZy5mb3JjZURlYnVnTW9kZUZvclByb2RCdWlsZHMpID8gRGVidWdGbGFncy5Ob25lIDogKGNvbmZpZy5kZWJ1Z01vZGUgfHwgRGVidWdGbGFncy5BbGwpO1xyXG5cclxuICAgICAgICBsZXQgbWVyZ2VkQXBwSW5pdGlhbGl6ZXIgPSAoaHR0cDogSFRUUFNlcnZpY2UsIGJ0czogVG9rZW5TZXJ2aWNlLCBhYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBsb2M6IEJhc2VMb2NhbGl6YXRpb24pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIEFwcENvbmZpZyBhbmQgQWNjb3VudCBTY29wZS4uLlwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCByZWFsT2JzZXJ2YWJsZSA9IGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ29uZmlnOiBodHRwLmdldDxFbnZPcHRpb25zPihHRVRfQXBwQ29uZmlnX0dldEFwcENvbmZpZywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKHt9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogaHR0cC5nZXQ8QWNjb3VudFNjb3BlPihHRVRfSmFjZV9HZXRBY2NvdW50U2NvcGUsIG51bGwsIG51bGwsIGZhbHNlKS5waXBlKGNhdGNoRXJyb3IoXyA9PiBvZihudWxsKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvYy5Mb2NhbGUucGlwZSh0YWtlKDEpLCBjYXRjaEVycm9yKF8gPT4gb2YoJ2l0LUlUJykpKSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlZE9ic2VydmFibGUgPSBjb25maWcub3B0aW9uc0FuZFNjb3BlUHJvdmlkZXIgfHwgcmVhbE9ic2VydmFibGU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZWRPYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwKChyZXM6IHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gcmVzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC5zZXRBcHBDb25maWcobXljb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMJ2FjY291bnQgc2NvcGUgbG8gcHJlbmRvIGRhbGxhIFF1ZXJ5IGEgYmFja2VuZCBzb2xvIHNlIG5vbiB1c28gaWwgRmFrZSB0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ0cy5VU0VfRkFLRV9BQ0NFU1NfVE9LRU4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidHMuYWNjb3VudFNjb3BlID0gcmVzLnNjb3BlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIGFwcENvbmZpZyBhbmQgc2NvcGUgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidHMuYWNjb3VudFNjb3BlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFjLmluaXRpYWxpemVJZGVudGl0eShidHMuZ2V0SmFjZUlkZW50aXR5KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIExvYWRpbmcgY3VzdG9tIGFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uXCIsIFwiYmFja2dyb3VuZC1jb2xvcjogeWVsbG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmluaXRpYWxpemVyRnVuY3Rpb24oaHR0cCwgYnRzLCBhYWMpKCkucGlwZSh0YXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEVzRmFlbnphQ29yZU1vZHVsZSxcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdmlkZXIgc3RhdGljaSAqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgICAgICAuLi5QUk9WSURFUlMsXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqIFByb3ZpZGVyIGN1c3RvbWl6emFiaWxpICoqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgICAgICAgICAgLi4uKCFjb25maWcucmVkaXJlY3Rpb25NYXAgPyBbXSA6IFt7IHByb3ZpZGU6IFJFRElSRUNUX01BUCwgdXNlVmFsdWU6IGNvbmZpZy5yZWRpcmVjdGlvbk1hcCB9XSksXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUiwgdXNlRmFjdG9yeTogbWVyZ2VkQXBwSW5pdGlhbGl6ZXIsIGRlcHM6IFtIVFRQU2VydmljZSwgVG9rZW5TZXJ2aWNlLCBBY2Nlc3NDb250cm9sU2VydmljZSwgQmFzZUxvY2FsaXphdGlvbl0sIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFJPVVRFUywgdXNlVmFsdWU6IGJhc2VBcHBSb3V0ZXMsIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExPQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5Mb2NhbGl6YXRpb25zKSA9PSBEZWJ1Z0ZsYWdzLkxvY2FsaXphdGlvbnMgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBFWFRfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuRXh0ZW5zaW9ucykgPT0gRGVidWdGbGFncy5FeHRlbnNpb25zIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQUNDX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkFjY2Vzc0NvbnRyb2wpID09IERlYnVnRmxhZ3MuQWNjZXNzQ29udHJvbCA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEhUVFBfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuSHR0cCkgPT0gRGVidWdGbGFncy5IdHRwIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogSFRUUF9JTlZBTElEQVRJT04sIHVzZVZhbHVlOiBjb25maWc/Lmh0dHBJbnZhbGlkYXRpb25DYWNoZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBUQUJfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuVGFiYmVyKSA9PSBEZWJ1Z0ZsYWdzLlRhYmJlciA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFNHUl9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5TaWduYWxSKSA9PSBEZWJ1Z0ZsYWdzLlNpZ25hbFIgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBQUkVGX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLlByZWZlcmVuY2VzKSA9PSBEZWJ1Z0ZsYWdzLlByZWZlcmVuY2VzIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRVNDX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkNoYXJ0cykgPT0gRGVidWdGbGFncy5DaGFydHMgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMT0dJTl9VUkxfTEVHQUNZLCB1c2VWYWx1ZTogY29uZmlnLmxlZ2FjeUxvZ2luICE9PSBudWxsICYmIGNvbmZpZy5sZWdhY3lMb2dpbiAhPT0gdW5kZWZpbmVkID8gY29uZmlnLmxlZ2FjeUxvZ2luIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkFWQkFSX0VYVEVOU0lPTlMsIHVzZVZhbHVlOiBjb25maWcubmF2YmFyRXh0ZW5zaW9ucyA/IGNvbmZpZy5uYXZiYXJFeHRlbnNpb25zIDogW10gfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQmFzZUFkYXB0ZXIsIHVzZUNsYXNzOiBjb25maWc/LmNoYXJ0c0FkYXB0ZXIgfHwgQmFzZUFkYXB0ZXIgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQmFzZU1lc3NhZ2VTZXJ2aWNlLCB1c2VDbGFzczogY29uZmlnPy5tZXNzYWdlU2VydmljZSB8fCBCYXNlTWVzc2FnZVNlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogR2xvYmFsU2VhcmNoU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8uZ2xvYmFsU2VhcmNoU2VydmljZSB8fCBHbG9iYWxTZWFyY2hTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8uY29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlIHx8IENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBNZW51RmlsdGVyaW5nU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8ubWVudUZpbHRlcmluZ1NlcnZpY2UgfHwgTWVudUZpbHRlcmluZ1NlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogVXNlclByZWZlcmVuY2VzU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8udXNlclByZWZlcmVuY2VzUHJvdmlkZXIgfHwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBNRU5VX0xPQ0FMSVpBVElPTiwgdXNlVmFsdWU6IGNvbmZpZy5tZW51TG9jIHx8IG51bGwgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTUVOVSwgdXNlVmFsdWU6IGNvbmZpZy5tZW51IH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFVTRV9GQUtFX0FDQ0VTU19UT0tFTiwgdXNlVmFsdWU6ICEhY29uZmlnLmZha2VBY2Nlc3NUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBQcmVmZXJlbmNlc1BlcnNpc3RvciwgdXNlQ2xhc3M6IGNvbmZpZy5mYWtlQWNjZXNzVG9rZW4gPyBMb2NhbFN0b3JhZ2VQcmVmZXJlbmNlc1BlcnNpc3RvciA6IEFwcGxpY2F0aW9uUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQ2FjaGVQZXJzaXN0b3IsIHVzZUNsYXNzOiBjb25maWcuZmFrZUFjY2Vzc1Rva2VuID8gTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IgOiBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFc0ZhZW56YUNvcmVNb2R1bGVDb25maWcge1xyXG4gICAgLyogUm91dGUgYXBwbGljYXRpdmUsIHNvbG8gcXVlbGxlIGRlbnRybyBhICoqcGFnZXMqKiAqL1xyXG4gICAgcm91dGVzITogUm91dGVzO1xyXG4gICAgLyogTWVuw7kgZGVsbGEgc2lkZWJhciBkZWxsJ2FwcGxpY2F6aW9uZSAqL1xyXG4gICAgbWVudTogQXBwbGljYXRpb25NZW51W107XHJcbiAgICAvKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBsJ2FjY2VzcyB0b2tlbiBmaW50byAqL1xyXG4gICAgZmFrZUFjY2Vzc1Rva2VuPzogYm9vbGVhbjtcclxuICAgIC8qIFRpcG8gZGEgdXNhcmUgcGVyIGdlbmVyYXJlIGxlIGxvY2FsaXp6YWl6b25pIGRlbCBtZW7DuSAqL1xyXG4gICAgbWVudUxvYz86IFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT47XHJcbiAgICAvKiBSZWRpcmVjdCBwZXIgbGEgcm9vdCBkZWxsJ2FwcGxpY2F6aW9uZSwgZGkgZGVmYXVsdCDDqCBpbXBvc3RhdG8gYSAqKmRhc2hib2FyZCoqLiBTZSBhbGwnaW50ZXJubyBkZWxsZSAqKnJvdXRlcyoqIG5vbiBlc2lzdGUgbGEgcm91dGUgKipkYXNoYm9hcmQqKiDDqCBkYSBpbXBvc3RhcmUgYWRlZ3VhdGFtZW50ZSAqL1xyXG4gICAgZW1wdHlSb3V0ZVJlZGlyZWN0Pzogc3RyaW5nO1xyXG4gICAgLyogU2Ugbm9uIHNwZWNpZmljYXRhIHZpZW5lIGltcG9zdGF0YSBhdXRvbWF0aWNhbWVudGUgYWQgXCJBbGxcIiBpbiBmYXNlIGRpIGRlYnVnLCBcIk5vbmVcIiBpbiBwcm9kdXppb25lIChxdWVzdCd1bHRpbW8gYSBwcmVzY2luZGVyZSwgYSBtZW5vIGNoZSAqKmZvcmNlRGVidWdNb2RlRm9yUHJvZEJ1aWxkcyoqIG5vbiBzaWEgdHJ1ZSkqL1xyXG4gICAgZGVidWdNb2RlPzogRGVidWdGbGFncztcclxuICAgIC8qIFBlcm1ldHRlIGRpIGZvcnphcmUgbGEgbW9kYWxpdMOgIGRpIGRlYnVnIHNwZWNpZmljYXRhIGFuY2hlIHBlciBsZSBidWlsZCBkaSBwcm9kdXppb25lLCAqKk5PTiBJTVBPU1RBUkUgQSBUUlVFKiogYSBtZW5vIGRpIHJhcmlzc2ltaXNzaW1pc3NpbWkgY2FzaSAqL1xyXG4gICAgZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzPzogYm9vbGVhbjtcclxuICAgIC8qIENhY2hlIGRpIGludmFsaWRhemlvbmUgcGVyIGxlIGNoaWFtYXRlIGh0dHAgKi9cclxuICAgIGh0dHBJbnZhbGlkYXRpb25DYWNoZT86IGFueTtcclxuICAgIC8qIEZ1bnppb25lIGRpIGluaXppYWxpenphemlvbmUgQVBQX0lOSVRJQUxJWkVSLWxpa2UgY2hlIHZpZW5lIHJpY2hpYW1hdGEgZG9wbyBhbGxhIGZ1bnppb25lIGRpIGluaXppYWxpenphemlvbmUgZGkgZGVmYXVsdCAqL1xyXG4gICAgaW5pdGlhbGl6ZXJGdW5jdGlvbj86IChodHRwOiBIVFRQU2VydmljZSwgYnRzOiBUb2tlblNlcnZpY2UsIGFhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UpID0+ICgpID0+IE9ic2VydmFibGU8YW55PjtcclxuICAgIC8qIE1hcHBhIGRpIHJlZGlyZWN0IHBlciBwZXJtZXR0ZXJlIGFsICoqUmVkaXJlY3RlckNvbXBvbmVudCoqIGRpIHNhcGVyZSBkb3ZlIG5hdmlnYXJlIGluIGJhc2UgYSBPZ2dldHRvLVBhcmFtZXRyaSAqL1xyXG4gICAgcmVkaXJlY3Rpb25NYXA/OiB7IFtpbmRleDogc3RyaW5nXTogeyB1cmw6IHN0cmluZywgcGFyYW1zOiBzdHJpbmdbXSB9IH07XHJcbiAgICAvKiBBZGF0dGF0b3JlIGRlaSBncmFmaWNpIG5lbCBjYXNvIHVuIHByb2dldHRvIGZvc3NlIHZlY2NoaW8gKFJpbXVvdmliaWxlIHF1YW5kbyB0dXR0aSBpIHByb2dldHRpIHVzYW5vIG5hdGl2YW1lbnRlIGVzLWNoYXJ0cykgKi9cclxuICAgIGNoYXJ0c0FkYXB0ZXI/OiBUeXBlPEJhc2VBZGFwdGVyPjtcclxuICAgIC8qIFNlcnZpemlvIGNoZSBlc3BvbmUgaSBtZXNzYWdnaSBkaXNwb25pYmlsaSBzdSBTaWduYWxyICovXHJcbiAgICBtZXNzYWdlU2VydmljZT86IFR5cGU8QmFzZU1lc3NhZ2VTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIHBlciBsYSBzZWFyY2ggZ2xvYmFsZSBkZWwgbW9kdWxvICovXHJcbiAgICBnbG9iYWxTZWFyY2hTZXJ2aWNlPzogVHlwZTxHbG9iYWxTZWFyY2hTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIHBlciBmaWx0cmFyZSBsZSB2b2NpIGRpIG1lbsO5ICovXHJcbiAgICBtZW51RmlsdGVyaW5nU2VydmljZT86IFR5cGU8TWVudUZpbHRlcmluZ1NlcnZpY2U+O1xyXG4gICAgLyogU2Vydml6aW8gZGkgcmlkaXJlemlvbmUgcGVyIGpvYiBjb21wbGV0YXRpICovXHJcbiAgICBjb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2U/OiBUeXBlPENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZT47XHJcbiAgICAvKiBGdW56aW9uZSBkaSBvdmVycmlkZSBwZXIgcmVjdXBlcmFyZSBhY2NvdW50IHNjb3BlIGUgZW52b3B0aW9ucy4gUHXDsiBhbmNoZSBlc3NlcmUgdXRpbGl6emF0YSBwZXIgZm9ybmlyZSBtb2RlbGxpIGZpbnRpIGZpbm8gYWQgaW1wbGVtZW50YXppb25lICovXHJcbiAgICBvcHRpb25zQW5kU2NvcGVQcm92aWRlcj86IE9ic2VydmFibGU8eyBhcHBDb25maWc6IEVudk9wdGlvbnMsIHNjb3BlOiBBY2NvdW50U2NvcGUsIGxvY2FsZTogc3RyaW5nIH0+O1xyXG4gICAgLyogTGlzdGEgZGVpIGNvbXBvbmVudGkgY29uIGN1aSBlc3BhbmRlcmUgbGEgbmF2YmFyICovXHJcbiAgICBuYXZiYXJFeHRlbnNpb25zPzogVHlwZTxhbnk+W107XHJcbiAgICAvKiBTZXJ2aXppbyBkaSByZWN1cGVyby9tb2RpZmljYSBwcmVmZXJlbnplIHV0ZW50ZSAqL1xyXG4gICAgdXNlclByZWZlcmVuY2VzUHJvdmlkZXI/OiBUeXBlPFVzZXJQcmVmZXJlbmNlc1NlcnZpY2U+O1xyXG4gICAgLyogaWRlbnRpZmljYSBzZSB1dGlsaXp6YXJlIGxhIHZlcnNpb25lIHZlY2NoaWEgZGVsbCd1cmwgZGkgYXV0aCAoJHtteWNvbmZpZy5BVVRIX1VSTH0vbG9naW4vZm9ybT9jbGllbnQ9JHtteWNvbmZpZy5DTElFTlRfTkFNRX0pIGludmVjZSBjaGUgbGEgbnVvdmEgKCR7bXljb25maWcuQVVUSF9VUkx9L2xvZ2luO2NsaWVudD0ke215Y29uZmlnLkNMSUVOVF9OQU1FfSkgKi9cclxuICAgIGxlZ2FjeUxvZ2luPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGVidWdGbGFncyB7XHJcbiAgICBOb25lID0gMCxcclxuICAgIExvY2FsaXphdGlvbnMgPSAxIDw8IDAsXHJcbiAgICBFeHRlbnNpb25zID0gMSA8PCAxLFxyXG4gICAgQWNjZXNzQ29udHJvbCA9IDEgPDwgMixcclxuICAgIEh0dHAgPSAxIDw8IDMsXHJcbiAgICBTaWduYWxSID0gMSA8PCA0LFxyXG4gICAgUHJlZmVyZW5jZXMgPSAxIDw8IDUsXHJcbiAgICBDaGFydHMgPSAxIDw8IDYsXHJcbiAgICBUYWJiZXIgPSAxIDw8IDcsXHJcbiAgICBBbGwgPSB+KH4wIDw8IDgpXHJcbn0iXX0=