@rangertechnologies/ngnxt 2.1.254 → 2.1.255

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 (78) hide show
  1. package/fesm2022/rangertechnologies-ngnxt.mjs +138 -169
  2. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  3. package/lib/components/pick-location/pick-location.component.d.ts +0 -1
  4. package/package.json +4 -6
  5. package/rangertechnologies-ngnxt-2.1.255.tgz +0 -0
  6. package/esm2022/environments/version.mjs +0 -15
  7. package/esm2022/lib/components/button/nxt-button.component.mjs +0 -154
  8. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -360
  9. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -263
  10. package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -53
  11. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -158
  12. package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1744
  13. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -292
  14. package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -106
  15. package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
  16. package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
  17. package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
  18. package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
  19. package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
  20. package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
  21. package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
  22. package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
  23. package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
  24. package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
  25. package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
  26. package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
  27. package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
  28. package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
  29. package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
  30. package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
  31. package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
  32. package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
  33. package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
  34. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -392
  35. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2972
  36. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -105
  37. package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -220
  38. package/esm2022/lib/components/search-box/search-box.component.mjs +0 -470
  39. package/esm2022/lib/country.json +0 -43237
  40. package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
  41. package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
  42. package/esm2022/lib/model/bookletWrapper.mjs +0 -7
  43. package/esm2022/lib/model/changeWrapper.mjs +0 -10
  44. package/esm2022/lib/model/errorWrapper.mjs +0 -6
  45. package/esm2022/lib/nxt-app.component.mjs +0 -22
  46. package/esm2022/lib/nxt-app.module.mjs +0 -115
  47. package/esm2022/lib/nxt-app.service.mjs +0 -14
  48. package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -616
  49. package/esm2022/lib/pages/builder/element/element.component.mjs +0 -483
  50. package/esm2022/lib/pages/builder/form/form.component.mjs +0 -48
  51. package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -97
  52. package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1121
  53. package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -35
  54. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -639
  55. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1114
  56. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -784
  57. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2206
  58. package/esm2022/lib/pipe/button-styles.pipe.mjs +0 -26
  59. package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -37
  60. package/esm2022/lib/pipe/get-value.pipe.mjs +0 -54
  61. package/esm2022/lib/pipe/question-by-row.pipe.mjs +0 -51
  62. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -40
  63. package/esm2022/lib/pipe/svg/svg.pipe.mjs +0 -26
  64. package/esm2022/lib/sample.mjs +0 -3715
  65. package/esm2022/lib/services/change/change.service.mjs +0 -46
  66. package/esm2022/lib/services/country/country.service.mjs +0 -135
  67. package/esm2022/lib/services/data/data.service.mjs +0 -100
  68. package/esm2022/lib/services/form-builder/form-builder.service.mjs +0 -474
  69. package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +0 -395
  70. package/esm2022/lib/services/salesforce/salesforce.service.mjs +0 -41
  71. package/esm2022/lib/services/shared/shared.service.mjs +0 -100
  72. package/esm2022/lib/services/storage/storage.service.mjs +0 -59
  73. package/esm2022/lib/services/template/template.service.mjs +0 -335
  74. package/esm2022/lib/services/translation/translation.service.mjs +0 -121
  75. package/esm2022/lib/wrapper.mjs +0 -175
  76. package/esm2022/public-api.mjs +0 -22
  77. package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
  78. package/rangertechnologies-ngnxt-2.1.254.tgz +0 -0
