@sumaris-net/ngx-components 2.7.0-rc3 → 2.7.0-rc5

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 (194) hide show
  1. package/esm2022/public_api.mjs +2 -3
  2. package/esm2022/src/app/admin/services/filter/person.filter.mjs +1 -1
  3. package/esm2022/src/app/admin/services/person.service.mjs +2 -2
  4. package/esm2022/src/app/admin/services/validator/person.validator.mjs +1 -1
  5. package/esm2022/src/app/admin/users/users.mjs +3 -3
  6. package/esm2022/src/app/core/about/about.modal.mjs +1 -1
  7. package/esm2022/src/app/core/account/account.page.mjs +1 -1
  8. package/esm2022/src/app/core/account/new-token.modal.mjs +1 -1
  9. package/esm2022/src/app/core/account/token.table.mjs +1 -1
  10. package/esm2022/src/app/core/auth/auth.form.mjs +1 -1
  11. package/esm2022/src/app/core/auth/auth.modal.mjs +1 -1
  12. package/esm2022/src/app/core/form/entity/editor.class.mjs +1 -1
  13. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +1 -1
  14. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
  15. package/esm2022/src/app/core/form/form.class.mjs +1 -1
  16. package/esm2022/src/app/core/form/form.utils.mjs +1 -1
  17. package/esm2022/src/app/core/form/list/list.form.mjs +1 -1
  18. package/esm2022/src/app/core/form/properties/properties.form.mjs +1 -1
  19. package/esm2022/src/app/core/form/properties/properties.table.mjs +2 -2
  20. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +1 -1
  21. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +1 -1
  22. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +1 -1
  23. package/esm2022/src/app/core/graphql/graphql.service.mjs +1 -1
  24. package/esm2022/src/app/core/graphql/graphql.utils.mjs +1 -1
  25. package/esm2022/src/app/core/home/home.mjs +3 -3
  26. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +1 -1
  27. package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
  28. package/esm2022/src/app/core/menu/menu.model.mjs +1 -1
  29. package/esm2022/src/app/core/menu/menu.service.mjs +1 -1
  30. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +1 -1
  31. package/esm2022/src/app/core/peer/select-peer.modal.mjs +1 -1
  32. package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
  33. package/esm2022/src/app/core/register/register.form.mjs +1 -1
  34. package/esm2022/src/app/core/register/register.modal.mjs +1 -1
  35. package/esm2022/src/app/core/services/account.service.mjs +1 -1
  36. package/esm2022/src/app/core/services/auth-guard.service.mjs +1 -1
  37. package/esm2022/src/app/core/services/base-entity-service.class.mjs +1 -1
  38. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +1 -1
  39. package/esm2022/src/app/core/services/base58.mjs +1 -1
  40. package/esm2022/src/app/core/services/config.service.mjs +1 -1
  41. package/esm2022/src/app/core/services/errors.mjs +3 -3
  42. package/esm2022/src/app/core/services/local-settings.service.mjs +1 -1
  43. package/esm2022/src/app/core/services/model/account.model.mjs +1 -1
  44. package/esm2022/src/app/core/services/model/config.model.mjs +1 -1
  45. package/esm2022/src/app/core/services/model/entity.decorators.mjs +1 -1
  46. package/esm2022/src/app/core/services/model/entity.model.mjs +1 -1
  47. package/esm2022/src/app/core/services/model/filter.model.mjs +1 -1
  48. package/esm2022/src/app/core/services/model/person.model.mjs +1 -1
  49. package/esm2022/src/app/core/services/model/referential.model.mjs +3 -3
  50. package/esm2022/src/app/core/services/model/token.model.mjs +1 -1
  51. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +1 -1
  52. package/esm2022/src/app/core/services/network.service.mjs +1 -1
  53. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  54. package/esm2022/src/app/core/services/network.utils.mjs +1 -1
  55. package/esm2022/src/app/core/services/platform.service.mjs +2 -2
  56. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +1 -1
  57. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +1 -1
  58. package/esm2022/src/app/core/services/testing/referential.validator.mjs +1 -1
  59. package/esm2022/src/app/core/services/validator/account.validator.mjs +1 -1
  60. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +1 -1
  61. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +1 -1
  62. package/esm2022/src/app/core/settings/settings.page.mjs +2 -2
  63. package/esm2022/src/app/core/table/actions-column.component.mjs +1 -1
  64. package/esm2022/src/app/core/table/async-table.class.mjs +1 -1
  65. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
  66. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +2 -2
  67. package/esm2022/src/app/core/table/memory-table.class.mjs +1 -1
  68. package/esm2022/src/app/core/table/table.class.mjs +1 -1
  69. package/esm2022/src/app/core/table/table.utils.mjs +1 -1
  70. package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
  71. package/esm2022/src/app/core/table/testing/table2.testing.mjs +4 -4
  72. package/esm2022/src/app/shared/alerts.mjs +1 -1
  73. package/esm2022/src/app/shared/audio/audio.mjs +1 -1
  74. package/esm2022/src/app/shared/capacitor/keyboard.mjs +1 -1
  75. package/esm2022/src/app/shared/dates.mjs +1 -1
  76. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +1 -1
  77. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +1 -1
  78. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +1 -1
  79. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +1 -1
  80. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +1 -1
  81. package/esm2022/src/app/shared/events.mjs +1 -1
  82. package/esm2022/src/app/shared/file/csv.utils.mjs +1 -1
  83. package/esm2022/src/app/shared/file/file.service.mjs +1 -1
  84. package/esm2022/src/app/shared/file/file.utils.mjs +1 -1
  85. package/esm2022/src/app/shared/file/images.utils.mjs +1 -1
  86. package/esm2022/src/app/shared/file/json.utils.mjs +1 -1
  87. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  88. package/esm2022/src/app/shared/form/field.component.mjs +2 -2
  89. package/esm2022/src/app/shared/forms.mjs +1 -1
  90. package/esm2022/src/app/shared/functions.mjs +1 -1
  91. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +1 -1
  92. package/esm2022/src/app/shared/gesture/gesture-config.mjs +2 -2
  93. package/esm2022/src/app/shared/graph/colors.utils.mjs +1 -1
  94. package/esm2022/src/app/shared/graph/graph-colors.mjs +8 -8
  95. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +1 -1
  96. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +1 -1
  97. package/esm2022/src/app/shared/http/http.utils.mjs +1 -1
  98. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +1 -1
  99. package/esm2022/src/app/shared/image/image.service.mjs +1 -1
  100. package/esm2022/src/app/shared/inputs.mjs +1 -1
  101. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +1 -1
  102. package/esm2022/src/app/shared/logging/logger.model.mjs +1 -1
  103. package/esm2022/src/app/shared/logging/logging-service.class.mjs +1 -1
  104. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +1 -1
  105. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1 -1
  106. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +1 -1
  107. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +2 -2
  108. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +1 -1
  109. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +6 -11
  110. package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +262 -0
  111. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +4 -5
  112. package/esm2022/src/app/shared/material/chips/material.chips.mjs +1 -1
  113. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +2 -2
  114. package/esm2022/src/app/shared/material/datetime/material.date.mjs +1 -1
  115. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +1 -1
  116. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +1 -1
  117. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +2 -2
  118. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +2 -2
  119. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +2 -2
  120. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +1 -1
  121. package/esm2022/src/app/shared/material/duration/material.duration.mjs +1 -1
  122. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +2 -2
  123. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +1 -1
  124. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +1 -1
  125. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +1 -1
  126. package/esm2022/src/app/shared/material/material.module.mjs +5 -5
  127. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +1 -1
  128. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +1 -1
  129. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +1 -1
  130. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +1 -1
  131. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +1 -1
  132. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +1 -1
  133. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +1 -1
  134. package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
  135. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +1 -1
  136. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  137. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +1 -1
  138. package/esm2022/src/app/shared/observables.mjs +1 -1
  139. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +1 -1
  140. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +1 -1
  141. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +1 -1
  142. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +1 -1
  143. package/esm2022/src/app/shared/pipes/form.pipes.mjs +1 -1
  144. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +1 -1
  145. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +1 -1
  146. package/esm2022/src/app/shared/pipes/math.pipes.mjs +1 -1
  147. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +1 -1
  148. package/esm2022/src/app/shared/pipes/property.pipes.mjs +1 -1
  149. package/esm2022/src/app/shared/platforms.mjs +1 -1
  150. package/esm2022/src/app/shared/services/job.utils.mjs +1 -1
  151. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
  152. package/esm2022/src/app/shared/services/progress-bar.service.mjs +1 -1
  153. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +1 -1
  154. package/esm2022/src/app/shared/services/startable-service.class.mjs +1 -1
  155. package/esm2022/src/app/shared/services/translate-context.service.mjs +1 -1
  156. package/esm2022/src/app/shared/services.mjs +2 -2
  157. package/esm2022/src/app/shared/shared-routing.module.mjs +1 -1
  158. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +1 -1
  159. package/esm2022/src/app/shared/storage/storage.service.mjs +1 -1
  160. package/esm2022/src/app/shared/testing/observable.test.mjs +1 -1
  161. package/esm2022/src/app/shared/toast/toast.testing.mjs +2 -2
  162. package/esm2022/src/app/shared/toast/toasts.mjs +1 -1
  163. package/esm2022/src/app/shared/toolbar/toolbar.mjs +1 -1
  164. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +1 -1
  165. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +1 -1
  166. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +1 -1
  167. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +1 -1
  168. package/esm2022/src/app/shared/validator/validators.mjs +3 -3
  169. package/esm2022/src/app/shared/version/versions.mjs +1 -1
  170. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +1 -1
  171. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +1 -1
  172. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +1 -1
  173. package/esm2022/src/app/social/message/message.form.mjs +1 -1
  174. package/esm2022/src/app/social/message/message.modal.mjs +1 -1
  175. package/esm2022/src/app/social/message/message.service.mjs +1 -1
  176. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +1 -1
  177. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +1 -1
  178. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +1 -1
  179. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +1 -1
  180. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +1 -1
  181. package/esm2022/src/app/social/user-event/user-event.service.mjs +1 -1
  182. package/esm2022/src/environments/environment.loader.mjs +1 -1
  183. package/esm2022/src/environments/environment.mjs +3 -3
  184. package/fesm2022/sumaris-net.ngx-components.mjs +186 -452
  185. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  186. package/package.json +6 -6
  187. package/public_api.d.ts +1 -2
  188. package/src/app/shared/material/boolean/boolean.module.d.ts +14 -15
  189. package/src/app/shared/material/boolean/{material.boolean.d.ts → material-boolean.d.ts} +16 -20
  190. package/src/theme/_ngx-components.scss +11 -11
  191. package/src/theme/_ngx-components.table.scss +1 -0
  192. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +0 -266
  193. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -271
  194. package/src/app/shared/material/boolean/material-boolean2.d.ts +0 -66
