cilog-lib 1.10.19 → 1.10.21

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 (44) hide show
  1. package/fesm2022/cilog-lib.mjs +97 -102
  2. package/fesm2022/cilog-lib.mjs.map +1 -1
  3. package/package.json +3 -5
  4. package/types/cilog-lib.d.ts +538 -0
  5. package/esm2022/cilog-lib.mjs +0 -5
  6. package/esm2022/lib/cilog-lib.component.mjs +0 -22
  7. package/esm2022/lib/cilog-lib.module.mjs +0 -96
  8. package/esm2022/lib/cilog-lib.service.mjs +0 -14
  9. package/esm2022/lib/helpers/enums/grille.enum.mjs +0 -51
  10. package/esm2022/lib/helpers/interfaces/edition.interface.mjs +0 -2
  11. package/esm2022/lib/helpers/interfaces/editor.interface.mjs +0 -2
  12. package/esm2022/lib/helpers/interfaces/grille.interface.mjs +0 -2
  13. package/esm2022/lib/helpers/interfaces/message.interface.mjs +0 -2
  14. package/esm2022/lib/helpers/pipes/value.pipe.mjs +0 -27
  15. package/esm2022/lib/modules/primeng.module.mjs +0 -86
  16. package/esm2022/lib/services/excel.service.mjs +0 -179
  17. package/esm2022/lib/services/message.service.mjs +0 -30
  18. package/esm2022/lib/services/table.service.mjs +0 -14
  19. package/esm2022/lib/views/cilog-input-number/cilog-input-number.component.mjs +0 -251
  20. package/esm2022/lib/views/documentation/documentation-contextuelle.component.mjs +0 -156
  21. package/esm2022/lib/views/editor/editor.component.mjs +0 -38
  22. package/esm2022/lib/views/message/message.component.mjs +0 -77
  23. package/esm2022/lib/views/table/table.component.mjs +0 -674
  24. package/esm2022/public-api.mjs +0 -24
  25. package/index.d.ts +0 -5
  26. package/lib/cilog-lib.component.d.ts +0 -8
  27. package/lib/cilog-lib.module.d.ts +0 -21
  28. package/lib/cilog-lib.service.d.ts +0 -6
  29. package/lib/helpers/enums/grille.enum.d.ts +0 -44
  30. package/lib/helpers/interfaces/edition.interface.d.ts +0 -34
  31. package/lib/helpers/interfaces/editor.interface.d.ts +0 -4
  32. package/lib/helpers/interfaces/grille.interface.d.ts +0 -166
  33. package/lib/helpers/interfaces/message.interface.d.ts +0 -6
  34. package/lib/helpers/pipes/value.pipe.d.ts +0 -7
  35. package/lib/modules/primeng.module.d.ts +0 -24
  36. package/lib/services/excel.service.d.ts +0 -15
  37. package/lib/services/message.service.d.ts +0 -12
  38. package/lib/services/table.service.d.ts +0 -6
  39. package/lib/views/cilog-input-number/cilog-input-number.component.d.ts +0 -40
  40. package/lib/views/documentation/documentation-contextuelle.component.d.ts +0 -49
  41. package/lib/views/editor/editor.component.d.ts +0 -17
  42. package/lib/views/message/message.component.d.ts +0 -17
  43. package/lib/views/table/table.component.d.ts +0 -83
  44. package/public-api.d.ts +0 -15