@@ -1,158 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { ChangeWrapper } from '../../model/changeWrapper';
3
- import { CommonModule } from '@angular/common';
4
- import { NxtCustomTranslatePipe } from "../../pipe/custom-translate.pipe";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../services/change/change.service";
7
- import * as i2 from "../../services/data/data.service";
8
- import * as i3 from "@angular/common";
9
- export class CustomRadioComponent {
10
- changeService;
11
- dataService;
12
- options = [];
13
- question = {};
14
- apiMeta;
15
- selectedValue;
16
- progressBar;
17
- id;
18
- readOnly = false;
19
- errorMessage;
20
- error;
21
- fromShengel = false;
22
- referenceField;
23
- token;
24
- mode = 'edit'; // New mode input
25
- valueChange = new EventEmitter();
26
- invalidFieldIds = [];
27
- labelField;
28
- valueField;
29
- subscription;
30
- originalValue; // SKS11JUN25 To store the original value when entering view edit mode
31
- isSaveHovered = false;
32
- isDiscardHovered = false;
33
- value;
34
- constructor(changeService, dataService) {
35
- this.changeService = changeService;
36
- this.dataService = dataService;
37
- this.changeService.submitValidate$.subscribe((data) => {
38
- this.invalidFieldIds.push(data);
39
- });
40
- }
41
- viewEdit = false;
42
- ngOnInit() {
43
- // VD 31NOV24 null check
44
- if (this.apiMeta) {
45
- this.apiMeta = typeof this.apiMeta === 'object' ? this.apiMeta : JSON.parse(this.apiMeta);
46
- let apiObj = this.apiMeta;
47
- this.labelField = apiObj.field;
48
- this.dataService.apiResponse(apiObj.endpoint)?.subscribe((apiResponse) => {
49
- let responses;
50
- if (apiObj.variable) {
51
- responses = this.dataService.getValue(apiResponse, apiObj.variable);
52
- let results = [];
53
- for (let i = 0; i < responses?.length; i++) {
54
- var resp = responses[i];
55
- results.push(resp);
56
- }
57
- this.options = results;
58
- }
59
- else {
60
- responses = apiResponse;
61
- this.options = responses;
62
- }
63
- });
64
- let sourceId = apiObj.sourceQuestionId;
65
- if (sourceId) {
66
- this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
67
- if (changeValue != undefined) {
68
- if (changeValue.fromQuestionId && changeValue.valueObj !== undefined && (Array.isArray(apiObj.sourceQuestionId) ? apiObj.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === apiObj.sourceQuestionId)) {
69
- this.selectedValue = changeValue.valueObj[apiObj.valueField];
70
- let value = {};
71
- value['name'] = this.selectedValue;
72
- this.radioChange(value);
73
- }
74
- this.changeService.confirmChange(changeValue.fromQuestionId);
75
- }
76
- });
77
- }
78
- }
79
- }
80
- ngOnChanges(changes) {
81
- if (changes['mode']) {
82
- this.viewEdit = false;
83
- }
84
- }
85
- radioChange(event) {
86
- let change = new ChangeWrapper();
87
- change['fromQuestionId'] = this.id;
88
- change['valueObj'] = event.target?.id ? event.target?.id : '';
89
- change['referenceField'] = this.referenceField;
90
- // SKS11JUN25 Only emit the value if not in view edit mode
91
- if (!this.viewEdit) {
92
- this.valueChange.emit({ question: this.question, value: change });
93
- }
94
- this.value = change;
95
- if (event) {
96
- this.invalidFieldIds = [];
97
- }
98
- }
99
- viewEditClick(ques) {
100
- this.originalValue = ques.input; // SKS11JUN25 Store the original value
101
- this.viewEdit = true; // Enter view edit mode
102
- this.mode = 'edit';
103
- }
104
- discardChanges() {
105
- this.viewEdit = false; // Exit view edit mode
106
- this.mode = 'view'; // Switch back to view mode
107
- this.selectedValue = this.originalValue; // SKS11JUN25 Restore the original value
108
- }
109
- saveChanges() {
110
- let ques = this.question;
111
- ques['singleFieldChange'] = true;
112
- let change = {};
113
- change['fromQuestionId'] = this.question.id;
114
- change['valueObj'] = this.value;
115
- change['referenceField'] = this.question.referenceField;
116
- this.valueChange.emit({ question: ques, value: change }); // Emit the updated value
117
- this.viewEdit = false; // SKS11JUN25 Exit view edit mode
118
- this.mode = 'view'; // Switch back to view mode
119
- }
120
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomRadioComponent, deps: [{ token: i1.ChangeService }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Component });
121
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CustomRadioComponent, isStandalone: true, selector: "app-custom-radio", inputs: { options: "options", question: "question", apiMeta: "apiMeta", selectedValue: "selectedValue", progressBar: "progressBar", id: "id", readOnly: "readOnly", errorMessage: "errorMessage", error: "error", fromShengel: "fromShengel", referenceField: "referenceField", token: "token", mode: "mode" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<!-- AP26MAR25 Mark as checked if it matches the selected value -->\n<div class=\" hover-wrapper custom-radio-container\">\n <div\n style=\"display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; padding-left: 5px; padding-right: 5px; background-color: #FAFAFA; border-radius: 5px;\">\n @if(mode === 'edit'){\n <div>\n <div *ngFor=\"let option of options\"\n [class]=\"invalidFieldIds.includes(id) || error ? 'custom-radio-option invalid' : 'custom-radio-option'\">\n\n <input type=\"radio\" [id]=\"apiMeta ? option[labelField] ?? option.value : option.value\"\n [checked]=\"(selectedValue ?? '') == option.value\" [name]=\"id\" [value]=\"selectedValue\"\n (change)=\"radioChange($event)\" />\n <label class=\"nxt-radio-label\" [for]=\"apiMeta ? option[labelField] ?? option.value : option.value\">\n @if(apiMeta && option[labelField]){\n {{option[labelField]}}\n } @else {\n {{option.id +'.label' | nxtCustomTranslate : option.label || option.value }}\n }\n </label>\n </div>\n </div>\n }\n <div *ngIf=\"viewEdit\" class=\"flex\" style=\"display: flex; margin-left: auto;\">\n <div *ngIf=\"viewEdit && originalValue !== value\" (mouseenter)=\"isSaveHovered = true\" (mouseleave)=\"isSaveHovered = false\"\n style=\"padding-right: 5px;\">\n <svg *ngIf=\"!isSaveHovered\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n stroke=\"#837F8E\" />\n <path\n d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n fill=\"#837F8E\" />\n </svg>\n\n <svg *ngIf=\"isSaveHovered\" (click)=\"saveChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 13\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.95 12.8004C9.23609 12.8004 11.9 10.1365 11.9 6.85039C11.9 3.5643 9.23609 0.900391 5.95 0.900391C2.66391 0.900391 0 3.5643 0 6.85039C0 10.1365 2.66391 12.8004 5.95 12.8004Z\"\n fill=\"#259566\" />\n <path\n d=\"M8.88111 4.74622C8.83269 4.69759 8.77513 4.65899 8.71176 4.63266C8.64838 4.60633 8.58043 4.59277 8.5118 4.59277C8.44317 4.59277 8.37521 4.60633 8.31184 4.63266C8.24846 4.65899 8.19091 4.69759 8.14249 4.74622L4.8269 8.06386L3.35253 6.58949C3.30403 6.54099 3.24646 6.50252 3.18309 6.47627C3.11972 6.45003 3.05181 6.43652 2.98322 6.43652C2.91463 6.43652 2.84672 6.45003 2.78335 6.47627C2.71999 6.50252 2.66241 6.54099 2.61391 6.58949C2.56541 6.63799 2.52694 6.69557 2.50069 6.75893C2.47445 6.8223 2.46094 6.89022 2.46094 6.9588C2.46094 7.02739 2.47445 7.09531 2.50069 7.15867C2.52694 7.22204 2.56541 7.27961 2.61391 7.32811L4.45677 9.17097C4.50519 9.21961 4.56274 9.2582 4.62612 9.28453C4.6895 9.31086 4.75745 9.32442 4.82608 9.32442C4.89471 9.32442 4.96266 9.31086 5.02604 9.28453C5.08942 9.2582 5.14697 9.21961 5.19539 9.17097L8.88111 5.48484C8.92974 5.43642 8.96834 5.37887 8.99467 5.31549C9.021 5.25212 9.03456 5.18416 9.03456 5.11553C9.03456 5.0469 9.021 4.97895 8.99467 4.91557C8.96834 4.8522 8.92974 4.79465 8.88111 4.74622Z\"\n fill=\"white\" />\n </svg>\n </div>\n <div *ngIf=\"viewEdit && originalValue !== value\" (mouseenter)=\"isDiscardHovered = true\" (mouseleave)=\"isDiscardHovered = false\">\n <svg *ngIf=\"!isDiscardHovered\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n fill=\"#B0ADAB\" />\n </svg>\n\n <svg *ngIf=\"isDiscardHovered\" (click)=\"discardChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 13\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.97471L5.94 6.09026L4.82445 4.97471C4.57861 4.72887 4.18191 4.72887 3.93607 4.97471C3.69023 5.22055 3.69023 5.61725 3.93607 5.86309L5.05162 6.97864L3.93607 8.09419C3.69023 8.34003 3.69023 8.73673 3.93607 8.98257C4.18191 9.22841 4.57861 9.22841 4.82445 8.98257L5.94 7.86702L7.05555 8.98257C7.30139 9.22841 7.69809 9.22841 7.94393 8.98257C8.18977 8.73673 8.18977 8.34003 7.94393 8.09419L6.82838 6.97864L7.94393 5.86309C8.18977 5.61725 8.18977 5.22055 7.94393 4.97471C7.69809 4.73873 7.30021 4.73873 7.05555 4.97471ZM5.94 1.06062C2.70017 1.06062 0.0808594 3.67993 0.0808594 6.91977C0.0808594 10.1596 2.70017 12.7789 5.94 12.7789C9.17983 12.7789 11.7991 10.1596 11.7991 6.91977C11.7991 3.67993 9.17983 1.06062 5.94 1.06062ZM5.94 11.6153C3.35426 11.6153 1.24422 9.50525 1.24422 6.91977C1.24422 4.33412 3.35426 2.22408 5.94 2.22408C8.52558 2.22408 10.6356 4.33412 10.6356 6.91977C10.6356 9.50525 8.52558 11.6153 5.94 11.6153Z\"\n fill=\"#FF3636\" />\n </svg>\n </div>\n </div>\n </div>\n @if(mode !== 'edit') {\n <div class=\"flex content-space-between\">\n <div>{{selectedValue || '-'}}</div>\n <div>\n <svg *ngIf=\"!question.isReadOnly && !viewEdit \" class=\"edit-icon\" (click)=\"viewEditClick(question)\" width=\"13\"\n height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n fill=\"#B0ADAB\" />\n </svg>\n </div>\n </div>\n }\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">\n {{ errorMessage ?? 'Invalid selection' }}\n </span>\n</div>", styles: [".custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.custom-radio-option.invalid label{color:red}.error-msg{color:red;font-size:12px;margin-top:5px}.edit-icon{display:none;cursor:pointer}.hover-wrapper:hover .edit-icon{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }] });
122
- }
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomRadioComponent, decorators: [{
124
- type: Component,
125
- args: [{ selector: 'app-custom-radio', standalone: true, imports: [
126
- CommonModule,
127
- NxtCustomTranslatePipe
128
- ], template: "<!-- AP26MAR25 Mark as checked if it matches the selected value -->\n<div class=\" hover-wrapper custom-radio-container\">\n <div\n style=\"display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; padding-left: 5px; padding-right: 5px; background-color: #FAFAFA; border-radius: 5px;\">\n @if(mode === 'edit'){\n <div>\n <div *ngFor=\"let option of options\"\n [class]=\"invalidFieldIds.includes(id) || error ? 'custom-radio-option invalid' : 'custom-radio-option'\">\n\n <input type=\"radio\" [id]=\"apiMeta ? option[labelField] ?? option.value : option.value\"\n [checked]=\"(selectedValue ?? '') == option.value\" [name]=\"id\" [value]=\"selectedValue\"\n (change)=\"radioChange($event)\" />\n <label class=\"nxt-radio-label\" [for]=\"apiMeta ? option[labelField] ?? option.value : option.value\">\n @if(apiMeta && option[labelField]){\n {{option[labelField]}}\n } @else {\n {{option.id +'.label' | nxtCustomTranslate : option.label || option.value }}\n }\n </label>\n </div>\n </div>\n }\n <div *ngIf=\"viewEdit\" class=\"flex\" style=\"display: flex; margin-left: auto;\">\n <div *ngIf=\"viewEdit && originalValue !== value\" (mouseenter)=\"isSaveHovered = true\" (mouseleave)=\"isSaveHovered = false\"\n style=\"padding-right: 5px;\">\n <svg *ngIf=\"!isSaveHovered\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n stroke=\"#837F8E\" />\n <path\n d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n fill=\"#837F8E\" />\n </svg>\n\n <svg *ngIf=\"isSaveHovered\" (click)=\"saveChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 13\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.95 12.8004C9.23609 12.8004 11.9 10.1365 11.9 6.85039C11.9 3.5643 9.23609 0.900391 5.95 0.900391C2.66391 0.900391 0 3.5643 0 6.85039C0 10.1365 2.66391 12.8004 5.95 12.8004Z\"\n fill=\"#259566\" />\n <path\n d=\"M8.88111 4.74622C8.83269 4.69759 8.77513 4.65899 8.71176 4.63266C8.64838 4.60633 8.58043 4.59277 8.5118 4.59277C8.44317 4.59277 8.37521 4.60633 8.31184 4.63266C8.24846 4.65899 8.19091 4.69759 8.14249 4.74622L4.8269 8.06386L3.35253 6.58949C3.30403 6.54099 3.24646 6.50252 3.18309 6.47627C3.11972 6.45003 3.05181 6.43652 2.98322 6.43652C2.91463 6.43652 2.84672 6.45003 2.78335 6.47627C2.71999 6.50252 2.66241 6.54099 2.61391 6.58949C2.56541 6.63799 2.52694 6.69557 2.50069 6.75893C2.47445 6.8223 2.46094 6.89022 2.46094 6.9588C2.46094 7.02739 2.47445 7.09531 2.50069 7.15867C2.52694 7.22204 2.56541 7.27961 2.61391 7.32811L4.45677 9.17097C4.50519 9.21961 4.56274 9.2582 4.62612 9.28453C4.6895 9.31086 4.75745 9.32442 4.82608 9.32442C4.89471 9.32442 4.96266 9.31086 5.02604 9.28453C5.08942 9.2582 5.14697 9.21961 5.19539 9.17097L8.88111 5.48484C8.92974 5.43642 8.96834 5.37887 8.99467 5.31549C9.021 5.25212 9.03456 5.18416 9.03456 5.11553C9.03456 5.0469 9.021 4.97895 8.99467 4.91557C8.96834 4.8522 8.92974 4.79465 8.88111 4.74622Z\"\n fill=\"white\" />\n </svg>\n </div>\n <div *ngIf=\"viewEdit && originalValue !== value\" (mouseenter)=\"isDiscardHovered = true\" (mouseleave)=\"isDiscardHovered = false\">\n <svg *ngIf=\"!isDiscardHovered\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n fill=\"#B0ADAB\" />\n </svg>\n\n <svg *ngIf=\"isDiscardHovered\" (click)=\"discardChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 13\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.97471L5.94 6.09026L4.82445 4.97471C4.57861 4.72887 4.18191 4.72887 3.93607 4.97471C3.69023 5.22055 3.69023 5.61725 3.93607 5.86309L5.05162 6.97864L3.93607 8.09419C3.69023 8.34003 3.69023 8.73673 3.93607 8.98257C4.18191 9.22841 4.57861 9.22841 4.82445 8.98257L5.94 7.86702L7.05555 8.98257C7.30139 9.22841 7.69809 9.22841 7.94393 8.98257C8.18977 8.73673 8.18977 8.34003 7.94393 8.09419L6.82838 6.97864L7.94393 5.86309C8.18977 5.61725 8.18977 5.22055 7.94393 4.97471C7.69809 4.73873 7.30021 4.73873 7.05555 4.97471ZM5.94 1.06062C2.70017 1.06062 0.0808594 3.67993 0.0808594 6.91977C0.0808594 10.1596 2.70017 12.7789 5.94 12.7789C9.17983 12.7789 11.7991 10.1596 11.7991 6.91977C11.7991 3.67993 9.17983 1.06062 5.94 1.06062ZM5.94 11.6153C3.35426 11.6153 1.24422 9.50525 1.24422 6.91977C1.24422 4.33412 3.35426 2.22408 5.94 2.22408C8.52558 2.22408 10.6356 4.33412 10.6356 6.91977C10.6356 9.50525 8.52558 11.6153 5.94 11.6153Z\"\n fill=\"#FF3636\" />\n </svg>\n </div>\n </div>\n </div>\n @if(mode !== 'edit') {\n <div class=\"flex content-space-between\">\n <div>{{selectedValue || '-'}}</div>\n <div>\n <svg *ngIf=\"!question.isReadOnly && !viewEdit \" class=\"edit-icon\" (click)=\"viewEditClick(question)\" width=\"13\"\n height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n fill=\"#B0ADAB\" />\n </svg>\n </div>\n </div>\n }\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">\n {{ errorMessage ?? 'Invalid selection' }}\n </span>\n</div>", styles: [".custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.custom-radio-option.invalid label{color:red}.error-msg{color:red;font-size:12px;margin-top:5px}.edit-icon{display:none;cursor:pointer}.hover-wrapper:hover .edit-icon{display:block}\n"] }]
129
- }], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.DataService }], propDecorators: { options: [{
130
- type: Input
131
- }], question: [{
132
- type: Input
133
- }], apiMeta: [{
134
- type: Input
135
- }], selectedValue: [{
136
- type: Input
137
- }], progressBar: [{
138
- type: Input
139
- }], id: [{
140
- type: Input
141
- }], readOnly: [{
142
- type: Input
143
- }], errorMessage: [{
144
- type: Input
145
- }], error: [{
146
- type: Input
147
- }], fromShengel: [{
148
- type: Input
149
- }], referenceField: [{
150
- type: Input
151
- }], token: [{
152
- type: Input
153
- }], mode: [{
154
- type: Input
155
- }], valueChange: [{
156
- type: Output
157
- }] } });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXJhZGlvL2N1c3RvbS1yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7OztBQVkxRSxNQUFNLE9BQU8sb0JBQW9CO0lBMkJyQjtJQUNBO0lBMUJELE9BQU8sR0FBVSxFQUFFLENBQUM7SUFDcEIsUUFBUSxHQUFRLEVBQUUsQ0FBQTtJQUNsQixPQUFPLENBQVM7SUFDaEIsYUFBYSxDQUFTO0lBQ3RCLFdBQVcsQ0FBVTtJQUNyQixFQUFFLENBQVM7SUFDWCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFlBQVksQ0FBUztJQUNyQixLQUFLLENBQU07SUFDWCxXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLGNBQWMsQ0FBUztJQUN2QixLQUFLLENBQVM7SUFDZCxJQUFJLEdBQThCLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQjtJQUMxRCxXQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkUsZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUV4QixVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBQzFC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LG9CQUFvQiwwYkNsQmpDLCs2UUE4RU0sc1lEbEVGLFlBQVksMlBBQ1osc0JBQXNCOzs0RkFLYixvQkFBb0I7a0JBVmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHNCQUFzQjtxQkFDekI7NEdBTVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE54dEN1c3RvbVRyYW5zbGF0ZVBpcGUgfSBmcm9tIFwiLi4vLi4vcGlwZS9jdXN0b20tdHJhbnNsYXRlLnBpcGVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1yYWRpbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZVxuXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yYWRpby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1yYWRpby5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmFkaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fVxuICBASW5wdXQoKSBhcGlNZXRhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgcHJvZ3Jlc3NCYXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBASW5wdXQoKSBlcnJvcjogYW55O1xuICBASW5wdXQoKSBmcm9tU2hlbmdlbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZWZlcmVuY2VGaWVsZDogc3RyaW5nO1xuICBASW5wdXQoKSB0b2tlbjogc3RyaW5nO1xuICBASW5wdXQoKSBtb2RlOiAndmlldycgfCAnZWRpdCcgfCAncHJpbnQnID0gJ2VkaXQnOyAvLyBOZXcgbW9kZSBpbnB1dFxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGludmFsaWRGaWVsZElkczogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgbGFiZWxGaWVsZDogc3RyaW5nO1xuICBwdWJsaWMgdmFsdWVGaWVsZDogc3RyaW5nO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgb3JpZ2luYWxWYWx1ZTogYW55OyAvLyBTS1MxMUpVTjI1IFRvIHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSB3aGVuIGVudGVyaW5nIHZpZXcgZWRpdCBtb2RlXG4gIGlzU2F2ZUhvdmVyZWQgPSBmYWxzZTtcbiAgaXNEaXNjYXJkSG92ZXJlZCA9IGZhbHNlO1xuICB2YWx1ZTogQ2hhbmdlV3JhcHBlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5zdWJtaXRWYWxpZGF0ZSQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmludmFsaWRGaWVsZElkcy5wdXNoKGRhdGEpO1xuICAgIH0pO1xuICB9XG4gIHZpZXdFZGl0OiBib29sZWFuID0gZmFsc2UgXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gVkQgMzFOT1YyNCBudWxsIGNoZWNrXG4gICAgaWYgKHRoaXMuYXBpTWV0YSkge1xuICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XG4gICAgICBsZXQgYXBpT2JqOiBhbnkgPSB0aGlzLmFwaU1ldGE7XG4gICAgICB0aGlzLmxhYmVsRmllbGQgPSBhcGlPYmouZmllbGQ7XG5cbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2VzO1xuICAgICAgICBpZiAoYXBpT2JqLnZhcmlhYmxlKSB7XG4gICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2VzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlc3AgPSByZXNwb25zZXNbaV07XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2VzID0gYXBpUmVzcG9uc2U7XG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gcmVzcG9uc2VzO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGV0IHNvdXJjZUlkID0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQ7XG4gICAgICBpZiAoc291cmNlSWQpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCAmJiBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPT0gdW5kZWZpbmVkICYmICggQXJyYXkuaXNBcnJheShhcGlPYmouc291cmNlUXVlc3Rpb25JZCk/IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkLmluY2x1ZGVzKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKSA6IGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09PSBhcGlPYmouc291cmNlUXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBjaGFuZ2VWYWx1ZS52YWx1ZU9ialthcGlPYmoudmFsdWVGaWVsZF07XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0ge307XG4gICAgICAgICAgICAgICAgdmFsdWVbJ25hbWUnXSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJhZGlvQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxubmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydtb2RlJ10pIHtcbiAgICAgIHRoaXMudmlld0VkaXQgPSBmYWxzZVxuICAgIH1cbiAgfVxuICByYWRpb0NoYW5nZShldmVudDogYW55KSB7XG4gICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSBldmVudC50YXJnZXQ/LmlkID8gZXZlbnQudGFyZ2V0Py5pZCA6ICcnO1xuICAgIGNoYW5nZVsncmVmZXJlbmNlRmllbGQnXSA9IHRoaXMucmVmZXJlbmNlRmllbGQ7XG4gICAgLy8gU0tTMTFKVU4yNSBPbmx5IGVtaXQgdGhlIHZhbHVlIGlmIG5vdCBpbiB2aWV3IGVkaXQgbW9kZVxuICAgIGlmICghdGhpcy52aWV3RWRpdCkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHRoaXMucXVlc3Rpb24sIHZhbHVlOiBjaGFuZ2V9KTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IGNoYW5nZVxuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5pbnZhbGlkRmllbGRJZHMgPSBbXTtcbiAgICB9XG4gIH1cbiAgdmlld0VkaXRDbGljayhxdWVzOiBhbnkpIHtcbiAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSBxdWVzLmlucHV0OyAvLyBTS1MxMUpVTjI1IFN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgIHRoaXMudmlld0VkaXQgPSB0cnVlOyAvLyBFbnRlciB2aWV3IGVkaXQgbW9kZVxuICAgIHRoaXMubW9kZSA9ICdlZGl0JztcbiAgfVxuICBkaXNjYXJkQ2hhbmdlcygpIHtcbiAgICB0aGlzLnZpZXdFZGl0ID0gZmFsc2U7IC8vIEV4aXQgdmlldyBlZGl0IG1vZGVcbiAgICB0aGlzLm1vZGUgPSAndmlldyc7IC8vIFN3aXRjaCBiYWNrIHRvIHZpZXcgbW9kZVxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMub3JpZ2luYWxWYWx1ZTsgLy8gU0tTMTFKVU4yNSBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICB9XG4gIHNhdmVDaGFuZ2VzKCkge1xuICAgIGxldCBxdWVzID0gdGhpcy5xdWVzdGlvblxuICAgIHF1ZXNbJ3NpbmdsZUZpZWxkQ2hhbmdlJ10gPSB0cnVlXG4gICAgbGV0IGNoYW5nZTogYW55ID17fTtcbiAgICBjaGFuZ2VbJ2Zyb21RdWVzdGlvbklkJ10gPSB0aGlzLnF1ZXN0aW9uLmlkO1xuICAgIGNoYW5nZVsndmFsdWVPYmonXSA9IHRoaXMudmFsdWU7XG4gICAgY2hhbmdlWydyZWZlcmVuY2VGaWVsZCddID0gdGhpcy5xdWVzdGlvbi5yZWZlcmVuY2VGaWVsZDtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe3F1ZXN0aW9uIDogcXVlcywgdmFsdWU6IGNoYW5nZX0pOyAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgdGhpcy52aWV3RWRpdCA9IGZhbHNlOyAvLyBTS1MxMUpVTjI1IEV4aXQgdmlldyBlZGl0IG1vZGVcbiAgICB0aGlzLm1vZGUgPSAndmlldyc7IC8vIFN3aXRjaCBiYWNrIHRvIHZpZXcgbW9kZVxuICB9XG59XG4iLCI8IS0tIEFQMjZNQVIyNSAgTWFyayBhcyBjaGVja2VkIGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdGVkIHZhbHVlIC0tPlxuPGRpdiBjbGFzcz1cIiBob3Zlci13cmFwcGVyIGN1c3RvbS1yYWRpby1jb250YWluZXJcIj5cbiAgPGRpdlxuICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LXdyYXA6IHdyYXA7IHBhZGRpbmctbGVmdDogNXB4OyBwYWRkaW5nLXJpZ2h0OiA1cHg7IGJhY2tncm91bmQtY29sb3I6ICNGQUZBRkE7IGJvcmRlci1yYWRpdXM6IDVweDtcIj5cbiAgICBAaWYobW9kZSA9PT0gJ2VkaXQnKXtcbiAgICA8ZGl2PlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICBbY2xhc3NdPVwiaW52YWxpZEZpZWxkSWRzLmluY2x1ZGVzKGlkKSB8fCBlcnJvciA/ICdjdXN0b20tcmFkaW8tb3B0aW9uIGludmFsaWQnIDogJ2N1c3RvbS1yYWRpby1vcHRpb24nXCI+XG5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJhcGlNZXRhID8gb3B0aW9uW2xhYmVsRmllbGRdID8/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiKHNlbGVjdGVkVmFsdWUgPz8gJycpID09IG9wdGlvbi52YWx1ZVwiIFtuYW1lXT1cImlkXCIgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwicmFkaW9DaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwiYXBpTWV0YSA/IG9wdGlvbltsYWJlbEZpZWxkXSA/PyBvcHRpb24udmFsdWUgOiBvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICBAaWYoYXBpTWV0YSAmJiBvcHRpb25bbGFiZWxGaWVsZF0pe1xuICAgICAgICAgICAge3tvcHRpb25bbGFiZWxGaWVsZF19fVxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAge3tvcHRpb24uaWQgKycubGFiZWwnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogb3B0aW9uLmxhYmVsIHx8IG9wdGlvbi52YWx1ZSB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2ICpuZ0lmPVwidmlld0VkaXRcIiBjbGFzcz1cImZsZXhcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IG1hcmdpbi1sZWZ0OiBhdXRvO1wiPlxuICAgICAgPGRpdiAqbmdJZj1cInZpZXdFZGl0ICYmIG9yaWdpbmFsVmFsdWUgIT09IHZhbHVlXCIgKG1vdXNlZW50ZXIpPVwiaXNTYXZlSG92ZXJlZCA9IHRydWVcIiAobW91c2VsZWF2ZSk9XCJpc1NhdmVIb3ZlcmVkID0gZmFsc2VcIlxuICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNTYXZlSG92ZXJlZFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTUuOTUwMiAwLjVDOC45NjAwNiAwLjUwMDEwNiAxMS40MDA0IDIuOTQwMzEgMTEuNDAwNCA1Ljk1MDJDMTEuNDAwMyA4Ljk1OTk5IDguOTU5OTkgMTEuNDAwMyA1Ljk1MDIgMTEuNDAwNEMyLjk0MDMxIDExLjQwMDQgMC41MDAxMDYgOC45NjAwNiAwLjUgNS45NTAyQzAuNSAyLjk0MDI0IDIuOTQwMjQgMC41IDUuOTUwMiAwLjVaXCJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzgzN0Y4RVwiIC8+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTguODgxMTEgMy44NDU4M0M4LjgzMjY5IDMuNzk3MiA4Ljc3NTEzIDMuNzU4NiA4LjcxMTc2IDMuNzMyMjdDOC42NDgzOCAzLjcwNTk0IDguNTgwNDMgMy42OTIzOCA4LjUxMTggMy42OTIzOEM4LjQ0MzE3IDMuNjkyMzggOC4zNzUyMSAzLjcwNTk0IDguMzExODQgMy43MzIyN0M4LjI0ODQ2IDMuNzU4NiA4LjE5MDkxIDMuNzk3MiA4LjE0MjQ5IDMuODQ1ODNMNC44MjY5IDcuMTYzNDdMMy4zNTI1MyA1LjY4OTFDMy4zMDQwMyA1LjY0MDYgMy4yNDY0NiA1LjYwMjEzIDMuMTgzMDkgNS41NzU4OEMzLjExOTcyIDUuNTQ5NjQgMy4wNTE4MSA1LjUzNjEzIDIuOTgzMjIgNS41MzYxM0MyLjkxNDYzIDUuNTM2MTMgMi44NDY3MiA1LjU0OTY0IDIuNzgzMzUgNS41NzU4OEMyLjcxOTk5IDUuNjAyMTMgMi42NjI0MSA1LjY0MDYgMi42MTM5MSA1LjY4OTFDMi41NjU0MSA1LjczNzYgMi41MjY5NCA1Ljc5NTE4IDIuNTAwNjkgNS44NTg1NEMyLjQ3NDQ1IDUuOTIxOTEgMi40NjA5NCA1Ljk4OTgyIDIuNDYwOTQgNi4wNTg0MUMyLjQ2MDk0IDYuMTI3IDIuNDc0NDUgNi4xOTQ5MSAyLjUwMDY5IDYuMjU4MjhDMi41MjY5NCA2LjMyMTY1IDIuNTY1NDEgNi4zNzkyMiAyLjYxMzkxIDYuNDI3NzJMNC40NTY3NyA4LjI3MDU4QzQuNTA1MTkgOC4zMTkyMiA0LjU2Mjc0IDguMzU3ODEgNC42MjYxMiA4LjM4NDE0QzQuNjg5NSA4LjQxMDQ3IDQuNzU3NDUgOC40MjQwMyA0LjgyNjA4IDguNDI0MDNDNC44OTQ3MSA4LjQyNDAzIDQuOTYyNjYgOC40MTA0NyA1LjAyNjA0IDguMzg0MTRDNS4wODk0MiA4LjM1NzgxIDUuMTQ2OTcgOC4zMTkyMiA1LjE5NTM5IDguMjcwNThMOC44ODExMSA0LjU4NDQ1QzguOTI5NzQgNC41MzYwMyA4Ljk2ODM0IDQuNDc4NDggOC45OTQ2NyA0LjQxNTFDOS4wMjEgNC4zNTE3MyA5LjAzNDU2IDQuMjgzNzcgOS4wMzQ1NiA0LjIxNTE0QzkuMDM0NTYgNC4xNDY1MSA5LjAyMSA0LjA3ODU2IDguOTk0NjcgNC4wMTUxOEM4Ljk2ODM0IDMuOTUxOCA4LjkyOTc0IDMuODk0MjUgOC44ODExMSAzLjg0NTgzWlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjODM3RjhFXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1NhdmVIb3ZlcmVkXCIgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKClcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk01Ljk1IDEyLjgwMDRDOS4yMzYwOSAxMi44MDA0IDExLjkgMTAuMTM2NSAxMS45IDYuODUwMzlDMTEuOSAzLjU2NDMgOS4yMzYwOSAwLjkwMDM5MSA1Ljk1IDAuOTAwMzkxQzIuNjYzOTEgMC45MDAzOTEgMCAzLjU2NDMgMCA2Ljg1MDM5QzAgMTAuMTM2NSAyLjY2MzkxIDEyLjgwMDQgNS45NSAxMi44MDA0WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMjU5NTY2XCIgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNOC44ODExMSA0Ljc0NjIyQzguODMyNjkgNC42OTc1OSA4Ljc3NTEzIDQuNjU4OTkgOC43MTE3NiA0LjYzMjY2QzguNjQ4MzggNC42MDYzMyA4LjU4MDQzIDQuNTkyNzcgOC41MTE4IDQuNTkyNzdDOC40NDMxNyA0LjU5Mjc3IDguMzc1MjEgNC42MDYzMyA4LjMxMTg0IDQuNjMyNjZDOC4yNDg0NiA0LjY1ODk5IDguMTkwOTEgNC42OTc1OSA4LjE0MjQ5IDQuNzQ2MjJMNC44MjY5IDguMDYzODZMMy4zNTI1MyA2LjU4OTQ5QzMuMzA0MDMgNi41NDA5OSAzLjI0NjQ2IDYuNTAyNTIgMy4xODMwOSA2LjQ3NjI3QzMuMTE5NzIgNi40NTAwMyAzLjA1MTgxIDYuNDM2NTIgMi45ODMyMiA2LjQzNjUyQzIuOTE0NjMgNi40MzY1MiAyLjg0NjcyIDYuNDUwMDMgMi43ODMzNSA2LjQ3NjI3QzIuNzE5OTkgNi41MDI1MiAyLjY2MjQxIDYuNTQwOTkgMi42MTM5MSA2LjU4OTQ5QzIuNTY1NDEgNi42Mzc5OSAyLjUyNjk0IDYuNjk1NTcgMi41MDA2OSA2Ljc1ODkzQzIuNDc0NDUgNi44MjIzIDIuNDYwOTQgNi44OTAyMiAyLjQ2MDk0IDYuOTU4OEMyLjQ2MDk0IDcuMDI3MzkgMi40NzQ0NSA3LjA5NTMxIDIuNTAwNjkgNy4xNTg2N0MyLjUyNjk0IDcuMjIyMDQgMi41NjU0MSA3LjI3OTYxIDIuNjEzOTEgNy4zMjgxMUw0LjQ1Njc3IDkuMTcwOTdDNC41MDUxOSA5LjIxOTYxIDQuNTYyNzQgOS4yNTgyIDQuNjI2MTIgOS4yODQ1M0M0LjY4OTUgOS4zMTA4NiA0Ljc1NzQ1IDkuMzI0NDIgNC44MjYwOCA5LjMyNDQyQzQuODk0NzEgOS4zMjQ0MiA0Ljk2MjY2IDkuMzEwODYgNS4wMjYwNCA5LjI4NDUzQzUuMDg5NDIgOS4yNTgyIDUuMTQ2OTcgOS4yMTk2MSA1LjE5NTM5IDkuMTcwOTdMOC44ODExMSA1LjQ4NDg0QzguOTI5NzQgNS40MzY0MiA4Ljk2ODM0IDUuMzc4ODcgOC45OTQ2NyA1LjMxNTQ5QzkuMDIxIDUuMjUyMTIgOS4wMzQ1NiA1LjE4NDE2IDkuMDM0NTYgNS4xMTU1M0M5LjAzNDU2IDUuMDQ2OSA5LjAyMSA0Ljk3ODk1IDguOTk0NjcgNC45MTU1N0M4Ljk2ODM0IDQuODUyMiA4LjkyOTc0IDQuNzk0NjUgOC44ODExMSA0Ljc0NjIyWlwiXG4gICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0VkaXQgJiYgb3JpZ2luYWxWYWx1ZSAhPT0gdmFsdWVcIiAobW91c2VlbnRlcik9XCJpc0Rpc2NhcmRIb3ZlcmVkID0gdHJ1ZVwiIChtb3VzZWxlYXZlKT1cImlzRGlzY2FyZEhvdmVyZWQgPSBmYWxzZVwiPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNEaXNjYXJkSG92ZXJlZFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTcuMDU1NTUgNC4wMDg4M0w1Ljk0IDUuMTI0MzhMNC44MjQ0NSA0LjAwODgzQzQuNTc4NjEgMy43NjI5OSA0LjE4MTkxIDMuNzYyOTkgMy45MzYwNyA0LjAwODgzQzMuNjkwMjMgNC4yNTQ2NyAzLjY5MDIzIDQuNjUxMzcgMy45MzYwNyA0Ljg5NzIxTDUuMDUxNjIgNi4wMTI3NkwzLjkzNjA3IDcuMTI4MzFDMy42OTAyMyA3LjM3NDE1IDMuNjkwMjMgNy43NzA4NSAzLjkzNjA3IDguMDE2NjlDNC4xODE5MSA4LjI2MjUzIDQuNTc4NjEgOC4yNjI1MyA0LjgyNDQ1IDguMDE2NjlMNS45NCA2LjkwMTE0TDcuMDU1NTUgOC4wMTY2OUM3LjMwMTM5IDguMjYyNTMgNy42OTgwOSA4LjI2MjUzIDcuOTQzOTMgOC4wMTY2OUM4LjE4OTc3IDcuNzcwODUgOC4xODk3NyA3LjM3NDE1IDcuOTQzOTMgNy4xMjgzMUw2LjgyODM4IDYuMDEyNzZMNy45NDM5MyA0Ljg5NzIxQzguMTg5NzcgNC42NTEzNyA4LjE4OTc3IDQuMjU0NjcgNy45NDM5MyA0LjAwODgzQzcuNjk4MDkgMy43NzI4NSA3LjMwMDIxIDMuNzcyODUgNy4wNTU1NSA0LjAwODgzWk01Ljk0IDAuMDgyMDMxMkMyLjcwMDE3IDAuMDgyMDMxMiAwLjA4MDg1OTQgMi43MDEzNCAwLjA4MDg1OTQgNS45NDExOEMwLjA4MDg1OTQgOS4xODEwMSAyLjcwMDE3IDExLjgwMDMgNS45NCAxMS44MDAzQzkuMTc5ODMgMTEuODAwMyAxMS43OTkxIDkuMTgxMDEgMTEuNzk5MSA1Ljk0MTE4QzExLjc5OTEgMi43MDEzNCA5LjE3OTgzIDAuMDgyMDMxMiA1Ljk0IDAuMDgyMDMxMlpNNS45NCAxMC42MzY3QzMuMzU0MjYgMTAuNjM2NyAxLjI0NDIyIDguNTI2NjcgMS4yNDQyMiA1Ljk0MTE4QzEuMjQ0MjIgMy4zNTU1MyAzLjM1NDI2IDEuMjQ1NDkgNS45NCAxLjI0NTQ5QzguNTI1NTggMS4yNDU0OSAxMC42MzU2IDMuMzU1NTMgMTAuNjM1NiA1Ljk0MTE4QzEwLjYzNTYgOC41MjY2NyA4LjUyNTU4IDEwLjYzNjcgNS45NCAxMC42MzY3WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjQjBBREFCXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc0Rpc2NhcmRIb3ZlcmVkXCIgKGNsaWNrKT1cImRpc2NhcmRDaGFuZ2VzKClcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk03LjA1NTU1IDQuOTc0NzFMNS45NCA2LjA5MDI2TDQuODI0NDUgNC45NzQ3MUM0LjU3ODYxIDQuNzI4ODcgNC4xODE5MSA0LjcyODg3IDMuOTM2MDcgNC45NzQ3MUMzLjY5MDIzIDUuMjIwNTUgMy42OTAyMyA1LjYxNzI1IDMuOTM2MDcgNS44NjMwOUw1LjA1MTYyIDYuOTc4NjRMMy45MzYwNyA4LjA5NDE5QzMuNjkwMjMgOC4zNDAwMyAzLjY5MDIzIDguNzM2NzMgMy45MzYwNyA4Ljk4MjU3QzQuMTgxOTEgOS4yMjg0MSA0LjU3ODYxIDkuMjI4NDEgNC44MjQ0NSA4Ljk4MjU3TDUuOTQgNy44NjcwMkw3LjA1NTU1IDguOTgyNTdDNy4zMDEzOSA5LjIyODQxIDcuNjk4MDkgOS4yMjg0MSA3Ljk0MzkzIDguOTgyNTdDOC4xODk3NyA4LjczNjczIDguMTg5NzcgOC4zNDAwMyA3Ljk0MzkzIDguMDk0MTlMNi44MjgzOCA2Ljk3ODY0TDcuOTQzOTMgNS44NjMwOUM4LjE4OTc3IDUuNjE3MjUgOC4xODk3NyA1LjIyMDU1IDcuOTQzOTMgNC45NzQ3MUM3LjY5ODA5IDQuNzM4NzMgNy4zMDAyMSA0LjczODczIDcuMDU1NTUgNC45NzQ3MVpNNS45NCAxLjA2MDYyQzIuNzAwMTcgMS4wNjA2MiAwLjA4MDg1OTQgMy42Nzk5MyAwLjA4MDg1OTQgNi45MTk3N0MwLjA4MDg1OTQgMTAuMTU5NiAyLjcwMDE3IDEyLjc3ODkgNS45NCAxMi43Nzg5QzkuMTc5ODMgMTIuNzc4OSAxMS43OTkxIDEwLjE1OTYgMTEuNzk5MSA2LjkxOTc3QzExLjc5OTEgMy42Nzk5MyA5LjE3OTgzIDEuMDYwNjIgNS45NCAxLjA2MDYyWk01Ljk0IDExLjYxNTNDMy4zNTQyNiAxMS42MTUzIDEuMjQ0MjIgOS41MDUyNSAxLjI0NDIyIDYuOTE5NzdDMS4yNDQyMiA0LjMzNDEyIDMuMzU0MjYgMi4yMjQwOCA1Ljk0IDIuMjI0MDhDOC41MjU1OCAyLjIyNDA4IDEwLjYzNTYgNC4zMzQxMiAxMC42MzU2IDYuOTE5NzdDMTAuNjM1NiA5LjUwNTI1IDguNTI1NTggMTEuNjE1MyA1Ljk0IDExLjYxNTNaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiNGRjM2MzZcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIEBpZihtb2RlICE9PSAnZWRpdCcpIHtcbiAgPGRpdiBjbGFzcz1cImZsZXggY29udGVudC1zcGFjZS1iZXR3ZWVuXCI+XG4gICAgPGRpdj57e3NlbGVjdGVkVmFsdWUgfHwgJy0nfX08L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzdGlvbi5pc1JlYWRPbmx5ICYmICF2aWV3RWRpdCBcIiBjbGFzcz1cImVkaXQtaWNvblwiIChjbGljayk9XCJ2aWV3RWRpdENsaWNrKHF1ZXN0aW9uKVwiIHdpZHRoPVwiMTNcIlxuICAgICAgICBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTMgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNMS45OTk4NyA5LjAwMTdMNC4zOTYwMiAxMS4zOTc5QzQuNTAzNzEgMTEuNTA1NSA0LjY2NTI1IDExLjUwNTUgNC43NzI5NCAxMS4zOTc5TDEwLjc0OTkgNS4zOTQwMUMxMC44NTc2IDUuMjg2MzEgMTAuODU3NiA1LjEyNDc3IDEwLjc0OTkgNS4wMTcwOEw4LjM4MDY0IDIuNjQ3ODVDOC4yNzI5NCAyLjU0MDE2IDguMTExNDEgMi41NDAxNiA4LjAwMzcxIDIuNjQ3ODVMMS45OTk4NyA4LjY1MTdDMS44OTIxNyA4Ljc1OTM5IDEuODkyMTcgOC45MjA5MyAxLjk5OTg3IDkuMDAxN1pNOS4xNjE0IDEuNTQ0MDFDOS4wNTM3MSAxLjY1MTcgOS4wNTM3MSAxLjgxMzI0IDkuMTYxNCAxLjkyMDkzTDExLjUzMDYgNC4yOTAxNkMxMS42MzgzIDQuMzk3ODUgMTEuNzk5OSA0LjM5Nzg1IDExLjkwNzYgNC4yOTAxNkwxMi41ODA2IDMuNjE3MDhDMTMuMDExNCAzLjIxMzI0IDEzLjAxMTQgMi41NjcwOCAxMi41ODA2IDIuMTM2MzFMMTEuMzE1MyAwLjg3MDkyOEMxMC44ODQ1IDAuNDQwMTU5IDEwLjIxMTQgMC40NDAxNTkgOS43ODA2MyAwLjg3MDkyOEw5LjE2MTQgMS41NDQwMVpNMC4wMDc1NTg2MiAxMi45ODYzQy0wLjA0NjI4NzUgMTMuMjU1NSAwLjE5NjAyIDEzLjQ5NzkgMC40NjUyNTEgMTMuNDQ0TDMuMzk5ODcgMTIuNzQ0QzMuNTA3NTYgMTIuNzE3MSAzLjU4ODMzIDEyLjY2MzIgMy42NDIxNyAxMi42MDk0TDMuNjk2MDIgMTIuNTU1NUMzLjc0OTg3IDEyLjUwMTcgMy43NzY3OSAxMi4zMTMyIDMuNjY5MSAxMi4yMDU1TDEuMjQ2MDIgOS43ODI0N0MxLjEzODMzIDkuNjc0NzggMC45NDk4NjYgOS43MDE3IDAuODk2MDIgOS43NTU1NEwwLjg0MjE3NCA5LjgwOTM5QzAuNzYxNDA1IDkuODkwMTYgMC43MzQ0ODIgOS45NzA5MyAwLjcwNzU1OSAxMC4wNTE3TDAuMDA3NTU4NjIgMTIuOTg2M1pcIlxuICAgICAgICAgIGZpbGw9XCIjQjBBREFCXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgfVxuICA8c3BhbiAqbmdJZj1cImVycm9yIHx8IGludmFsaWRGaWVsZElkcy5pbmNsdWRlcyhpZClcIiBjbGFzcz1cImVycm9yLW1zZ1wiPlxuICAgIHt7IGVycm9yTWVzc2FnZSA/PyAnSW52YWxpZCBzZWxlY3Rpb24nIH19XG4gIDwvc3Bhbj5cbjwvZGl2PiJdfQ==