@@ -0,0 +1,262 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Optional, Output, ViewChild, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { isNil, isNotNil, toNumber } from '../../functions';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@ionic/angular";
8
+ import * as i4 from "@angular/material/form-field";
9
+ import * as i5 from "@angular/material/input";
10
+ import * as i6 from "@angular/material/radio";
11
+ import * as i7 from "@angular/material/checkbox";
12
+ import * as i8 from "@ngx-translate/core";
13
+ import * as i9 from "../../pipes/types.pipes";
14
+ const DEFAULT_VALUE_ACCESSOR = {
15
+ provide: NG_VALUE_ACCESSOR,
16
+ useExisting: forwardRef(() => MatBooleanField),
17
+ multi: true,
18
+ };
19
+ const noop = () => { };
20
+ export class MatBooleanField {
21
+ cd;
22
+ formGroupDir;
23
+ yesButton;
24
+ noButton;
25
+ checkboxButton;
26
+ fakeInput;
27
+ disabled = false;
28
+ formControl;
29
+ formControlName;
30
+ placeholder;
31
+ floatLabel = 'auto';
32
+ appearance;
33
+ readonly = false;
34
+ required = false;
35
+ compact = false;
36
+ style;
37
+ buttonsColCount;
38
+ // eslint-disable-next-line @angular-eslint/no-input-rename
39
+ classList;
40
+ yesLabel = 'COMMON.YES';
41
+ noLabel = 'COMMON.NO';
42
+ showButtonIcons = true;
43
+ yesIcon = 'checkmark';
44
+ noIcon = 'close';
45
+ // eslint-disable-next-line @angular-eslint/no-output-on-prefix,@angular-eslint/no-output-rename
46
+ onPressEnter = new EventEmitter();
47
+ // eslint-disable-next-line @angular-eslint/no-output-on-prefix
48
+ onBlur = new EventEmitter();
49
+ showRadio = false;
50
+ _value;
51
+ _tabindex;
52
+ _onChangeCallback = noop;
53
+ _onTouchedCallback = noop;
54
+ _writing = false;
55
+ constructor(cd, formGroupDir) {
56
+ this.cd = cd;
57
+ this.formGroupDir = formGroupDir;
58
+ }
59
+ get tabindex() {
60
+ return this._tabindex;
61
+ }
62
+ set tabindex(value) {
63
+ if (this._tabindex !== value) {
64
+ this._tabindex = value;
65
+ setTimeout(() => this.updateTabIndex());
66
+ }
67
+ }
68
+ get value() {
69
+ return this._value;
70
+ }
71
+ set value(v) {
72
+ if (v !== this._value) {
73
+ this._value = v;
74
+ this._onChangeCallback(v);
75
+ }
76
+ }
77
+ ngOnInit() {
78
+ this.formControl =
79
+ this.formControl || (this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName));
80
+ if (!this.formControl)
81
+ throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-boolean-field>.');
82
+ this.style = this.style || (this.compact ? 'checkbox' : 'radio');
83
+ if (this.style === 'button') {
84
+ this.buttonsColCount = toNumber(this.buttonsColCount, 2);
85
+ }
86
+ // Force show radio if label always on top
87
+ this.showRadio = this.showRadio || this.floatLabel === 'always' || this.style === 'checkbox';
88
+ this.updateTabIndex();
89
+ }
90
+ writeValue(value, event) {
91
+ if (this._writing)
92
+ return;
93
+ this._writing = true;
94
+ if (value !== this._value) {
95
+ this._value = value;
96
+ this.showRadio = this.floatLabel === 'always' || this.style === 'checkbox' || isNotNil(this._value);
97
+ if (isNotNil(this.tabindex)) {
98
+ setTimeout(() => this.updateTabIndex());
99
+ }
100
+ }
101
+ this._writing = false;
102
+ if (this.style === 'button') {
103
+ if (value !== this.formControl.value) {
104
+ this.formControl.patchValue(value, { emitEvent: false });
105
+ this._onChangeCallback(value);
106
+ }
107
+ if (event)
108
+ this.onPressEnter.emit(event);
109
+ }
110
+ this.markForCheck();
111
+ }
112
+ registerOnChange(fn) {
113
+ this._onChangeCallback = fn;
114
+ }
115
+ registerOnTouched(fn) {
116
+ this._onTouchedCallback = fn;
117
+ }
118
+ setDisabledState(isDisabled) {
119
+ this.disabled = isDisabled;
120
+ }
121
+ onFocusFakeInput(event) {
122
+ event.preventDefault();
123
+ // Hide the fake input
124
+ if (this.fakeInput) {
125
+ this.fakeInput.nativeElement.classList.add('hidden');
126
+ this.fakeInput.nativeElement.tabIndex = -1;
127
+ }
128
+ // Focus on first button
129
+ this.focus();
130
+ }
131
+ focus() {
132
+ this.showRadio = true;
133
+ setTimeout(() => {
134
+ if (this.yesButton) {
135
+ this.yesButton.focus();
136
+ }
137
+ else if (this.checkboxButton) {
138
+ this.checkboxButton.focus();
139
+ }
140
+ this.updateTabIndex();
141
+ });
142
+ this.markForCheck();
143
+ }
144
+ onRadioValueChanged(event) {
145
+ if (this._writing)
146
+ return; // Skip if call by self
147
+ this._writing = true;
148
+ this._value = event.value;
149
+ this.checkIfTouched();
150
+ this._onChangeCallback(event.value);
151
+ this._writing = false;
152
+ }
153
+ onCheckboxValueChanged(event) {
154
+ if (this._writing)
155
+ return; // Skip if call by self
156
+ this._writing = true;
157
+ this._value = event.checked;
158
+ this.checkIfTouched();
159
+ this._onChangeCallback(event.checked);
160
+ this._writing = false;
161
+ }
162
+ /* -- private method -- */
163
+ checkIfTouched() {
164
+ if (this.formControl.touched) {
165
+ this.markForCheck();
166
+ this._onTouchedCallback();
167
+ }
168
+ }
169
+ /**
170
+ * This is a special case, because, this component has a temporary component displayed before the first focus event
171
+ */
172
+ updateTabIndex() {
173
+ if (isNil(this._tabindex) || this._tabindex === -1)
174
+ return;
175
+ if (this.fakeInput) {
176
+ if (this.showRadio) {
177
+ this.fakeInput.nativeElement.classList.add('hidden');
178
+ this.fakeInput.nativeElement.tabIndex = -1;
179
+ }
180
+ else {
181
+ this.fakeInput.nativeElement.classList.remove('hidden');
182
+ this.fakeInput.nativeElement.tabIndex = this._tabindex;
183
+ }
184
+ }
185
+ if (this.yesButton) {
186
+ this.yesButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex : -1;
187
+ this.noButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex + 1 : -1;
188
+ }
189
+ else if (this.checkboxButton) {
190
+ this.checkboxButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex : -1;
191
+ }
192
+ this.markForCheck();
193
+ }
194
+ markForCheck() {
195
+ this.cd.markForCheck();
196
+ }
197
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MatBooleanField, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
198
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: MatBooleanField, selector: "mat-boolean-field", inputs: { disabled: "disabled", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", readonly: "readonly", required: "required", compact: "compact", style: "style", buttonsColCount: "buttonsColCount", classList: ["class", "classList"], yesLabel: "yesLabel", noLabel: "noLabel", showButtonIcons: "showButtonIcons", yesIcon: "yesIcon", noIcon: "noIcon", tabindex: "tabindex", value: "value" }, outputs: { onPressEnter: "keyup.enter", onBlur: "onBlur" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "yesButton", first: true, predicate: ["yesButton"], descendants: true }, { propertyName: "noButton", first: true, predicate: ["noButton"], descendants: true }, { propertyName: "checkboxButton", first: true, predicate: ["checkboxButton"], descendants: true }, { propertyName: "fakeInput", first: true, predicate: ["fakeInput"], descendants: true }], ngImport: i0, template: "<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n class=\"mat-form-field-disabled {{ classList }}\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [placeholder]=\"placeholder\" [formControl]=\"formControl\" />\n <ion-text>{{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n <!-- Radio -->\n <mat-form-field\n *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\">\n {{ placeholder }}\n <span [hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\" [formControl]=\"formControl\" (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n &nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field\n *ngSwitchCase=\"'checkbox'\"\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #matInput\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value === null || value === undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\"\n ></mat-checkbox>\n\n <mat-label *ngIf=\"placeholder; else noPlaceHolder\">\n {{ placeholder }}\n </mat-label>\n <ng-template #noPlaceHolder>\n <mat-label>&nbsp;</mat-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field\n *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n type=\"text\"\n hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <div\n class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\"\n >\n <!-- yes -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? _tabindex + 1 : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ noLabel | translate }}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ng-container>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis: calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex", "id", "name", "aria-label", "aria-labelledby", "aria-describedby", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
199
+ }
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MatBooleanField, decorators: [{
201
+ type: Component,
202
+ args: [{ selector: 'mat-boolean-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n class=\"mat-form-field-disabled {{ classList }}\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [placeholder]=\"placeholder\" [formControl]=\"formControl\" />\n <ion-text>{{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n <!-- Radio -->\n <mat-form-field\n *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\">\n {{ placeholder }}\n <span [hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\" [formControl]=\"formControl\" (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n &nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field\n *ngSwitchCase=\"'checkbox'\"\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #matInput\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value === null || value === undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\"\n ></mat-checkbox>\n\n <mat-label *ngIf=\"placeholder; else noPlaceHolder\">\n {{ placeholder }}\n </mat-label>\n <ng-template #noPlaceHolder>\n <mat-label>&nbsp;</mat-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field\n *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n type=\"text\"\n hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <div\n class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\"\n >\n <!-- yes -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? _tabindex + 1 : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ noLabel | translate }}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ng-container>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis: calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}\n"] }]
203
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupDirective, decorators: [{
204
+ type: Optional
205
+ }] }], propDecorators: { yesButton: [{
206
+ type: ViewChild,
207
+ args: ['yesButton']
208
+ }], noButton: [{
209
+ type: ViewChild,
210
+ args: ['noButton']
211
+ }], checkboxButton: [{
212
+ type: ViewChild,
213
+ args: ['checkboxButton']
214
+ }], fakeInput: [{
215
+ type: ViewChild,
216
+ args: ['fakeInput']
217
+ }], disabled: [{
218
+ type: Input
219
+ }], formControl: [{
220
+ type: Input
221
+ }], formControlName: [{
222
+ type: Input
223
+ }], placeholder: [{
224
+ type: Input
225
+ }], floatLabel: [{
226
+ type: Input
227
+ }], appearance: [{
228
+ type: Input
229
+ }], readonly: [{
230
+ type: Input
231
+ }], required: [{
232
+ type: Input
233
+ }], compact: [{
234
+ type: Input
235
+ }], style: [{
236
+ type: Input
237
+ }], buttonsColCount: [{
238
+ type: Input
239
+ }], classList: [{
240
+ type: Input,
241
+ args: ['class']
242
+ }], yesLabel: [{
243
+ type: Input
244
+ }], noLabel: [{
245
+ type: Input
246
+ }], showButtonIcons: [{
247
+ type: Input
248
+ }], yesIcon: [{
249
+ type: Input
250
+ }], noIcon: [{
251
+ type: Input
252
+ }], onPressEnter: [{
253
+ type: Output,
254
+ args: ['keyup.enter']
255
+ }], onBlur: [{
256
+ type: Output
257
+ }], tabindex: [{
258
+ type: Input
259
+ }], value: [{
260
+ type: Input
261
+ }] } });
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwtYm9vbGVhbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwtYm9vbGVhbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQVksU0FBUyxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpMLE9BQU8sRUFBMkMsaUJBQWlCLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFJL0csT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBRzFELE1BQU0sc0JBQXNCLEdBQWE7SUFDdkMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUM5QyxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFTdEIsTUFBTSxPQUFPLGVBQWU7SUF1Q2hCO0lBQ1k7SUF2Q0UsU0FBUyxDQUFpQjtJQUMzQixRQUFRLENBQWlCO0lBQ25CLGNBQWMsQ0FBYztJQUNqQyxTQUFTLENBQWE7SUFFckMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixXQUFXLENBQXFCO0lBQ2hDLGVBQWUsQ0FBUztJQUN4QixXQUFXLENBQVM7SUFDcEIsVUFBVSxHQUFzQixNQUFNLENBQUM7SUFDdkMsVUFBVSxDQUF5QjtJQUNuQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pC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U0FBUzt1QkFBQyxVQUFVO2dCQUNRLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNILFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVVLFNBQVM7c0JBQXhCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR2lCLFlBQVk7c0JBQWxDLE1BQU07dUJBQUMsYUFBYTtnQkFFWCxNQUFNO3NCQUFmLE1BQU07Z0JBbUJNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBWUYsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBQcm92aWRlciwgVmlld0NoaWxkLH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEZvcm1GaWVsZEFwcGVhcmFuY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01hdFJhZGlvQnV0dG9uLCBNYXRSYWRpb0NoYW5nZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHtNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hDaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7SW5wdXRFbGVtZW50fSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHtpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtBcHBGbG9hdExhYmVsVHlwZX0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0Qm9vbGVhbkZpZWxkKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1ib29sZWFuLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLWJvb2xlYW4uaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLWJvb2xlYW4uc2NzcyddLFxuICBwcm92aWRlcnM6IFtERUZBVUxUX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEJvb2xlYW5GaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIElucHV0RWxlbWVudCB7XG4gIEBWaWV3Q2hpbGQoJ3llc0J1dHRvbicpIHllc0J1dHRvbjogTWF0UmFkaW9CdXR0b247XG4gIEBWaWV3Q2hpbGQoJ25vQnV0dG9uJykgbm9CdXR0b246IE1hdFJhZGlvQnV0dG9uO1xuICBAVmlld0NoaWxkKCdjaGVja2JveEJ1dHRvbicpIGNoZWNrYm94QnV0dG9uOiBNYXRDaGVja2JveDtcbiAgQFZpZXdDaGlsZCgnZmFrZUlucHV0JykgZmFrZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzdHlsZTogJ3JhZGlvJyB8ICdjaGVja2JveCcgfCAnYnV0dG9uJztcbiAgQElucHV0KCkgYnV0dG9uc0NvbENvdW50OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgeWVzTGFiZWwgPSAnQ09NTU9OLllFUyc7XG4gIEBJbnB1dCgpIG5vTGFiZWwgPSAnQ09NTU9OLk5PJztcbiAgQElucHV0KCkgc2hvd0J1dHRvbkljb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgeWVzSWNvbiA9ICdjaGVja21hcmsnO1xuICBASW5wdXQoKSBub0ljb24gPSAnY2xvc2UnO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCxAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdrZXl1cC5lbnRlcicpIG9uUHJlc3NFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBzaG93UmFkaW8gPSBmYWxzZTtcbiAgX3ZhbHVlOiBib29sZWFuO1xuICBfdGFiaW5kZXg6IG51bWJlcjtcblxuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF93cml0aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtYm9vbGVhbi1maWVsZD4uJyk7XG5cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5zdHlsZSB8fCAodGhpcy5jb21wYWN0ID8gJ2NoZWNrYm94JyA6ICdyYWRpbycpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICB0aGlzLmJ1dHRvbnNDb2xDb3VudCA9IHRvTnVtYmVyKHRoaXMuYnV0dG9uc0NvbENvdW50LCAyKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBzaG93IHJhZGlvIGlmIGxhYmVsIGFsd2F5cyBvbiB0b3BcbiAgICB0aGlzLnNob3dSYWRpbyA9IHRoaXMuc2hvd1JhZGlvIHx8IHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cycgfHwgdGhpcy5zdHlsZSA9PT0gJ2NoZWNrYm94JztcblxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zaG93UmFkaW8gPSB0aGlzLmZsb2F0TGFiZWwgPT09ICdhbHdheXMnIHx8IHRoaXMuc3R5bGUgPT09ICdjaGVja2JveCcgfHwgaXNOb3ROaWwodGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHRoaXMudGFiaW5kZXgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50KSB0aGlzLm9uUHJlc3NFbnRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG9uRm9jdXNGYWtlSW5wdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gSGlkZSB0aGUgZmFrZSBpbnB1dFxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBidXR0b25cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLnNob3dSYWRpbyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy55ZXNCdXR0b24pIHtcbiAgICAgICAgdGhpcy55ZXNCdXR0b24uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja2JveEJ1dHRvbikge1xuICAgICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUmFkaW9WYWx1ZUNoYW5nZWQoZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkNoZWNrYm94VmFsdWVDaGFuZ2VkKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LmNoZWNrZWQpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy5zaG93UmFkaW8pIHtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuX3RhYmluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy55ZXNCdXR0b24pIHtcbiAgICAgIHRoaXMueWVzQnV0dG9uLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1JhZGlvID8gdGhpcy5fdGFiaW5kZXggOiAtMTtcbiAgICAgIHRoaXMubm9CdXR0b24uX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93UmFkaW8gPyB0aGlzLl90YWJpbmRleCArIDEgOiAtMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tib3hCdXR0b24pIHtcbiAgICAgIHRoaXMuY2hlY2tib3hCdXR0b24uX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93UmFkaW8gPyB0aGlzLl90YWJpbmRleCA6IC0xO1xuICAgIH1cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkXG4gICpuZ0lmPVwicmVhZG9ubHk7IGVsc2Ugd3JpdGFibGVcIlxuICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge3sgY2xhc3NMaXN0IH19XCJcbj5cbiAgPGRpdiBtYXRQcmVmaXg+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgLz5cbiAgPGlvbi10ZXh0Pnt7ICh2YWx1ZSA9PT0gbnVsbCA/ICdDT01NT04uRU1QVFlfT1BUSU9OJyA6IHZhbHVlID09PSB0cnVlID8geWVzTGFiZWwgOiBub0xhYmVsKSB8IHRyYW5zbGF0ZSB9fTwvaW9uLXRleHQ+XG4gIDxkaXYgbWF0U3VmZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjxuZy10ZW1wbGF0ZSAjd3JpdGFibGU+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN0eWxlXCI+XG4gICAgPCEtLSBSYWRpbyAtLT5cbiAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCJcbiAgICAgIFtmbG9hdExhYmVsXT1cInNob3dSYWRpbyAmJiAoIWZsb2F0TGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ2F1dG8nKSA/ICdhbHdheXMnIDogKGZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlKVwiXG4gICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgIGNsYXNzPVwibWF0LWJvb2xlYW4tZmllbGQgbWF0LWJvb2xlYW4tZmllbGQtcmFkaW8ge3sgY2xhc3NMaXN0IH19XCJcbiAgICA+XG4gICAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXIgJiYgZmxvYXRMYWJlbCAhPT0gJ25ldmVyJ1wiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInNob3dSYWRpb1wiPih7eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fS97eyBub0xhYmVsIHwgdHJhbnNsYXRlIH19KTwvc3Bhbj5cbiAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgI2Zha2VJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzRmFrZUlucHV0KCRldmVudClcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJzaG93UmFkaW9cIlxuICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSByYWRpbyBidXR0b24gLS0+XG4gICAgICA8bWF0LXJhZGlvLWdyb3VwIFtoaWRkZW5dPVwiIXNob3dSYWRpb1wiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIChjaGFuZ2UpPVwib25SYWRpb1ZhbHVlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICN5ZXNCdXR0b24gW3ZhbHVlXT1cInRydWVcIj5cbiAgICAgICAgICA8c3Bhbj57eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAmbmJzcDtcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gI25vQnV0dG9uIFt2YWx1ZV09XCJmYWxzZVwiPlxuICAgICAgICAgIDxzcGFuPnt7IG5vTGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuXG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cblxuICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiXG4gICAgICBmbG9hdExhYmVsPVwiYWx3YXlzXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgY2xhc3M9XCJtYXQtYm9vbGVhbi1maWVsZCBtYXQtYm9vbGVhbi1maWVsZC1jaGVja2JveCB7eyBjbGFzc0xpc3QgfX1cIlxuICAgID5cbiAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgICNtYXRJbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1c0Zha2VJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwic2hvd1JhZGlvXCJcbiAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gY2hlY2tib3gsIHdoZW4gY29tcGFjdCAtLT5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgI2NoZWNrYm94QnV0dG9uXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwidmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgIFtoaWRkZW5dPVwiIXNob3dSYWRpb1wiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICA+PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJwbGFjZWhvbGRlcjsgZWxzZSBub1BsYWNlSG9sZGVyXCI+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9QbGFjZUhvbGRlcj5cbiAgICAgICAgPG1hdC1sYWJlbD4mbmJzcDs8L21hdC1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuXG4gICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPCEtLSBCdXR0b25zIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCJcbiAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgY2xhc3M9XCJtYXQtYm9vbGVhbi1maWVsZCBtYXQtYm9vbGVhbi1maWVsZC1idXR0b24ge3sgY2xhc3NMaXN0IH19XCJcbiAgICA+XG4gICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGhpZGRlblxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1idXR0b25zXCJcbiAgICAgICAgW3N0eWxlLi0tYnV0dG9ucy1jb2wtY291bnRdPVwiYnV0dG9uc0NvbENvdW50XCJcbiAgICAgICAgKm5nSWY9XCIhZm9ybUNvbnRyb2wuZGlzYWJsZWQ7IGVsc2UgZGlzYWJsZWRMYWJlbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0geWVzIC0tPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtYnV0dG9uXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiX3RhYmluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwid3JpdGVWYWx1ZSh0cnVlLCAkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwid3JpdGVWYWx1ZSh0cnVlLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY29sb3JdPVwiX3ZhbHVlID09PSBudWxsID8gJ3RlcnRpYXJ5JyA6IF92YWx1ZSA9PT0gdHJ1ZSA/ICdhY2NlbnQnIDogJ2xpZ2h0J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJzaG93QnV0dG9uSWNvbnMgJiYgeWVzSWNvbjsgbGV0IGljb25cIiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJpY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB7eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgPCEtLSBObyBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1idXR0b25cIlxuICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXggIT09IHVuZGVmaW5lZCA/IF90YWJpbmRleCArIDEgOiB1bmRlZmluZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ3cml0ZVZhbHVlKGZhbHNlLCAkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwid3JpdGVWYWx1ZShmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NvbG9yXT1cIl92YWx1ZSA9PT0gbnVsbCA/ICd0ZXJ0aWFyeScgOiBfdmFsdWUgPT09IGZhbHNlID8gJ2FjY2VudCcgOiAnbGlnaHQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cInNob3dCdXR0b25JY29ucyAmJiBub0ljb247IGxldCBpY29uXCIgc2xvdD1cInN0YXJ0XCIgW25hbWVdPVwiaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAge3sgbm9MYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRMYWJlbD5cbiAgICAgICAgPGlvbi1sYWJlbD48aSB0cmFuc2xhdGU+Q09NTU9OLkVNUFRZX09QVElPTjwvaT48L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -6,8 +6,7 @@ import * as i2 from "@angular/common";
6
6
  import * as i3 from "@ionic/angular";