@@ -1,251 +0,0 @@
1
- import { Component, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "primeng/inputtext";
6
- export class CilogInputNumberComponent {
7
- constructor() {
8
- this.onInput = new EventEmitter();
9
- this.onChange = new EventEmitter();
10
- this.onFocus = new EventEmitter();
11
- this.onBlur = new EventEmitter();
12
- this.valueStr = '';
13
- this.specialKeys = ['Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight'];
14
- }
15
- ngOnInit() {
16
- this.regex = new RegExp(`^-?\\d{1,3}(?:\\d{3})*(?:[\\.,]\\d{0,${this.maxDecimals || Number.MAX_SAFE_INTEGER}})?$`);
17
- }
18
- onKeyDownEvent(event) {
19
- if (this.specialKeys.indexOf(event.key) !== -1) {
20
- return;
21
- }
22
- if (event.key == 'Enter') {
23
- this.onChangeInput(this.value);
24
- this.onChange.emit(this.value);
25
- return;
26
- }
27
- let current = this.cilogInputNumber.nativeElement.value;
28
- const positionStart = this.cilogInputNumber.nativeElement.selectionStart;
29
- const positionEnd = this.cilogInputNumber.nativeElement.selectionEnd;
30
- let debut = current.slice(0, positionStart).replace(/\s/g, '');
31
- let fin = current.slice(positionEnd).replace(/\s/g, '');
32
- let next = current.replace(/\s/g, '');
33
- if (event.key === '.') {
34
- let positionStartPoint = this.cilogInputNumber.nativeElement.selectionStart;
35
- next = [debut, ',', fin].join('');
36
- if (String(next).match(this.regex)) {
37
- this.acceptValue(next, event);
38
- }
39
- else {
40
- if (current.slice(positionStart)[0] == ',') {
41
- this.cilogInputNumber.nativeElement.selectionStart = positionStartPoint + 1;
42
- this.cilogInputNumber.nativeElement.selectionEnd = positionStartPoint + 1;
43
- }
44
- }
45
- }
46
- else if (event.key === 'Backspace') {
47
- if (positionStart == positionEnd && (/\s/g.test(current.slice(positionStart - 1, positionStart)) || current.slice(positionStart - 1, positionStart) == ",")) {
48
- this.cilogInputNumber.nativeElement.selectionStart = positionStart - 1;
49
- this.cilogInputNumber.nativeElement.selectionEnd = positionStart - 1;
50
- if (this.cilogInputNumber.nativeElement.value.at(-1) == ',') {
51
- this.cilogInputNumber.nativeElement.value = this.cilogInputNumber.nativeElement.value.substring(0, this.cilogInputNumber.nativeElement.value.length - 1);
52
- }
53
- }
54
- else {
55
- if (this.cilogInputNumber.nativeElement.selectionStart != this.cilogInputNumber.nativeElement.selectionEnd) {
56
- next = [debut, fin].join('');
57
- }
58
- else {
59
- if (positionStart != 0) {
60
- debut = current.slice(0, positionStart - 1).replace(/\s/g, '');
61
- }
62
- next = [debut, fin].join('');
63
- }
64
- this.checkValue(next, event);
65
- }
66
- }
67
- else {
68
- if (event.key === ',' && current.slice(positionStart)[0] == ',') {
69
- this.cilogInputNumber.nativeElement.selectionStart += 1;
70
- }
71
- else {
72
- if (positionStart != positionEnd) {
73
- this.cilogInputNumber.nativeElement.selectionStart = positionStart + 1;
74
- this.cilogInputNumber.nativeElement.selectionEnd = positionStart + 1;
75
- }
76
- next = [debut, event.key, fin].join('');
77
- this.checkValue(next, event);
78
- }
79
- }
80
- event.preventDefault();
81
- }
82
- checkValue(next, event) {
83
- if (next == '-' && (this.min == null || this.min < 0)) {
84
- this.acceptValue(next, event);
85
- }
86
- else if (next.length > 1 && next[0] == ',') {
87
- this.acceptValue(next.substring(1), event);
88
- }
89
- else {
90
- if (String(next), !String(next).match(this.regex)) {
91
- if (next == '') {
92
- this.acceptValue(next, event);
93
- }
94
- }
95
- else {
96
- let number = +(next.replace(',', '.'));
97
- if (this.min == null || number >= this.min) {
98
- if (this.max == null || number <= this.max) {
99
- this.acceptValue(next, event);
100
- }
101
- }
102
- }
103
- }
104
- }
105
- acceptValue(value, event) {
106
- // Stockage position initiale
107
- const positionStart = this.cilogInputNumber.nativeElement.selectionStart;
108
- const positionEnd = this.cilogInputNumber.nativeElement.selectionEnd;
109
- let valEntier = this.cilogInputNumber.nativeElement.value.replace(/\s/g, '').split(',')[0];
110
- if (valEntier[0] == '-') {
111
- valEntier = valEntier.substring(1);
112
- }
113
- setTimeout(() => {
114
- let positionFinale = positionStart;
115
- if (positionStart == positionEnd) {
116
- let jump = 1;
117
- let valEntierNext = value.split(',')[0];
118
- if (valEntierNext[0] == '-') {
119
- valEntierNext = valEntierNext.substring(1);
120
- }
121
- if (value.split(',')[0] != valEntier &&
122
- ((event.key != 'Backspace' && valEntier.length != 0 && valEntier.length % 3 == 0)
123
- || (event.key == 'Backspace' && (valEntier.length - 1) != 0 && (valEntier.length - 1) % 3 == 0))) {
124
- jump = 2;
125
- }
126
- // Calcul position finale
127
- if (event.key == 'Backspace') {
128
- if (positionStart != 0) {
129
- positionFinale = positionStart - jump;
130
- }
131
- }
132
- else {
133
- positionFinale = positionStart + jump;
134
- }
135
- }
136
- this.cilogInputNumber.nativeElement.selectionStart = positionFinale;
137
- this.cilogInputNumber.nativeElement.selectionEnd = positionFinale;
138
- });
139
- // Mise à jour de la valeur du champ
140
- if (value == '' || value == '-') {
141
- this.writeValue(null, value);
142
- }
143
- else {
144
- this.writeValue(+(value.replace(',', '.')), value, ((event.key == '.' || event.key == ',') && value.slice(-1) == ','), (event.key == '0' && value.split(',')[0] == valEntier && value.split(',').length == 2), (event.key == '0' && +value.split(',')[1] == 0));
145
- }
146
- this.onChangeInput(this.value);
147
- this.onInput.emit(this.value);
148
- }
149
- writeValue(value, valueString = null, sep = false, zero = false, zeroAfter = false) {
150
- this.value = value;
151
- if (this.value == null) {
152
- if (valueString == '-') {
153
- this.valueStr = '-';
154
- }
155
- else {
156
- this.valueStr = '';
157
- }
158
- if (this.cilogInputNumber) {
159
- this.cilogInputNumber.nativeElement.value = this.valueStr;
160
- }
161
- }
162
- else {
163
- if (this.maxDecimals != null && this.value.toString().split('.').length > 1 && this.value.toString().split('.')[1].length > this.maxDecimals) {
164
- this.valueStr = this.value.toLocaleString('fr-FR', { maximumFractionDigits: this.maxDecimals });
165
- }
166
- else {
167
- this.valueStr = this.value.toLocaleString('fr-FR', { maximumFractionDigits: 6 });
168
- }
169
- if (sep || zeroAfter) {
170
- this.valueStr = this.valueStr + ',';
171
- }
172
- if (zero) {
173
- this.valueStr = this.valueStr + '0';
174
- }
175
- this.cilogInputNumber.nativeElement.value = this.valueStr;
176
- }
177
- }
178
- onBlurEvent(event) {
179
- this.onChangeInput(this.value);
180
- this.onChange.emit(this.value);
181
- this.onBlur.emit(this.value);
182
- }
183
- onFocusEvent(event) {
184
- this.onFocus.emit(this.value);
185
- }
186
- onChangeInput(val) { }
187
- onTouchedInput() { }
188
- registerOnChange(fn) {
189
- this.onChangeInput = fn;
190
- }
191
- registerOnTouched(fn) {
192
- this.onTouchedInput = fn;
193
- }
194
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogInputNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
195
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CilogInputNumberComponent, selector: "cilog-input-number", inputs: { min: "min", max: "max", maxDecimals: "maxDecimals", prefixe: "prefixe", suffixe: "suffixe", inputStyleClass: "inputStyleClass", disabled: "disabled", readonly: "readonly", textColor: "textColor", bold: "bold", italic: "italic", floatLabel: "floatLabel" }, outputs: { onInput: "onInput", onChange: "onChange", onFocus: "onFocus", onBlur: "onBlur" }, host: { listeners: { "keydown": "onKeyDownEvent($event)" } }, providers: [
196
- {
197
- provide: NG_VALUE_ACCESSOR,
198
- useExisting: forwardRef(() => CilogInputNumberComponent),
199
- multi: true
200
- }
201
- ], viewQueries: [{ propertyName: "cilogInputNumber", first: true, predicate: ["cilogInputNumber"], descendants: true }], ngImport: i0, template: "<div class=\"input-group w-full\">\r\n\r\n <span class=\"input-group-addon prefixe\"\r\n *ngIf=\"prefixe != null\">\r\n {{ prefixe }}\r\n </span>\r\n\r\n <div [ngClass]=\"{ 'p-float-label' : floatLabel != null }\">\r\n <input #cilogInputNumber\r\n pInputText\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n [value]=\"valueStr\"\r\n (focus)=\"onFocusEvent($event)\"\r\n (blur)=\"onBlurEvent($event)\"\r\n [class]=\"'w-full z-1' + (inputStyleClass == null ? '' : ' ' + inputStyleClass)\"\r\n [ngClass]=\"suffixe != null && prefixe != null ? 'border-noround' : prefixe != null ? 'border-noround-left' : suffixe != null ? 'border-noround-right' : null\"\r\n [ngStyle]=\"{ 'color' : textColor ? textColor : null }\" />\r\n\r\n <label *ngIf=\"floatLabel != null\">{{ floatLabel }}</label>\r\n </div>\r\n\r\n <span class=\"input-group-addon suffixe\"\r\n *ngIf=\"suffixe != null\">\r\n {{ suffixe }}\r\n </span>\r\n\r\n</div>\r\n", styles: [":host ::ng-deep .input-group{display:flex!important}:host ::ng-deep .input-group-addon{background-color:#fff!important;border:1px solid #ccc!important;padding:0 12px!important;max-width:5rem!important;overflow:hidden!important;font-weight:700!important}:host ::ng-deep .prefixe{border-radius:4px 0 0 4px!important;border-right:none!important;display:flex;align-items:center}:host ::ng-deep .suffixe{border-radius:0 4px 4px 0!important;border-left:none!important;display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.InputText, selector: "[pInputText]", inputs: ["variant"] }] }); }
202
- }
203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogInputNumberComponent, decorators: [{
204
- type: Component,
205
- args: [{ selector: 'cilog-input-number', providers: [
206
- {
207
- provide: NG_VALUE_ACCESSOR,
208
- useExisting: forwardRef(() => CilogInputNumberComponent),
209
- multi: true
210
- }
211
- ], template: "<div class=\"input-group w-full\">\r\n\r\n <span class=\"input-group-addon prefixe\"\r\n *ngIf=\"prefixe != null\">\r\n {{ prefixe }}\r\n </span>\r\n\r\n <div [ngClass]=\"{ 'p-float-label' : floatLabel != null }\">\r\n <input #cilogInputNumber\r\n pInputText\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n [value]=\"valueStr\"\r\n (focus)=\"onFocusEvent($event)\"\r\n (blur)=\"onBlurEvent($event)\"\r\n [class]=\"'w-full z-1' + (inputStyleClass == null ? '' : ' ' + inputStyleClass)\"\r\n [ngClass]=\"suffixe != null && prefixe != null ? 'border-noround' : prefixe != null ? 'border-noround-left' : suffixe != null ? 'border-noround-right' : null\"\r\n [ngStyle]=\"{ 'color' : textColor ? textColor : null }\" />\r\n\r\n <label *ngIf=\"floatLabel != null\">{{ floatLabel }}</label>\r\n </div>\r\n\r\n <span class=\"input-group-addon suffixe\"\r\n *ngIf=\"suffixe != null\">\r\n {{ suffixe }}\r\n </span>\r\n\r\n</div>\r\n", styles: [":host ::ng-deep .input-group{display:flex!important}:host ::ng-deep .input-group-addon{background-color:#fff!important;border:1px solid #ccc!important;padding:0 12px!important;max-width:5rem!important;overflow:hidden!important;font-weight:700!important}:host ::ng-deep .prefixe{border-radius:4px 0 0 4px!important;border-right:none!important;display:flex;align-items:center}:host ::ng-deep .suffixe{border-radius:0 4px 4px 0!important;border-left:none!important;display:flex;align-items:center}\n"] }]
212
- }], ctorParameters: () => [], propDecorators: { min: [{
213
- type: Input
214
- }], max: [{
215
- type: Input
216
- }], maxDecimals: [{
217
- type: Input
218
- }], prefixe: [{
219
- type: Input
220
- }], suffixe: [{
221
- type: Input
222
- }], inputStyleClass: [{
223
- type: Input
224
- }], disabled: [{
225
- type: Input
226
- }], readonly: [{
227
- type: Input
228
- }], textColor: [{
229
- type: Input
230
- }], bold: [{
231
- type: Input
232
- }], italic: [{
233
- type: Input
234
- }], floatLabel: [{
235
- type: Input
236
- }], onInput: [{
237
- type: Output
238
- }], onChange: [{
239
- type: Output
240
- }], onFocus: [{
241
- type: Output
242
- }], onBlur: [{
243
- type: Output
244
- }], cilogInputNumber: [{
245
- type: ViewChild,
246
- args: ['cilogInputNumber']
247
- }], onKeyDownEvent: [{
248
- type: HostListener,
249
- args: ['keydown', ['$event']]
250
- }] } });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lsb2ctaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpbG9nLWxpYi9zcmMvbGliL3ZpZXdzL2NpbG9nLWlucHV0LW51bWJlci9jaWxvZy1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lsb2ctbGliL3NyYy9saWIvdmlld3MvY2lsb2ctaW5wdXQtbnVtYmVyL2NpbG9nLWlucHV0LW51bWJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWN6RSxNQUFNLE9BQU8seUJBQXlCO0lBNkJsQztRQVpVLFlBQU8sR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzRCxhQUFRLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUQsWUFBTyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNELFdBQU0sR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVwRSxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBS2QsZ0JBQVcsR0FBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFdkUsQ0FBQztJQUVqQixRQUFRO1FBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyx3Q0FBd0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFHRCxjQUFjLENBQUMsS0FBb0I7UUFF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QUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osZ0pDYkwsc29DQTZCQTs7NEZEZGEseUJBQXlCO2tCQVpyQyxTQUFTOytCQUNJLG9CQUFvQixhQUduQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzs0QkFDeEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7d0RBTVEsR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUl3QixnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQVk3QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NpbG9nLWlucHV0LW51bWJlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2lsb2ctaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NpbG9nLWlucHV0LW51bWJlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2lsb2dJbnB1dE51bWJlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lsb2dJbnB1dE51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIHZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgQElucHV0KCkgbWluOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBtYXg6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIG1heERlY2ltYWxzOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBwcmVmaXhlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzdWZmaXhlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBpbnB1dFN0eWxlQ2xhc3M6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0ZXh0Q29sb3I6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGJvbGQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpdGFsaWM6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBmbG9hdExhYmVsOiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5wdXQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gICAgdmFsdWVTdHI6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NpbG9nSW5wdXROdW1iZXInKSBjaWxvZ0lucHV0TnVtYmVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIHByaXZhdGUgcmVnZXg6IFJlZ0V4cDtcclxuICAgIHByaXZhdGUgc3BlY2lhbEtleXM6IEFycmF5PHN0cmluZz4gPSBbJ1RhYicsICdFbmQnLCAnSG9tZScsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCddO1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucmVnZXggPSBuZXcgUmVnRXhwKGBeLT9cXFxcZHsxLDN9KD86XFxcXGR7M30pKig/OltcXFxcLixdXFxcXGR7MCwke3RoaXMubWF4RGVjaW1hbHMgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9fSk/JGApO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgb25LZXlEb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3BlY2lhbEtleXMuaW5kZXhPZihldmVudC5rZXkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUlucHV0KHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmNpbG9nSW5wdXROdW1iZXIubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25TdGFydCA9IHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uRW5kID0gdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kO1xyXG5cclxuICAgICAgICBsZXQgZGVidXQ6IHN0cmluZyA9IGN1cnJlbnQuc2xpY2UoMCwgcG9zaXRpb25TdGFydCkucmVwbGFjZSgvXFxzL2csICcnKTtcclxuICAgICAgICBsZXQgZmluOiBzdHJpbmcgPSBjdXJyZW50LnNsaWNlKHBvc2l0aW9uRW5kKS5yZXBsYWNlKC9cXHMvZywgJycpO1xyXG5cclxuICAgICAgICBsZXQgbmV4dDogc3RyaW5nID0gY3VycmVudC5yZXBsYWNlKC9cXHMvZywgJycpO1xyXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcuJykge1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25TdGFydFBvaW50OiBudW1iZXIgPSB0aGlzLmNpbG9nSW5wdXROdW1iZXIubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgbmV4dCA9IFtkZWJ1dCwgJywnLCBmaW5dLmpvaW4oJycpO1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nKG5leHQpLm1hdGNoKHRoaXMucmVnZXgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdFZhbHVlKG5leHQsIGV2ZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnNsaWNlKHBvc2l0aW9uU3RhcnQpWzBdID09ICcsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID0gcG9zaXRpb25TdGFydFBvaW50ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNpbG9nSW5wdXROdW1iZXIubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPSBwb3NpdGlvblN0YXJ0UG9pbnQgKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvblN0YXJ0ID09IHBvc2l0aW9uRW5kICYmICgvXFxzL2cudGVzdChjdXJyZW50LnNsaWNlKHBvc2l0aW9uU3RhcnQgLSAxLCBwb3NpdGlvblN0YXJ0KSkgfHwgY3VycmVudC5zbGljZShwb3NpdGlvblN0YXJ0IC0gMSwgcG9zaXRpb25TdGFydCkgPT0gXCIsXCIpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNpbG9nSW5wdXROdW1iZXIubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHBvc2l0aW9uU3RhcnQgLSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gcG9zaXRpb25TdGFydCAtIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQudmFsdWUuYXQoLTEpID09ICcsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQudmFsdWUuc3Vic3RyaW5nKDAsIHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ICE9IHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBbZGVidXQsIGZpbl0uam9pbignJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvblN0YXJ0ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidXQgPSBjdXJyZW50LnNsaWNlKDAsIHBvc2l0aW9uU3RhcnQgLSAxKS5yZXBsYWNlKC9cXHMvZywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gW2RlYnV0LCBmaW5dLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlKG5leHQsIGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICcsJyAmJiBjdXJyZW50LnNsaWNlKHBvc2l0aW9uU3RhcnQpWzBdID09ICcsJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvblN0YXJ0ICE9IHBvc2l0aW9uRW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBwb3NpdGlvblN0YXJ0ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNpbG9nSW5wdXROdW1iZXIubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPSBwb3NpdGlvblN0YXJ0ICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5leHQgPSBbZGVidXQsIGV2ZW50LmtleSwgZmluXS5qb2luKCcnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZShuZXh0LCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tWYWx1ZShuZXh0OiBzdHJpbmcsIGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKG5leHQgPT0gJy0nICYmICh0aGlzLm1pbiA9PSBudWxsIHx8IHRoaXMubWluIDwgMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlcHRWYWx1ZShuZXh0LCBldmVudCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0Lmxlbmd0aCA+IDEgJiYgbmV4dFswXSA9PSAnLCcpIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlcHRWYWx1ZShuZXh0LnN1YnN0cmluZygxKSwgZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChTdHJpbmcobmV4dCksICFTdHJpbmcobmV4dCkubWF0Y2godGhpcy5yZWdleCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NlcHRWYWx1ZShuZXh0LCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyOiBudW1iZXIgPSArKG5leHQucmVwbGFjZSgnLCcsICcuJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWluID09IG51bGwgfHwgbnVtYmVyID49IHRoaXMubWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4ID09IG51bGwgfHwgbnVtYmVyIDw9IHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXB0VmFsdWUobmV4dCwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY2NlcHRWYWx1ZSh2YWx1ZTogc3RyaW5nLCBldmVudCkge1xyXG4gICAgICAgIC8vIFN0b2NrYWdlIHBvc2l0aW9uIGluaXRpYWxlXHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25TdGFydCA9IHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uRW5kID0gdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgIGxldCB2YWxFbnRpZXI6IHN0cmluZyA9IHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnZhbHVlLnJlcGxhY2UoL1xccy9nLCAnJykuc3BsaXQoJywnKVswXTtcclxuICAgICAgICBpZiAodmFsRW50aWVyWzBdID09ICctJykge1xyXG4gICAgICAgICAgICB2YWxFbnRpZXIgPSB2YWxFbnRpZXIuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbkZpbmFsZTogbnVtYmVyID0gcG9zaXRpb25TdGFydDtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uU3RhcnQgPT0gcG9zaXRpb25FbmQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBqdW1wOiBudW1iZXIgPSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbEVudGllck5leHQ6IHN0cmluZyA9IHZhbHVlLnNwbGl0KCcsJylbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsRW50aWVyTmV4dFswXSA9PSAnLScpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxFbnRpZXJOZXh0ID0gdmFsRW50aWVyTmV4dC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3BsaXQoJywnKVswXSAhPSB2YWxFbnRpZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC5rZXkgIT0gJ0JhY2tzcGFjZScgJiYgdmFsRW50aWVyLmxlbmd0aCAhPSAwICYmIHZhbEVudGllci5sZW5ndGggJSAzID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChldmVudC5rZXkgPT0gJ0JhY2tzcGFjZScgJiYgKHZhbEVudGllci5sZW5ndGggLSAxKSAhPSAwICYmICh2YWxFbnRpZXIubGVuZ3RoIC0gMSkgJSAzID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAganVtcCA9IDI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ2FsY3VsIHBvc2l0aW9uIGZpbmFsZVxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PSAnQmFja3NwYWNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvblN0YXJ0ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25GaW5hbGUgPSBwb3NpdGlvblN0YXJ0IC0ganVtcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uRmluYWxlID0gcG9zaXRpb25TdGFydCArIGp1bXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBwb3NpdGlvbkZpbmFsZTtcclxuICAgICAgICAgICAgdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gcG9zaXRpb25GaW5hbGU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE1pc2Ugw6Agam91ciBkZSBsYSB2YWxldXIgZHUgY2hhbXBcclxuICAgICAgICBpZiAodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gJy0nKSB7XHJcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudWxsLCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKFxyXG4gICAgICAgICAgICAgICAgKyh2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICgoZXZlbnQua2V5ID09ICcuJyB8fCBldmVudC5rZXkgPT0gJywnKSAmJiB2YWx1ZS5zbGljZSgtMSkgPT0gJywnKSxcclxuICAgICAgICAgICAgICAgIChldmVudC5rZXkgPT0gJzAnICYmIHZhbHVlLnNwbGl0KCcsJylbMF0gPT0gdmFsRW50aWVyICYmIHZhbHVlLnNwbGl0KCcsJykubGVuZ3RoID09IDIpLFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50LmtleSA9PSAnMCcgJiYgK3ZhbHVlLnNwbGl0KCcsJylbMV0gPT0gMClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VJbnB1dCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uSW5wdXQuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIsIHZhbHVlU3RyaW5nOiBzdHJpbmcgPSBudWxsLCBzZXA6IGJvb2xlYW4gPSBmYWxzZSwgemVybzogYm9vbGVhbiA9IGZhbHNlLCB6ZXJvQWZ0ZXI6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gJy0nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlU3RyID0gJy0nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVN0ciA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNpbG9nSW5wdXROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2lsb2dJbnB1dE51bWJlci5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZVN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1heERlY2ltYWxzICE9IG51bGwgJiYgdGhpcy52YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJykubGVuZ3RoID4gMSAmJiB0aGlzLnZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5sZW5ndGggPiB0aGlzLm1heERlY2ltYWxzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlU3RyID0gdGhpcy52YWx1ZS50b0xvY2FsZVN0cmluZygnZnItRlInLCB7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5tYXhEZWNpbWFscyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVTdHIgPSB0aGlzLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCdmci1GUicsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiA2IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZXAgfHwgemVyb0FmdGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlU3RyID0gdGhpcy52YWx1ZVN0ciArICcsJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoemVybykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVN0ciA9IHRoaXMudmFsdWVTdHIgKyAnMCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaWxvZ0lucHV0TnVtYmVyLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlU3RyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkJsdXJFdmVudChldmVudCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VJbnB1dCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzRXZlbnQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZUlucHV0KHZhbDogbnVtYmVyKSB7IH1cclxuXHJcbiAgICBvblRvdWNoZWRJbnB1dCgpIHsgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlSW5wdXQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkSW5wdXQgPSBmbjtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy1mdWxsXCI+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvbiBwcmVmaXhlXCJcclxuICAgICAgICAgICpuZ0lmPVwicHJlZml4ZSAhPSBudWxsXCI+XHJcbiAgICAgICAge3sgcHJlZml4ZSB9fVxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncC1mbG9hdC1sYWJlbCcgOiBmbG9hdExhYmVsICE9IG51bGwgfVwiPlxyXG4gICAgICAgIDxpbnB1dCAjY2lsb2dJbnB1dE51bWJlclxyXG4gICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlU3RyXCJcclxuICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXNFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgIFtjbGFzc109XCIndy1mdWxsIHotMScgKyAoaW5wdXRTdHlsZUNsYXNzID09IG51bGwgPyAnJyA6ICcgJyArIGlucHV0U3R5bGVDbGFzcylcIlxyXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJzdWZmaXhlICE9IG51bGwgJiYgcHJlZml4ZSAhPSBudWxsID8gJ2JvcmRlci1ub3JvdW5kJyA6IHByZWZpeGUgIT0gbnVsbCA/ICdib3JkZXItbm9yb3VuZC1sZWZ0JyA6IHN1ZmZpeGUgIT0gbnVsbCA/ICdib3JkZXItbm9yb3VuZC1yaWdodCcgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnY29sb3InIDogdGV4dENvbG9yID8gdGV4dENvbG9yIDogbnVsbCB9XCIgLz5cclxuXHJcbiAgICAgICAgPGxhYmVsICpuZ0lmPVwiZmxvYXRMYWJlbCAhPSBudWxsXCI+e3sgZmxvYXRMYWJlbCB9fTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uIHN1ZmZpeGVcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzdWZmaXhlICE9IG51bGxcIj5cclxuICAgICAgICB7eyBzdWZmaXhlIH19XHJcbiAgICA8L3NwYW4+XHJcblxyXG48L2Rpdj5cclxuIl19
@@ -1,156 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common/http";
4
- import * as i2 from "@angular/router";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "primeng/button";
7
- import * as i5 from "primeng/inputtext";
8
- import * as i6 from "primeng/tabview";
9
- import * as i7 from "@angular/forms";
10
- import * as i8 from "ngx-markdown";
11
- import * as i9 from "primeng/progressspinner";
12
- export class DocumentationContextuelleComponent {
13
- constructor(http, router) {
14
- this.http = http;
15
- this.router = router;
16
- this.categories = [];
17
- this.filteredCategories = [];
18
- this.tabs = [];
19
- this.searchQuery = '';
20
- this.activeTabIndex = 0;
21
- }
22
- ngOnInit() {
23
- this.http.get('assets/docs/doc-config/config.json').subscribe((config) => {
24
- this.config = config;
25
- this.organizeDocsByCategory(config);
26
- // Tentative d'ouverture automatique en fonction de l'URL
27
- const currentPath = this.router.url;
28
- const foundDoc = this.findDocForUrl(currentPath);
29
- if (foundDoc) {
30
- this.openDocumentationAndSwitch(foundDoc);
31
- }
32
- else {
33
- this.openDocumentationList(); // fallback sur le sommaire
34
- }
35
- });
36
- }
37
- openCurrentPageDoc() {
38
- const currentPath = this.router.url;
39
- const foundDoc = this.findDocForUrl(currentPath);
40
- if (foundDoc) {
41
- this.openDocumentationAndSwitch(foundDoc);
42
- }
43
- else {
44
- this.openDocumentationList();
45
- }
46
- }
47
- organizeDocsByCategory(config) {
48
- const categories = config.categories.map((cat) => ({
49
- ...cat,
50
- docs: []
51
- }));
52
- const iconMappings = config.iconMappings || {};
53
- const docsConfig = config.documentations;
54
- for (const fileName in docsConfig) {
55
- const doc = docsConfig[fileName];
56
- const categoryKey = doc.category;
57
- const matchedCategory = categories.find((cat) => cat.key === categoryKey);
58
- if (matchedCategory) {
59
- const icon = doc.tags?.map(t => iconMappings[t])?.find(i => !!i) || iconMappings.default;
60
- matchedCategory.docs.push({
61
- ...doc,
62
- fileName,
63
- icon
64
- });
65
- }
66
- }
67
- this.categories = categories.sort((a, b) => a.name - b.name);
68
- this.categories.forEach(cat => {
69
- cat.docs = cat.docs.sort((a, b) => a.displayName.localeCompare(b.displayName));
70
- });
71
- this.filteredCategories = JSON.parse(JSON.stringify(this.categories));
72
- }
73
- filterDocumentation() {
74
- const query = this.searchQuery.toLowerCase();
75
- this.filteredCategories = this.categories.map(category => {
76
- const filteredDocs = category.docs.filter(doc => doc.displayName.toLowerCase().includes(query) ||
77
- doc.description.toLowerCase().includes(query) ||
78
- doc.tags?.some(tag => tag.toLowerCase().includes(query)));
79
- return {
80
- ...category,
81
- docs: filteredDocs
82
- };
83
- }).filter(cat => cat.docs.length > 0);
84
- }
85
- toggleCategory(key) {
86
- const cat = this.filteredCategories.find(c => c.key === key);
87
- if (cat)
88
- cat.expanded = !cat.expanded;
89
- }
90
- openTabAndActivate(tab) {
91
- this.tabs.push(tab);
92
- setTimeout(() => {
93
- this.activeTabIndex = this.tabs.length - 1;
94
- });
95
- }
96
- openDocumentationAndSwitch(doc) {
97
- const existingTab = this.tabs.find(tab => tab.fileName === doc.fileName);
98
- if (existingTab) {
99
- this.activeTabIndex = this.tabs.indexOf(existingTab);
100
- return;
101
- }
102
- const newTab = {
103
- type: 'doc',
104
- title: doc.displayName,
105
- fileName: doc.fileName,
106
- content: '',
107
- loading: true,
108
- category: this.categories.find(c => c.key === doc.category)?.name
109
- };
110
- this.openTabAndActivate(newTab);
111
- fetch(`assets/docs/${doc.fileName}`)
112
- .then(res => res.text())
113
- .then(content => {
114
- newTab.content = content;
115
- newTab.loading = false;
116
- })
117
- .catch(() => {
118
- newTab.content = '❌ Erreur lors du chargement du fichier markdown.';
119
- newTab.loading = false;
120
- });
121
- }
122
- openDocumentationList() {
123
- const existing = this.tabs.find(t => t.type === 'list');
124
- if (existing) {
125
- this.activeTabIndex = this.tabs.indexOf(existing);
126
- return;
127
- }
128
- this.openTabAndActivate({ type: 'list', title: '📚 Sommaire des Docs' });
129
- }
130
- getTotalDocsCount() {
131
- return this.categories.reduce((sum, cat) => sum + cat.docs.length, 0);
132
- }
133
- getOpenTabsCount() {
134
- return this.tabs.length;
135
- }
136
- closeTab(event) {
137
- this.tabs.splice(event.index, 1);
138
- if (this.activeTabIndex >= this.tabs.length) {
139
- this.activeTabIndex = this.tabs.length - 1;
140
- }
141
- }
142
- /** Essaie de retrouver un document à partir de l'URL Angular */
143
- findDocForUrl(url) {
144
- const normalizedUrl = url.replace(/^\/+/, '').replace(/\/$/, '');
145
- return this.categories
146
- .reduce((acc, cat) => acc.concat(cat.docs), [])
147
- .find(doc => normalizedUrl.toLowerCase().includes(doc.fileName.toLowerCase().replace('.md', '')));
148
- }
149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentationContextuelleComponent, deps: [{ token: i1.HttpClient }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DocumentationContextuelleComponent, selector: "cilog-documentation-contextuelle", ngImport: i0, template: "<div class=\"documentation-container\">\r\n <!-- Menu sup\u00E9rieur -->\r\n <div class=\"documentation-menu\">\r\n <button \r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-list\" \r\n label=\"Sommaire des documentations\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openDocumentationList()\"\r\n title=\"Voir toutes les documentations disponibles\">\r\n </button>\r\n <button \r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-home\" \r\n label=\"Documentation courante\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openCurrentPageDoc()\"\r\n title=\"Documentation de la page actuelle\">\r\n </button>\r\n </div>\r\n\r\n <!-- Syst\u00E8me d'onglets -->\r\n <p-tabView \r\n [(activeIndex)]=\"activeTabIndex\"\r\n (onClose)=\"closeTab($event)\"\r\n styleClass=\"documentation-tabs\">\r\n \r\n <p-tabPanel \r\n *ngFor=\"let tab of tabs; let i = index\" \r\n [header]=\"tab.title\"\r\n [closable]=\"tabs.length > 1\">\r\n \r\n <!-- Contenu pour onglet de liste - Version am\u00E9lior\u00E9e -->\r\n <div *ngIf=\"tab.type === 'list'\" class=\"docs-list-container\">\r\n <div class=\"docs-header\">\r\n <h2>\uD83D\uDCDA Sommaire de la Documentation</h2>\r\n <p class=\"docs-subtitle\">Explorez toutes les fonctionnalit\u00E9s disponibles dans LogeProj</p>\r\n </div>\r\n\r\n <!-- Barre de recherche -->\r\n <div class=\"search-bar\">\r\n <span class=\"p-input-icon-left\" style=\"width: 100%; max-width: 800px;\">\r\n <i class=\"pi pi-search\"></i>\r\n <input \r\n type=\"text\" \r\n pInputText \r\n placeholder=\"Rechercher dans les documentations...\" \r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"filterDocumentation()\"\r\n style=\"width: 100% !important; padding: 12px 20px 12px 40px !important; border-radius: 25px !important;\">\r\n </span>\r\n </div>\r\n\r\n <!-- Liste des cat\u00E9gories -->\r\n <div class=\"categories-container\">\r\n <div *ngFor=\"let category of filteredCategories\" class=\"category-section\">\r\n <div class=\"category-header\" (click)=\"toggleCategory(category.key)\">\r\n <i class=\"pi\" [ngClass]=\"category.expanded ? 'pi-chevron-down' : 'pi-chevron-right'\"></i>\r\n <span class=\"category-icon\">{{ category.icon }}</span>\r\n <h3 class=\"category-title\">{{ category.name }}</h3>\r\n <span class=\"category-count\">({{ category.docs.length }})</span>\r\n </div>\r\n \r\n <div class=\"category-content\" [ngClass]=\"{ 'expanded': category.expanded }\">\r\n <div class=\"docs-grid\">\r\n <div \r\n *ngFor=\"let doc of category.docs\" \r\n class=\"doc-card\"\r\n (click)=\"openDocumentationAndSwitch(doc)\"\r\n [title]=\"doc.description\"> \r\n <div class=\"doc-card-content\">\r\n <h4 class=\"doc-name\">{{ doc.displayName }}</h4>\r\n <p class=\"doc-description\">{{ doc.description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Stats en bas -->\r\n <div class=\"docs-stats\">\r\n <div class=\"stat-item\">\r\n <strong>{{ getTotalDocsCount() }}</strong> documentations disponibles\r\n </div>\r\n <div class=\"stat-item\">\r\n <strong>{{ getOpenTabsCount() }}</strong> onglets ouverts\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Contenu pour onglet de documentation -->\r\n <div *ngIf=\"tab.type === 'doc'\" class=\"markdown-container\">\r\n <!-- Breadcrumb pour navigation -->\r\n <div class=\"doc-breadcrumb\" *ngIf=\"tab.category\">\r\n <span class=\"breadcrumb-item\">{{ tab.category }}</span>\r\n <i class=\"pi pi-angle-right\"></i>\r\n <span class=\"breadcrumb-current\">{{ tab.title }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"tab.loading\" class=\"loading-container\">\r\n <p-progressSpinner strokeWidth=\"4\"></p-progressSpinner>\r\n <span>Chargement de la documentation...</span>\r\n </div>\r\n <markdown \r\n *ngIf=\"!tab.loading\" \r\n [data]=\"tab.content || 'Aucun contenu disponible'\">\r\n </markdown>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>", styles: [".documentation-container{display:flex;flex-direction:column;height:100%;width:100%}.documentation-menu{padding:15px;background:linear-gradient(135deg,#667eea,#764ba2);border-bottom:1px solid #e9ecef;display:flex;gap:10px;flex-shrink:0}.documentation-menu .p-button{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.documentation-menu .p-button:hover{background:#ffffff4d}.docs-list-container{padding:20px;flex:1;overflow-y:auto;background:#f8f9fa}.docs-header{text-align:center;margin-bottom:30px}.docs-header h2{margin:0 0 10px;color:#2c3e50;font-size:2rem}.docs-header .docs-subtitle{color:#7f8c8d;font-size:1.1rem;margin:0}.search-bar{margin-bottom:30px;display:flex;justify-content:center}.search-bar .search-input{width:100%;padding:12px 20px 12px 40px;border-radius:25px;border:2px solid #e9ecef;font-size:1rem}.search-bar .search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.categories-container{max-width:1200px;margin:0 auto}.category-section{margin-bottom:25px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.category-section .category-header{padding:20px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);cursor:pointer;display:flex;align-items:center;gap:15px;transition:all .3s ease}.category-section .category-header:hover{background:linear-gradient(135deg,#e8eaf6,#b39ddb)}.category-section .category-header .pi{color:#667eea;font-size:1rem;transition:transform .3s ease}.category-section .category-header .category-icon{font-size:1.5rem}.category-section .category-header .category-title{margin:0;color:#2c3e50;font-size:1.3rem;flex:1}.category-section .category-header .category-count{color:#7f8c8d;font-size:.9rem;background:#677eea1a;padding:4px 12px;border-radius:15px}.category-section .category-content{max-height:0;overflow:hidden;transition:max-height .4s ease-out}.category-section .category-content.expanded{max-height:2000px;transition:max-height .6s ease-in}.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;padding:25px}.doc-card{border:1px solid #e9ecef;border-radius:12px;padding:20px;cursor:pointer;transition:all .3s ease;background:#fff;position:relative;overflow:hidden}.doc-card:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#667eea,#764ba2);transform:scaleX(0);transition:transform .3s ease}.doc-card:hover{border-color:#667eea;box-shadow:0 8px 25px #667eea26;transform:translateY(-4px)}.doc-card:hover:before{transform:scaleX(1)}.doc-card .doc-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.doc-card .doc-card-header .doc-icon{font-size:2rem}.doc-card .doc-card-header .doc-badge{padding:4px 8px;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.doc-card .doc-card-header .doc-badge.doc-badge-high{background:#e8f5e8;color:#2e7d2e}.doc-card .doc-card-header .doc-badge.doc-badge-medium{background:#fff3cd;color:#856404}.doc-card .doc-card-header .doc-badge.doc-badge-low{background:#f8f9fa;color:#6c757d}.doc-card .doc-card-content .doc-name{margin:0 0 10px;color:#2c3e50;font-size:1.1rem;font-weight:600;line-height:1.3}.doc-card .doc-card-content .doc-description{color:#6c757d;font-size:.9rem;line-height:1.4;margin:0 0 10px}.doc-card .doc-card-content .doc-filename{color:#adb5bd;font-size:.8rem;font-family:Courier New,monospace}.docs-stats{display:flex;justify-content:center;gap:40px;margin-top:40px;padding:20px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a}.docs-stats .stat-item{text-align:center;color:#6c757d}.docs-stats .stat-item strong{color:#667eea;font-size:1.2rem}.markdown-container{flex:1;overflow-y:auto;padding:20px;background:#fff}.markdown-container .doc-breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding:10px 0;border-bottom:1px solid #e9ecef;color:#6c757d;font-size:.9rem}.markdown-container .doc-breadcrumb .breadcrumb-current{color:#2c3e50;font-weight:600}.markdown-container markdown{display:block;line-height:1.6}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:#6c757d;gap:20px}.loading-container span{font-size:1.1rem}.documentation-tabs{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-panels{flex:1;display:flex}.documentation-tabs ::ng-deep .p-tabview-panels .p-tabview-panel{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-nav{background:#f8f9fa;border-bottom:2px solid #e9ecef}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link{background:transparent;border:none;color:#6c757d;font-weight:500}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link:not(.p-disabled):focus{box-shadow:0 0 0 2px #667eea33}.documentation-tabs ::ng-deep .p-tabview-nav .p-highlight .p-tabview-nav-link{background:#fff;color:#667eea;border-bottom:2px solid #667eea}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i6.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }] }); }
151
- }
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentationContextuelleComponent, decorators: [{
153
- type: Component,
154
- args: [{ selector: 'cilog-documentation-contextuelle', template: "<div class=\"documentation-container\">\r\n <!-- Menu sup\u00E9rieur -->\r\n <div class=\"documentation-menu\">\r\n <button \r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-list\" \r\n label=\"Sommaire des documentations\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openDocumentationList()\"\r\n title=\"Voir toutes les documentations disponibles\">\r\n </button>\r\n <button \r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-home\" \r\n label=\"Documentation courante\"\r\n class=\"p-button-sm p-button-outlined\"\r\n (click)=\"openCurrentPageDoc()\"\r\n title=\"Documentation de la page actuelle\">\r\n </button>\r\n </div>\r\n\r\n <!-- Syst\u00E8me d'onglets -->\r\n <p-tabView \r\n [(activeIndex)]=\"activeTabIndex\"\r\n (onClose)=\"closeTab($event)\"\r\n styleClass=\"documentation-tabs\">\r\n \r\n <p-tabPanel \r\n *ngFor=\"let tab of tabs; let i = index\" \r\n [header]=\"tab.title\"\r\n [closable]=\"tabs.length > 1\">\r\n \r\n <!-- Contenu pour onglet de liste - Version am\u00E9lior\u00E9e -->\r\n <div *ngIf=\"tab.type === 'list'\" class=\"docs-list-container\">\r\n <div class=\"docs-header\">\r\n <h2>\uD83D\uDCDA Sommaire de la Documentation</h2>\r\n <p class=\"docs-subtitle\">Explorez toutes les fonctionnalit\u00E9s disponibles dans LogeProj</p>\r\n </div>\r\n\r\n <!-- Barre de recherche -->\r\n <div class=\"search-bar\">\r\n <span class=\"p-input-icon-left\" style=\"width: 100%; max-width: 800px;\">\r\n <i class=\"pi pi-search\"></i>\r\n <input \r\n type=\"text\" \r\n pInputText \r\n placeholder=\"Rechercher dans les documentations...\" \r\n [(ngModel)]=\"searchQuery\"\r\n (input)=\"filterDocumentation()\"\r\n style=\"width: 100% !important; padding: 12px 20px 12px 40px !important; border-radius: 25px !important;\">\r\n </span>\r\n </div>\r\n\r\n <!-- Liste des cat\u00E9gories -->\r\n <div class=\"categories-container\">\r\n <div *ngFor=\"let category of filteredCategories\" class=\"category-section\">\r\n <div class=\"category-header\" (click)=\"toggleCategory(category.key)\">\r\n <i class=\"pi\" [ngClass]=\"category.expanded ? 'pi-chevron-down' : 'pi-chevron-right'\"></i>\r\n <span class=\"category-icon\">{{ category.icon }}</span>\r\n <h3 class=\"category-title\">{{ category.name }}</h3>\r\n <span class=\"category-count\">({{ category.docs.length }})</span>\r\n </div>\r\n \r\n <div class=\"category-content\" [ngClass]=\"{ 'expanded': category.expanded }\">\r\n <div class=\"docs-grid\">\r\n <div \r\n *ngFor=\"let doc of category.docs\" \r\n class=\"doc-card\"\r\n (click)=\"openDocumentationAndSwitch(doc)\"\r\n [title]=\"doc.description\"> \r\n <div class=\"doc-card-content\">\r\n <h4 class=\"doc-name\">{{ doc.displayName }}</h4>\r\n <p class=\"doc-description\">{{ doc.description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Stats en bas -->\r\n <div class=\"docs-stats\">\r\n <div class=\"stat-item\">\r\n <strong>{{ getTotalDocsCount() }}</strong> documentations disponibles\r\n </div>\r\n <div class=\"stat-item\">\r\n <strong>{{ getOpenTabsCount() }}</strong> onglets ouverts\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Contenu pour onglet de documentation -->\r\n <div *ngIf=\"tab.type === 'doc'\" class=\"markdown-container\">\r\n <!-- Breadcrumb pour navigation -->\r\n <div class=\"doc-breadcrumb\" *ngIf=\"tab.category\">\r\n <span class=\"breadcrumb-item\">{{ tab.category }}</span>\r\n <i class=\"pi pi-angle-right\"></i>\r\n <span class=\"breadcrumb-current\">{{ tab.title }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"tab.loading\" class=\"loading-container\">\r\n <p-progressSpinner strokeWidth=\"4\"></p-progressSpinner>\r\n <span>Chargement de la documentation...</span>\r\n </div>\r\n <markdown \r\n *ngIf=\"!tab.loading\" \r\n [data]=\"tab.content || 'Aucun contenu disponible'\">\r\n </markdown>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>", styles: [".documentation-container{display:flex;flex-direction:column;height:100%;width:100%}.documentation-menu{padding:15px;background:linear-gradient(135deg,#667eea,#764ba2);border-bottom:1px solid #e9ecef;display:flex;gap:10px;flex-shrink:0}.documentation-menu .p-button{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff}.documentation-menu .p-button:hover{background:#ffffff4d}.docs-list-container{padding:20px;flex:1;overflow-y:auto;background:#f8f9fa}.docs-header{text-align:center;margin-bottom:30px}.docs-header h2{margin:0 0 10px;color:#2c3e50;font-size:2rem}.docs-header .docs-subtitle{color:#7f8c8d;font-size:1.1rem;margin:0}.search-bar{margin-bottom:30px;display:flex;justify-content:center}.search-bar .search-input{width:100%;padding:12px 20px 12px 40px;border-radius:25px;border:2px solid #e9ecef;font-size:1rem}.search-bar .search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.categories-container{max-width:1200px;margin:0 auto}.category-section{margin-bottom:25px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.category-section .category-header{padding:20px;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);cursor:pointer;display:flex;align-items:center;gap:15px;transition:all .3s ease}.category-section .category-header:hover{background:linear-gradient(135deg,#e8eaf6,#b39ddb)}.category-section .category-header .pi{color:#667eea;font-size:1rem;transition:transform .3s ease}.category-section .category-header .category-icon{font-size:1.5rem}.category-section .category-header .category-title{margin:0;color:#2c3e50;font-size:1.3rem;flex:1}.category-section .category-header .category-count{color:#7f8c8d;font-size:.9rem;background:#677eea1a;padding:4px 12px;border-radius:15px}.category-section .category-content{max-height:0;overflow:hidden;transition:max-height .4s ease-out}.category-section .category-content.expanded{max-height:2000px;transition:max-height .6s ease-in}.docs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;padding:25px}.doc-card{border:1px solid #e9ecef;border-radius:12px;padding:20px;cursor:pointer;transition:all .3s ease;background:#fff;position:relative;overflow:hidden}.doc-card:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#667eea,#764ba2);transform:scaleX(0);transition:transform .3s ease}.doc-card:hover{border-color:#667eea;box-shadow:0 8px 25px #667eea26;transform:translateY(-4px)}.doc-card:hover:before{transform:scaleX(1)}.doc-card .doc-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.doc-card .doc-card-header .doc-icon{font-size:2rem}.doc-card .doc-card-header .doc-badge{padding:4px 8px;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.doc-card .doc-card-header .doc-badge.doc-badge-high{background:#e8f5e8;color:#2e7d2e}.doc-card .doc-card-header .doc-badge.doc-badge-medium{background:#fff3cd;color:#856404}.doc-card .doc-card-header .doc-badge.doc-badge-low{background:#f8f9fa;color:#6c757d}.doc-card .doc-card-content .doc-name{margin:0 0 10px;color:#2c3e50;font-size:1.1rem;font-weight:600;line-height:1.3}.doc-card .doc-card-content .doc-description{color:#6c757d;font-size:.9rem;line-height:1.4;margin:0 0 10px}.doc-card .doc-card-content .doc-filename{color:#adb5bd;font-size:.8rem;font-family:Courier New,monospace}.docs-stats{display:flex;justify-content:center;gap:40px;margin-top:40px;padding:20px;background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a}.docs-stats .stat-item{text-align:center;color:#6c757d}.docs-stats .stat-item strong{color:#667eea;font-size:1.2rem}.markdown-container{flex:1;overflow-y:auto;padding:20px;background:#fff}.markdown-container .doc-breadcrumb{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding:10px 0;border-bottom:1px solid #e9ecef;color:#6c757d;font-size:.9rem}.markdown-container .doc-breadcrumb .breadcrumb-current{color:#2c3e50;font-weight:600}.markdown-container markdown{display:block;line-height:1.6}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px;color:#6c757d;gap:20px}.loading-container span{font-size:1.1rem}.documentation-tabs{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-panels{flex:1;display:flex}.documentation-tabs ::ng-deep .p-tabview-panels .p-tabview-panel{flex:1;display:flex;flex-direction:column}.documentation-tabs ::ng-deep .p-tabview-nav{background:#f8f9fa;border-bottom:2px solid #e9ecef}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link{background:transparent;border:none;color:#6c757d;font-weight:500}.documentation-tabs ::ng-deep .p-tabview-nav .p-tabview-nav-link:not(.p-disabled):focus{box-shadow:0 0 0 2px #667eea33}.documentation-tabs ::ng-deep .p-tabview-nav .p-highlight .p-tabview-nav-link{background:#fff;color:#667eea;border-bottom:2px solid #667eea}\n"] }]
155
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.Router }] });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRhdGlvbi1jb250ZXh0dWVsbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lsb2ctbGliL3NyYy9saWIvdmlld3MvZG9jdW1lbnRhdGlvbi9kb2N1bWVudGF0aW9uLWNvbnRleHR1ZWxsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaWxvZy1saWIvc3JjL2xpYi92aWV3cy9kb2N1bWVudGF0aW9uL2RvY3VtZW50YXRpb24tY29udGV4dHVlbGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7O0FBOEJsRCxNQUFNLE9BQU8sa0NBQWtDO0lBUTdDLFlBQ1UsSUFBZ0IsRUFDaEIsTUFBYztRQURkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVJ4QixlQUFVLEdBQWUsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFlLEVBQUUsQ0FBQztRQUNwQyxTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO0lBS2hCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUM1RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFcEMseURBQXlEO1lBQ3pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsMkJBQTJCO1lBQzNELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFXO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELEdBQUcsR0FBRztZQUNOLElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBRXpDLEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFFakMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQztZQUMvRSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDO2dCQUN6RixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEIsR0FBRyxHQUFHO29CQUNOLFFBQVE7b0JBQ1IsSUFBSTtpQkFDTCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN2RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUM5QyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQzdDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDN0MsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3pELENBQUM7WUFDRixPQUFPO2dCQUNMLEdBQUcsUUFBUTtnQkFDWCxJQUFJLEVBQUUsWUFBWTthQUNuQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzdELElBQUksR0FBRztZQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCwwQkFBMEIsQ0FBQyxHQUFZO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxHQUFHLENBQUMsV0FBVztZQUN0QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUk7U0FDbEUsQ0FBQztRQUVKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QixLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNkLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLENBQUMsT0FBTyxHQUFHLGtEQUFrRCxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsYUFBYSxDQUFDLEdBQVc7UUFDdkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQWUsQ0FBQzthQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDVixhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUNwRixDQUFDO0lBQ04sQ0FBQzsrR0FqS1Usa0NBQWtDO21HQUFsQyxrQ0FBa0Msd0VDOUIvQyw2cEpBaUhNOzs0RkRuRk8sa0NBQWtDO2tCQUw5QyxTQUFTOytCQUNFLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbnRlcmZhY2UgRG9jdW1lbnRhdGlvbkVudHJ5IHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgY2F0ZWdvcnk6IHN0cmluZztcclxuICB0YWdzOiBzdHJpbmdbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIENhdGVnb3J5IHtcclxuICBrZXk6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaWNvbjogc3RyaW5nO1xyXG4gIGV4cGFuZGVkOiBib29sZWFuO1xyXG4gIGtleXdvcmRzOiBzdHJpbmdbXTtcclxuICBkb2NzOiBEb2NGaWxlW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBEb2NGaWxlIGV4dGVuZHMgRG9jdW1lbnRhdGlvbkVudHJ5IHtcclxuICBmaWxlTmFtZTogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjaWxvZy1kb2N1bWVudGF0aW9uLWNvbnRleHR1ZWxsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50YXRpb24tY29udGV4dHVlbGxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGF0aW9uLWNvbnRleHR1ZWxsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGF0aW9uQ29udGV4dHVlbGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25maWc6IGFueTtcclxuICBjYXRlZ29yaWVzOiBDYXRlZ29yeVtdID0gW107XHJcbiAgZmlsdGVyZWRDYXRlZ29yaWVzOiBDYXRlZ29yeVtdID0gW107XHJcbiAgdGFiczogYW55W10gPSBbXTtcclxuICBzZWFyY2hRdWVyeSA9ICcnO1xyXG4gIGFjdGl2ZVRhYkluZGV4ID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaHR0cC5nZXQoJ2Fzc2V0cy9kb2NzL2RvYy1jb25maWcvY29uZmlnLmpzb24nKS5zdWJzY3JpYmUoKGNvbmZpZzogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICB0aGlzLm9yZ2FuaXplRG9jc0J5Q2F0ZWdvcnkoY29uZmlnKTtcclxuXHJcbiAgICAgIC8vIFRlbnRhdGl2ZSBkJ291dmVydHVyZSBhdXRvbWF0aXF1ZSBlbiBmb25jdGlvbiBkZSBsJ1VSTFxyXG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgY29uc3QgZm91bmREb2MgPSB0aGlzLmZpbmREb2NGb3JVcmwoY3VycmVudFBhdGgpO1xyXG4gICAgICBpZiAoZm91bmREb2MpIHtcclxuICAgICAgICB0aGlzLm9wZW5Eb2N1bWVudGF0aW9uQW5kU3dpdGNoKGZvdW5kRG9jKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wZW5Eb2N1bWVudGF0aW9uTGlzdCgpOyAvLyBmYWxsYmFjayBzdXIgbGUgc29tbWFpcmVcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuQ3VycmVudFBhZ2VEb2MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIGNvbnN0IGZvdW5kRG9jID0gdGhpcy5maW5kRG9jRm9yVXJsKGN1cnJlbnRQYXRoKTtcclxuICAgIGlmIChmb3VuZERvYykge1xyXG4gICAgICB0aGlzLm9wZW5Eb2N1bWVudGF0aW9uQW5kU3dpdGNoKGZvdW5kRG9jKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbkRvY3VtZW50YXRpb25MaXN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcmdhbml6ZURvY3NCeUNhdGVnb3J5KGNvbmZpZzogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gY29uZmlnLmNhdGVnb3JpZXMubWFwKChjYXQ6IGFueSkgPT4gKHtcclxuICAgICAgLi4uY2F0LFxyXG4gICAgICBkb2NzOiBbXVxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IGljb25NYXBwaW5ncyA9IGNvbmZpZy5pY29uTWFwcGluZ3MgfHwge307XHJcbiAgICBjb25zdCBkb2NzQ29uZmlnID0gY29uZmlnLmRvY3VtZW50YXRpb25zO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgaW4gZG9jc0NvbmZpZykge1xyXG4gICAgICBjb25zdCBkb2MgPSBkb2NzQ29uZmlnW2ZpbGVOYW1lXTtcclxuICAgICAgY29uc3QgY2F0ZWdvcnlLZXkgPSBkb2MuY2F0ZWdvcnk7XHJcblxyXG4gICAgICBjb25zdCBtYXRjaGVkQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzLmZpbmQoKGNhdDogYW55KSA9PiBjYXQua2V5ID09PSBjYXRlZ29yeUtleSk7XHJcbiAgICAgIGlmIChtYXRjaGVkQ2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCBpY29uID0gZG9jLnRhZ3M/Lm1hcCh0ID0+IGljb25NYXBwaW5nc1t0XSk/LmZpbmQoaSA9PiAhIWkpIHx8IGljb25NYXBwaW5ncy5kZWZhdWx0O1xyXG4gICAgICAgIG1hdGNoZWRDYXRlZ29yeS5kb2NzLnB1c2goe1xyXG4gICAgICAgICAgLi4uZG9jLFxyXG4gICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICBpY29uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzLnNvcnQoKGEsIGIpID0+IGEubmFtZSAtIGIubmFtZSk7XHJcbiAgICB0aGlzLmNhdGVnb3JpZXMuZm9yRWFjaChjYXQgPT4ge1xyXG4gICAgICBjYXQuZG9jcyA9IGNhdC5kb2NzLnNvcnQoKGEsIGIpID0+IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhdGVnb3JpZXMpKTtcclxuICB9XHJcblxyXG4gIGZpbHRlckRvY3VtZW50YXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcy5tYXAoY2F0ZWdvcnkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZERvY3MgPSBjYXRlZ29yeS5kb2NzLmZpbHRlcihkb2MgPT5cclxuICAgICAgICBkb2MuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkgfHxcclxuICAgICAgICBkb2MuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkgfHxcclxuICAgICAgICBkb2MudGFncz8uc29tZSh0YWcgPT4gdGFnLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmNhdGVnb3J5LFxyXG4gICAgICAgIGRvY3M6IGZpbHRlcmVkRG9jc1xyXG4gICAgICB9O1xyXG4gICAgfSkuZmlsdGVyKGNhdCA9PiBjYXQuZG9jcy5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNhdGVnb3J5KGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYXQgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllcy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XHJcbiAgICBpZiAoY2F0KSBjYXQuZXhwYW5kZWQgPSAhY2F0LmV4cGFuZGVkO1xyXG4gIH1cclxuXHJcbiAgb3BlblRhYkFuZEFjdGl2YXRlKHRhYjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5Eb2N1bWVudGF0aW9uQW5kU3dpdGNoKGRvYzogRG9jRmlsZSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXhpc3RpbmdUYWIgPSB0aGlzLnRhYnMuZmluZCh0YWIgPT4gdGFiLmZpbGVOYW1lID09PSBkb2MuZmlsZU5hbWUpO1xyXG4gICAgaWYgKGV4aXN0aW5nVGFiKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihleGlzdGluZ1RhYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdUYWIgPSB7XHJcbiAgICAgIHR5cGU6ICdkb2MnLFxyXG4gICAgICB0aXRsZTogZG9jLmRpc3BsYXlOYW1lLFxyXG4gICAgICBmaWxlTmFtZTogZG9jLmZpbGVOYW1lLFxyXG4gICAgICBjb250ZW50OiAnJyxcclxuICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcmllcy5maW5kKGMgPT4gYy5rZXkgPT09IGRvYy5jYXRlZ29yeSk/Lm5hbWVcclxuICAgIH07XHJcblxyXG4gIHRoaXMub3BlblRhYkFuZEFjdGl2YXRlKG5ld1RhYik7XHJcblxyXG4gICAgZmV0Y2goYGFzc2V0cy9kb2NzLyR7ZG9jLmZpbGVOYW1lfWApXHJcbiAgICAgIC50aGVuKHJlcyA9PiByZXMudGV4dCgpKVxyXG4gICAgICAudGhlbihjb250ZW50ID0+IHtcclxuICAgICAgICBuZXdUYWIuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgbmV3VGFiLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICBuZXdUYWIuY29udGVudCA9ICfinYwgRXJyZXVyIGxvcnMgZHUgY2hhcmdlbWVudCBkdSBmaWNoaWVyIG1hcmtkb3duLic7XHJcbiAgICAgICAgbmV3VGFiLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuRG9jdW1lbnRhdGlvbkxpc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMudGFicy5maW5kKHQgPT4gdC50eXBlID09PSAnbGlzdCcpO1xyXG4gICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihleGlzdGluZyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMub3BlblRhYkFuZEFjdGl2YXRlKHsgdHlwZTogJ2xpc3QnLCB0aXRsZTogJ/Cfk5ogU29tbWFpcmUgZGVzIERvY3MnIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxEb2NzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXMucmVkdWNlKChzdW0sIGNhdCkgPT4gc3VtICsgY2F0LmRvY3MubGVuZ3RoLCAwKTtcclxuICB9XHJcblxyXG4gIGdldE9wZW5UYWJzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRhYnMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VUYWIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJzLnNwbGljZShldmVudC5pbmRleCwgMSk7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVUYWJJbmRleCA+PSB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBFc3NhaWUgZGUgcmV0cm91dmVyIHVuIGRvY3VtZW50IMOgIHBhcnRpciBkZSBsJ1VSTCBBbmd1bGFyICovXHJcbiAgZmluZERvY0ZvclVybCh1cmw6IHN0cmluZyk6IERvY0ZpbGUgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKC9eXFwvKy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpO1xyXG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc1xyXG4gICAgICAucmVkdWNlKChhY2MsIGNhdCkgPT4gYWNjLmNvbmNhdChjYXQuZG9jcyksIFtdIGFzIERvY0ZpbGVbXSlcclxuICAgICAgLmZpbmQoZG9jID0+XHJcbiAgICAgICAgbm9ybWFsaXplZFVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGRvYy5maWxlTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy5tZCcsICcnKSlcclxuICAgICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRvY3VtZW50YXRpb24tY29udGFpbmVyXCI+XHJcbiAgPCEtLSBNZW51IHN1cMOpcmlldXIgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImRvY3VtZW50YXRpb24tbWVudVwiPlxyXG4gICAgPGJ1dHRvbiBcclxuICAgICAgcEJ1dHRvbiBcclxuICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICBpY29uPVwicGkgcGktbGlzdFwiIFxyXG4gICAgICBsYWJlbD1cIlNvbW1haXJlIGRlcyBkb2N1bWVudGF0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tb3V0bGluZWRcIlxyXG4gICAgICAoY2xpY2spPVwib3BlbkRvY3VtZW50YXRpb25MaXN0KClcIlxyXG4gICAgICB0aXRsZT1cIlZvaXIgdG91dGVzIGxlcyBkb2N1bWVudGF0aW9ucyBkaXNwb25pYmxlc1wiPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICBwQnV0dG9uIFxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgIGljb249XCJwaSBwaS1ob21lXCIgXHJcbiAgICAgIGxhYmVsPVwiRG9jdW1lbnRhdGlvbiBjb3VyYW50ZVwiXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tb3V0bGluZWRcIlxyXG4gICAgICAoY2xpY2spPVwib3BlbkN1cnJlbnRQYWdlRG9jKClcIlxyXG4gICAgICB0aXRsZT1cIkRvY3VtZW50YXRpb24gZGUgbGEgcGFnZSBhY3R1ZWxsZVwiPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU3lzdMOobWUgZCdvbmdsZXRzIC0tPlxyXG4gIDxwLXRhYlZpZXcgXHJcbiAgICBbKGFjdGl2ZUluZGV4KV09XCJhY3RpdmVUYWJJbmRleFwiXHJcbiAgICAob25DbG9zZSk9XCJjbG9zZVRhYigkZXZlbnQpXCJcclxuICAgIHN0eWxlQ2xhc3M9XCJkb2N1bWVudGF0aW9uLXRhYnNcIj5cclxuICAgIFxyXG4gICAgPHAtdGFiUGFuZWwgXHJcbiAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIFxyXG4gICAgICBbaGVhZGVyXT1cInRhYi50aXRsZVwiXHJcbiAgICAgIFtjbG9zYWJsZV09XCJ0YWJzLmxlbmd0aCA+IDFcIj5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gQ29udGVudSBwb3VyIG9uZ2xldCBkZSBsaXN0ZSAtIFZlcnNpb24gYW3DqWxpb3LDqWUgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ0YWIudHlwZSA9PT0gJ2xpc3QnXCIgY2xhc3M9XCJkb2NzLWxpc3QtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRvY3MtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDI+8J+TmiBTb21tYWlyZSBkZSBsYSBEb2N1bWVudGF0aW9uPC9oMj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZG9jcy1zdWJ0aXRsZVwiPkV4cGxvcmV6IHRvdXRlcyBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkaXNwb25pYmxlcyBkYW5zIExvZ2VQcm9qPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEJhcnJlIGRlIHJlY2hlcmNoZSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJhclwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IG1heC13aWR0aDogODAwcHg7XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgICBwSW5wdXRUZXh0IFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVjaGVyY2hlciBkYW5zIGxlcyBkb2N1bWVudGF0aW9ucy4uLlwiIFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJEb2N1bWVudGF0aW9uKClcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgcGFkZGluZzogMTJweCAyMHB4IDEycHggNDBweCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiAyNXB4ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTGlzdGUgZGVzIGNhdMOpZ29yaWVzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgZmlsdGVyZWRDYXRlZ29yaWVzXCIgY2xhc3M9XCJjYXRlZ29yeS1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnkua2V5KVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJjYXRlZ29yeS5leHBhbmRlZCA/ICdwaS1jaGV2cm9uLWRvd24nIDogJ3BpLWNoZXZyb24tcmlnaHQnXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnktaWNvblwiPnt7IGNhdGVnb3J5Lmljb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2F0ZWdvcnktdGl0bGVcIj57eyBjYXRlZ29yeS5uYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5LWNvdW50XCI+KHt7IGNhdGVnb3J5LmRvY3MubGVuZ3RoIH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktY29udGVudFwiIFtuZ0NsYXNzXT1cInsgJ2V4cGFuZGVkJzogY2F0ZWdvcnkuZXhwYW5kZWQgfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2NzLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkb2Mgb2YgY2F0ZWdvcnkuZG9jc1wiIFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRvYy1jYXJkXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Eb2N1bWVudGF0aW9uQW5kU3dpdGNoKGRvYylcIlxyXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZG9jLmRlc2NyaXB0aW9uXCI+ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2MtY2FyZC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZG9jLW5hbWVcIj57eyBkb2MuZGlzcGxheU5hbWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZG9jLWRlc2NyaXB0aW9uXCI+e3sgZG9jLmRlc2NyaXB0aW9uIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU3RhdHMgZW4gYmFzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb2NzLXN0YXRzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdC1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2V0VG90YWxEb2NzQ291bnQoKSB9fTwvc3Ryb25nPiBkb2N1bWVudGF0aW9ucyBkaXNwb25pYmxlc1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdC1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2V0T3BlblRhYnNDb3VudCgpIH19PC9zdHJvbmc+IG9uZ2xldHMgb3V2ZXJ0c1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBDb250ZW51IHBvdXIgb25nbGV0IGRlIGRvY3VtZW50YXRpb24gLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ0YWIudHlwZSA9PT0gJ2RvYydcIiBjbGFzcz1cIm1hcmtkb3duLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS0gQnJlYWRjcnVtYiBwb3VyIG5hdmlnYXRpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRvYy1icmVhZGNydW1iXCIgKm5nSWY9XCJ0YWIuY2F0ZWdvcnlcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtXCI+e3sgdGFiLmNhdGVnb3J5IH19PC9zcGFuPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodFwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYi1jdXJyZW50XCI+e3sgdGFiLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGFiLmxvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCI0XCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cclxuICAgICAgICAgIDxzcGFuPkNoYXJnZW1lbnQgZGUgbGEgZG9jdW1lbnRhdGlvbi4uLjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWFya2Rvd24gXHJcbiAgICAgICAgICAqbmdJZj1cIiF0YWIubG9hZGluZ1wiIFxyXG4gICAgICAgICAgW2RhdGFdPVwidGFiLmNvbnRlbnQgfHwgJ0F1Y3VuIGNvbnRlbnUgZGlzcG9uaWJsZSdcIj5cclxuICAgICAgICA8L21hcmtkb3duPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICA8L3AtdGFiVmlldz5cclxuPC9kaXY+Il19
@@ -1,38 +0,0 @@
1
- import { Output, ViewChild } from '@angular/core';
2
- import { EventEmitter } from '@angular/core';
3
- import { Input } from '@angular/core';
4
- import { Component } from '@angular/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "primeng/editor";
7
- import * as i2 from "@angular/forms";
8
- export class CilogEditorComponent {
9
- constructor() {
10
- this.textChange = new EventEmitter();
11
- this.onTextChange = new EventEmitter();
12
- }
13
- ngOnInit() {
14
- }
15
- change(event) {
16
- this.textChange.emit(event.htmlValue);
17
- this.onTextChange.emit({ htmlValue: event.htmlValue, textValue: event.textValue });
18
- }
19
- onSelectionChange(event) {
20
- // NOTHING
21
- }
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CilogEditorComponent, selector: "cilog-editor", inputs: { text: "text" }, outputs: { textChange: "textChange", onTextChange: "onTextChange" }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true }], ngImport: i0, template: "<p-editor #editor\r\n [(ngModel)]=\"text\"\r\n (onTextChange)=\"change($event)\">\r\n</p-editor>\r\n", styles: [""], dependencies: [{ kind: "component", type: i1.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
24
- }
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CilogEditorComponent, decorators: [{
26
- type: Component,
27
- args: [{ selector: 'cilog-editor', template: "<p-editor #editor\r\n [(ngModel)]=\"text\"\r\n (onTextChange)=\"change($event)\">\r\n</p-editor>\r\n" }]
28
- }], ctorParameters: () => [], propDecorators: { text: [{
29
- type: Input
30
- }], textChange: [{
31
- type: Output
32
- }], onTextChange: [{
33
- type: Output
34
- }], editor: [{
35
- type: ViewChild,
36
- args: ['editor']
37
- }] } });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpbG9nLWxpYi9zcmMvbGliL3ZpZXdzL2VkaXRvci9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lsb2ctbGliL3NyYy9saWIvdmlld3MvZWRpdG9yL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQVNsRCxNQUFNLE9BQU8sb0JBQW9CO0lBUzdCO1FBTlUsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTlELGlCQUFZLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO0lBSWhGLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBSztRQUNuQixVQUFVO0lBQ2QsQ0FBQzsrR0FyQlEsb0JBQW9CO21HQUFwQixvQkFBb0IscVBDWmpDLHdIQUlBOzs0RkRRYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksY0FBYzt3REFNZixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVjLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJRWRpdG9yVGV4dENoYW5nZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW50ZXJmYWNlcy9lZGl0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAncHJpbWVuZy9lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NpbG9nLWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWxvZ0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgdGV4dDogc3RyaW5nO1xyXG4gICAgQE91dHB1dCgpIHRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uVGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPElFZGl0b3JUZXh0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUVkaXRvclRleHRDaGFuZ2U+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZWRpdG9yJykgZWRpdG9yOiBFZGl0b3I7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnRleHRDaGFuZ2UuZW1pdChldmVudC5odG1sVmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoeyBodG1sVmFsdWU6IGV2ZW50Lmh0bWxWYWx1ZSwgdGV4dFZhbHVlOiBldmVudC50ZXh0VmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQpIHtcclxuICAgICAgICAvLyBOT1RISU5HXHJcbiAgICB9XHJcbn1cclxuIiwiPHAtZWRpdG9yICNlZGl0b3JcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGV4dFwiXHJcbiAgICAgICAgICAob25UZXh0Q2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCI+XHJcbjwvcC1lZGl0b3I+XHJcbiJdfQ==