@smartsoft001/crud-shell-angular 1.1.734 → 1.1.736

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 (210) hide show
  1. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  2. package/{esm2015/lib/+state/crud.actions.js → esm2020/lib/+state/crud.actions.mjs} +0 -0
  3. package/esm2020/lib/+state/crud.effects.mjs +182 -0
  4. package/esm2020/lib/+state/crud.facade.mjs +88 -0
  5. package/esm2020/lib/+state/crud.reducer.mjs +212 -0
  6. package/{esm2015/lib/+state/crud.selectors.js → esm2020/lib/+state/crud.selectors.mjs} +0 -0
  7. package/esm2020/lib/components/components.module.mjs +109 -0
  8. package/esm2020/lib/components/export/export.component.mjs +47 -0
  9. package/esm2020/lib/components/filter/base/base.component.mjs +140 -0
  10. package/esm2020/lib/components/filter/check/check.component.mjs +36 -0
  11. package/esm2020/lib/components/filter/date/date.component.mjs +41 -0
  12. package/esm2020/lib/components/filter/date-with-edit/date-with-edit.component.mjs +45 -0
  13. package/esm2020/lib/components/filter/filter.component.mjs +29 -0
  14. package/esm2020/lib/components/filter/flag/flag.component.mjs +16 -0
  15. package/{esm2015/lib/components/filter/index.js → esm2020/lib/components/filter/index.mjs} +0 -0
  16. package/esm2020/lib/components/filter/int/int.component.mjs +33 -0
  17. package/esm2020/lib/components/filter/radio/radio.component.mjs +16 -0
  18. package/esm2020/lib/components/filter/text/text.component.mjs +16 -0
  19. package/esm2020/lib/components/filters/filters.component.mjs +111 -0
  20. package/esm2020/lib/components/filters-config/filters-config.component.mjs +37 -0
  21. package/esm2020/lib/components/group/group.component.mjs +54 -0
  22. package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
  23. package/esm2020/lib/components/multiselect/multiselect.component.mjs +68 -0
  24. package/esm2020/lib/crud-full.module.mjs +105 -0
  25. package/esm2020/lib/crud.config.mjs +17 -0
  26. package/esm2020/lib/crud.module.mjs +107 -0
  27. package/esm2020/lib/factories/list-pagination/list-pagination.factory.mjs +69 -0
  28. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  29. package/{esm2015/lib/models/interfaces.js → esm2020/lib/models/interfaces.mjs} +0 -0
  30. package/esm2020/lib/pages/index.mjs +7 -0
  31. package/esm2020/lib/pages/item/base/base.component.mjs +44 -0
  32. package/esm2020/lib/pages/item/item.component.mjs +393 -0
  33. package/esm2020/lib/pages/item/standard/standard.component.mjs +15 -0
  34. package/esm2020/lib/pages/list/base/base.component.mjs +23 -0
  35. package/esm2020/lib/pages/list/list.component.mjs +343 -0
  36. package/esm2020/lib/pages/list/standard/standard.component.mjs +34 -0
  37. package/esm2020/lib/pipes/form-options/form-options.pipe.mjs +55 -0
  38. package/{esm2015/lib/pipes/index.js → esm2020/lib/pipes/index.mjs} +0 -0
  39. package/esm2020/lib/pipes/pipes.module.mjs +20 -0
  40. package/{esm2015/lib/providers/model-possibilities/model-possibilities.provider.js → esm2020/lib/providers/model-possibilities/model-possibilities.provider.mjs} +0 -0
  41. package/esm2020/lib/services/crud/crud.service.mjs +138 -0
  42. package/esm2020/lib/services/list-group/list-group.service.mjs +60 -0
  43. package/esm2020/lib/services/page/page.service.mjs +41 -0
  44. package/{esm2015/lib/services/search/search.service.js → esm2020/lib/services/search/search.service.mjs} +9 -8
  45. package/esm2020/lib/services/socket/socket.service.mjs +17 -0
  46. package/esm2020/smartsoft001-crud-shell-angular.mjs +5 -0
  47. package/fesm2015/smartsoft001-crud-shell-angular.mjs +2569 -0
  48. package/fesm2015/smartsoft001-crud-shell-angular.mjs.map +1 -0
  49. package/fesm2020/smartsoft001-crud-shell-angular.mjs +2729 -0
  50. package/fesm2020/smartsoft001-crud-shell-angular.mjs.map +1 -0
  51. package/lib/+state/crud.effects.d.ts +3 -0
  52. package/lib/+state/crud.effects.d.ts.map +1 -1
  53. package/lib/+state/crud.facade.d.ts +3 -0
  54. package/lib/+state/crud.facade.d.ts.map +1 -1
  55. package/lib/components/components.module.d.ts +22 -0
  56. package/lib/components/components.module.d.ts.map +1 -1
  57. package/lib/components/export/export.component.d.ts +3 -0
  58. package/lib/components/export/export.component.d.ts.map +1 -1
  59. package/lib/components/filter/base/base.component.d.ts +3 -0
  60. package/lib/components/filter/base/base.component.d.ts.map +1 -1
  61. package/lib/components/filter/check/check.component.d.ts +3 -0
  62. package/lib/components/filter/check/check.component.d.ts.map +1 -1
  63. package/lib/components/filter/date/date.component.d.ts +3 -0
  64. package/lib/components/filter/date/date.component.d.ts.map +1 -1
  65. package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts +3 -0
  66. package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts.map +1 -1
  67. package/lib/components/filter/filter.component.d.ts +3 -0
  68. package/lib/components/filter/filter.component.d.ts.map +1 -1
  69. package/lib/components/filter/flag/flag.component.d.ts +3 -0
  70. package/lib/components/filter/flag/flag.component.d.ts.map +1 -1
  71. package/lib/components/filter/int/int.component.d.ts +3 -0
  72. package/lib/components/filter/int/int.component.d.ts.map +1 -1
  73. package/lib/components/filter/radio/radio.component.d.ts +3 -0
  74. package/lib/components/filter/radio/radio.component.d.ts.map +1 -1
  75. package/lib/components/filter/text/text.component.d.ts +3 -0
  76. package/lib/components/filter/text/text.component.d.ts.map +1 -1
  77. package/lib/components/filters/filters.component.d.ts +3 -0
  78. package/lib/components/filters/filters.component.d.ts.map +1 -1
  79. package/lib/components/filters-config/filters-config.component.d.ts +3 -0
  80. package/lib/components/filters-config/filters-config.component.d.ts.map +1 -1
  81. package/lib/components/group/group.component.d.ts +3 -0
  82. package/lib/components/group/group.component.d.ts.map +1 -1
  83. package/lib/components/multiselect/multiselect.component.d.ts +3 -0
  84. package/lib/components/multiselect/multiselect.component.d.ts.map +1 -1
  85. package/lib/crud-full.module.d.ts +20 -0
  86. package/lib/crud-full.module.d.ts.map +1 -1
  87. package/lib/crud.config.d.ts +5 -0
  88. package/lib/crud.config.d.ts.map +1 -1
  89. package/lib/crud.module.d.ts +13 -0
  90. package/lib/crud.module.d.ts.map +1 -1
  91. package/lib/factories/list-pagination/list-pagination.factory.d.ts +3 -0
  92. package/lib/factories/list-pagination/list-pagination.factory.d.ts.map +1 -1
  93. package/lib/pages/index.d.ts +5 -1
  94. package/lib/pages/index.d.ts.map +1 -1
  95. package/lib/pages/item/base/base.component.d.ts +3 -0
  96. package/lib/pages/item/base/base.component.d.ts.map +1 -1
  97. package/lib/pages/item/item.component.d.ts +3 -0
  98. package/lib/pages/item/item.component.d.ts.map +1 -1
  99. package/lib/pages/item/standard/standard.component.d.ts +3 -0
  100. package/lib/pages/item/standard/standard.component.d.ts.map +1 -1
  101. package/lib/pages/list/base/base.component.d.ts +3 -0
  102. package/lib/pages/list/base/base.component.d.ts.map +1 -1
  103. package/lib/pages/list/list.component.d.ts +3 -0
  104. package/lib/pages/list/list.component.d.ts.map +1 -1
  105. package/lib/pages/list/standard/standard.component.d.ts +3 -0
  106. package/lib/pages/list/standard/standard.component.d.ts.map +1 -1
  107. package/lib/pipes/form-options/form-options.pipe.d.ts +3 -0
  108. package/lib/pipes/form-options/form-options.pipe.d.ts.map +1 -1
  109. package/lib/pipes/pipes.module.d.ts +5 -0
  110. package/lib/pipes/pipes.module.d.ts.map +1 -1
  111. package/lib/services/crud/crud.service.d.ts +3 -0
  112. package/lib/services/crud/crud.service.d.ts.map +1 -1
  113. package/lib/services/list-group/list-group.service.d.ts +3 -0
  114. package/lib/services/list-group/list-group.service.d.ts.map +1 -1
  115. package/lib/services/page/page.service.d.ts +3 -0
  116. package/lib/services/page/page.service.d.ts.map +1 -1
  117. package/lib/services/search/search.service.d.ts +3 -0
  118. package/lib/services/search/search.service.d.ts.map +1 -1
  119. package/lib/services/socket/socket.service.d.ts +5 -0
  120. package/lib/services/socket/socket.service.d.ts.map +1 -1
  121. package/package.json +38 -25
  122. package/smartsoft001-crud-shell-angular.d.ts +1 -17
  123. package/smartsoft001-crud-shell-angular.d.ts.map +1 -1
  124. package/bundles/smartsoft001-crud-shell-angular.umd.js +0 -3332
  125. package/bundles/smartsoft001-crud-shell-angular.umd.js.map +0 -1
  126. package/esm2015/lib/+state/crud.effects.js +0 -178
  127. package/esm2015/lib/+state/crud.facade.js +0 -92
  128. package/esm2015/lib/+state/crud.reducer.js +0 -92
  129. package/esm2015/lib/components/components.module.js +0 -65
  130. package/esm2015/lib/components/export/export.component.js +0 -55
  131. package/esm2015/lib/components/filter/base/base.component.js +0 -144
  132. package/esm2015/lib/components/filter/check/check.component.js +0 -34
  133. package/esm2015/lib/components/filter/date/date.component.js +0 -42
  134. package/esm2015/lib/components/filter/date-with-edit/date-with-edit.component.js +0 -43
  135. package/esm2015/lib/components/filter/filter.component.js +0 -30
  136. package/esm2015/lib/components/filter/flag/flag.component.js +0 -13
  137. package/esm2015/lib/components/filter/int/int.component.js +0 -31
  138. package/esm2015/lib/components/filter/radio/radio.component.js +0 -13
  139. package/esm2015/lib/components/filter/text/text.component.js +0 -13
  140. package/esm2015/lib/components/filters/filters.component.js +0 -124
  141. package/esm2015/lib/components/filters-config/filters-config.component.js +0 -46
  142. package/esm2015/lib/components/group/group.component.js +0 -65
  143. package/esm2015/lib/components/multiselect/multiselect.component.js +0 -74
  144. package/esm2015/lib/crud-full.module.js +0 -83
  145. package/esm2015/lib/crud.config.js +0 -14
  146. package/esm2015/lib/crud.module.js +0 -84
  147. package/esm2015/lib/factories/list-pagination/list-pagination.factory.js +0 -73
  148. package/esm2015/lib/pages/index.js +0 -3
  149. package/esm2015/lib/pages/item/base/base.component.js +0 -44
  150. package/esm2015/lib/pages/item/item.component.js +0 -383
  151. package/esm2015/lib/pages/item/standard/standard.component.js +0 -13
  152. package/esm2015/lib/pages/list/base/base.component.js +0 -30
  153. package/esm2015/lib/pages/list/list.component.js +0 -319
  154. package/esm2015/lib/pages/list/standard/standard.component.js +0 -39
  155. package/esm2015/lib/pipes/form-options/form-options.pipe.js +0 -56
  156. package/esm2015/lib/pipes/pipes.module.js +0 -16
  157. package/esm2015/lib/services/crud/crud.service.js +0 -143
  158. package/esm2015/lib/services/list-group/list-group.service.js +0 -61
  159. package/esm2015/lib/services/page/page.service.js +0 -48
  160. package/esm2015/lib/services/socket/socket.service.js +0 -14
  161. package/esm2015/smartsoft001-crud-shell-angular.js +0 -22
  162. package/fesm2015/smartsoft001-crud-shell-angular.js +0 -2676
  163. package/fesm2015/smartsoft001-crud-shell-angular.js.map +0 -1
  164. package/lib/+state/crud.effects.ngfactory.d.ts.map +0 -1
  165. package/lib/+state/crud.facade.ngfactory.d.ts.map +0 -1
  166. package/lib/components/components.module.ngfactory.d.ts.map +0 -1
  167. package/lib/components/export/export.component.ngfactory.d.ts.map +0 -1
  168. package/lib/components/export/export.component.scss.shim.ngstyle.d.ts.map +0 -1
  169. package/lib/components/filter/check/check.component.ngfactory.d.ts.map +0 -1
  170. package/lib/components/filter/check/check.component.scss.shim.ngstyle.d.ts.map +0 -1
  171. package/lib/components/filter/date/date.component.ngfactory.d.ts.map +0 -1
  172. package/lib/components/filter/date/date.component.scss.shim.ngstyle.d.ts.map +0 -1
  173. package/lib/components/filter/date-with-edit/date-with-edit.component.ngfactory.d.ts.map +0 -1
  174. package/lib/components/filter/date-with-edit/date-with-edit.component.scss.shim.ngstyle.d.ts.map +0 -1
  175. package/lib/components/filter/filter.component.ngfactory.d.ts.map +0 -1
  176. package/lib/components/filter/filter.component.scss.shim.ngstyle.d.ts.map +0 -1
  177. package/lib/components/filter/flag/flag.component.ngfactory.d.ts.map +0 -1
  178. package/lib/components/filter/flag/flag.component.scss.shim.ngstyle.d.ts.map +0 -1
  179. package/lib/components/filter/int/int.component.ngfactory.d.ts.map +0 -1
  180. package/lib/components/filter/int/int.component.scss.shim.ngstyle.d.ts.map +0 -1
  181. package/lib/components/filter/radio/radio.component.ngfactory.d.ts.map +0 -1
  182. package/lib/components/filter/radio/radio.component.scss.shim.ngstyle.d.ts.map +0 -1
  183. package/lib/components/filter/text/text.component.ngfactory.d.ts.map +0 -1
  184. package/lib/components/filter/text/text.component.scss.shim.ngstyle.d.ts.map +0 -1
  185. package/lib/components/filters/filters.component.ngfactory.d.ts.map +0 -1
  186. package/lib/components/filters/filters.component.scss.shim.ngstyle.d.ts.map +0 -1
  187. package/lib/components/filters-config/filters-config.component.ngfactory.d.ts.map +0 -1
  188. package/lib/components/filters-config/filters-config.component.scss.shim.ngstyle.d.ts.map +0 -1
  189. package/lib/components/group/group.component.ngfactory.d.ts.map +0 -1
  190. package/lib/components/group/group.component.scss.shim.ngstyle.d.ts.map +0 -1
  191. package/lib/components/multiselect/multiselect.component.ngfactory.d.ts.map +0 -1
  192. package/lib/components/multiselect/multiselect.component.scss.shim.ngstyle.d.ts.map +0 -1
  193. package/lib/crud-full.module.ngfactory.d.ts.map +0 -1
  194. package/lib/crud.config.ngfactory.d.ts.map +0 -1
  195. package/lib/crud.module.ngfactory.d.ts.map +0 -1
  196. package/lib/factories/list-pagination/list-pagination.factory.ngfactory.d.ts.map +0 -1
  197. package/lib/pages/item/item.component.ngfactory.d.ts.map +0 -1
  198. package/lib/pages/item/standard/standard.component.ngfactory.d.ts.map +0 -1
  199. package/lib/pages/item/standard/standard.component.scss.shim.ngstyle.d.ts.map +0 -1
  200. package/lib/pages/list/list.component.ngfactory.d.ts.map +0 -1
  201. package/lib/pages/list/standard/standard.component.ngfactory.d.ts.map +0 -1
  202. package/lib/pages/list/standard/standard.component.scss.shim.ngstyle.d.ts.map +0 -1
  203. package/lib/pipes/form-options/form-options.pipe.ngfactory.d.ts.map +0 -1
  204. package/lib/pipes/pipes.module.ngfactory.d.ts.map +0 -1
  205. package/lib/services/crud/crud.service.ngfactory.d.ts.map +0 -1
  206. package/lib/services/list-group/list-group.service.ngfactory.d.ts.map +0 -1
  207. package/lib/services/page/page.service.ngfactory.d.ts.map +0 -1
  208. package/lib/services/search/search.service.ngfactory.d.ts.map +0 -1
  209. package/lib/services/socket/socket.service.ngfactory.d.ts.map +0 -1
  210. package/smartsoft001-crud-shell-angular.metadata.json +0 -1
