@coreui/angular 2.13.2 → 2.14.1

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 (104) hide show
  1. package/README.md +215 -84
  2. package/esm2020/coreui-angular.mjs +5 -5
  3. package/esm2020/lib/aside/app-aside.component.mjs +58 -58
  4. package/esm2020/lib/aside/app-aside.module.mjs +28 -30
  5. package/esm2020/lib/aside/index.mjs +2 -2
  6. package/esm2020/lib/aside/public_api.mjs +3 -3
  7. package/esm2020/lib/breadcrumb/app-breadcrumb.component.mjs +62 -62
  8. package/esm2020/lib/breadcrumb/app-breadcrumb.module.mjs +31 -31
  9. package/esm2020/lib/breadcrumb/app-breadcrumb.service.mjs +46 -46
  10. package/esm2020/lib/breadcrumb/cui-breadcrumb.component.mjs +38 -38
  11. package/esm2020/lib/breadcrumb/index.mjs +2 -2
  12. package/esm2020/lib/breadcrumb/public_api.mjs +4 -4
  13. package/esm2020/lib/footer/app-footer.component.mjs +40 -40
  14. package/esm2020/lib/footer/app-footer.module.mjs +18 -18
  15. package/esm2020/lib/footer/index.mjs +2 -2
  16. package/esm2020/lib/footer/public_api.mjs +3 -3
  17. package/esm2020/lib/header/app-header.component.mjs +97 -97
  18. package/esm2020/lib/header/app-header.module.mjs +32 -34
  19. package/esm2020/lib/header/index.mjs +2 -2
  20. package/esm2020/lib/header/public_api.mjs +3 -3
  21. package/esm2020/lib/shared/classes.mjs +15 -15
  22. package/esm2020/lib/shared/index.mjs +2 -2
  23. package/esm2020/lib/shared/layout/layout.directive.mjs +233 -233
  24. package/esm2020/lib/shared/layout/layout.module.mjs +54 -56
  25. package/esm2020/lib/shared/public_api.mjs +5 -5
  26. package/esm2020/lib/shared/replace.mjs +12 -12
  27. package/esm2020/lib/shared/toggle-classes.mjs +46 -46
  28. package/esm2020/lib/sidebar/app-sidebar-footer.component.mjs +20 -20
  29. package/esm2020/lib/sidebar/app-sidebar-form.component.mjs +20 -20
  30. package/esm2020/lib/sidebar/app-sidebar-header.component.mjs +20 -20
  31. package/esm2020/lib/sidebar/app-sidebar-minimizer.component.mjs +35 -35
  32. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-badge.pipe.mjs +22 -22
  33. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-divider.component.mjs +18 -18
  34. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-icon.pipe.mjs +21 -21
  35. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-item-class.pipe.mjs +31 -31
  36. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-items.component.mjs +173 -181
  37. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-label.component.mjs +44 -44
  38. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.component.mjs +97 -97
  39. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.pipe.mjs +21 -21
  40. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-title.component.mjs +67 -67
  41. package/esm2020/lib/sidebar/app-sidebar-nav.component.mjs +33 -33
  42. package/esm2020/lib/sidebar/app-sidebar-nav.directive.mjs +42 -42
  43. package/esm2020/lib/sidebar/app-sidebar-nav.mjs +2 -2
  44. package/esm2020/lib/sidebar/app-sidebar-nav.service.mjs +53 -53
  45. package/esm2020/lib/sidebar/app-sidebar.component.mjs +112 -112
  46. package/esm2020/lib/sidebar/app-sidebar.module.mjs +117 -119
  47. package/esm2020/lib/sidebar/app-sidebar.service.mjs +21 -21
  48. package/esm2020/lib/sidebar/index.mjs +2 -2
  49. package/esm2020/lib/sidebar/public_api.mjs +16 -16
  50. package/esm2020/public-api.mjs +11 -11
  51. package/fesm2015/coreui-angular.mjs +1583 -1599
  52. package/fesm2015/coreui-angular.mjs.map +1 -1
  53. package/fesm2020/coreui-angular.mjs +1558 -1574
  54. package/fesm2020/coreui-angular.mjs.map +1 -1
  55. package/{coreui-angular.d.ts → index.d.ts} +5 -5
  56. package/lib/aside/app-aside.component.d.ts +19 -19
  57. package/lib/aside/app-aside.module.d.ts +9 -9
  58. package/lib/aside/index.d.ts +1 -1
  59. package/lib/aside/public_api.d.ts +2 -2
  60. package/lib/breadcrumb/app-breadcrumb.component.d.ts +19 -19
  61. package/lib/breadcrumb/app-breadcrumb.module.d.ts +12 -12
  62. package/lib/breadcrumb/app-breadcrumb.service.d.ts +12 -12
  63. package/lib/breadcrumb/cui-breadcrumb.component.d.ts +18 -18
  64. package/lib/breadcrumb/index.d.ts +1 -1
  65. package/lib/breadcrumb/public_api.d.ts +3 -3
  66. package/lib/footer/app-footer.component.d.ts +15 -15
  67. package/lib/footer/app-footer.module.d.ts +8 -8
  68. package/lib/footer/index.d.ts +1 -1
  69. package/lib/footer/public_api.d.ts +2 -2
  70. package/lib/header/app-header.component.d.ts +34 -34
  71. package/lib/header/app-header.module.d.ts +10 -10
  72. package/lib/header/index.d.ts +1 -1
  73. package/lib/header/public_api.d.ts +2 -2
  74. package/lib/shared/classes.d.ts +2 -2
  75. package/lib/shared/index.d.ts +1 -1
  76. package/lib/shared/layout/layout.directive.d.ts +78 -78
  77. package/lib/shared/layout/layout.module.d.ts +8 -8
  78. package/lib/shared/public_api.d.ts +4 -4
  79. package/lib/shared/replace.d.ts +1 -1
  80. package/lib/shared/toggle-classes.d.ts +12 -12
  81. package/lib/sidebar/app-sidebar-footer.component.d.ts +7 -7
  82. package/lib/sidebar/app-sidebar-form.component.d.ts +7 -7
  83. package/lib/sidebar/app-sidebar-header.component.d.ts +7 -7
  84. package/lib/sidebar/app-sidebar-minimizer.component.d.ts +11 -11
  85. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-badge.pipe.d.ts +7 -7
  86. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-divider.component.d.ts +10 -10
  87. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-icon.pipe.d.ts +7 -7
  88. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-item-class.pipe.d.ts +10 -10
  89. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-items.component.d.ts +25 -25
  90. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-label.component.d.ts +19 -19
  91. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.component.d.ts +36 -36
  92. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.pipe.d.ts +7 -7
  93. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-title.component.d.ts +16 -16
  94. package/lib/sidebar/app-sidebar-nav.component.d.ts +15 -15
  95. package/lib/sidebar/app-sidebar-nav.d.ts +50 -50
  96. package/lib/sidebar/app-sidebar-nav.directive.d.ts +19 -19
  97. package/lib/sidebar/app-sidebar-nav.service.d.ts +21 -21
  98. package/lib/sidebar/app-sidebar.component.d.ts +33 -33
  99. package/lib/sidebar/app-sidebar.module.d.ts +25 -25
  100. package/lib/sidebar/app-sidebar.service.d.ts +12 -12
  101. package/lib/sidebar/index.d.ts +1 -1
  102. package/lib/sidebar/public_api.d.ts +9 -9
  103. package/package.json +7 -7
  104. package/public-api.d.ts +5 -5