7
7
  import * as i4 from "@angular/material/form-field";
8
8
  import * as i5 from "@angular/material/tabs";
9
- import * as i6 from "../material.boolean";
10
- import * as i7 from "../material-boolean2";
9
+ import * as i6 from "../material-boolean";
11
10
  export class BooleanTestPage extends AppForm {
12
11
  injector;
13
12
  formBuilder;
@@ -45,10 +44,10 @@ export class BooleanTestPage extends AppForm {
45
44
  this.cd.markForCheck();
46
45
  }
47
46
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: BooleanTestPage, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: BooleanTestPage, selector: "app-boolean-test-page", usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode==='radio'\"\n (click)=\"toggleMode('radio')\">\n <mat-label>Radio</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='checkbox'\"\n (click)=\"toggleMode('checkbox')\">\n <mat-label>Checkbox</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='button'\"\n (click)=\"toggleMode('button')\">\n <mat-label>Button</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container\">\n\n <ng-container\n *ngFor=\"let style of styles\"\n [ngTemplateOutlet]=\"components\"\n [ngTemplateOutletContext]=\"{ style: style }\"\n >\n\n </ng-container>\n\n <ng-template #components let-style=\"style\">\n <ion-grid *ngIf=\"style === mode\">\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean-field>\n <mat-boolean2-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean-field>\n <mat-boolean2-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean-field>\n <mat-boolean2-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n </ng-template>\n </form>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i5.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex", "active", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i6.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "readonly", "required", "compact", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "tabindex", "value"], outputs: ["keyup.enter", "onBlur"] }, { kind: "component", type: i7.MatBooleanField2, selector: "mat-boolean2-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "readonly", "required", "compact", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "tabindex", "value"], outputs: ["keyup.enter", "onBlur"] }] });
47
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: BooleanTestPage, selector: "app-boolean-test-page", usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode==='radio'\"\n (click)=\"toggleMode('radio')\">\n <mat-label>Radio</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='checkbox'\"\n (click)=\"toggleMode('checkbox')\">\n <mat-label>Checkbox</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='button'\"\n (click)=\"toggleMode('button')\">\n <mat-label>Button</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container\">\n\n <ng-container\n *ngFor=\"let style of styles\"\n [ngTemplateOutlet]=\"components\"\n [ngTemplateOutletContext]=\"{ style: style }\"\n >\n\n </ng-container>\n\n <ng-template #components let-style=\"style\">\n <ion-grid *ngIf=\"style === mode\">\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n </ng-template>\n </form>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i5.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex", "active", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i6.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "readonly", "required", "compact", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "tabindex", "value"], outputs: ["keyup.enter", "onBlur"] }] });
49
48
  }