@@ -1,383 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, NgModuleRef, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef } from "@angular/core";
3
- import { ActivatedRoute, Router } from "@angular/router";
4
- import { BehaviorSubject } from "rxjs";
5
- import { Location } from "@angular/common";
6
- import { TranslateService } from "@ngx-translate/core";
7
- import { AuthService, CreateDynamicComponent, DetailsService, DynamicComponentLoader, DynamicContentDirective, StyleService, ToastService, } from "@smartsoft001/angular";
8
- import { getModelOptions } from "@smartsoft001/models";
9
- import { CrudFacade } from "../../+state/crud.facade";
10
- import { CrudFullConfig } from "../../crud.config";
11
- import { CrudService } from "../../services/crud/crud.service";
12
- import { IonContent } from "@ionic/angular";
13
- import { FormArray, FormControl, FormGroup } from "@angular/forms";
14
- import { ItemStandardComponent } from "./standard/standard.component";
15
- import { PageService } from "../../services/page/page.service";
16
- export class ItemComponent extends CreateDynamicComponent('crud-item-page') {
17
- constructor(router, activeRoute, facade, service, route, dynamicComponentLoader, translateService, config, location, cd, authService, styleService, elementRef, toastService, pageService, moduleRef, componentFactoryResolver, detailsService) {
18
- super(cd, moduleRef, componentFactoryResolver);
19
- this.router = router;
20
- this.activeRoute = activeRoute;
21
- this.facade = facade;
22
- this.service = service;
23
- this.route = route;
24
- this.dynamicComponentLoader = dynamicComponentLoader;
25
- this.translateService = translateService;
26
- this.config = config;
27
- this.location = location;
28
- this.cd = cd;
29
- this.styleService = styleService;
30
- this.elementRef = elementRef;
31
- this.toastService = toastService;
32
- this.pageService = pageService;
33
- this.moduleRef = moduleRef;
34
- this.componentFactoryResolver = componentFactoryResolver;
35
- this.detailsService = detailsService;
36
- this.pageOptions = {
37
- title: "",
38
- showBackButton: true,
39
- hideMenuButton: true,
40
- };
41
- this.formValid = false;
42
- this.standardComponents = new QueryList();
43
- this.dynamicContents = new QueryList();
44
- this.selected$ = this.facade.selected$;
45
- }
46
- set mode(val) {
47
- this._mode = val;
48
- this.refreshDynamicInstance();
49
- }
50
- get mode() {
51
- return this._mode;
52
- }
53
- refreshProperties() {
54
- this.baseInstance.detailsOptions = this.detailsOptions;
55
- this.baseInstance.mode = this.mode;
56
- this.baseInstance.uniqueProvider = this.uniqueProvider;
57
- this.baseInstance.onPartialChange.pipe(this.takeUntilDestroy).subscribe(val => this.onPartialChange(val));
58
- this.baseInstance.onChange.pipe(this.takeUntilDestroy).subscribe(val => this.onChange(val));
59
- this.baseInstance.onValidChange.pipe(this.takeUntilDestroy).subscribe(val => this.onValidChange(val));
60
- }
61
- ngOnInit() {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- this.detailsService.init();
64
- this.styleService.init(this.elementRef);
65
- this.pageService.checkPermissions();
66
- if (this.router.routerState.snapshot.url.endsWith("/add")) {
67
- this.mode = "create";
68
- yield this.generateComponents('add');
69
- }
70
- else {
71
- this.mode = this.config.details ? "details" : "update";
72
- if (this.mode === 'update') {
73
- yield this.generateComponents('edit');
74
- }
75
- this.activeRoute.params
76
- .pipe(this.takeUntilDestroy)
77
- .subscribe(({ id }) => {
78
- this.facade.select(id);
79
- this.id = id;
80
- });
81
- this.activeRoute.queryParams
82
- .pipe(this.takeUntilDestroy)
83
- .subscribe(({ edit }) => {
84
- if (edit) {
85
- this.mode = "update";
86
- this.generateComponents('edit');
87
- }
88
- });
89
- }
90
- this.uniqueProvider = (values) => __awaiter(this, void 0, void 0, function* () {
91
- const filter = {
92
- query: [],
93
- };
94
- Object.keys(values).forEach((key) => {
95
- filter.query.push({
96
- key: key,
97
- value: values[key],
98
- type: "=",
99
- });
100
- });
101
- if (this.id) {
102
- filter.query.push({
103
- key: "id",
104
- value: this.id,
105
- type: "!=",
106
- });
107
- }
108
- const { totalCount } = yield this.service.getList(filter).toPromise();
109
- return !totalCount;
110
- });
111
- if (this.config.details) {
112
- const compiledComponents = yield this.dynamicComponentLoader.getComponentsWithFactories({
113
- components: [
114
- ...(this.config.details &&
115
- this.config.details["components"] &&
116
- this.config.details["components"].top
117
- ? [this.config.details["components"].top]
118
- : []),
119
- ...(this.config.details &&
120
- this.config.details["components"] &&
121
- this.config.details["components"].bottom
122
- ? [this.config.details["components"].bottom]
123
- : []),
124
- ],
125
- });
126
- this.detailsOptions = {
127
- type: this.config.type,
128
- item$: this.facade.selected$,
129
- cellPipe: this.config.details ? this.config.details.cellPipe : null,
130
- componentFactories: {
131
- top: this.config.details &&
132
- this.config.details["components"] &&
133
- this.config.details["components"].top
134
- ? compiledComponents.find((cc) => cc.component === this.config.details["components"].top).factory
135
- : null,
136
- bottom: this.config.details &&
137
- this.config.details["components"] &&
138
- this.config.details["components"].bottom
139
- ? compiledComponents.find((cc) => cc.component === this.config.details["components"].bottom).factory
140
- : null,
141
- },
142
- };
143
- }
144
- this.initPageOptions();
145
- this.facade.selected$.pipe(this.takeUntilDestroy).subscribe(item => {
146
- this.item = item;
147
- this.initPageOptions();
148
- this.cd.detectChanges();
149
- });
150
- this.refreshDynamicInstance();
151
- });
152
- }
153
- generateComponents(mode) {
154
- var _a, _b;
155
- return __awaiter(this, void 0, void 0, function* () {
156
- const compiledComponents = yield this.dynamicComponentLoader.getComponentsWithFactories({
157
- components: [
158
- ...(this.config[mode] &&
159
- this.config[mode]["components"] &&
160
- this.config[mode]["components"].top
161
- ? [this.config[mode]["components"].top]
162
- : []),
163
- ...(this.config[mode] &&
164
- this.config[mode]["components"] &&
165
- this.config[mode]["components"].bottom
166
- ? [this.config[mode]["components"].bottom]
167
- : []),
168
- ],
169
- });
170
- const topComponentFactory = (_a = compiledComponents.find((cc) => { var _a; return cc.component === ((_a = this.config[mode]["components"]) === null || _a === void 0 ? void 0 : _a.top); })) === null || _a === void 0 ? void 0 : _a.factory;
171
- const bottomComponentFactory = (_b = compiledComponents.find((cc) => { var _a; return cc.component === ((_a = this.config[mode]["components"]) === null || _a === void 0 ? void 0 : _a.bottom); })) === null || _b === void 0 ? void 0 : _b.factory;
172
- if (!this.topTpl.get(0) && topComponentFactory) {
173
- this.topTpl.createComponent(topComponentFactory);
174
- }
175
- if (!this.bottomTpl.get(0) && bottomComponentFactory) {
176
- this.bottomTpl.createComponent(bottomComponentFactory);
177
- }
178
- });
179
- }
180
- onPartialChange(val) {
181
- this.formPartialValue = val;
182
- }
183
- onChange(val) {
184
- this.formValue = val;
185
- }
186
- onValidChange(val) {
187
- this.formValid = val;
188
- }
189
- initPageOptions() {
190
- this.pageOptions = Object.assign(Object.assign({}, this.pageOptions), { title: this.getTitle(), endButtons: this.getButtons() });
191
- }
192
- getButtons() {
193
- switch (this.mode) {
194
- case "create":
195
- return [
196
- {
197
- icon: "add",
198
- text: "add",
199
- handler: () => {
200
- if (this.checkFirstInvalid()) {
201
- return;
202
- }
203
- this.facade.create(this.formValue);
204
- this.location.back();
205
- },
206
- },
207
- ];
208
- case "update":
209
- return [
210
- ...(this.config.details
211
- ? [
212
- {
213
- icon: "close",
214
- text: "cancel",
215
- handler: () => {
216
- this.mode = "details";
217
- this.initPageOptions();
218
- this.topTpl.clear();
219
- this.bottomTpl.clear();
220
- },
221
- disabled$: new BehaviorSubject(false),
222
- },
223
- ]
224
- : []),
225
- {
226
- icon: "save",
227
- text: "save",
228
- handler: () => {
229
- if (this.checkFirstInvalid()) {
230
- return;
231
- }
232
- this.formPartialValue.id = this.id;
233
- this.facade.updatePartial(this.formPartialValue);
234
- if (this.config.details) {
235
- this.mode = "details";
236
- this.initPageOptions();
237
- }
238
- else {
239
- this.location.back();
240
- }
241
- },
242
- },
243
- ];
244
- case "details":
245
- return this.config.edit
246
- ? [
247
- {
248
- icon: "create",
249
- text: "edit",
250
- handler: () => {
251
- this.mode = "update";
252
- this.generateComponents('edit');
253
- this.initPageOptions();
254
- },
255
- disabled$: new BehaviorSubject(false),
256
- },
257
- ]
258
- : [];
259
- }
260
- }
261
- getTitle() {
262
- const options = getModelOptions(this.config.type);
263
- const prefix = options.titleKey && this.item ? this.removeParagraph(this.item[options.titleKey]) + ' - ' : '';
264
- switch (this.mode) {
265
- case "create":
266
- return "add";
267
- case "update":
268
- return prefix + this.translateService.instant("change");
269
- case "details":
270
- return prefix + this.translateService.instant("details");
271
- }
272
- }
273
- removeParagraph(val) {
274
- if (!val || val.indexOf('<p>') !== 0)
275
- return val;
276
- const div = document.createElement("div");
277
- div.innerHTML = val;
278
- const item = div.querySelectorAll("p").item(0);
279
- return item.innerHTML;
280
- }
281
- checkFirstInvalid() {
282
- this.cd.detectChanges();
283
- const form = this.template === 'default'
284
- ? this.standardComponents.first.formComponents.first.form
285
- : this.baseInstance.formComponents.first.form;
286
- this.cd.detectChanges();
287
- if (form.valid)
288
- return false;
289
- const invalidFields = [];
290
- this.getInvalidFields(form, invalidFields, '');
291
- this.toastService.info({
292
- title: this.translateService.instant('INPUT.ERRORS.requires'),
293
- message: invalidFields.slice(0, 3).join('<br/>')
294
- });
295
- return true;
296
- }
297
- getInvalidFields(control, invalidFields, baseField, key = null) {
298
- var _a;
299
- if (control.valid)
300
- return;
301
- const field = key ? baseField + ' > ' + this.translateService.instant('MODEL.' + key) : baseField;
302
- if ((_a = control.errors) === null || _a === void 0 ? void 0 : _a.customMessage) {
303
- invalidFields.push(field + ` (${control.errors.customMessage})`);
304
- return;
305
- }
306
- if (control instanceof FormControl) {
307
- invalidFields.push(field);
308
- }
309
- if (control instanceof FormGroup) {
310
- Object.keys(control.controls).forEach(groupKey => {
311
- this.getInvalidFields(control.controls[groupKey], invalidFields, field, groupKey);
312
- });
313
- }
314
- if (control instanceof FormArray) {
315
- control.controls.forEach((c, index) => {
316
- this.getInvalidFields(c, invalidFields, field + `(${index + 1})`);
317
- });
318
- }
319
- }
320
- }
321
- /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
322
- ItemComponent.decorators = [
323
- { type: Component, args: [{
324
- selector: "smart-crud-item-page",
325
- template: `
326
- <smart-page [options]="pageOptions">
327
- <div #topTpl class="top-content"></div>
328
- <smart-crud-item-standard-page *ngIf="template === 'default'"
329
- [detailsOptions]="detailsOptions"
330
- [mode]="mode"
331
- [uniqueProvider]="uniqueProvider"
332
- (onPartialChange)="onPartialChange($event)"
333
- (onChange)="onChange($event)"
334
- (onValidChange)="onValidChange($event)"
335
- >
336
- <ng-container [ngTemplateOutlet]="contentTpl"></ng-container>
337
- </smart-crud-item-standard-page>
338
- <ng-template #contentTpl>
339
- <ng-content></ng-content>
340
- </ng-template>
341
- <div class="dynamic-content"></div>
342
- <div #bottomTpl class="bottom-content"></div>
343
- </smart-page>
344
- `
345
- },] }
346
- ];
347
- /**
348
- * @type {function(): !Array<(null|{
349
- * type: ?,
350
- * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
351
- * })>}
352
- * @nocollapse
353
- */
354
- ItemComponent.ctorParameters = () => [
355
- { type: Router },
356
- { type: ActivatedRoute },
357
- { type: CrudFacade },
358
- { type: CrudService },
359
- { type: ActivatedRoute },
360
- { type: DynamicComponentLoader },
361
- { type: TranslateService },
362
- { type: CrudFullConfig },
363
- { type: Location },
364
- { type: ChangeDetectorRef },
365
- { type: AuthService },
366
- { type: StyleService },
367
- { type: ElementRef },
368
- { type: ToastService },
369
- { type: PageService },
370
- { type: NgModuleRef },
371
- { type: ComponentFactoryResolver },
372
- { type: DetailsService }
373
- ];
374
- /** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
375
- ItemComponent.propDecorators = {
376
- standardComponents: [{ type: ViewChildren, args: [ItemStandardComponent, { read: ItemStandardComponent },] }],
377
- content: [{ type: ViewChild, args: [IonContent, { static: true },] }],
378
- contentTpl: [{ type: ViewChild, args: ["contentTpl", { read: TemplateRef, static: false },] }],
379
- topTpl: [{ type: ViewChild, args: ["topTpl", { read: ViewContainerRef, static: true },] }],
380
- bottomTpl: [{ type: ViewChild, args: ["bottomTpl", { read: ViewContainerRef, static: true },] }],
381
- dynamicContents: [{ type: ViewChildren, args: [DynamicContentDirective, { read: DynamicContentDirective },] }]
382
- };
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NydWQvc2hlbGwvYW5ndWxhci9zcmMvbGliL3BhZ2VzL2l0ZW0vaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUFFLHdCQUF3QixFQUNuQyxVQUFVLEVBQUUsV0FBVyxFQUV2QixTQUFTLEVBQUUsV0FBVyxFQUN0QixTQUFTLEVBQ1QsWUFBWSxFQUFFLGdCQUFnQixFQUMvQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFDTCxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUNuRCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFHakMsWUFBWSxFQUFFLFlBQVksR0FDekMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNqRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUF5Qi9ELE1BQU0sT0FBTyxhQUNULFNBQVEsc0JBQXNCLENBQWlDLGdCQUFnQixDQUFDO0lBMkNsRixZQUNVLE1BQWMsRUFDZCxXQUEyQixFQUMzQixNQUFxQixFQUNyQixPQUF1QixFQUN2QixLQUFxQixFQUNyQixzQkFBaUQsRUFDakQsZ0JBQWtDLEVBQ25DLE1BQXlCLEVBQ3hCLFFBQWtCLEVBQ2xCLEVBQXFCLEVBQzdCLFdBQXdCLEVBQ2hCLFlBQTBCLEVBQzFCLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQTJCLEVBQzNCLFNBQTJCLEVBQzNCLHdCQUFrRCxFQUNsRCxjQUE4QjtRQUV0QyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBbkJ2QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUEyQjtRQUNqRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ25DLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUF6RHhDLGdCQUFXLEdBQWlCO1lBQzFCLEtBQUssRUFBRSxFQUFFO1lBQ1QsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztRQUlGLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFnQm9ELHVCQUFrQixHQUFHLElBQUksU0FBUyxFQUE4QixDQUFDO1FBYXZJLG9CQUFlLEdBQUcsSUFBSSxTQUFTLEVBQTJCLENBQUM7UUF3QnpELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQWpERCxJQUFJLElBQUksQ0FBQyxHQUFXO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQTZDRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUssUUFBUTs7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV4QyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUV2RCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUMxQixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDdkM7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO3FCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO3FCQUMzQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7cUJBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7cUJBQzNCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxJQUFJLEVBQUU7d0JBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDakM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDUjtZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBTyxNQUFNLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxNQUFNLEdBQWdCO29CQUMxQixLQUFLLEVBQUUsRUFBRTtpQkFDVixDQUFDO2dCQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUNoQixHQUFHLEVBQUUsR0FBRzt3QkFDUixLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFDbEIsSUFBSSxFQUFFLEdBQUc7cUJBQ1YsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtvQkFDWCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDaEIsR0FBRyxFQUFFLElBQUk7d0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNkLElBQUksRUFBRSxJQUFJO3FCQUNYLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFFdEUsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNyQixDQUFDLENBQUEsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsMEJBQTBCLENBQ3JGO29CQUNFLFVBQVUsRUFBRTt3QkFDVixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPOzRCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7NEJBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUc7NEJBQ25DLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQzs0QkFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPOzRCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7NEJBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU07NEJBQ3BDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQzs0QkFDNUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDVjtpQkFDRixDQUNGLENBQUM7Z0JBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRztvQkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtvQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQXFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUNsRyxrQkFBa0IsRUFBRTt3QkFDbEIsR0FBRyxFQUNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzs0QkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDOzRCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHOzRCQUNuQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUNyQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQy9ELENBQUMsT0FBTzs0QkFDWCxDQUFDLENBQUMsSUFBSTt3QkFDVixNQUFNLEVBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPOzRCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7NEJBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU07NEJBQ3BDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3pCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FDaEUsQ0FBQyxPQUFPOzRCQUNULENBQUMsQ0FBQyxJQUFJO3FCQUNmO2lCQUNGLENBQUM7YUFDSDtZQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV2QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQztLQUFBO0lBRWEsa0JBQWtCLENBQUMsSUFBb0I7OztZQUNuRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLDBCQUEwQixDQUNuRjtnQkFDRSxVQUFVLEVBQUU7b0JBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHO3dCQUMvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDdkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU07d0JBQ2xDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO3dCQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNWO2FBQ0YsQ0FDSixDQUFDO1lBRUYsTUFBTSxtQkFBbUIsR0FBRyxNQUFBLGtCQUFrQixDQUFDLElBQUksQ0FDL0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFDLE9BQUEsRUFBRSxDQUFDLFNBQVMsTUFBSyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLDBDQUFFLEdBQUcsQ0FBQSxDQUFBLEVBQUEsQ0FDaEUsMENBQUUsT0FBTyxDQUFDO1lBRVgsTUFBTSxzQkFBc0IsR0FBRyxNQUFBLGtCQUFrQixDQUFDLElBQUksQ0FDbEQsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFDLE9BQUEsRUFBRSxDQUFDLFNBQVMsTUFBSyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLDBDQUFFLE1BQU0sQ0FBQSxDQUFBLEVBQUEsQ0FDbkUsMENBQUUsT0FBTyxDQUFDO1lBRVgsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixFQUFFO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLHNCQUFzQixFQUFFO2dCQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3hEOztLQUNGO0lBRUQsZUFBZSxDQUFDLEdBQWU7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQU07UUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVk7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFdBQVcsbUNBQ1gsSUFBSSxDQUFDLFdBQVcsS0FDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxVQUFVO1FBQ2hCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTztvQkFDTDt3QkFDRSxJQUFJLEVBQUUsS0FBSzt3QkFDWCxJQUFJLEVBQUUsS0FBSzt3QkFDWCxPQUFPLEVBQUUsR0FBRyxFQUFFOzRCQUNaLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7Z0NBQzVCLE9BQU87NkJBQ1I7NEJBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUN2QixDQUFDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixLQUFLLFFBQVE7Z0JBQ1gsT0FBTztvQkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO3dCQUNyQixDQUFDLENBQUM7NEJBQ0U7Z0NBQ0UsSUFBSSxFQUFFLE9BQU87Z0NBQ2IsSUFBSSxFQUFFLFFBQVE7Z0NBQ2QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQ0FDWixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztvQ0FDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29DQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29DQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dDQUN6QixDQUFDO2dDQUNELFNBQVMsRUFBRSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7NkJBQ3RDO3lCQUNGO3dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLE1BQU07d0JBQ1osT0FBTyxFQUFFLEdBQUcsRUFBRTs0QkFDWixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO2dDQUM1QixPQUFPOzZCQUNSOzRCQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUF1QixDQUFDLENBQUM7NEJBRXhELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0NBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2dDQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7NkJBQ3hCO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7NkJBQ3RCO3dCQUNILENBQUM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtvQkFDckIsQ0FBQyxDQUFDO3dCQUNFOzRCQUNFLElBQUksRUFBRSxRQUFROzRCQUNkLElBQUksRUFBRSxNQUFNOzRCQUNaLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0NBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7Z0NBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDaEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN6QixDQUFDOzRCQUNELFNBQVMsRUFBRSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7eUJBQ3RDO3FCQUNGO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDVjtJQUNILENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFOUcsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssUUFBUTtnQkFDWCxPQUFPLEtBQUssQ0FBQztZQUNmLEtBQUssUUFBUTtnQkFDWCxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFELEtBQUssU0FBUztnQkFDWixPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUFXO1FBQ2pDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFFakQsTUFBTSxHQUFHLEdBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxHQUFHLENBQUMsU0FBUyxHQUFDLEdBQUcsQ0FBQztRQUVsQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUVsRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUU3QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDN0QsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBd0IsRUFBRSxhQUFvQixFQUFFLFNBQWlCLEVBQUUsR0FBRyxHQUFHLElBQUk7O1FBQ3BHLElBQUksT0FBTyxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRTFCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWxHLElBQUksTUFBQSxPQUFPLENBQUMsTUFBTSwwQ0FBRSxhQUFhLEVBQUU7WUFDakMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDakUsT0FBTztTQUNSO1FBRUQsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFO1lBQ2xDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7UUFFRCxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7WUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BGLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7WUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7O1lBOVpGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQlQ7YUFDRjs7Ozs7Ozs7OztZQS9Dd0IsTUFBTTtZQUF0QixjQUFjO1lBZWQsVUFBVTtZQUVWLFdBQVc7WUFqQlgsY0FBYztZQU9yQixzQkFBc0I7WUFKaEIsZ0JBQWdCO1lBYWYsY0FBYztZQWRkLFFBQVE7WUFWZixpQkFBaUI7WUFjakIsV0FBVztZQUlHLFlBQVk7WUFoQjFCLFVBQVU7WUFnQmtCLFlBQVk7WUFhakMsV0FBVztZQTdCTixXQUFXO1lBRFosd0JBQXdCO1lBYUUsY0FBYzs7OztpQ0F1RWxELFlBQVksU0FBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRTtzQkFDbkUsU0FBUyxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7eUJBRXRDLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7cUJBRzVELFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkFHNUQsU0FBUyxTQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzhCQUcvRCxZQUFZLFNBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEVsZW1lbnRSZWYsIE5nTW9kdWxlUmVmLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuXG5pbXBvcnQge1xuICBBdXRoU2VydmljZSwgQ3JlYXRlRHluYW1pY0NvbXBvbmVudCwgRGV0YWlsc1NlcnZpY2UsXG4gIER5bmFtaWNDb21wb25lbnRMb2FkZXIsIER5bmFtaWNDb250ZW50RGlyZWN0aXZlLCBJQ2VsbFBpcGUsXG4gIElEZXRhaWxzT3B0aW9ucyxcbiAgSUljb25CdXR0b25PcHRpb25zLFxuICBJUGFnZU9wdGlvbnMsIFN0eWxlU2VydmljZSwgVG9hc3RTZXJ2aWNlLFxufSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9hbmd1bGFyXCI7XG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSBcIkBzbWFydHNvZnQwMDEvZG9tYWluLWNvcmVcIjtcbmltcG9ydCB7Z2V0TW9kZWxPcHRpb25zfSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9tb2RlbHNcIjtcblxuaW1wb3J0IHsgQ3J1ZEZhY2FkZSB9IGZyb20gXCIuLi8uLi8rc3RhdGUvY3J1ZC5mYWNhZGVcIjtcbmltcG9ydCB7IENydWRGdWxsQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NydWQuY29uZmlnXCI7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jcnVkL2NydWQuc2VydmljZVwiO1xuaW1wb3J0IHsgSUNydWRGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IElvbkNvbnRlbnQgfSBmcm9tIFwiQGlvbmljL2FuZ3VsYXJcIjtcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiXG5pbXBvcnQge0l0ZW1TdGFuZGFyZENvbXBvbmVudH0gZnJvbSBcIi4vc3RhbmRhcmQvc3RhbmRhcmQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDcnVkSXRlbVBhZ2VCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4vYmFzZS9iYXNlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGFnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcGFnZS9wYWdlLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNtYXJ0LWNydWQtaXRlbS1wYWdlXCIsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNtYXJ0LXBhZ2UgW29wdGlvbnNdPVwicGFnZU9wdGlvbnNcIj5cbiAgICAgIDxkaXYgI3RvcFRwbCBjbGFzcz1cInRvcC1jb250ZW50XCI+PC9kaXY+XG4gICAgICA8c21hcnQtY3J1ZC1pdGVtLXN0YW5kYXJkLXBhZ2UgKm5nSWY9XCJ0ZW1wbGF0ZSA9PT0gJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsc09wdGlvbnNdPVwiZGV0YWlsc09wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cIm1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1bmlxdWVQcm92aWRlcl09XCJ1bmlxdWVQcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uUGFydGlhbENoYW5nZSk9XCJvblBhcnRpYWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbGlkQ2hhbmdlKT1cIm9uVmFsaWRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9zbWFydC1jcnVkLWl0ZW0tc3RhbmRhcmQtcGFnZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRwbD5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLWNvbnRlbnRcIj48L2Rpdj5cbiAgICAgIDxkaXYgI2JvdHRvbVRwbCBjbGFzcz1cImJvdHRvbS1jb250ZW50XCI+PC9kaXY+XG4gICAgPC9zbWFydC1wYWdlPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1Db21wb25lbnQ8VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj5cbiAgICBleHRlbmRzIENyZWF0ZUR5bmFtaWNDb21wb25lbnQ8Q3J1ZEl0ZW1QYWdlQmFzZUNvbXBvbmVudDxhbnk+PignY3J1ZC1pdGVtLXBhZ2UnKVxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX21vZGU6IHN0cmluZztcblxuICBwYWdlT3B0aW9uczogSVBhZ2VPcHRpb25zID0ge1xuICAgIHRpdGxlOiBcIlwiLFxuICAgIHNob3dCYWNrQnV0dG9uOiB0cnVlLFxuICAgIGhpZGVNZW51QnV0dG9uOiB0cnVlLFxuICB9O1xuICBkZXRhaWxzT3B0aW9uczogSURldGFpbHNPcHRpb25zPFQ+O1xuICBpZDogc3RyaW5nO1xuICBmb3JtVmFsdWU6IFQ7XG4gIGZvcm1WYWxpZCA9IGZhbHNlO1xuICBpdGVtOiBUO1xuICBmb3JtUGFydGlhbFZhbHVlOiBQYXJ0aWFsPFQ+O1xuICB1bmlxdWVQcm92aWRlcjogKHZhbHVlczogUmVjb3JkPGtleW9mIFQsIGFueT4pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgc2V0IG1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb2RlID0gdmFsO1xuICAgIHRoaXMucmVmcmVzaER5bmFtaWNJbnN0YW5jZSgpO1xuICB9XG4gIGdldCBtb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGU7XG4gIH1cblxuXG4gIHNlbGVjdGVkJDogT2JzZXJ2YWJsZTxUPjtcblxuICBAVmlld0NoaWxkcmVuKEl0ZW1TdGFuZGFyZENvbXBvbmVudCwgeyByZWFkOiBJdGVtU3RhbmRhcmRDb21wb25lbnQgfSkgc3RhbmRhcmRDb21wb25lbnRzID0gbmV3IFF1ZXJ5TGlzdDxJdGVtU3RhbmRhcmRDb21wb25lbnQ8YW55Pj4oKTtcbiAgQFZpZXdDaGlsZChJb25Db250ZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50OiBJb25Db250ZW50O1xuXG4gIEBWaWV3Q2hpbGQoXCJjb250ZW50VHBsXCIsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgY29udGVudFRwbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKFwidG9wVHBsXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHRvcFRwbDogVmlld0NvbnRhaW5lclJlZjtcblxuICBAVmlld0NoaWxkKFwiYm90dG9tVHBsXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIGJvdHRvbVRwbDogVmlld0NvbnRhaW5lclJlZjtcblxuICBAVmlld0NoaWxkcmVuKER5bmFtaWNDb250ZW50RGlyZWN0aXZlLCB7IHJlYWQ6IER5bmFtaWNDb250ZW50RGlyZWN0aXZlIH0pXG4gIGR5bmFtaWNDb250ZW50cyA9IG5ldyBRdWVyeUxpc3Q8RHluYW1pY0NvbnRlbnREaXJlY3RpdmU+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGZhY2FkZTogQ3J1ZEZhY2FkZTxUPixcbiAgICBwcml2YXRlIHNlcnZpY2U6IENydWRTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudExvYWRlcjogRHluYW1pY0NvbXBvbmVudExvYWRlcjxUPixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIGNvbmZpZzogQ3J1ZEZ1bGxDb25maWc8VD4sXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdlU2VydmljZTogUGFnZVNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGRldGFpbHNTZXJ2aWNlOiBEZXRhaWxzU2VydmljZVxuICApIHtcbiAgICBzdXBlcihjZCwgbW9kdWxlUmVmLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xuXG4gICAgdGhpcy5zZWxlY3RlZCQgPSB0aGlzLmZhY2FkZS5zZWxlY3RlZCQ7XG4gIH1cblxuICByZWZyZXNoUHJvcGVydGllcygpIHtcbiAgICB0aGlzLmJhc2VJbnN0YW5jZS5kZXRhaWxzT3B0aW9ucyA9IHRoaXMuZGV0YWlsc09wdGlvbnM7XG4gICAgdGhpcy5iYXNlSW5zdGFuY2UubW9kZSA9IHRoaXMubW9kZTtcbiAgICB0aGlzLmJhc2VJbnN0YW5jZS51bmlxdWVQcm92aWRlciA9IHRoaXMudW5pcXVlUHJvdmlkZXI7XG4gICAgdGhpcy5iYXNlSW5zdGFuY2Uub25QYXJ0aWFsQ2hhbmdlLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUodmFsID0+IHRoaXMub25QYXJ0aWFsQ2hhbmdlKHZhbCkpO1xuICAgIHRoaXMuYmFzZUluc3RhbmNlLm9uQ2hhbmdlLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUodmFsID0+IHRoaXMub25DaGFuZ2UodmFsKSk7XG4gICAgdGhpcy5iYXNlSW5zdGFuY2Uub25WYWxpZENoYW5nZS5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKHZhbCA9PiB0aGlzLm9uVmFsaWRDaGFuZ2UodmFsKSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRldGFpbHNTZXJ2aWNlLmluaXQoKTtcbiAgICB0aGlzLnN0eWxlU2VydmljZS5pbml0KHRoaXMuZWxlbWVudFJlZik7XG5cbiAgICB0aGlzLnBhZ2VTZXJ2aWNlLmNoZWNrUGVybWlzc2lvbnMoKTtcblxuICAgIGlmICh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwuZW5kc1dpdGgoXCIvYWRkXCIpKSB7XG4gICAgICB0aGlzLm1vZGUgPSBcImNyZWF0ZVwiO1xuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbXBvbmVudHMoJ2FkZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGUgPSB0aGlzLmNvbmZpZy5kZXRhaWxzID8gXCJkZXRhaWxzXCIgOiBcInVwZGF0ZVwiO1xuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAndXBkYXRlJykge1xuICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlQ29tcG9uZW50cygnZWRpdCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGl2ZVJvdXRlLnBhcmFtc1xuICAgICAgICAucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3kpXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgaWQgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmFjYWRlLnNlbGVjdChpZCk7XG4gICAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5hY3RpdmVSb3V0ZS5xdWVyeVBhcmFtc1xuICAgICAgICAgIC5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCh7IGVkaXQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVkaXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlID0gXCJ1cGRhdGVcIjtcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNvbXBvbmVudHMoJ2VkaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVuaXF1ZVByb3ZpZGVyID0gYXN5bmMgKHZhbHVlcykgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyOiBJQ3J1ZEZpbHRlciA9IHtcbiAgICAgICAgcXVlcnk6IFtdLFxuICAgICAgfTtcblxuICAgICAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZmlsdGVyLnF1ZXJ5LnB1c2goe1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNba2V5XSxcbiAgICAgICAgICB0eXBlOiBcIj1cIixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgZmlsdGVyLnF1ZXJ5LnB1c2goe1xuICAgICAgICAgIGtleTogXCJpZFwiLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgICAgIHR5cGU6IFwiIT1cIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCB7IHRvdGFsQ291bnQgfSA9IGF3YWl0IHRoaXMuc2VydmljZS5nZXRMaXN0KGZpbHRlcikudG9Qcm9taXNlKCk7XG5cbiAgICAgIHJldHVybiAhdG90YWxDb3VudDtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRldGFpbHMpIHtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ29tcG9uZW50cyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudExvYWRlci5nZXRDb21wb25lbnRzV2l0aEZhY3RvcmllcyhcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZy5kZXRhaWxzICYmXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5kZXRhaWxzW1wiY29tcG9uZW50c1wiXSAmJlxuICAgICAgICAgICAgdGhpcy5jb25maWcuZGV0YWlsc1tcImNvbXBvbmVudHNcIl0udG9wXG4gICAgICAgICAgICAgID8gW3RoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdLnRvcF1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAuLi4odGhpcy5jb25maWcuZGV0YWlscyAmJlxuICAgICAgICAgICAgdGhpcy5jb25maWcuZGV0YWlsc1tcImNvbXBvbmVudHNcIl0gJiZcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdLmJvdHRvbVxuICAgICAgICAgICAgICAgID8gW3RoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdLmJvdHRvbV1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLmRldGFpbHNPcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB0aGlzLmNvbmZpZy50eXBlLFxuICAgICAgICBpdGVtJDogdGhpcy5mYWNhZGUuc2VsZWN0ZWQkLFxuICAgICAgICBjZWxsUGlwZTogdGhpcy5jb25maWcuZGV0YWlscyA/ICh0aGlzLmNvbmZpZy5kZXRhaWxzIGFzIHtjZWxsUGlwZT86IElDZWxsUGlwZTxUPn0pLmNlbGxQaXBlIDogbnVsbCxcbiAgICAgICAgY29tcG9uZW50RmFjdG9yaWVzOiB7XG4gICAgICAgICAgdG9wOlxuICAgICAgICAgICAgdGhpcy5jb25maWcuZGV0YWlscyAmJlxuICAgICAgICAgICAgdGhpcy5jb25maWcuZGV0YWlsc1tcImNvbXBvbmVudHNcIl0gJiZcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdLnRvcFxuICAgICAgICAgICAgICA/IGNvbXBpbGVkQ29tcG9uZW50cy5maW5kKFxuICAgICAgICAgICAgICAgICAgKGNjKSA9PiBjYy5jb21wb25lbnQgPT09IHRoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdLnRvcFxuICAgICAgICAgICAgICAgICkuZmFjdG9yeVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgYm90dG9tOlxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5kZXRhaWxzICYmXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdICYmXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmRldGFpbHNbXCJjb21wb25lbnRzXCJdLmJvdHRvbVxuICAgICAgICAgICAgICAgICAgPyBjb21waWxlZENvbXBvbmVudHMuZmluZChcbiAgICAgICAgICAgICAgICAgIChjYykgPT4gY2MuY29tcG9uZW50ID09PSB0aGlzLmNvbmZpZy5kZXRhaWxzW1wiY29tcG9uZW50c1wiXS5ib3R0b21cbiAgICAgICAgICAgICAgICAgICkuZmFjdG9yeVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRQYWdlT3B0aW9ucygpO1xuXG4gICAgdGhpcy5mYWNhZGUuc2VsZWN0ZWQkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoaXRlbSA9PiB7XG4gICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgdGhpcy5pbml0UGFnZU9wdGlvbnMoKTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoRHluYW1pY0luc3RhbmNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlQ29tcG9uZW50cyhtb2RlOiAnYWRkJyB8ICdlZGl0Jykge1xuICAgIGNvbnN0IGNvbXBpbGVkQ29tcG9uZW50cyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudExvYWRlci5nZXRDb21wb25lbnRzV2l0aEZhY3RvcmllcyhcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZ1ttb2RlXSAmJlxuICAgICAgICAgICAgdGhpcy5jb25maWdbbW9kZV1bXCJjb21wb25lbnRzXCJdICYmXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1ttb2RlXVtcImNvbXBvbmVudHNcIl0udG9wXG4gICAgICAgICAgICAgICAgPyBbdGhpcy5jb25maWdbbW9kZV1bXCJjb21wb25lbnRzXCJdLnRvcF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZ1ttb2RlXSAmJlxuICAgICAgICAgICAgdGhpcy5jb25maWdbbW9kZV1bXCJjb21wb25lbnRzXCJdICYmXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1ttb2RlXVtcImNvbXBvbmVudHNcIl0uYm90dG9tXG4gICAgICAgICAgICAgICAgPyBbdGhpcy5jb25maWdbbW9kZV1bXCJjb21wb25lbnRzXCJdLmJvdHRvbV1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRvcENvbXBvbmVudEZhY3RvcnkgPSBjb21waWxlZENvbXBvbmVudHMuZmluZChcbiAgICAgICAgKGNjKSA9PiBjYy5jb21wb25lbnQgPT09IHRoaXMuY29uZmlnW21vZGVdW1wiY29tcG9uZW50c1wiXT8udG9wXG4gICAgKT8uZmFjdG9yeTtcblxuICAgIGNvbnN0IGJvdHRvbUNvbXBvbmVudEZhY3RvcnkgPSBjb21waWxlZENvbXBvbmVudHMuZmluZChcbiAgICAgICAgKGNjKSA9PiBjYy5jb21wb25lbnQgPT09IHRoaXMuY29uZmlnW21vZGVdW1wiY29tcG9uZW50c1wiXT8uYm90dG9tXG4gICAgKT8uZmFjdG9yeTtcblxuICAgIGlmICghdGhpcy50b3BUcGwuZ2V0KDApICYmIHRvcENvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgIHRoaXMudG9wVHBsLmNyZWF0ZUNvbXBvbmVudCh0b3BDb21wb25lbnRGYWN0b3J5KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYm90dG9tVHBsLmdldCgwKSAmJiBib3R0b21Db21wb25lbnRGYWN0b3J5KSB7XG4gICAgICB0aGlzLmJvdHRvbVRwbC5jcmVhdGVDb21wb25lbnQoYm90dG9tQ29tcG9uZW50RmFjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgb25QYXJ0aWFsQ2hhbmdlKHZhbDogUGFydGlhbDxUPikge1xuICAgIHRoaXMuZm9ybVBhcnRpYWxWYWx1ZSA9IHZhbDtcbiAgfVxuXG4gIG9uQ2hhbmdlKHZhbDogVCkge1xuICAgIHRoaXMuZm9ybVZhbHVlID0gdmFsO1xuICB9XG5cbiAgb25WYWxpZENoYW5nZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZvcm1WYWxpZCA9IHZhbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFBhZ2VPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucGFnZU9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLnBhZ2VPcHRpb25zLFxuICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGUoKSxcbiAgICAgIGVuZEJ1dHRvbnM6IHRoaXMuZ2V0QnV0dG9ucygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEJ1dHRvbnMoKTogQXJyYXk8SUljb25CdXR0b25PcHRpb25zPiB7XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgIGNhc2UgXCJjcmVhdGVcIjpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiBcImFkZFwiLFxuICAgICAgICAgICAgdGV4dDogXCJhZGRcIixcbiAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tGaXJzdEludmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuZmFjYWRlLmNyZWF0ZSh0aGlzLmZvcm1WYWx1ZSk7XG4gICAgICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLih0aGlzLmNvbmZpZy5kZXRhaWxzXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpY29uOiBcImNsb3NlXCIsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBcImNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGUgPSBcImRldGFpbHNcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UGFnZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BUcGwuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3R0b21UcGwuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZCQ6IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246IFwic2F2ZVwiLFxuICAgICAgICAgICAgdGV4dDogXCJzYXZlXCIsXG4gICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrRmlyc3RJbnZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLmZvcm1QYXJ0aWFsVmFsdWUuaWQgPSB0aGlzLmlkO1xuICAgICAgICAgICAgICB0aGlzLmZhY2FkZS51cGRhdGVQYXJ0aWFsKHRoaXMuZm9ybVBhcnRpYWxWYWx1ZSBhcyBhbnkpO1xuXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlID0gXCJkZXRhaWxzXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UGFnZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgY2FzZSBcImRldGFpbHNcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmVkaXRcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGljb246IFwiY3JlYXRlXCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJlZGl0XCIsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlID0gXCJ1cGRhdGVcIjtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb21wb25lbnRzKCdlZGl0Jyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmluaXRQYWdlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0TW9kZWxPcHRpb25zKHRoaXMuY29uZmlnLnR5cGUpO1xuXG4gICAgY29uc3QgcHJlZml4ID0gb3B0aW9ucy50aXRsZUtleSAmJiB0aGlzLml0ZW0gPyB0aGlzLnJlbW92ZVBhcmFncmFwaCh0aGlzLml0ZW1bb3B0aW9ucy50aXRsZUtleV0pICsgJyAtICcgOiAnJztcblxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgICBjYXNlIFwiY3JlYXRlXCI6XG4gICAgICAgIHJldHVybiBcImFkZFwiO1xuICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJjaGFuZ2VcIik7XG4gICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJkZXRhaWxzXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGFyYWdyYXBoKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCB8fCB2YWwuaW5kZXhPZignPHA+JykgIT09IDApIHJldHVybiB2YWw7XG5cbiAgICBjb25zdCBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuaW5uZXJIVE1MPXZhbDtcblxuICAgIGNvbnN0IGl0ZW0gPSBkaXYucXVlcnlTZWxlY3RvckFsbChcInBcIikuaXRlbSgwKTtcblxuICAgIHJldHVybiBpdGVtLmlubmVySFRNTDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGaXJzdEludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBmb3JtID0gdGhpcy50ZW1wbGF0ZSA9PT0gJ2RlZmF1bHQnXG4gICAgICAgID8gdGhpcy5zdGFuZGFyZENvbXBvbmVudHMuZmlyc3QuZm9ybUNvbXBvbmVudHMuZmlyc3QuZm9ybVxuICAgICAgICA6IHRoaXMuYmFzZUluc3RhbmNlLmZvcm1Db21wb25lbnRzLmZpcnN0LmZvcm07XG5cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmIChmb3JtLnZhbGlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpbnZhbGlkRmllbGRzID0gW107XG5cbiAgICB0aGlzLmdldEludmFsaWRGaWVsZHMoZm9ybSwgaW52YWxpZEZpZWxkcywgJycpO1xuXG4gICAgdGhpcy50b2FzdFNlcnZpY2UuaW5mbyh7XG4gICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0lOUFVULkVSUk9SUy5yZXF1aXJlcycpLFxuICAgICAgbWVzc2FnZTogaW52YWxpZEZpZWxkcy5zbGljZSgwLCAzKS5qb2luKCc8YnIvPicpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW52YWxpZEZpZWxkcyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGludmFsaWRGaWVsZHM6IGFueVtdLCBiYXNlRmllbGQ6IHN0cmluZywga2V5ID0gbnVsbCkge1xuICAgIGlmIChjb250cm9sLnZhbGlkKSByZXR1cm47XG5cbiAgICBjb25zdCBmaWVsZCA9IGtleSA/IGJhc2VGaWVsZCArICcgPiAnICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ01PREVMLicgKyBrZXkpIDogYmFzZUZpZWxkO1xuXG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzPy5jdXN0b21NZXNzYWdlKSB7XG4gICAgICBpbnZhbGlkRmllbGRzLnB1c2goZmllbGQgKyBgICgke2NvbnRyb2wuZXJyb3JzLmN1c3RvbU1lc3NhZ2V9KWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgIGludmFsaWRGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goZ3JvdXBLZXkgPT4ge1xuICAgICAgICB0aGlzLmdldEludmFsaWRGaWVsZHMoY29udHJvbC5jb250cm9sc1tncm91cEtleV0sIGludmFsaWRGaWVsZHMsIGZpZWxkLCBncm91cEtleSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICB0aGlzLmdldEludmFsaWRGaWVsZHMoYywgaW52YWxpZEZpZWxkcywgZmllbGQgKyBgKCR7aW5kZXggKyAxfSlgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,13 +0,0 @@
1
- import { Component } from "@angular/core";
2
- import { CrudItemPageBaseComponent } from "../base/base.component";
3
- export class ItemStandardComponent extends CrudItemPageBaseComponent {
4
- }
5
- /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
6
- ItemStandardComponent.decorators = [
7
- { type: Component, args: [{
8
- selector: "smart-crud-item-standard-page",
9
- template: "<ng-container *ngIf=\"mode === 'details'; else editTpl\">\n <smart-details *ngIf=\"detailsOptions\" [options]='detailsOptions'></smart-details>\n</ng-container>\n\n<ng-template #editTpl>\n <smart-form\n [options]=\"\n (selected$ | async)\n | smartFormOptions : mode:config?.type:uniqueProvider : config.inputComponents\n \"\n (valuePartialChange)=\"onPartialChange.emit($event)\"\n (valueChange)=\"onChange.emit($event)\"\n (validChange)=\"onValidChange.emit($event)\"\n ></smart-form>\n</ng-template>\n\n<br/><br/>",
10
- styles: [""]
11
- },] }
12
- ];
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcnVkL3NoZWxsL2FuZ3VsYXIvc3JjL2xpYi9wYWdlcy9pdGVtL3N0YW5kYXJkL3N0YW5kYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXhDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBT2pFLE1BQU0sT0FBTyxxQkFBaUQsU0FBUSx5QkFBNEI7Ozs7WUFMakcsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSwrQkFBK0I7Z0JBQ3pDLDZsQkFBd0M7O2FBRTNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7SUVudGl0eX0gZnJvbSBcIkBzbWFydHNvZnQwMDEvZG9tYWluLWNvcmVcIjtcblxuaW1wb3J0IHtDcnVkSXRlbVBhZ2VCYXNlQ29tcG9uZW50fSBmcm9tIFwiLi4vYmFzZS9iYXNlLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzbWFydC1jcnVkLWl0ZW0tc3RhbmRhcmQtcGFnZVwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vc3RhbmRhcmQuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vc3RhbmRhcmQuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1TdGFuZGFyZENvbXBvbmVudDxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PiBleHRlbmRzIENydWRJdGVtUGFnZUJhc2VDb21wb25lbnQ8VD4ge30iXX0=
@@ -1,30 +0,0 @@
1
- import { Directive, Input, ViewChild, ViewContainerRef } from "@angular/core";
2
- import { BaseComponent, } from "@smartsoft001/angular";
3
- import { CrudFullConfig } from "../../../crud.config";
4
- export class CrudListPageBaseComponent extends BaseComponent {
5
- constructor(config) {
6
- super();
7
- this.config = config;
8
- }
9
- }
10
- CrudListPageBaseComponent.smartType = "crud-list-page";
11
- /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
12
- CrudListPageBaseComponent.decorators = [
13
- { type: Directive }
14
- ];
15
- /**
16
- * @type {function(): !Array<(null|{
17
- * type: ?,
18
- * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
19
- * })>}
20
- * @nocollapse
21
- */
22
- CrudListPageBaseComponent.ctorParameters = () => [
23
- { type: CrudFullConfig }
24
- ];
25
- /** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
26
- CrudListPageBaseComponent.propDecorators = {
27
- contentTpl: [{ type: ViewChild, args: ["contentTpl", { read: ViewContainerRef, static: true },] }],
28
- listOptions: [{ type: Input }]
29
- };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NydWQvc2hlbGwvYW5ndWxhci9zcmMvbGliL3BhZ2VzL2xpc3QvYmFzZS9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDSCxhQUFhLEdBR2hCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3BELE1BQU0sT0FBZ0IseUJBQXFELFNBQVEsYUFBYTtJQVM1RixZQUNXLE1BQXlCO1FBRWhDLEtBQUssRUFBRSxDQUFDO1FBRkQsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7SUFHcEMsQ0FBQzs7QUFaTSxtQ0FBUyxHQUF5QixnQkFBZ0IsQ0FBQzs7O1lBRjdELFNBQVM7Ozs7Ozs7Ozs7WUFGRixjQUFjOzs7O3lCQU1qQixTQUFTLFNBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MEJBR2hFLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBJbnB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge1xuICAgIEJhc2VDb21wb25lbnQsXG4gICAgRHluYW1pY0NvbXBvbmVudFR5cGUsXG4gICAgSUxpc3RPcHRpb25zLFxufSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9hbmd1bGFyXCI7XG5pbXBvcnQge0lFbnRpdHl9IGZyb20gXCJAc21hcnRzb2Z0MDAxL2RvbWFpbi1jb3JlXCI7XG5pbXBvcnQge0NydWRGdWxsQ29uZmlnfSBmcm9tIFwiLi4vLi4vLi4vY3J1ZC5jb25maWdcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3J1ZExpc3RQYWdlQmFzZUNvbXBvbmVudDxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAgIHN0YXRpYyBzbWFydFR5cGU6IER5bmFtaWNDb21wb25lbnRUeXBlID0gXCJjcnVkLWxpc3QtcGFnZVwiO1xuXG4gICAgQFZpZXdDaGlsZChcImNvbnRlbnRUcGxcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBjb250ZW50VHBsOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQElucHV0KClcbiAgICBsaXN0T3B0aW9uczogSUxpc3RPcHRpb25zPFQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjb25maWc6IENydWRGdWxsQ29uZmlnPFQ+LFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbn0iXX0=