@@ -1,233 +1,233 @@
1
- import { Directive, HostListener, Inject, Input } from '@angular/core';
2
- import { DOCUMENT } from '@angular/common';
3
- import { asideMenuCssClasses, sidebarCssClasses } from '../classes';
4
- import { ClassToggler } from '../toggle-classes';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../toggle-classes";
7
- /**
8
- * Allows the sidebar to be toggled via click.
9
- */
10
- export class SidebarToggleDirective {
11
- constructor(classToggler) {
12
- this.classToggler = classToggler;
13
- this.breakpoint = false;
14
- }
15
- ngOnInit() {
16
- this.bp = this.breakpoint;
17
- }
18
- toggleOpen($event) {
19
- $event.preventDefault();
20
- const cssClass = this.bp ? `sidebar-${this.bp}-show` : sidebarCssClasses[0];
21
- this.classToggler.toggleClasses(cssClass, sidebarCssClasses);
22
- }
23
- }
24
- SidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SidebarToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
25
- SidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: SidebarToggleDirective, selector: "[appSidebarToggler]", inputs: { breakpoint: ["appSidebarToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SidebarToggleDirective, decorators: [{
27
- type: Directive,
28
- args: [{
29
- selector: '[appSidebarToggler]',
30
- providers: [ClassToggler]
31
- }]
32
- }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
33
- type: Input,
34
- args: ['appSidebarToggler']
35
- }], toggleOpen: [{
36
- type: HostListener,
37
- args: ['click', ['$event']]
38
- }] } });
39
- export class SidebarMinimizeDirective {
40
- constructor(document, renderer) {
41
- this.document = document;
42
- this.renderer = renderer;
43
- }
44
- toggleOpen($event) {
45
- $event.preventDefault();
46
- const body = this.document.body;
47
- body.classList.contains('sidebar-minimized') ?
48
- this.renderer.removeClass(body, 'sidebar-minimized') :
49
- this.renderer.addClass(body, 'sidebar-minimized');
50
- }
51
- }
52
- SidebarMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SidebarMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
53
- SidebarMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: SidebarMinimizeDirective, selector: "[appSidebarMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SidebarMinimizeDirective, decorators: [{
55
- type: Directive,
56
- args: [{
57
- selector: '[appSidebarMinimizer]'
58
- }]
59
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
60
- type: Inject,
61
- args: [DOCUMENT]
62
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
63
- type: HostListener,
64
- args: ['click', ['$event']]
65
- }] } });
66
- export class MobileSidebarToggleDirective {
67
- constructor(document, renderer) {
68
- this.document = document;
69
- this.renderer = renderer;
70
- }
71
- toggleOpen($event) {
72
- $event.preventDefault();
73
- const body = this.document.body;
74
- body.classList.contains('sidebar-show') ?
75
- this.renderer.removeClass(body, 'sidebar-show') :
76
- this.renderer.addClass(body, 'sidebar-show');
77
- }
78
- }
79
- MobileSidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MobileSidebarToggleDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
80
- MobileSidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: MobileSidebarToggleDirective, selector: "[appMobileSidebarToggler]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MobileSidebarToggleDirective, decorators: [{
82
- type: Directive,
83
- args: [{
84
- selector: '[appMobileSidebarToggler]'
85
- }]
86
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
87
- type: Inject,
88
- args: [DOCUMENT]
89
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
90
- type: HostListener,
91
- args: ['click', ['$event']]
92
- }] } });
93
- /**
94
- * Allows the off-canvas sidebar to be closed via click.
95
- */
96
- export class SidebarOffCanvasCloseDirective {
97
- constructor(document, renderer) {
98
- this.document = document;
99
- this.renderer = renderer;
100
- }
101
- toggleOpen($event) {
102
- $event.preventDefault();
103
- const body = this.document.body;
104
- if (body.classList.contains('sidebar-off-canvas')) {
105
- body.classList.contains('sidebar-show') ?
106
- this.renderer.removeClass(body, 'sidebar-show') :
107
- this.renderer.addClass(body, 'sidebar-show');
108
- }
109
- }
110
- }
111
- SidebarOffCanvasCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SidebarOffCanvasCloseDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
112
- SidebarOffCanvasCloseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: SidebarOffCanvasCloseDirective, selector: "[appSidebarClose]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SidebarOffCanvasCloseDirective, decorators: [{
114
- type: Directive,
115
- args: [{
116
- selector: '[appSidebarClose]'
117
- }]
118
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
119
- type: Inject,
120
- args: [DOCUMENT]
121
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
122
- type: HostListener,
123
- args: ['click', ['$event']]
124
- }] } });
125
- export class BrandMinimizeDirective {
126
- constructor(document, renderer) {
127
- this.document = document;
128
- this.renderer = renderer;
129
- }
130
- toggleOpen($event) {
131
- $event.preventDefault();
132
- const body = this.document.body;
133
- body.classList.contains('brand-minimized') ?
134
- this.renderer.removeClass(body, 'brand-minimized') :
135
- this.renderer.addClass(body, 'brand-minimized');
136
- }
137
- }
138
- BrandMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BrandMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
139
- BrandMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: BrandMinimizeDirective, selector: "[appBrandMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BrandMinimizeDirective, decorators: [{
141
- type: Directive,
142
- args: [{
143
- selector: '[appBrandMinimizer]'
144
- }]
145
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
146
- type: Inject,
147
- args: [DOCUMENT]
148
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
149
- type: HostListener,
150
- args: ['click', ['$event']]
151
- }] } });
152
- /**
153
- * Allows the aside to be toggled via click.
154
- */
155
- export class AsideToggleDirective {
156
- constructor(classToggler) {
157
- this.classToggler = classToggler;
158
- this.breakpoint = false;
159
- }
160
- ngOnInit() {
161
- this.bp = this.breakpoint;
162
- }
163
- toggleOpen($event) {
164
- $event.preventDefault();
165
- const cssClass = this.bp ? `aside-menu-${this.bp}-show` : asideMenuCssClasses[0];
166
- this.classToggler.toggleClasses(cssClass, asideMenuCssClasses);
167
- }
168
- }
169
- AsideToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AsideToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
170
- AsideToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: AsideToggleDirective, selector: "[appAsideMenuToggler]", inputs: { breakpoint: ["appAsideMenuToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AsideToggleDirective, decorators: [{
172
- type: Directive,
173
- args: [{
174
- selector: '[appAsideMenuToggler]',
175
- providers: [ClassToggler]
176
- }]
177
- }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
178
- type: Input,
179
- args: ['appAsideMenuToggler']
180
- }], toggleOpen: [{
181
- type: HostListener,
182
- args: ['click', ['$event']]
183
- }] } });
184
- export class HtmlAttributesDirective {
185
- constructor(renderer, el) {
186
- this.renderer = renderer;
187
- this.el = el;
188
- this.appHtmlAttr = {};
189
- }
190
- ngOnInit() {
191
- const attribs = this.appHtmlAttr;
192
- for (const attr in attribs) {
193
- if (attr === 'style' && typeof (attribs[attr]) === 'object') {
194
- this.setStyle(attribs[attr]);
195
- }
196
- else if (attr === 'class') {
197
- this.addClass(attribs[attr]);
198
- }
199
- else {
200
- this.setAttrib(attr, attribs[attr]);
201
- }
202
- }
203
- }
204
- setStyle(styles) {
205
- for (const style in styles) {
206
- if (style) {
207
- this.renderer.setStyle(this.el.nativeElement, style, styles[style]);
208
- }
209
- }
210
- }
211
- addClass(classes) {
212
- const classArray = (Array.isArray(classes) ? classes : classes.split(' '));
213
- classArray.filter((element) => element.length > 0).forEach(element => {
214
- this.renderer.addClass(this.el.nativeElement, element);
215
- });
216
- }
217
- setAttrib(key, value) {
218
- value !== null ?
219
- this.renderer.setAttribute(this.el.nativeElement, key, value) :
220
- this.renderer.removeAttribute(this.el.nativeElement, key);
221
- }
222
- }
223
- HtmlAttributesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HtmlAttributesDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
224
- HtmlAttributesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: HtmlAttributesDirective, selector: "[appHtmlAttr]", inputs: { appHtmlAttr: "appHtmlAttr" }, ngImport: i0 });
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HtmlAttributesDirective, decorators: [{
226
- type: Directive,
227
- args: [{
228
- selector: '[appHtmlAttr]'
229
- }]
230
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { appHtmlAttr: [{
231
- type: Input
232
- }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS9hbmd1bGFyL3NyYy9saWIvc2hhcmVkL2xheW91dC9sYXlvdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFFakQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRmxCLGVBQVUsR0FBcUIsS0FBSyxDQUFDO0lBRWhCLENBQUM7SUFDbEQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMvRCxDQUFDOztvSEFaVSxzQkFBc0I7d0dBQXRCLHNCQUFzQixtS0FGdEIsQ0FBQyxZQUFZLENBQUM7NEZBRWQsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUI7bUdBRTZCLFVBQVU7c0JBQXJDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQU8xQixVQUFVO3NCQURULFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQVduQyxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQzRCLFFBQWEsRUFDL0IsUUFBbUI7UUFERCxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7SUFDekIsQ0FBQztJQUdMLFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxDQUFDOztzSEFiVSx3QkFBd0Isa0JBRXpCLFFBQVE7MEdBRlAsd0JBQXdCOzRGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtpQkFDbEM7OzBCQUdJLE1BQU07MkJBQUMsUUFBUTtvRUFLbEIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFhbkMsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUM0QixRQUFhLEVBQy9CLFFBQW1CO1FBREQsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQ3pCLENBQUM7SUFHTCxVQUFVLENBQUMsTUFBVztRQUNwQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQzs7MEhBYlUsNEJBQTRCLGtCQUU3QixRQUFROzhHQUZQLDRCQUE0Qjs0RkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDOzswQkFHSSxNQUFNOzJCQUFDLFFBQVE7b0VBS2xCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBVW5DOztHQUVHO0FBSUgsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxZQUM0QixRQUFhLEVBQy9CLFFBQW1CO1FBREQsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQ3pCLENBQUM7SUFHTCxVQUFVLENBQUMsTUFBVztRQUNwQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOzs0SEFoQlUsOEJBQThCLGtCQUUvQixRQUFRO2dIQUZQLDhCQUE4Qjs0RkFBOUIsOEJBQThCO2tCQUgxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOzswQkFHSSxNQUFNOzJCQUFDLFFBQVE7b0VBS2xCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBZ0JuQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQzRCLFFBQWEsRUFDL0IsUUFBbUI7UUFERCxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7SUFDekIsQ0FBQztJQUdMLFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxDQUFDOztvSEFiVSxzQkFBc0Isa0JBRXZCLFFBQVE7d0dBRlAsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7OzBCQUdJLE1BQU07MkJBQUMsUUFBUTtvRUFLbEIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFXbkM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRmhCLGVBQVUsR0FBcUIsS0FBSyxDQUFDO0lBRWxCLENBQUM7SUFDbEQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNqRSxDQUFDOztrSEFaVSxvQkFBb0I7c0dBQXBCLG9CQUFvQix1S0FGcEIsQ0FBQyxZQUFZLENBQUM7NEZBRWQsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUI7bUdBRStCLFVBQVU7c0JBQXZDLEtBQUs7dUJBQUMscUJBQXFCO2dCQU81QixVQUFVO3NCQURULFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQVduQyxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQ1UsUUFBbUIsRUFDbkIsRUFBYztRQURkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUpmLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztJQUtsRCxDQUFDO0lBRUosUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLE9BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUc7Z0JBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDOUI7aUJBQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLE1BQVc7UUFDMUIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDMUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQXVCO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0UsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFFLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFvQjtRQUNqRCxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDOztxSEF4Q1UsdUJBQXVCO3lHQUF2Qix1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtpQkFDMUI7eUhBRVUsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IGFzaWRlTWVudUNzc0NsYXNzZXMsIHNpZGViYXJDc3NDbGFzc2VzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENsYXNzVG9nZ2xlciB9IGZyb20gJy4uL3RvZ2dsZS1jbGFzc2VzJztcclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdGhlIHNpZGViYXIgdG8gYmUgdG9nZ2xlZCB2aWEgY2xpY2suXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1thcHBTaWRlYmFyVG9nZ2xlcl0nLFxyXG4gIHByb3ZpZGVyczogW0NsYXNzVG9nZ2xlcl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpZGViYXJUb2dnbGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgnYXBwU2lkZWJhclRvZ2dsZXInKSBicmVha3BvaW50OiBzdHJpbmcgfCBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJwITogc3RyaW5nIHwgYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsYXNzVG9nZ2xlcjogQ2xhc3NUb2dnbGVyKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgY3NzQ2xhc3MgPSB0aGlzLmJwID8gYHNpZGViYXItJHt0aGlzLmJwfS1zaG93YCA6IHNpZGViYXJDc3NDbGFzc2VzWzBdO1xyXG4gICAgdGhpcy5jbGFzc1RvZ2dsZXIudG9nZ2xlQ2xhc3Nlcyhjc3NDbGFzcywgc2lkZWJhckNzc0NsYXNzZXMpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwU2lkZWJhck1pbmltaXplcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyTWluaW1pemVEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRvY3VtZW50LmJvZHk7XHJcbiAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1taW5pbWl6ZWQnKSA/XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItbWluaW1pemVkJykgOlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdzaWRlYmFyLW1pbmltaXplZCcpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwTW9iaWxlU2lkZWJhclRvZ2dsZXJdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9iaWxlU2lkZWJhclRvZ2dsZURpcmVjdGl2ZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgKSB7IH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgYm9keSA9IHRoaXMuZG9jdW1lbnQuYm9keTtcclxuICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaWRlYmFyLXNob3cnKSA/XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItc2hvdycpIDpcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib2R5LCAnc2lkZWJhci1zaG93Jyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWxsb3dzIHRoZSBvZmYtY2FudmFzIHNpZGViYXIgdG8gYmUgY2xvc2VkIHZpYSBjbGljay5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcFNpZGViYXJDbG9zZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyT2ZmQ2FudmFzQ2xvc2VEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBjb25zdCBib2R5ID0gdGhpcy5kb2N1bWVudC5ib2R5O1xyXG4gICAgaWYgKGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaWRlYmFyLW9mZi1jYW52YXMnKSkge1xyXG4gICAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1zaG93JykgP1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItc2hvdycpIDpcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdzaWRlYmFyLXNob3cnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcEJyYW5kTWluaW1pemVyXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyYW5kTWluaW1pemVEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRvY3VtZW50LmJvZHk7XHJcbiAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnYnJhbmQtbWluaW1pemVkJykgP1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHksICdicmFuZC1taW5pbWl6ZWQnKSA6XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9keSwgJ2JyYW5kLW1pbmltaXplZCcpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdGhlIGFzaWRlIHRvIGJlIHRvZ2dsZWQgdmlhIGNsaWNrLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwQXNpZGVNZW51VG9nZ2xlcl0nLFxyXG4gIHByb3ZpZGVyczogW0NsYXNzVG9nZ2xlcl1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFzaWRlVG9nZ2xlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoJ2FwcEFzaWRlTWVudVRvZ2dsZXInKSBicmVha3BvaW50OiBzdHJpbmcgfCBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJwITogc3RyaW5nIHwgYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsYXNzVG9nZ2xlcjogQ2xhc3NUb2dnbGVyKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgY3NzQ2xhc3MgPSB0aGlzLmJwID8gYGFzaWRlLW1lbnUtJHt0aGlzLmJwfS1zaG93YCA6IGFzaWRlTWVudUNzc0NsYXNzZXNbMF07XHJcbiAgICB0aGlzLmNsYXNzVG9nZ2xlci50b2dnbGVDbGFzc2VzKGNzc0NsYXNzLCBhc2lkZU1lbnVDc3NDbGFzc2VzKTtcclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcEh0bWxBdHRyXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEh0bWxBdHRyaWJ1dGVzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhcHBIdG1sQXR0cj86IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgYXR0cmlicyA9IHRoaXMuYXBwSHRtbEF0dHI7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gYXR0cmlicykge1xyXG4gICAgICBpZiAoYXR0ciA9PT0gJ3N0eWxlJyAmJiB0eXBlb2YoYXR0cmlic1thdHRyXSkgPT09ICdvYmplY3QnICkge1xyXG4gICAgICAgIHRoaXMuc2V0U3R5bGUoYXR0cmlic1thdHRyXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYXR0ciA9PT0gJ2NsYXNzJykge1xyXG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoYXR0cmlic1thdHRyXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWIoYXR0ciwgYXR0cmlic1thdHRyXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3R5bGUoc3R5bGVzOiBhbnkpIHtcclxuICAgIGZvciAoY29uc3Qgc3R5bGUgaW4gc3R5bGVzKSB7XHJcbiAgICAgIGlmIChzdHlsZSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBzdHlsZSwgc3R5bGVzW3N0eWxlXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2xhc3MoY2xhc3Nlczogc3RyaW5nIHwgYW55W10pIHtcclxuICAgIGNvbnN0IGNsYXNzQXJyYXkgPSAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSA/IGNsYXNzZXMgOiBjbGFzc2VzLnNwbGl0KCcgJykpO1xyXG4gICAgY2xhc3NBcnJheS5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQubGVuZ3RoID4gMCkuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGVsZW1lbnQgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBdHRyaWIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB2YWx1ZSAhPT0gbnVsbCA/XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwga2V5LCB2YWx1ZSApIDpcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBrZXkpO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Directive, HostListener, Inject, Input } from '@angular/core';
2
+ import { DOCUMENT } from '@angular/common';
3
+ import { asideMenuCssClasses, sidebarCssClasses } from '../classes';
4
+ import { ClassToggler } from '../toggle-classes';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../toggle-classes";
7
+ /**
8
+ * Allows the sidebar to be toggled via click.
9
+ */
10
+ export class SidebarToggleDirective {
11
+ constructor(classToggler) {
12
+ this.classToggler = classToggler;
13
+ this.breakpoint = false;
14
+ }
15
+ ngOnInit() {
16
+ this.bp = this.breakpoint;
17
+ }
18
+ toggleOpen($event) {
19
+ $event.preventDefault();
20
+ const cssClass = this.bp ? `sidebar-${this.bp}-show` : sidebarCssClasses[0];
21
+ this.classToggler.toggleClasses(cssClass, sidebarCssClasses);
22
+ }
23
+ }
24
+ SidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SidebarToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
25
+ SidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: SidebarToggleDirective, selector: "[appSidebarToggler]", inputs: { breakpoint: ["appSidebarToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SidebarToggleDirective, decorators: [{
27
+ type: Directive,
28
+ args: [{
29
+ selector: '[appSidebarToggler]',
30
+ providers: [ClassToggler]
31
+ }]
32
+ }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
33
+ type: Input,
34
+ args: ['appSidebarToggler']
35
+ }], toggleOpen: [{
36
+ type: HostListener,
37
+ args: ['click', ['$event']]
38
+ }] } });
39
+ export class SidebarMinimizeDirective {
40
+ constructor(document, renderer) {
41
+ this.document = document;
42
+ this.renderer = renderer;
43
+ }
44
+ toggleOpen($event) {
45
+ $event.preventDefault();
46
+ const body = this.document.body;
47
+ body.classList.contains('sidebar-minimized') ?
48
+ this.renderer.removeClass(body, 'sidebar-minimized') :
49
+ this.renderer.addClass(body, 'sidebar-minimized');
50
+ }
51
+ }
52
+ SidebarMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SidebarMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
53
+ SidebarMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: SidebarMinimizeDirective, selector: "[appSidebarMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SidebarMinimizeDirective, decorators: [{
55
+ type: Directive,
56
+ args: [{
57
+ selector: '[appSidebarMinimizer]'
58
+ }]
59
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
60
+ type: Inject,
61
+ args: [DOCUMENT]
62
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
63
+ type: HostListener,
64
+ args: ['click', ['$event']]
65
+ }] } });
66
+ export class MobileSidebarToggleDirective {
67
+ constructor(document, renderer) {
68
+ this.document = document;
69
+ this.renderer = renderer;
70
+ }
71
+ toggleOpen($event) {
72
+ $event.preventDefault();
73
+ const body = this.document.body;
74
+ body.classList.contains('sidebar-show') ?
75
+ this.renderer.removeClass(body, 'sidebar-show') :
76
+ this.renderer.addClass(body, 'sidebar-show');
77
+ }
78
+ }
79
+ MobileSidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MobileSidebarToggleDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
80
+ MobileSidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: MobileSidebarToggleDirective, selector: "[appMobileSidebarToggler]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MobileSidebarToggleDirective, decorators: [{
82
+ type: Directive,
83
+ args: [{
84
+ selector: '[appMobileSidebarToggler]'
85
+ }]
86
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
87
+ type: Inject,
88
+ args: [DOCUMENT]
89
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
90
+ type: HostListener,
91
+ args: ['click', ['$event']]
92
+ }] } });
93
+ /**
94
+ * Allows the off-canvas sidebar to be closed via click.
95
+ */
96
+ export class SidebarOffCanvasCloseDirective {
97
+ constructor(document, renderer) {
98
+ this.document = document;
99
+ this.renderer = renderer;
100
+ }
101
+ toggleOpen($event) {
102
+ $event.preventDefault();
103
+ const body = this.document.body;
104
+ if (body.classList.contains('sidebar-off-canvas')) {
105
+ body.classList.contains('sidebar-show') ?
106
+ this.renderer.removeClass(body, 'sidebar-show') :
107
+ this.renderer.addClass(body, 'sidebar-show');
108
+ }
109
+ }
110
+ }
111
+ SidebarOffCanvasCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SidebarOffCanvasCloseDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
112
+ SidebarOffCanvasCloseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: SidebarOffCanvasCloseDirective, selector: "[appSidebarClose]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SidebarOffCanvasCloseDirective, decorators: [{
114
+ type: Directive,
115
+ args: [{
116
+ selector: '[appSidebarClose]'
117
+ }]
118
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
119
+ type: Inject,
120
+ args: [DOCUMENT]
121
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
122
+ type: HostListener,
123
+ args: ['click', ['$event']]
124
+ }] } });
125
+ export class BrandMinimizeDirective {
126
+ constructor(document, renderer) {
127
+ this.document = document;
128
+ this.renderer = renderer;
129
+ }
130
+ toggleOpen($event) {
131
+ $event.preventDefault();
132
+ const body = this.document.body;
133
+ body.classList.contains('brand-minimized') ?
134
+ this.renderer.removeClass(body, 'brand-minimized') :
135
+ this.renderer.addClass(body, 'brand-minimized');
136
+ }
137
+ }
138
+ BrandMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BrandMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
139
+ BrandMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: BrandMinimizeDirective, selector: "[appBrandMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BrandMinimizeDirective, decorators: [{
141
+ type: Directive,
142
+ args: [{
143
+ selector: '[appBrandMinimizer]'
144
+ }]
145
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
146
+ type: Inject,
147
+ args: [DOCUMENT]
148
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
149
+ type: HostListener,
150
+ args: ['click', ['$event']]
151
+ }] } });
152
+ /**
153
+ * Allows the aside to be toggled via click.
154
+ */
155
+ export class AsideToggleDirective {
156
+ constructor(classToggler) {
157
+ this.classToggler = classToggler;
158
+ this.breakpoint = false;
159
+ }
160
+ ngOnInit() {
161
+ this.bp = this.breakpoint;
162
+ }
163
+ toggleOpen($event) {
164
+ $event.preventDefault();
165
+ const cssClass = this.bp ? `aside-menu-${this.bp}-show` : asideMenuCssClasses[0];
166
+ this.classToggler.toggleClasses(cssClass, asideMenuCssClasses);
167
+ }
168
+ }
169
+ AsideToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AsideToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
170
+ AsideToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AsideToggleDirective, selector: "[appAsideMenuToggler]", inputs: { breakpoint: ["appAsideMenuToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AsideToggleDirective, decorators: [{
172
+ type: Directive,
173
+ args: [{
174
+ selector: '[appAsideMenuToggler]',
175
+ providers: [ClassToggler]
176
+ }]
177
+ }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
178
+ type: Input,
179
+ args: ['appAsideMenuToggler']
180
+ }], toggleOpen: [{
181
+ type: HostListener,
182
+ args: ['click', ['$event']]
183
+ }] } });
184
+ export class HtmlAttributesDirective {
185
+ constructor(renderer, el) {
186
+ this.renderer = renderer;
187
+ this.el = el;
188
+ this.appHtmlAttr = {};
189
+ }
190
+ ngOnInit() {
191
+ const attribs = this.appHtmlAttr;
192
+ for (const attr in attribs) {
193
+ if (attr === 'style' && typeof (attribs[attr]) === 'object') {
194
+ this.setStyle(attribs[attr]);
195
+ }
196
+ else if (attr === 'class') {
197
+ this.addClass(attribs[attr]);
198
+ }
199
+ else {
200
+ this.setAttrib(attr, attribs[attr]);
201
+ }
202
+ }
203
+ }
204
+ setStyle(styles) {
205
+ for (const style in styles) {
206
+ if (style) {
207
+ this.renderer.setStyle(this.el.nativeElement, style, styles[style]);
208
+ }
209
+ }
210
+ }
211
+ addClass(classes) {
212
+ const classArray = (Array.isArray(classes) ? classes : classes.split(' '));
213
+ classArray.filter((element) => element.length > 0).forEach(element => {
214
+ this.renderer.addClass(this.el.nativeElement, element);
215
+ });
216
+ }
217
+ setAttrib(key, value) {
218
+ value !== null ?
219
+ this.renderer.setAttribute(this.el.nativeElement, key, value) :
220
+ this.renderer.removeAttribute(this.el.nativeElement, key);
221
+ }
222
+ }
223
+ HtmlAttributesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HtmlAttributesDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
224
+ HtmlAttributesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: HtmlAttributesDirective, selector: "[appHtmlAttr]", inputs: { appHtmlAttr: "appHtmlAttr" }, ngImport: i0 });
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HtmlAttributesDirective, decorators: [{
226
+ type: Directive,
227
+ args: [{
228
+ selector: '[appHtmlAttr]'
229
+ }]
230
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { appHtmlAttr: [{
231
+ type: Input
232
+ }] } });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvc2hhcmVkL2xheW91dC9sYXlvdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFFakQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRmxCLGVBQVUsR0FBcUIsS0FBSyxDQUFDO0lBRWhCLENBQUM7SUFDbEQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMvRCxDQUFDOzttSEFaVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixtS0FGdEIsQ0FBQyxZQUFZLENBQUM7MkZBRWQsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUI7bUdBRTZCLFVBQVU7c0JBQXJDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQU8xQixVQUFVO3NCQURULFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQVduQyxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQzRCLFFBQWEsRUFDL0IsUUFBbUI7UUFERCxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7SUFDekIsQ0FBQztJQUdMLFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxDQUFDOztxSEFiVSx3QkFBd0Isa0JBRXpCLFFBQVE7eUdBRlAsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtpQkFDbEM7OzBCQUdJLE1BQU07MkJBQUMsUUFBUTtvRUFLbEIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFhbkMsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUM0QixRQUFhLEVBQy9CLFFBQW1CO1FBREQsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQ3pCLENBQUM7SUFHTCxVQUFVLENBQUMsTUFBVztRQUNwQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQzs7eUhBYlUsNEJBQTRCLGtCQUU3QixRQUFROzZHQUZQLDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDOzswQkFHSSxNQUFNOzJCQUFDLFFBQVE7b0VBS2xCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBVW5DOztHQUVHO0FBSUgsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxZQUM0QixRQUFhLEVBQy9CLFFBQW1CO1FBREQsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQ3pCLENBQUM7SUFHTCxVQUFVLENBQUMsTUFBVztRQUNwQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOzsySEFoQlUsOEJBQThCLGtCQUUvQixRQUFROytHQUZQLDhCQUE4QjsyRkFBOUIsOEJBQThCO2tCQUgxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOzswQkFHSSxNQUFNOzJCQUFDLFFBQVE7b0VBS2xCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBZ0JuQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQzRCLFFBQWEsRUFDL0IsUUFBbUI7UUFERCxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7SUFDekIsQ0FBQztJQUdMLFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxDQUFDOzttSEFiVSxzQkFBc0Isa0JBRXZCLFFBQVE7dUdBRlAsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7OzBCQUdJLE1BQU07MkJBQUMsUUFBUTtvRUFLbEIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFXbkM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRmhCLGVBQVUsR0FBcUIsS0FBSyxDQUFDO0lBRWxCLENBQUM7SUFDbEQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNqRSxDQUFDOztpSEFaVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix1S0FGcEIsQ0FBQyxZQUFZLENBQUM7MkZBRWQsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUI7bUdBRStCLFVBQVU7c0JBQXZDLEtBQUs7dUJBQUMscUJBQXFCO2dCQU81QixVQUFVO3NCQURULFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQVduQyxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQ1UsUUFBbUIsRUFDbkIsRUFBYztRQURkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUpmLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztJQUtsRCxDQUFDO0lBRUosUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLE9BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUc7Z0JBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDOUI7aUJBQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLE1BQVc7UUFDMUIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDMUIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQXVCO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0UsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFFLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFvQjtRQUNqRCxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDOztvSEF4Q1UsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtpQkFDMUI7eUhBRVUsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IGFzaWRlTWVudUNzc0NsYXNzZXMsIHNpZGViYXJDc3NDbGFzc2VzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDbGFzc1RvZ2dsZXIgfSBmcm9tICcuLi90b2dnbGUtY2xhc3Nlcyc7XG5cbi8qKlxuICogQWxsb3dzIHRoZSBzaWRlYmFyIHRvIGJlIHRvZ2dsZWQgdmlhIGNsaWNrLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwU2lkZWJhclRvZ2dsZXJdJyxcbiAgcHJvdmlkZXJzOiBbQ2xhc3NUb2dnbGVyXVxufSlcbmV4cG9ydCBjbGFzcyBTaWRlYmFyVG9nZ2xlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdhcHBTaWRlYmFyVG9nZ2xlcicpIGJyZWFrcG9pbnQ6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJwITogc3RyaW5nIHwgYm9vbGVhbjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjbGFzc1RvZ2dsZXI6IENsYXNzVG9nZ2xlcikge31cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IHRoaXMuYnAgPyBgc2lkZWJhci0ke3RoaXMuYnB9LXNob3dgIDogc2lkZWJhckNzc0NsYXNzZXNbMF07XG4gICAgdGhpcy5jbGFzc1RvZ2dsZXIudG9nZ2xlQ2xhc3Nlcyhjc3NDbGFzcywgc2lkZWJhckNzc0NsYXNzZXMpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBTaWRlYmFyTWluaW1pemVyXSdcbn0pXG5leHBvcnQgY2xhc3MgU2lkZWJhck1pbmltaXplRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgKSB7IH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5kb2N1bWVudC5ib2R5O1xuICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaWRlYmFyLW1pbmltaXplZCcpID9cbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItbWluaW1pemVkJykgOlxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib2R5LCAnc2lkZWJhci1taW5pbWl6ZWQnKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwTW9iaWxlU2lkZWJhclRvZ2dsZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBNb2JpbGVTaWRlYmFyVG9nZ2xlRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgKSB7IH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5kb2N1bWVudC5ib2R5O1xuICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaWRlYmFyLXNob3cnKSA/XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHksICdzaWRlYmFyLXNob3cnKSA6XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdzaWRlYmFyLXNob3cnKTtcbiAgfVxufVxuXG4vKipcbiAqIEFsbG93cyB0aGUgb2ZmLWNhbnZhcyBzaWRlYmFyIHRvIGJlIGNsb3NlZCB2aWEgY2xpY2suXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBTaWRlYmFyQ2xvc2VdJ1xufSlcbmV4cG9ydCBjbGFzcyBTaWRlYmFyT2ZmQ2FudmFzQ2xvc2VEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICApIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgdG9nZ2xlT3BlbigkZXZlbnQ6IGFueSkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYm9keSA9IHRoaXMuZG9jdW1lbnQuYm9keTtcbiAgICBpZiAoYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3NpZGViYXItb2ZmLWNhbnZhcycpKSB7XG4gICAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1zaG93JykgP1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHksICdzaWRlYmFyLXNob3cnKSA6XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9keSwgJ3NpZGViYXItc2hvdycpO1xuICAgIH1cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwQnJhbmRNaW5pbWl6ZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBCcmFuZE1pbmltaXplRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgKSB7IH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5kb2N1bWVudC5ib2R5O1xuICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdicmFuZC1taW5pbWl6ZWQnKSA/XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHksICdicmFuZC1taW5pbWl6ZWQnKSA6XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdicmFuZC1taW5pbWl6ZWQnKTtcbiAgfVxufVxuXG5cbi8qKlxuICogQWxsb3dzIHRoZSBhc2lkZSB0byBiZSB0b2dnbGVkIHZpYSBjbGljay5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcEFzaWRlTWVudVRvZ2dsZXJdJyxcbiAgcHJvdmlkZXJzOiBbQ2xhc3NUb2dnbGVyXVxufSlcbmV4cG9ydCBjbGFzcyBBc2lkZVRvZ2dsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnYXBwQXNpZGVNZW51VG9nZ2xlcicpIGJyZWFrcG9pbnQ6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJwITogc3RyaW5nIHwgYm9vbGVhbjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjbGFzc1RvZ2dsZXI6IENsYXNzVG9nZ2xlcikge31cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IHRoaXMuYnAgPyBgYXNpZGUtbWVudS0ke3RoaXMuYnB9LXNob3dgIDogYXNpZGVNZW51Q3NzQ2xhc3Nlc1swXTtcbiAgICB0aGlzLmNsYXNzVG9nZ2xlci50b2dnbGVDbGFzc2VzKGNzc0NsYXNzLCBhc2lkZU1lbnVDc3NDbGFzc2VzKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwSHRtbEF0dHJdJ1xufSlcbmV4cG9ydCBjbGFzcyBIdG1sQXR0cmlidXRlc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGFwcEh0bWxBdHRyPzoge1trZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGF0dHJpYnMgPSB0aGlzLmFwcEh0bWxBdHRyO1xuICAgIGZvciAoY29uc3QgYXR0ciBpbiBhdHRyaWJzKSB7XG4gICAgICBpZiAoYXR0ciA9PT0gJ3N0eWxlJyAmJiB0eXBlb2YoYXR0cmlic1thdHRyXSkgPT09ICdvYmplY3QnICkge1xuICAgICAgICB0aGlzLnNldFN0eWxlKGF0dHJpYnNbYXR0cl0pO1xuICAgICAgfSBlbHNlIGlmIChhdHRyID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoYXR0cmlic1thdHRyXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldEF0dHJpYihhdHRyLCBhdHRyaWJzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxlKHN0eWxlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBzdHlsZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgc3R5bGUsIHN0eWxlc1tzdHlsZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MoY2xhc3Nlczogc3RyaW5nIHwgYW55W10pIHtcbiAgICBjb25zdCBjbGFzc0FycmF5ID0gKEFycmF5LmlzQXJyYXkoY2xhc3NlcykgPyBjbGFzc2VzIDogY2xhc3Nlcy5zcGxpdCgnICcpKTtcbiAgICBjbGFzc0FycmF5LmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC5sZW5ndGggPiAwKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGVsZW1lbnQgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QXR0cmliKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHZhbHVlICE9PSBudWxsID9cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwga2V5LCB2YWx1ZSApIDpcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwga2V5KTtcbiAgfVxufVxuIl19