50
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: BooleanTestPage, decorators: [{
51
50
  type: Component,
52
- args: [{ selector: 'app-boolean-test-page', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode==='radio'\"\n (click)=\"toggleMode('radio')\">\n <mat-label>Radio</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='checkbox'\"\n (click)=\"toggleMode('checkbox')\">\n <mat-label>Checkbox</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='button'\"\n (click)=\"toggleMode('button')\">\n <mat-label>Button</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container\">\n\n <ng-container\n *ngFor=\"let style of styles\"\n [ngTemplateOutlet]=\"components\"\n [ngTemplateOutletContext]=\"{ style: style }\"\n >\n\n </ng-container>\n\n <ng-template #components let-style=\"style\">\n <ion-grid *ngIf=\"style === mode\">\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n <mat-boolean2-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean-field>\n <mat-boolean2-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean-field>\n <mat-boolean2-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean-field>\n <mat-boolean2-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean2-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n </ng-template>\n </form>\n</ion-content>\n" }]
51
+ args: [{ selector: 'app-boolean-test-page', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode==='radio'\"\n (click)=\"toggleMode('radio')\">\n <mat-label>Radio</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='checkbox'\"\n (click)=\"toggleMode('checkbox')\">\n <mat-label>Checkbox</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='button'\"\n (click)=\"toggleMode('button')\">\n <mat-label>Button</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container\">\n\n <ng-container\n *ngFor=\"let style of styles\"\n [ngTemplateOutlet]=\"components\"\n [ngTemplateOutletContext]=\"{ style: style }\"\n >\n\n </ng-container>\n\n <ng-template #components let-style=\"style\">\n <ion-grid *ngIf=\"style === mode\">\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.disabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledEmpty?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledFalse?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ stringify(form.controls.enabledTrue?.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n </ng-template>\n </form>\n</ion-content>\n" }]
53
52
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi50ZXN0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsT0FBWTtJQUt6QjtJQUE4QjtJQUEyQztJQUovRixTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQixJQUFJLEdBQW9DLE9BQU8sQ0FBQztJQUNoRCxNQUFNLEdBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRW5ELFlBQXNCLFFBQWtCLEVBQVksV0FBK0IsRUFBWSxFQUFxQjtRQUNsSCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFESSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVksZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQVksT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFbEgsSUFBSSxDQUFDLE9BQU8sQ0FDVixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNyQixhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDckIsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3RCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQztZQUNwQixZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDcEIsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQztTQUNwQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzt1R0FuQ1UsZUFBZTsyRkFBZixlQUFlLG9GQ1I1Qixvd1VBc1JBOzsyRkQ5UWEsZUFBZTtrQkFKM0IsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcHBGb3JtfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQge1VudHlwZWRGb3JtQnVpbGRlcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYm9vbGVhbi10ZXN0LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEJvb2xlYW5UZXN0UGFnZSBleHRlbmRzIEFwcEZvcm08YW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuICBtb2RlOiAncmFkaW8nIHwgJ2NoZWNrYm94JyB8ICdidXR0b24nID0gJ3JhZGlvJztcbiAgc3R5bGVzOiBzdHJpbmdbXSA9IFsncmFkaW8nLCAnY2hlY2tib3gnLCAnYnV0dG9uJ107XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvciwgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5zZXRGb3JtKFxuICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGRpc2FibGVkRW1wdHk6IFtudWxsXSxcbiAgICAgICAgZGlzYWJsZWRGYWxzZTogW2ZhbHNlXSxcbiAgICAgICAgZGlzYWJsZWRUcnVlOiBbdHJ1ZV0sXG4gICAgICAgIGVuYWJsZWRFbXB0eTogW251bGxdLFxuICAgICAgICBlbmFibGVkRmFsc2U6IFtmYWxzZV0sXG4gICAgICAgIGVuYWJsZWRUcnVlOiBbdHJ1ZV0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZEVtcHR5JykuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZEZhbHNlJykuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZFRydWUnKS5lbmFibGUoKTtcbiAgfVxuXG4gIHRvZ2dsZU1vZGUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5tb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5tb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYmFjay1idXR0b24+PC9pb24tYmFjay1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGU+Qm9vbGVhbiBmaWVsZCB0ZXN0IHBhZ2U8L2lvbi10aXRsZT5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cblxuICA8bmF2IG1hdC10YWItbmF2LWJhciBbdGFiUGFuZWxdPVwidGFiUGFuZWxcIj5cbiAgICA8YSBtYXQtdGFiLWxpbmsgW2FjdGl2ZV09XCJtb2RlPT09J3JhZGlvJ1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ3JhZGlvJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+UmFkaW88L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZT09PSdjaGVja2JveCdcIlxuICAgICAgIChjbGljayk9XCJ0b2dnbGVNb2RlKCdjaGVja2JveCcpXCI+XG4gICAgICA8bWF0LWxhYmVsPkNoZWNrYm94PC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGU9PT0nYnV0dG9uJ1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ2J1dHRvbicpXCI+XG4gICAgICA8bWF0LWxhYmVsPkJ1dHRvbjwvbWF0LWxhYmVsPlxuICAgIDwvYT5cbiAgPC9uYXY+XG5cbiAgPGZvcm0gI3RhYlBhbmVsIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cImxldCBzdHlsZSBvZiBzdHlsZXNcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29tcG9uZW50c1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzdHlsZTogc3R5bGUgfVwiXG4gICAgPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2NvbXBvbmVudHMgbGV0LXN0eWxlPVwic3R5bGVcIj5cbiAgICA8aW9uLWdyaWQgKm5nSWY9XCJzdHlsZSA9PT0gbW9kZVwiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RGlzYWJsZWQgZW1wdHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmRpc2FibGVkRW1wdHk/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbjItZmllbGRcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc2FibGVkRW1wdHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbjItZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGZhbHNlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5kaXNhYmxlZEZhbHNlPy52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzYWJsZWRGYWxzZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4yLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4yLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5EaXNhYmxlZCB0cnVlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5kaXNhYmxlZFRydWU/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuMi1maWVsZFxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzYWJsZWRUcnVlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4yLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgZW1wdHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuYWJsZWRFbXB0eT8udmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRFbXB0eVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4yLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbjItZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgZmFsc2U8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuYWJsZWRGYWxzZT8udmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRGYWxzZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4yLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRmFsc2VcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbjItZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgdHJ1ZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgc3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlZFRydWU/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkVHJ1ZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4yLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkVHJ1ZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuMi1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5IChubyBwbGFjZWhvbGRlcik8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuYWJsZWRFbXB0eT8udmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGQgW3N0eWxlXT1cInN0eWxlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEVtcHR5XCI+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuMi1maWVsZCBbc3R5bGVdPVwic3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlcIj48L21hdC1ib29sZWFuMi1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBmYWxzZSAobm8gcGxhY2Vob2xkZXIpPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5lbmFibGVkRmFsc2U/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkIFtzdHlsZV09XCJzdHlsZVwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRGYWxzZVwiPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbjItZmllbGQgW3N0eWxlXT1cInN0eWxlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCI+PC9tYXQtYm9vbGVhbjItZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgdHJ1ZSAobm8gcGxhY2Vob2xkZXIpPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5lbmFibGVkVHJ1ZT8udmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGQgW3N0eWxlXT1cInN0eWxlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFRydWVcIj48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4yLWZpZWxkIFtzdHlsZV09XCJzdHlsZVwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRUcnVlXCI+PC9tYXQtYm9vbGVhbjItZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuXG4gICAgPC9pb24tZ3JpZD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Zvcm0+XG48L2lvbi1jb250ZW50PlxuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi50ZXN0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztBQU96RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxPQUFZO0lBS3pCO0lBQThCO0lBQTJDO0lBSi9GLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNCLElBQUksR0FBb0MsT0FBTyxDQUFDO0lBQ2hELE1BQU0sR0FBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbkQsWUFBc0IsUUFBa0IsRUFBWSxXQUErQixFQUFZLEVBQXFCO1FBQ2xILEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURJLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFBWSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUVsSCxJQUFJLENBQUMsT0FBTyxDQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3JCLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNyQixhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3BCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQztZQUNwQixZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDckIsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ3BCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzt1R0FuQ1UsZUFBZTsyRkFBZixlQUFlLG9GQ1I1Qiw4dlJBcVBBOzsyRkQ3T2EsZUFBZTtrQkFKM0IsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcHBGb3JtfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQge1VudHlwZWRGb3JtQnVpbGRlcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYm9vbGVhbi10ZXN0LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEJvb2xlYW5UZXN0UGFnZSBleHRlbmRzIEFwcEZvcm08YW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuICBtb2RlOiAncmFkaW8nIHwgJ2NoZWNrYm94JyB8ICdidXR0b24nID0gJ3JhZGlvJztcbiAgc3R5bGVzOiBzdHJpbmdbXSA9IFsncmFkaW8nLCAnY2hlY2tib3gnLCAnYnV0dG9uJ107XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvciwgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5zZXRGb3JtKFxuICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGRpc2FibGVkRW1wdHk6IFtudWxsXSxcbiAgICAgICAgZGlzYWJsZWRGYWxzZTogW2ZhbHNlXSxcbiAgICAgICAgZGlzYWJsZWRUcnVlOiBbdHJ1ZV0sXG4gICAgICAgIGVuYWJsZWRFbXB0eTogW251bGxdLFxuICAgICAgICBlbmFibGVkRmFsc2U6IFtmYWxzZV0sXG4gICAgICAgIGVuYWJsZWRUcnVlOiBbdHJ1ZV0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZEVtcHR5JykuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZEZhbHNlJykuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZFRydWUnKS5lbmFibGUoKTtcbiAgfVxuXG4gIHRvZ2dsZU1vZGUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5tb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5tb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYmFjay1idXR0b24+PC9pb24tYmFjay1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGU+Qm9vbGVhbiBmaWVsZCB0ZXN0IHBhZ2U8L2lvbi10aXRsZT5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cblxuICA8bmF2IG1hdC10YWItbmF2LWJhciBbdGFiUGFuZWxdPVwidGFiUGFuZWxcIj5cbiAgICA8YSBtYXQtdGFiLWxpbmsgW2FjdGl2ZV09XCJtb2RlPT09J3JhZGlvJ1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ3JhZGlvJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+UmFkaW88L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZT09PSdjaGVja2JveCdcIlxuICAgICAgIChjbGljayk9XCJ0b2dnbGVNb2RlKCdjaGVja2JveCcpXCI+XG4gICAgICA8bWF0LWxhYmVsPkNoZWNrYm94PC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGU9PT0nYnV0dG9uJ1wiXG4gICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ2J1dHRvbicpXCI+XG4gICAgICA8bWF0LWxhYmVsPkJ1dHRvbjwvbWF0LWxhYmVsPlxuICAgIDwvYT5cbiAgPC9uYXY+XG5cbiAgPGZvcm0gI3RhYlBhbmVsIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cImxldCBzdHlsZSBvZiBzdHlsZXNcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29tcG9uZW50c1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzdHlsZTogc3R5bGUgfVwiXG4gICAgPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2NvbXBvbmVudHMgbGV0LXN0eWxlPVwic3R5bGVcIj5cbiAgICA8aW9uLWdyaWQgKm5nSWY9XCJzdHlsZSA9PT0gbW9kZVwiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RGlzYWJsZWQgZW1wdHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmRpc2FibGVkRW1wdHk/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGZhbHNlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5kaXNhYmxlZEZhbHNlPy52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzYWJsZWRGYWxzZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5EaXNhYmxlZCB0cnVlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5kaXNhYmxlZFRydWU/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBzdHJpbmdpZnkoZm9ybS5jb250cm9scy5lbmFibGVkRW1wdHk/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBmYWxzZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgc3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlZEZhbHNlPy52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgdHJ1ZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgc3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlZFRydWU/LnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkVHJ1ZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgZW1wdHkgKG5vIHBsYWNlaG9sZGVyKTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgc3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlZEVtcHR5Py52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZCBbc3R5bGVdPVwic3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlcIj48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGZhbHNlIChubyBwbGFjZWhvbGRlcik8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuYWJsZWRGYWxzZT8udmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGQgW3N0eWxlXT1cInN0eWxlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCI+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCB0cnVlIChubyBwbGFjZWhvbGRlcik8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IHN0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuYWJsZWRUcnVlPy52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZCBbc3R5bGVdPVwic3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkVHJ1ZVwiPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuXG4gICAgPC9pb24tZ3JpZD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Zvcm0+XG48L2lvbi1jb250ZW50PlxuIl19