@magic-xpa/gui 4.1100.0-dev4110.98 → 4.1100.0

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 (195) hide show
  1. package/README.md +7 -7
  2. package/{esm2020 → esm2022}/index.mjs +71 -71
  3. package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
  4. package/esm2022/src/Commands.mjs +184 -0
  5. package/esm2022/src/Events.mjs +425 -0
  6. package/{esm2020 → esm2022}/src/EventsProcessor.mjs +66 -66
  7. package/{esm2020 → esm2022}/src/FocusManager.mjs +33 -33
  8. package/esm2022/src/GuiConstants.mjs +68 -0
  9. package/{esm2020 → esm2022}/src/GuiEnums.mjs +301 -300
  10. package/esm2022/src/GuiEnvironment.mjs +4 -0
  11. package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
  12. package/esm2022/src/Manager.mjs +91 -0
  13. package/esm2022/src/UIBridge.mjs +33 -0
  14. package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
  15. package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
  16. package/esm2022/src/gui/GuiMgControl.mjs +123 -0
  17. package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
  18. package/esm2022/src/gui/KeyboardItem.mjs +135 -0
  19. package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
  20. package/esm2022/src/gui/MgValue.mjs +16 -0
  21. package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
  22. package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
  23. package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
  24. package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
  25. package/esm2022/src/gui/low/GuiInteractive.mjs +178 -0
  26. package/esm2022/src/gui/low/Style.mjs +20 -0
  27. package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
  28. package/esm2022/src/management/data/BlobType.mjs +281 -0
  29. package/esm2022/src/management/data/DcValues.mjs +214 -0
  30. package/{esm2020 → esm2022}/src/management/data/DcValuesBuilderBase.mjs +95 -95
  31. package/esm2022/src/management/data/FieldDef.mjs +331 -0
  32. package/{esm2020 → esm2022}/src/management/data/FieldsTable.mjs +54 -54
  33. package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
  34. package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
  35. package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
  36. package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
  37. package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
  38. package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
  39. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
  40. package/{esm2020 → esm2022}/src/management/data/RecordUtils.mjs +360 -360
  41. package/esm2022/src/management/data/VectorType.mjs +612 -0
  42. package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
  43. package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
  44. package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
  45. package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
  46. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +305 -0
  47. package/esm2022/src/management/gui/ControlTable.mjs +118 -0
  48. package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
  49. package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
  50. package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
  51. package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
  52. package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
  53. package/esm2022/src/management/gui/Helps.mjs +237 -0
  54. package/esm2022/src/management/gui/MgControlBase.mjs +1869 -0
  55. package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
  56. package/esm2022/src/management/gui/PIC.mjs +1185 -0
  57. package/{esm2020 → esm2022}/src/management/gui/PropDefaults.mjs +229 -229
  58. package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
  59. package/esm2022/src/management/gui/PropTable.mjs +221 -0
  60. package/esm2022/src/management/gui/Property.mjs +1362 -0
  61. package/esm2022/src/management/gui/ValidationDetails.mjs +248 -0
  62. package/{esm2020 → esm2022}/src/management/gui/ValidationDetailsBase.mjs +93 -93
  63. package/{esm2020 → esm2022}/src/management/gui/WrongFormatException.mjs +29 -29
  64. package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
  65. package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
  66. package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
  67. package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
  68. package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
  69. package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
  70. package/{esm2020 → esm2022}/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -41
  71. package/{esm2020 → esm2022}/src/util/MemoryUtil.mjs +34 -34
  72. package/esm2022/src/util/ObjectReference.mjs +36 -0
  73. package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
  74. package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16086 -16095
  75. package/fesm2022/magic-xpa-gui.mjs.map +1 -0
  76. package/index.d.ts +70 -70
  77. package/package.json +6 -12
  78. package/src/Commands.d.ts +40 -40
  79. package/src/Events.d.ts +157 -155
  80. package/src/EventsProcessor.d.ts +13 -13
  81. package/src/FocusManager.d.ts +8 -8
  82. package/src/GuiConstants.d.ts +65 -65
  83. package/src/GuiEnums.d.ts +283 -282
  84. package/src/GuiEnvironment.d.ts +4 -4
  85. package/src/IFlowMonitorQueue.d.ts +3 -3
  86. package/src/Manager.d.ts +26 -26
  87. package/src/UIBridge.d.ts +16 -16
  88. package/src/env/IEnvironment.d.ts +31 -31
  89. package/src/gui/ControlBase.d.ts +4 -4
  90. package/src/gui/GuiMgControl.d.ts +38 -38
  91. package/src/gui/GuiMgForm.d.ts +3 -3
  92. package/src/gui/KeyboardItem.d.ts +18 -18
  93. package/src/gui/LastFocusedVal.d.ts +7 -7
  94. package/src/gui/MgValue.d.ts +15 -15
  95. package/src/gui/PropParentInterface.d.ts +13 -13
  96. package/src/gui/low/DialogHandler.d.ts +4 -4
  97. package/src/gui/low/GuiCommand.d.ts +37 -37
  98. package/src/gui/low/GuiCommandQueue.d.ts +13 -13
  99. package/src/gui/low/GuiInteractive.d.ts +55 -55
  100. package/src/gui/low/Style.d.ts +19 -19
  101. package/src/management/RuntimeContextBase.d.ts +23 -23
  102. package/src/management/data/BlobType.d.ts +29 -29
  103. package/src/management/data/DcValues.d.ts +33 -33
  104. package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
  105. package/src/management/data/FieldDef.d.ts +53 -53
  106. package/src/management/data/FieldsTable.d.ts +16 -16
  107. package/src/management/data/GuiDataViewBase.d.ts +27 -27
  108. package/src/management/data/GuiFieldBase.d.ts +17 -17
  109. package/src/management/data/IRecord.d.ts +12 -12
  110. package/src/management/data/IReferencedObject.d.ts +5 -5
  111. package/src/management/data/NUM_TYPE.d.ts +103 -103
  112. package/src/management/data/ObjectReferenceBase.d.ts +16 -16
  113. package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
  114. package/src/management/data/RecordUtils.d.ts +21 -21
  115. package/src/management/data/VectorType.d.ts +52 -52
  116. package/src/management/data/VectorTypeBase.d.ts +8 -8
  117. package/src/management/events/IActionManager.d.ts +7 -7
  118. package/src/management/events/IGuiEventsManager.d.ts +20 -20
  119. package/src/management/exp/ExpressionInterface.d.ts +242 -242
  120. package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
  121. package/src/management/gui/ControlTable.d.ts +28 -28
  122. package/src/management/gui/DisplayConvertor.d.ts +103 -103
  123. package/src/management/gui/FieldValidator.d.ts +35 -35
  124. package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
  125. package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
  126. package/src/management/gui/HebrewDate.d.ts +46 -46
  127. package/src/management/gui/Helps.d.ts +51 -51
  128. package/src/management/gui/MgControlBase.d.ts +225 -223
  129. package/src/management/gui/MgFormBase.d.ts +160 -160
  130. package/src/management/gui/PIC.d.ts +108 -108
  131. package/src/management/gui/PropDefaults.d.ts +7 -7
  132. package/src/management/gui/PropInterface.d.ts +244 -243
  133. package/src/management/gui/PropTable.d.ts +33 -33
  134. package/src/management/gui/Property.d.ts +121 -121
  135. package/src/management/gui/ValidationDetails.d.ts +52 -52
  136. package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
  137. package/src/management/gui/WrongFormatException.d.ts +9 -9
  138. package/src/management/tasks/GuiDataCollection.d.ts +4 -4
  139. package/src/management/tasks/GuiTaskBase.d.ts +150 -150
  140. package/src/management/tasks/IMGDataTable.d.ts +10 -10
  141. package/src/management/tasks/ITask.d.ts +6 -6
  142. package/src/management/tasks/MgTimer.d.ts +8 -8
  143. package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
  144. package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
  145. package/src/util/MemoryUtil.d.ts +6 -6
  146. package/src/util/ObjectReference.d.ts +9 -9
  147. package/src/util/UsernamePasswordCredentials.d.ts +18 -18
  148. package/esm2020/src/Commands.mjs +0 -184
  149. package/esm2020/src/Events.mjs +0 -420
  150. package/esm2020/src/GuiConstants.mjs +0 -68
  151. package/esm2020/src/GuiEnvironment.mjs +0 -4
  152. package/esm2020/src/Manager.mjs +0 -91
  153. package/esm2020/src/UIBridge.mjs +0 -32
  154. package/esm2020/src/gui/GuiMgControl.mjs +0 -125
  155. package/esm2020/src/gui/KeyboardItem.mjs +0 -135
  156. package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
  157. package/esm2020/src/gui/MgValue.mjs +0 -16
  158. package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
  159. package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
  160. package/esm2020/src/gui/low/GuiInteractive.mjs +0 -176
  161. package/esm2020/src/gui/low/Style.mjs +0 -20
  162. package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
  163. package/esm2020/src/management/data/BlobType.mjs +0 -281
  164. package/esm2020/src/management/data/DcValues.mjs +0 -214
  165. package/esm2020/src/management/data/FieldDef.mjs +0 -331
  166. package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
  167. package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
  168. package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
  169. package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
  170. package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
  171. package/esm2020/src/management/data/VectorType.mjs +0 -612
  172. package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
  173. package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
  174. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +0 -307
  175. package/esm2020/src/management/gui/ControlTable.mjs +0 -118
  176. package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
  177. package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
  178. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
  179. package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
  180. package/esm2020/src/management/gui/Helps.mjs +0 -237
  181. package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
  182. package/esm2020/src/management/gui/MgFormBase.mjs +0 -741
  183. package/esm2020/src/management/gui/PIC.mjs +0 -1185
  184. package/esm2020/src/management/gui/PropTable.mjs +0 -221
  185. package/esm2020/src/management/gui/Property.mjs +0 -1356
  186. package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
  187. package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
  188. package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
  189. package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
  190. package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
  191. package/esm2020/src/util/ObjectReference.mjs +0 -36
  192. package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
  193. package/fesm2015/magic-xpa-gui.mjs +0 -16391
  194. package/fesm2015/magic-xpa-gui.mjs.map +0 -1
  195. package/fesm2020/magic-xpa-gui.mjs.map +0 -1
@@ -1,307 +0,0 @@
1
- import { ApplicationException, NString } from '@magic-xpa/mscorelib';
2
- import { Rtf, StorageAttribute, StorageAttributeCheck, StrUtil } from '@magic-xpa/utils';
3
- import { Manager } from '../../Manager';
4
- import { NUM_TYPE } from '../data/NUM_TYPE';
5
- import { BlobType } from '../data/BlobType';
6
- import { DisplayConvertor } from '../gui/DisplayConvertor';
7
- export class GuiExpressionEvaluator {
8
- constructor() {
9
- this.ExpTask = null;
10
- this.Events = null;
11
- }
12
- eval_op_statusbar_set_text(resVal, statusBarText) {
13
- resVal.Attr = StorageAttribute.UNICODE;
14
- resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;
15
- if (Manager.GetCurrentRuntimeContext().DefaultStatusMsg === null) {
16
- resVal.StrVal = '';
17
- }
18
- else {
19
- resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;
20
- }
21
- resVal.IsNull = false;
22
- if (!(statusBarText.Attr !== StorageAttribute.ALPHA && statusBarText.Attr !== StorageAttribute.UNICODE)) {
23
- if (!statusBarText.IsNull) {
24
- let text = statusBarText.StrVal;
25
- let task = this.ExpTask.GetContextTask();
26
- if (task.getForm() === null && Manager.GetCurrentRuntimeContext().FrameForm !== null) {
27
- task = Manager.GetCurrentRuntimeContext().FrameForm.getTask();
28
- }
29
- task.WriteToMessagePane(text);
30
- Manager.GetCurrentRuntimeContext().DefaultStatusMsg = text;
31
- }
32
- }
33
- }
34
- IsParallel() {
35
- return false;
36
- }
37
- eval_op_ctrl_name(resVal) {
38
- let lastClickedCtrlName = Manager.GetCurrentRuntimeContext().LastClickedCtrlName;
39
- resVal.StrVal = (NString.IsNullOrEmpty(lastClickedCtrlName) ? '' : lastClickedCtrlName);
40
- resVal.Attr = StorageAttribute.ALPHA;
41
- }
42
- eval_op_gotoCtrl(ctrlName, rowNum, generation, retVal) {
43
- retVal.Attr = StorageAttribute.BOOLEAN;
44
- retVal.BoolVal = false;
45
- let task = this.GetContextTask(generation.MgNumVal.NUM_2_LONG());
46
- if (task === null || task.getForm() === null)
47
- return;
48
- let iRowNum = rowNum.MgNumVal.NUM_2_LONG();
49
- let sCtrlName = StrUtil.rtrim(ctrlName.StrVal);
50
- let ctrl = task.getForm().GetCtrl(sCtrlName);
51
- retVal.BoolVal = this.HandleControlGoto(task, ctrl, iRowNum);
52
- }
53
- static GetContextTask(currTask, generation) {
54
- let task = null;
55
- let taskBase = currTask.GetContextTask();
56
- if (generation === GuiExpressionEvaluator.TRIGGER_TASK) {
57
- task = taskBase;
58
- }
59
- else {
60
- if (generation < taskBase.GetTaskDepth()) {
61
- task = taskBase.GetTaskAncestor(generation);
62
- }
63
- }
64
- return task;
65
- }
66
- GetContextTask(generation) {
67
- return GuiExpressionEvaluator.GetContextTask(this.ExpTask, generation);
68
- }
69
- ConstructMagicNum(resVal, i, attr) {
70
- resVal.MgNumVal = new NUM_TYPE();
71
- resVal.MgNumVal.NUM_4_LONG(i);
72
- resVal.Attr = attr;
73
- }
74
- SetNULL(resVal, attr) {
75
- resVal.IsNull = true;
76
- resVal.Attr = attr;
77
- switch (attr) {
78
- case StorageAttribute.ALPHA:
79
- case StorageAttribute.UNICODE:
80
- resVal.StrVal = null;
81
- break;
82
- case StorageAttribute.TIME:
83
- case StorageAttribute.DATE:
84
- case StorageAttribute.NUMERIC:
85
- resVal.MgNumVal = null;
86
- break;
87
- case StorageAttribute.BOOLEAN:
88
- resVal.BoolVal = false;
89
- break;
90
- default:
91
- break;
92
- }
93
- }
94
- GetValidatedValue(currCtrl, oldValue, newValue) {
95
- let vd = currCtrl.buildCopyPicture(oldValue, newValue);
96
- vd.evaluate();
97
- let validationFailed = vd.ValidationFailed;
98
- let ctrlValue;
99
- if (validationFailed) {
100
- let field = currCtrl.getField();
101
- ctrlValue = ((field.getType() === StorageAttribute.BLOB_VECTOR) ? field.getCellDefualtValue() : field.getDefaultValue());
102
- }
103
- else {
104
- ctrlValue = vd.getDispValue();
105
- }
106
- return ctrlValue;
107
- }
108
- SetVal(resVal, type, val, pic) {
109
- switch (type) {
110
- case StorageAttribute.ALPHA:
111
- case StorageAttribute.BLOB:
112
- case StorageAttribute.BLOB_VECTOR:
113
- case StorageAttribute.UNICODE:
114
- resVal.Attr = type;
115
- resVal.StrVal = val;
116
- if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)
117
- resVal.IncludeBlobPrefix = true;
118
- break;
119
- case StorageAttribute.NUMERIC:
120
- case StorageAttribute.DATE:
121
- case StorageAttribute.TIME:
122
- resVal.Attr = type;
123
- if (val == null)
124
- resVal.MgNumVal = null;
125
- else if (pic == null)
126
- resVal.MgNumVal = new NUM_TYPE(val);
127
- else
128
- resVal.MgNumVal = new NUM_TYPE(val, pic, (this.ExpTask).getCompIdx());
129
- break;
130
- case StorageAttribute.BOOLEAN:
131
- resVal.Attr = type;
132
- resVal.BoolVal = DisplayConvertor.toBoolean(val);
133
- break;
134
- default:
135
- this.SetNULL(resVal, type);
136
- this.Events.WriteExceptionToLog('ExpressionEvaluator.SetVal() there is no such type : ' + type);
137
- break;
138
- }
139
- }
140
- static exp_build_string(val) {
141
- let name = '';
142
- if (val.StrVal !== null) {
143
- let len = val.StrVal.length;
144
- if (len > 0) {
145
- name = StrUtil.ZstringMake(val.StrVal, len);
146
- }
147
- }
148
- return name;
149
- }
150
- static isExpVal(obj) {
151
- return obj instanceof ExpVal;
152
- }
153
- BlobStringConversion(val, expectedType) {
154
- if (StorageAttributeCheck.IsTypeAlphaOrUnicode(expectedType)) {
155
- if (val.Attr === StorageAttribute.BLOB) {
156
- let includeBlobPrefix = val.IncludeBlobPrefix;
157
- if (includeBlobPrefix) {
158
- let contentType = BlobType.getContentType(val.StrVal);
159
- val.StrVal = BlobType.getString(val.StrVal);
160
- val.IncludeBlobPrefix = false;
161
- if (contentType !== BlobType.CONTENT_TYPE_BINARY && Rtf.isRtf(val.StrVal)) {
162
- val.StrVal = StrUtil.GetPlainTextfromRtf(val.StrVal);
163
- }
164
- }
165
- val.Attr = expectedType;
166
- }
167
- else {
168
- if (val.Attr === StorageAttribute.BLOB_VECTOR) {
169
- let includeBlobPrefix2 = val.IncludeBlobPrefix;
170
- if (includeBlobPrefix2) {
171
- val.StrVal = BlobType.removeBlobPrefix(val.StrVal);
172
- val.IncludeBlobPrefix = false;
173
- }
174
- val.Attr = expectedType;
175
- }
176
- }
177
- }
178
- else {
179
- if (expectedType === StorageAttribute.BLOB) {
180
- if (StorageAttributeCheck.IsTypeAlphaOrUnicode(val.Attr)) {
181
- let contentType = (val.Attr === StorageAttribute.ALPHA) ? BlobType.CONTENT_TYPE_ANSI : BlobType.CONTENT_TYPE_UNICODE;
182
- val.StrVal = BlobType.createFromString(val.StrVal, contentType);
183
- val.IncludeBlobPrefix = true;
184
- val.Attr = expectedType;
185
- }
186
- }
187
- }
188
- }
189
- eval_op_zimeread(resVal) {
190
- resVal.Attr = StorageAttribute.ALPHA;
191
- resVal.StrVal = '';
192
- let utilImeJpn = Manager.UtilImeJpn;
193
- if (utilImeJpn !== null) {
194
- let strImeRead = utilImeJpn.StrImeRead;
195
- if (!NString.IsNullOrEmpty(utilImeJpn.StrImeRead)) {
196
- resVal.StrVal = strImeRead;
197
- }
198
- }
199
- }
200
- ConvertExpVal(val, expectedType) {
201
- if (StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob(val.Attr, expectedType)) {
202
- this.BlobStringConversion(val, expectedType);
203
- }
204
- }
205
- }
206
- GuiExpressionEvaluator.TRIGGER_TASK = 500000;
207
- export class ExpVal {
208
- constructor(attr, isNull, mgVal) {
209
- this.Attr = StorageAttribute.NONE;
210
- this.IsNull = false;
211
- this.MgNumVal = null;
212
- this.StrVal = null;
213
- this.BoolVal = false;
214
- this.IncludeBlobPrefix = false;
215
- this.OriginalNull = false;
216
- this.VectorField = null;
217
- if (arguments.length === 0) {
218
- this.constructor_0();
219
- return;
220
- }
221
- this.constructor_1(attr, isNull, mgVal);
222
- }
223
- constructor_0() {
224
- this.Attr = StorageAttribute.NONE;
225
- }
226
- constructor_1(attr, isNull, mgVal) {
227
- this.Init(attr, isNull, mgVal);
228
- }
229
- Copy(src) {
230
- this.Attr = src.Attr;
231
- this.BoolVal = src.BoolVal;
232
- this.IncludeBlobPrefix = src.IncludeBlobPrefix;
233
- this.IsNull = src.IsNull;
234
- this.MgNumVal = src.MgNumVal;
235
- this.StrVal = src.StrVal;
236
- this.VectorField = src.VectorField;
237
- this.OriginalNull = src.OriginalNull;
238
- }
239
- Nullify() {
240
- this.Init(StorageAttribute.NONE, true, null);
241
- }
242
- Init(attr, isNull, mgVal) {
243
- this.Attr = attr;
244
- this.IsNull = isNull;
245
- switch (this.Attr) {
246
- case StorageAttribute.ALPHA:
247
- case StorageAttribute.UNICODE:
248
- this.StrVal = mgVal;
249
- break;
250
- case StorageAttribute.BLOB:
251
- case StorageAttribute.BLOB_VECTOR:
252
- this.StrVal = mgVal;
253
- this.IncludeBlobPrefix = true;
254
- break;
255
- case StorageAttribute.NUMERIC:
256
- case StorageAttribute.DATE:
257
- case StorageAttribute.TIME:
258
- this.MgNumVal = ((mgVal !== null) ? new NUM_TYPE(mgVal) : null);
259
- break;
260
- case StorageAttribute.BOOLEAN:
261
- this.BoolVal = (mgVal !== null && mgVal === '1');
262
- break;
263
- case StorageAttribute.NONE:
264
- this.BoolVal = false;
265
- this.StrVal = null;
266
- this.MgNumVal = null;
267
- this.OriginalNull = true;
268
- this.VectorField = null;
269
- this.IncludeBlobPrefix = false;
270
- break;
271
- case StorageAttribute.DOTNET:
272
- this.StrVal = mgVal;
273
- break;
274
- default:
275
- throw new ApplicationException('in ExpVal.ExpVal() illegal attribute: \'' + this.Attr + '\'');
276
- }
277
- }
278
- ToMgVal() {
279
- let str;
280
- switch (this.Attr) {
281
- case StorageAttribute.ALPHA:
282
- case StorageAttribute.BLOB:
283
- case StorageAttribute.BLOB_VECTOR:
284
- case StorageAttribute.UNICODE:
285
- str = this.StrVal;
286
- break;
287
- case StorageAttribute.NUMERIC:
288
- case StorageAttribute.DATE:
289
- case StorageAttribute.TIME:
290
- str = this.MgNumVal.toXMLrecord();
291
- break;
292
- case StorageAttribute.BOOLEAN:
293
- str = this.BoolVal
294
- ? '1'
295
- : '0';
296
- break;
297
- default:
298
- str = '[illegal attribute: ' + this.Attr + ']';
299
- break;
300
- }
301
- return str;
302
- }
303
- isEmptyString() {
304
- return (this.Attr === StorageAttribute.ALPHA || this.Attr === StorageAttribute.UNICODE) && this.StrVal === '';
305
- }
306
- }
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9leHAvR3VpRXhwcmVzc2lvbkV2YWx1YXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUduRyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHekQsTUFBTSxPQUFnQixzQkFBc0I7SUFBNUM7UUFFRSxZQUFPLEdBQWdCLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQVEsSUFBSSxDQUFDO0lBd1M3QixDQUFDO0lBNVJDLDBCQUEwQixDQUFDLE1BQWMsRUFBRSxhQUFxQjtRQUM5RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBRXBFLElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1NBQ3JFO1FBQ0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2RyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxJQUFJLEdBQVcsYUFBYSxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsSUFBSSxJQUFJLEdBQTZCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBR25FLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUNwRixJQUFJLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMvRDtnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUM1RDtTQUNGO0lBQ0gsQ0FBQztJQUdELFVBQVU7UUFDUixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFNRCxpQkFBaUIsQ0FBQyxNQUFjO1FBQzlCLElBQUksbUJBQW1CLEdBQVcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsbUJBQW1CLENBQUM7UUFDekYsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFVRCxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxVQUFrQixFQUFFLE1BQWM7UUFDbkYsTUFBTSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxJQUFJLEdBQWdCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSTtZQUMxQyxPQUFPO1FBRVQsSUFBSSxPQUFPLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuRCxJQUFJLFNBQVMsR0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLElBQUksR0FBa0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFRRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQXFCLEVBQUUsVUFBa0I7UUFDN0QsSUFBSSxJQUFJLEdBQWdCLElBQUksQ0FBQztRQUM3QixJQUFJLFFBQVEsR0FBOEIsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BFLElBQUksVUFBVSxLQUFLLHNCQUFzQixDQUFDLFlBQVksRUFBRTtZQUN0RCxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQ2pCO2FBQU07WUFDTCxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksR0FBZ0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMxRDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBT0QsY0FBYyxDQUFDLFVBQWtCO1FBQy9CLE9BQU8sc0JBQXNCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUtELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxDQUFTLEVBQUUsSUFBc0I7UUFDakUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFPRCxPQUFPLENBQUMsTUFBYyxFQUFFLElBQXNCO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRW5CLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDckIsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQVFELGlCQUFpQixDQUFDLFFBQXVCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQjtRQUMzRSxJQUFJLEVBQUUsR0FBc0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxJQUFJLGdCQUFnQixHQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwRCxJQUFJLFNBQWlCLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJLEtBQUssR0FBaUIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7U0FDMUg7YUFBTTtZQUNMLFNBQVMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDL0I7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBU0QsTUFBTSxDQUFDLE1BQWMsRUFBRSxJQUFzQixFQUFFLEdBQVcsRUFBRSxHQUFRO1FBRWxFLFFBQVEsSUFBSSxFQUFFO1lBRVosS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDbEMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBRXBCLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsV0FBVztvQkFDekUsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDeEIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksR0FBRyxJQUFJLElBQUk7b0JBQ2IsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ3BCLElBQUksR0FBRyxJQUFJLElBQUk7b0JBQ2xCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7O29CQUVwQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNO1lBRVI7Z0JBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRTNCLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsdURBQXVELEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBR2hHLE1BQU07U0FDVDtJQUNILENBQUM7SUFPRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBVztRQUNqQyxJQUFJLElBQUksR0FBVyxFQUFFLENBQUM7UUFDdEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUN2QixJQUFJLEdBQUcsR0FBbUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDNUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQVUsR0FBRyxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU9ELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBUTtRQUN0QixPQUFPLEdBQUcsWUFBWSxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQU9PLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxZQUE4QjtRQUN0RSxJQUFJLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RDLElBQUksaUJBQWlCLEdBQVksR0FBRyxDQUFDLGlCQUFpQixDQUFDO2dCQUN2RCxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixJQUFJLFdBQVcsR0FBVyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUQsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztvQkFDOUIsSUFBSSxXQUFXLEtBQUssUUFBUSxDQUFDLG1CQUFtQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN6RSxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3REO2lCQUNGO2dCQUNELEdBQUcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7b0JBQzdDLElBQUksa0JBQWtCLEdBQVksR0FBRyxDQUFDLGlCQUFpQixDQUFDO29CQUN4RCxJQUFJLGtCQUFrQixFQUFFO3dCQUN0QixHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ25ELEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7cUJBQy9CO29CQUNELEdBQUcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksWUFBWSxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRTtnQkFDMUMsSUFBSSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hELElBQUksV0FBVyxHQUFXLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUM7b0JBQzdILEdBQUcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ2hFLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7b0JBQzdCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFVBQVUsR0FBZSxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2hELElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixJQUFJLFVBQVUsR0FBVyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7YUFDNUI7U0FDRjtJQUNILENBQUM7SUFJRCxhQUFhLENBQUMsR0FBVyxFQUFFLFlBQThCO1FBQ3ZELElBQUkscUJBQXFCLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRTtZQUM5RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7QUF2U00sbUNBQVksR0FBVyxNQUFNLENBQUM7QUFnVHZDLE1BQU0sT0FBTyxNQUFNO0lBWWpCLFlBQVksSUFBdUIsRUFBRSxNQUFnQixFQUFFLEtBQWM7UUFYckUsU0FBSSxHQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDL0MsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixhQUFRLEdBQWEsSUFBSSxDQUFDO1FBQzFCLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFDdEIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZ0JBQVcsR0FBaUIsSUFBSSxDQUFDO1FBSy9CLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQXNCLEVBQUUsTUFBZSxFQUFFLEtBQWE7UUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBVztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7SUFLRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFLRCxJQUFJLENBQUMsSUFBc0IsRUFBRSxNQUFlLEVBQUUsS0FBYTtRQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUdyQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsV0FBVztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUM5QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ2pELE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFHMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksb0JBQW9CLENBQUMsMENBQTBDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNqRztJQUNILENBQUM7SUFLRCxPQUFPO1FBRUwsSUFBSSxHQUFXLENBQUM7UUFFaEIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQ2xDLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2xCLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUM5QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87b0JBQ2hCLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ1IsTUFBTTtZQUVSO2dCQUNFLEdBQUcsR0FBRyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDL0MsTUFBTTtTQUNUO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBTUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0lBQ2hILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIE5TdHJpbmd9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtSdGYsIFN0b3JhZ2VBdHRyaWJ1dGUsIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjaywgU3RyVXRpbCwgVXRpbEltZUpwbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7R3VpVGFza0Jhc2V9IGZyb20gJy4uL3Rhc2tzL0d1aVRhc2tCYXNlJztcclxuaW1wb3J0IHtJVGFza30gZnJvbSAnLi4vdGFza3MvSVRhc2snO1xyXG5pbXBvcnQge01hbmFnZXJ9IGZyb20gJy4uLy4uL01hbmFnZXInO1xyXG5pbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gJy4uL2d1aS9NZ0NvbnRyb2xCYXNlJztcclxuaW1wb3J0IHtOVU1fVFlQRX0gZnJvbSAnLi4vZGF0YS9OVU1fVFlQRSc7XHJcbmltcG9ydCB7R3VpRmllbGRCYXNlfSBmcm9tICcuLi9kYXRhL0d1aUZpZWxkQmFzZSc7XHJcblxyXG5pbXBvcnQge0Jsb2JUeXBlfSBmcm9tICcuLi9kYXRhL0Jsb2JUeXBlJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uRGV0YWlsc30gZnJvbSAnLi4vZ3VpL1ZhbGlkYXRpb25EZXRhaWxzJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJy4uL2d1aS9QSUMnO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3J9IGZyb20gJy4uL2d1aS9EaXNwbGF5Q29udmVydG9yJztcclxuXHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpRXhwcmVzc2lvbkV2YWx1YXRvciB7XHJcbiAgc3RhdGljIFRSSUdHRVJfVEFTSzogbnVtYmVyID0gNTAwMDAwO1xyXG4gIEV4cFRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIEV2ZW50czogYW55ID0gbnVsbDtcclxuXHJcblxyXG4gIGFic3RyYWN0IEhhbmRsZUNvbnRyb2xHb3RvKHRhc2s6IElUYXNrLCBjdHJsOiBNZ0NvbnRyb2xCYXNlLCByb3dObzogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBzZXRzIHRoZSBzdGF0dXMgYmFyIHRleHQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhbmRcclxuICAvLy8gc2V0cyB0aGUgcmVzdWx0IHdpdGggdGhlIGxhc3QgdGV4dCB0aGF0IHdhcyBzZXQgdG8gdGhlIHN0YXR1cyBiYXIgYnkgdGhlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPmxhc3QgdGV4dCBvZiBzdGF0dXMgYmFyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXR1c0JhclRleHRcIj50aGUgdGV4dCB0byBiZSBzZXQgYXQgc3RhdHVzIGJhcjwvcGFyYW0+XHJcbiAgZXZhbF9vcF9zdGF0dXNiYXJfc2V0X3RleHQocmVzVmFsOiBFeHBWYWwsIHN0YXR1c0JhclRleHQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnO1xyXG5cclxuICAgIGlmIChNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRGVmYXVsdFN0YXR1c01zZztcclxuICAgIH1cclxuICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIShzdGF0dXNCYXJUZXh0LkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgc3RhdHVzQmFyVGV4dC5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgIGlmICghc3RhdHVzQmFyVGV4dC5Jc051bGwpIHtcclxuICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gc3RhdHVzQmFyVGV4dC5TdHJWYWw7XHJcbiAgICAgICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPnRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNlIG9mIG5vbiBpbnRlcmFjdGl2ZSB0YXNrcywgaXQgaXMgcG9zc2libGUgdGhhdCB0YXNrIGhhcyBvcGVuIHdpbmRvdyA9IE5vLCBTbyBkaXNwbGF5IHRoZSBzdGF0dXMgYmFyIG1zZyBvbiBmcmFtZSB3aW5kb3cuXHJcbiAgICAgICAgaWYgKHRhc2suZ2V0Rm9ybSgpID09PSBudWxsICYmIE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRnJhbWVGb3JtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0YXNrID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5GcmFtZUZvcm0uZ2V0VGFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZSh0ZXh0KTtcclxuICAgICAgICBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cgPSB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgSXNQYXJhbGxlbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gcmV0dXJuIHRoZSBjb250cm9sIG5hbWUgb2YgbGFzdCBjbGlja2VkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGV2YWxfb3BfY3RybF9uYW1lKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbGFzdENsaWNrZWRDdHJsTmFtZTogc3RyaW5nID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5MYXN0Q2xpY2tlZEN0cmxOYW1lO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IChOU3RyaW5nLklzTnVsbE9yRW1wdHkobGFzdENsaWNrZWRDdHJsTmFtZSkgPyAnJyA6IGxhc3RDbGlja2VkQ3RybE5hbWUpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBNb3ZlcyB0aGUgY2FyZXQgdG8gc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybE5hbWVcIj50aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyb3dOdW1cIj50aGUgcm93IGluIHRoZSB0YWJsZSAgMCByZXByZXNlbnRzIGN1cnJlbnQgcm93PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj50aGUgdGFzayBnZW5lcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldFZhbFwiPnRoZSByZXN1bHQ8L3BhcmFtPlxyXG4gIGV2YWxfb3BfZ290b0N0cmwoY3RybE5hbWU6IEV4cFZhbCwgcm93TnVtOiBFeHBWYWwsIGdlbmVyYXRpb246IEV4cFZhbCwgcmV0VmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJldFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmV0VmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IHRoaXMuR2V0Q29udGV4dFRhc2soZ2VuZXJhdGlvbi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgaWYgKHRhc2sgPT09IG51bGwgfHwgdGFzay5nZXRGb3JtKCkgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgaVJvd051bTogbnVtYmVyID0gcm93TnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBzQ3RybE5hbWU6IHN0cmluZyA9IFN0clV0aWwucnRyaW0oY3RybE5hbWUuU3RyVmFsKTtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChzQ3RybE5hbWUpO1xyXG4gICAgcmV0VmFsLkJvb2xWYWwgPSB0aGlzLkhhbmRsZUNvbnRyb2xHb3RvKHRhc2ssIGN0cmwsIGlSb3dOdW0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIGdldCBjb250ZXh0IHRhc2sgYnkgYSBzcGVjaWZpZWQgZ2VuZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyVGFza1wiPmN1cnJlbnQgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJnZW5lcmF0aW9uXCI+dGFzayBnZW5lcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRhc2sgYXQgc3BlY2lmaWVkIGdlbmVyYXRpb248L3JldHVybnM+XHJcbiAgc3RhdGljIEdldENvbnRleHRUYXNrKGN1cnJUYXNrOiBHdWlUYXNrQmFzZSwgZ2VuZXJhdGlvbjogbnVtYmVyKTogR3VpVGFza0Jhc2Uge1xyXG4gICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDtcclxuICAgIGxldCB0YXNrQmFzZTogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+IGN1cnJUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICBpZiAoZ2VuZXJhdGlvbiA9PT0gR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgdGFzayA9IHRhc2tCYXNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGdlbmVyYXRpb24gPCB0YXNrQmFzZS5HZXRUYXNrRGVwdGgoKSkge1xyXG4gICAgICAgIHRhc2sgPSA8R3VpVGFza0Jhc2U+dGFza0Jhc2UuR2V0VGFza0FuY2VzdG9yKGdlbmVyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBnZXQgY29udGV4dCB0YXNrIGJ5IGEgc3BlY2lmaWVkIGdlbmVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ2VuZXJhdGlvblwiPnRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0YXNrIGF0IHNwZWNpZmllZCBnZW5lcmF0aW9uPC9yZXR1cm5zPlxyXG4gIEdldENvbnRleHRUYXNrKGdlbmVyYXRpb246IG51bWJlcik6IEd1aVRhc2tCYXNlIHtcclxuICAgIHJldHVybiBHdWlFeHByZXNzaW9uRXZhbHVhdG9yLkdldENvbnRleHRUYXNrKHRoaXMuRXhwVGFzaywgZ2VuZXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gQ3JlYXRlIGEgTlVNX1RZUEUgd2l0aCB0aGUgdmFsdWUgb2YgaSBhbmQgc2V0IHRoZSBFeHBWYWwgd2l0aCBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsOiBFeHBWYWwsIGk6IG51bWJlciwgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhpKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gYXR0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyBzZXQgbnVsbCB2YWx1ZSB0byBFeHByZXNzaW9uIEV2YWx1YXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj50byBzZXQgaXQgTlVMTDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhdHRyXCI+YXR0cmlidXRlIG9mIEV4cFZhbHVlPC9wYXJhbT5cclxuICBTZXROVUxMKHJlc1ZhbDogRXhwVmFsLCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gYXR0cjtcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN1cnJDdHJsXCI+Y29udHJvbCB3aG9zZSB2YWx1ZSBuZWVkIHRvIGJlIGV2YWx1YXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvbGRWYWx1ZVwiPm9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPm5ldyB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgR2V0VmFsaWRhdGVkVmFsdWUoY3VyckN0cmw6IE1nQ29udHJvbEJhc2UsIG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlscyA9IGN1cnJDdHJsLmJ1aWxkQ29weVBpY3R1cmUob2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIHZkLmV2YWx1YXRlKCk7XHJcbiAgICBsZXQgdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IHZkLlZhbGlkYXRpb25GYWlsZWQ7XHJcbiAgICBsZXQgY3RybFZhbHVlOiBzdHJpbmc7XHJcbiAgICBpZiAodmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICBsZXQgZmllbGQ6IEd1aUZpZWxkQmFzZSA9IGN1cnJDdHJsLmdldEZpZWxkKCk7XHJcbiAgICAgIGN0cmxWYWx1ZSA9ICgoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSA/IGZpZWxkLmdldENlbGxEZWZ1YWx0VmFsdWUoKSA6IGZpZWxkLmdldERlZmF1bHRWYWx1ZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0cmxWYWx1ZSA9IHZkLmdldERpc3BWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0cmxWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgZXhwVmFsdWUgb2YgbmVlZGVkIHR5cGUgLiB0aGUgdmFsdWUgaXMgaW5pdGVkIGJ5IHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPm5lZWQgYmUgZXZhbHVhdGVkL2luaXRpYWxpemVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5vZiByZXNWYWwgKEFscGhhfE51bWVyaWN8TG9naWNhbHxEYXRlfFRpbWV8QmxvYnxWZWN0b3IpPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnN0cmluZy9oZXhhIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj5mb3Igc3RyaW5nIGV2YWx1YXRpb248L3BhcmFtPlxyXG4gIFNldFZhbChyZXNWYWw6IEV4cFZhbCwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdmFsOiBzdHJpbmcsIHBpYzogUElDKTogdm9pZCB7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdHlwZTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICByZXNWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgaWYgKHZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICBlbHNlIGlmIChwaWMgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwsIHBpYywgKHRoaXMuRXhwVGFzaykuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdHlwZTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKHZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuU2V0TlVMTChyZXNWYWwsIHR5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLkV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdFeHByZXNzaW9uRXZhbHVhdG9yLlNldFZhbCgpIHRoZXJlIGlzIG5vIHN1Y2ggdHlwZSA6ICcgKyB0eXBlKTtcclxuXHJcbiAgICAgICAgLy8gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coXCJFeHByZXNzaW9uRXZhbHVhdG9yLlNldFZhbCgpIHRoZXJlIGlzIG5vIHN1Y2ggdHlwZSA6IFwiICsgdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gdHJpbXMgYW5kIHJldHVybnMgdGhlIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+Y29udGFpbmluZyBzdHJpbmcgdG8gYmUgdHJpbW1lZCAoc3RyVmFsXyBtZW1iZXIgb2YgRXhwVmFsKTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnRyaW1tZWQgc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBleHBfYnVpbGRfc3RyaW5nKHZhbDogRXhwVmFsKTogc3RyaW5nIHtcclxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSAnJztcclxuICAgIGlmICh2YWwuU3RyVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBsZW46IG51bWJlciA9IDxudW1iZXI+dmFsLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgbmFtZSA9IFN0clV0aWwuWnN0cmluZ01ha2UodmFsLlN0clZhbCwgPG51bWJlcj5sZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2hlY2tzIGlmIHRoZSBvYmplY3QgaXMgaW5zdGFuY2Ugb2YgRXhwVmFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvYmpcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGlzRXhwVmFsKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXhwVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcml2YXRlKVxyXG4gIC8vLyBoYW5kbGUgY29udmVyc2lvbnMgYmV0d2VlbiBibG9iIGFuZCB1bmljb2RlL2FscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBCbG9iU3RyaW5nQ29udmVyc2lvbih2YWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKGV4cGVjdGVkVHlwZSkpIHtcclxuICAgICAgaWYgKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICBsZXQgaW5jbHVkZUJsb2JQcmVmaXg6IGJvb2xlYW4gPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVCbG9iUHJlZml4KSB7XHJcbiAgICAgICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgdmFsLlN0clZhbCA9IEJsb2JUeXBlLmdldFN0cmluZyh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIHZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZICYmIFJ0Zi5pc1J0Zih2YWwuU3RyVmFsKSkge1xyXG4gICAgICAgICAgICB2YWwuU3RyVmFsID0gU3RyVXRpbC5HZXRQbGFpblRleHRmcm9tUnRmKHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwuQXR0ciA9IGV4cGVjdGVkVHlwZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIGxldCBpbmNsdWRlQmxvYlByZWZpeDI6IGJvb2xlYW4gPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICAgICAgICBpZiAoaW5jbHVkZUJsb2JQcmVmaXgyKSB7XHJcbiAgICAgICAgICAgIHZhbC5TdHJWYWwgPSBCbG9iVHlwZS5yZW1vdmVCbG9iUHJlZml4KHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhbC5BdHRyID0gZXhwZWN0ZWRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh2YWwuQXR0cikpIHtcclxuICAgICAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSA/IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9BTlNJIDogQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREU7XHJcbiAgICAgICAgICB2YWwuU3RyVmFsID0gQmxvYlR5cGUuY3JlYXRlRnJvbVN0cmluZyh2YWwuU3RyVmFsLCBjb250ZW50VHlwZSk7XHJcbiAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgdmFsLkF0dHIgPSBleHBlY3RlZFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsX29wX3ppbWVyZWFkKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICBsZXQgdXRpbEltZUpwbjogVXRpbEltZUpwbiA9IE1hbmFnZXIuVXRpbEltZUpwbjtcclxuICAgIGlmICh1dGlsSW1lSnBuICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBzdHJJbWVSZWFkOiBzdHJpbmcgPSB1dGlsSW1lSnBuLlN0ckltZVJlYWQ7XHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHV0aWxJbWVKcG4uU3RySW1lUmVhZCkpIHtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gc3RySW1lUmVhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBDb252ZXJ0RXhwVmFsKHZhbDogRXhwVmFsLCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYih2YWwuQXR0ciwgZXhwZWN0ZWRUeXBlKSkge1xyXG4gICAgICB0aGlzLkJsb2JTdHJpbmdDb252ZXJzaW9uKHZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGUgY2xhc3MgaG9sZHMgZGF0YSBvZiBhIGJhc2ljIGVsZW1lbnQgKGNvbnN0YW50IG9yIHZhcmlhYmxlKSB0aGF0XHJcbi8vLyAgIGFwcGVhcnMgb3IgYXJlIHJlc3VsdCBvZiBleGVjdXRpb24gb2Ygb3BlcmF0b3JcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEV4cFZhbCB7XHJcbiAgQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICBJc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBNZ051bVZhbDogTlVNX1RZUEUgPSBudWxsO1xyXG4gIFN0clZhbDogc3RyaW5nID0gbnVsbDtcclxuICBCb29sVmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSW5jbHVkZUJsb2JQcmVmaXg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBPcmlnaW5hbE51bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBWZWN0b3JGaWVsZDogR3VpRmllbGRCYXNlID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3RvcihhdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw6IGJvb2xlYW4sIG1nVmFsOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGF0dHI/OiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw/OiBib29sZWFuLCBtZ1ZhbD86IHN0cmluZykge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMShhdHRyLCBpc051bGwsIG1nVmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShhdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw6IGJvb2xlYW4sIG1nVmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuSW5pdChhdHRyLCBpc051bGwsIG1nVmFsKTtcclxuICB9XHJcblxyXG4gIENvcHkoc3JjOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuQXR0ciA9IHNyYy5BdHRyO1xyXG4gICAgdGhpcy5Cb29sVmFsID0gc3JjLkJvb2xWYWw7XHJcbiAgICB0aGlzLkluY2x1ZGVCbG9iUHJlZml4ID0gc3JjLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gICAgdGhpcy5Jc051bGwgPSBzcmMuSXNOdWxsO1xyXG4gICAgdGhpcy5NZ051bVZhbCA9IHNyYy5NZ051bVZhbDtcclxuICAgIHRoaXMuU3RyVmFsID0gc3JjLlN0clZhbDtcclxuICAgIHRoaXMuVmVjdG9yRmllbGQgPSBzcmMuVmVjdG9yRmllbGQ7XHJcbiAgICB0aGlzLk9yaWdpbmFsTnVsbCA9IHNyYy5PcmlnaW5hbE51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIG51bGxpZnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE51bGxpZnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLkluaXQoU3RvcmFnZUF0dHJpYnV0ZS5OT05FLCB0cnVlLCBudWxsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0aWFsaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBJbml0KGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGlzTnVsbDogYm9vbGVhbiwgbWdWYWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5BdHRyID0gYXR0cjtcclxuICAgIHRoaXMuSXNOdWxsID0gaXNOdWxsO1xyXG5cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbWdWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbWdWYWw7XHJcbiAgICAgICAgdGhpcy5JbmNsdWRlQmxvYlByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHRoaXMuTWdOdW1WYWwgPSAoKG1nVmFsICE9PSBudWxsKSA/IG5ldyBOVU1fVFlQRShtZ1ZhbCkgOiBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHRoaXMuQm9vbFZhbCA9IChtZ1ZhbCAhPT0gbnVsbCAmJiBtZ1ZhbCA9PT0gJzEnKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OT05FOlxyXG4gICAgICAgIHRoaXMuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLk9yaWdpbmFsTnVsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5WZWN0b3JGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDpcclxuICAgICAgICAvLyBGb3IgZG90bmV0IG9iamVjdHMsIEV4cFZhbCBzaG91bGQgYmUgY29uc3RydWN0ZWQgdXNpbmcgb3ZlcmxvYWRlZCBDb25zdHJ1Y3Rvci5cclxuICAgICAgICAvLyBJZiBpdCBpcyBhIGJsb2JQcmVmaXgsIGl0IHNob3VsZCBiZSBkb25lIGhlcmUuXHJcbiAgICAgICAgdGhpcy5TdHJWYWwgPSBtZ1ZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCdpbiBFeHBWYWwuRXhwVmFsKCkgaWxsZWdhbCBhdHRyaWJ1dGU6IFxcJycgKyB0aGlzLkF0dHIgKyAnXFwnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0cyB0aGUgc3RyaW5nIGZvcm0gb2YgdGhlIHZhbHVlIGluIHRoZSBFeHBWYWwgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFRvTWdWYWwoKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgc3RyOiBzdHJpbmc7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBzdHIgPSB0aGlzLlN0clZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgc3RyID0gdGhpcy5NZ051bVZhbC50b1hNTHJlY29yZCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgc3RyID0gdGhpcy5Cb29sVmFsXHJcbiAgICAgICAgICA/ICcxJ1xyXG4gICAgICAgICAgOiAnMCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHN0ciA9ICdbaWxsZWdhbCBhdHRyaWJ1dGU6ICcgKyB0aGlzLkF0dHIgKyAnXSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRW1wdHlTdHJpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgJiYgdGhpcy5TdHJWYWwgPT09ICcnO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -1,118 +0,0 @@
1
- import { XMLConstants } from '@magic-xpa/utils';
2
- import { MgControlBase } from './MgControlBase';
3
- import { List, NString } from '@magic-xpa/mscorelib';
4
- export class ControlTable {
5
- constructor() {
6
- this._controls = null;
7
- this._mgForm = null;
8
- this._controls = new List();
9
- }
10
- fillData(mgForm, parser) {
11
- this._mgForm = mgForm;
12
- while (this.initInnerObjects(parser.getNextTag(), parser)) {
13
- }
14
- }
15
- initInnerObjects(foundTagName, parser) {
16
- if (foundTagName === null)
17
- return false;
18
- if (foundTagName === XMLConstants.MG_TAG_CONTROL) {
19
- let control = this._mgForm.ConstructMgControl();
20
- control.fillData(this._mgForm, this._controls.length, parser);
21
- this._controls.push(control);
22
- }
23
- else if (foundTagName === ("/" + XMLConstants.MG_TAG_CONTROL)) {
24
- parser.setCurrIndex2EndOfTag();
25
- return false;
26
- }
27
- else
28
- return false;
29
- return true;
30
- }
31
- getSize() {
32
- return this._controls.length;
33
- }
34
- getCtrl(idxOrCtrlName) {
35
- if (arguments.length === 1 && (idxOrCtrlName === null || typeof idxOrCtrlName === "undefined" || idxOrCtrlName.constructor === Number)) {
36
- return this.getCtrl_0(idxOrCtrlName);
37
- }
38
- return this.getCtrl_1(idxOrCtrlName);
39
- }
40
- getCtrl_0(idx) {
41
- if (idx < this.getSize())
42
- return this._controls.get_Item(idx);
43
- return null;
44
- }
45
- getCtrl_1(ctrlName) {
46
- if (!NString.IsNullOrEmpty(ctrlName)) {
47
- return this._controls.find(ctrl => {
48
- return (NString.Equals(ctrlName, ctrl.getName(), true) ||
49
- NString.Equals(ctrlName, ctrl.Name, true));
50
- });
51
- }
52
- return null;
53
- }
54
- getCtrlByName(ctrlName, ctrlType) {
55
- if (!NString.IsNullOrEmpty(ctrlName)) {
56
- return this._controls.find(ctrl => {
57
- return ((ctrl.Type === ctrlType) && NString.Equals(ctrlName, ctrl.getName(), true) ||
58
- NString.Equals(ctrlName, ctrl.Name, true));
59
- });
60
- }
61
- return null;
62
- }
63
- GetControlByIsn(isn) {
64
- let ctrlByIsn = null;
65
- ctrlByIsn = this._controls.find(ctrl => {
66
- return (ctrl.ControlIsn === isn);
67
- });
68
- return ctrlByIsn;
69
- }
70
- GetControl(predicate) {
71
- return this._controls.find(predicate);
72
- }
73
- filter(callackFuntion) {
74
- return this._controls.filter(callackFuntion);
75
- }
76
- contains(ctrl) {
77
- let contains = false;
78
- if (ctrl !== null)
79
- contains = this._controls.Contains(ctrl);
80
- return contains;
81
- }
82
- addControl(ctrl) {
83
- this._controls.push(ctrl);
84
- }
85
- setControlAt(ctrl, index) {
86
- if (this._controls.length <= index)
87
- this._controls.SetSize(index + 1);
88
- this._controls.set_Item(index, ctrl);
89
- }
90
- deleteControlAt(index) {
91
- this._controls.set_Item(index, null);
92
- }
93
- Remove(ctrlOrIdx) {
94
- if (arguments.length === 1 && (ctrlOrIdx === null || ctrlOrIdx instanceof MgControlBase)) {
95
- return this.Remove_0(ctrlOrIdx);
96
- }
97
- this.Remove_1(ctrlOrIdx);
98
- }
99
- Remove_0(ctrl) {
100
- this._controls.Remove(ctrl);
101
- return this._controls.Contains(ctrl);
102
- }
103
- Remove_1(idx) {
104
- this._controls.RemoveAt(idx);
105
- }
106
- getControlIdx(inCtrl, includeSubs) {
107
- let counter = 0;
108
- for (let i = 0; i < this._controls.length; i++) {
109
- let ctrl = this._controls.get_Item(i);
110
- if (inCtrl === ctrl)
111
- return counter;
112
- else if (includeSubs || !ctrl.isSubform())
113
- counter++;
114
- }
115
- return -1;
116
- }
117
- }
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9Db250cm9sVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixZQUFZLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLE9BQU8sWUFBWTtJQUt2QjtRQUpRLGNBQVMsR0FBd0IsSUFBSSxDQUFDO1FBQ3RDLFlBQU8sR0FBZSxJQUFJLENBQUM7UUFJakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFHRCxRQUFRLENBQUMsTUFBa0IsRUFBRSxNQUFpQjtRQUU1QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7U0FDMUQ7SUFDSCxDQUFDO0lBS08sZ0JBQWdCLENBQUMsWUFBb0IsRUFBRSxNQUFpQjtRQUM5RCxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLGNBQWMsRUFBRTtZQUNoRCxJQUFJLE9BQU8sR0FBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxP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USxDQUFDLEdBQVc7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUtELGFBQWEsQ0FBQyxNQUFxQixFQUFFLFdBQW9CO1FBQ3ZELElBQUksT0FBTyxHQUFXLENBQUMsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxJQUFJLEdBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksTUFBTSxLQUFLLElBQUk7Z0JBQ2pCLE9BQU8sT0FBTyxDQUFDO2lCQUNaLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZ0NvbnRyb2xUeXBlLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlciB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBNZ0Zvcm1CYXNlIH0gZnJvbSAnLi9NZ0Zvcm1CYXNlJztcclxuaW1wb3J0IHsgTWdDb250cm9sQmFzZSB9IGZyb20gJy4vTWdDb250cm9sQmFzZSc7XHJcbmltcG9ydCB7IExpc3QsIE5TdHJpbmcgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udHJvbFRhYmxlIHtcclxuICBwcml2YXRlIF9jb250cm9sczogTGlzdDxNZ0NvbnRyb2xCYXNlPiA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbWdGb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNUT1I8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9jb250cm9scyA9IG5ldyBMaXN0KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+cGFyc2UgaW5wdXQgc3RyaW5nIGFuZCBmaWxsIGlubmVyIGRhdGE8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuX21nRm9ybSA9IG1nRm9ybTtcclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLmdldE5leHRUYWcoKSwgcGFyc2VyKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm91bmRUYWdOYW1lXCI+bmFtZSBvZiB0YWcsIG9mIG9iamVjdCwgd2hpY2ggbmVlZCBiZSBhbGxvY2F0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiBpZiBpbm5lciB0YWdzIGZpbmlzaGVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhmb3VuZFRhZ05hbWU6IHN0cmluZywgcGFyc2VyOiBYbWxQYXJzZXIpOiBib29sZWFuIHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0NPTlRST0wpIHtcclxuICAgICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSB0aGlzLl9tZ0Zvcm0uQ29uc3RydWN0TWdDb250cm9sKCk7XHJcbiAgICAgIGNvbnRyb2wuZmlsbERhdGEodGhpcy5fbWdGb3JtLCB0aGlzLl9jb250cm9scy5sZW5ndGgsIHBhcnNlcik7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xzLnB1c2goY29udHJvbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IChcIi9cIiArIFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTCkpIHtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IHRoZSBzaXplIG9mIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzaXplIG9mIHRoZSB0YWJsZTwvcmV0dXJucz5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbHMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3RybChpZHg6IG51bWJlcik6IE1nQ29udHJvbEJhc2U7XHJcbiAgZ2V0Q3RybChjdHJsTmFtZTogc3RyaW5nKTogTWdDb250cm9sQmFzZTtcclxuICBnZXRDdHJsKGlkeE9yQ3RybE5hbWU6IGFueSk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKGlkeE9yQ3RybE5hbWUgPT09IG51bGwgfHwgdHlwZW9mIGlkeE9yQ3RybE5hbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgaWR4T3JDdHJsTmFtZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDdHJsXzAoaWR4T3JDdHJsTmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDdHJsXzEoaWR4T3JDdHJsTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGNvbnRyb2wgYnkgaXRzIGluZGV4PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aXMgdGhlIGluZGV4IG9mIHRoZSBjb250cm9sIGluIHRoZSB0YWJsZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVxdWVzdGVkIGNvbnRyb2wgb2JqZWN0PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0Q3RybF8wKGlkeDogbnVtYmVyKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBpZiAoaWR4IDwgdGhpcy5nZXRTaXplKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLl9jb250cm9scy5nZXRfSXRlbShpZHgpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgY29udHJvbCBieSBpdHMgbmFtZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+aXMgdGhlIHJlcXVlc3RlZCBjb250cm9scyBuYW1lPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXF1ZXN0ZWQgY29udHJvbCBvYmplY3Q8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRDdHJsXzEoY3RybE5hbWU6IHN0cmluZyk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkoY3RybE5hbWUpKSB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fY29udHJvbHMuZmluZChjdHJsID0+IHtcclxuICAgICAgICByZXR1cm4gKE5TdHJpbmcuRXF1YWxzKGN0cmxOYW1lLCBjdHJsLmdldE5hbWUoKSwgdHJ1ZSkgfHxcclxuICAgICAgICAgIE5TdHJpbmcuRXF1YWxzKGN0cmxOYW1lLCBjdHJsLk5hbWUsIHRydWUpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGNvbnRyb2wgKHdoaWNoIGlzIG5vdCB0aGUgZnJhbWUgZm9ybSkgYnkgaXRzIG5hbWU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsTmFtZVwiPmlzIHRoZSByZXF1ZXN0ZWQgY29udHJvbHMgbmFtZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFR5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlcXVlc3RlZCBjb250cm9sIG9iamVjdDwvcmV0dXJucz5cclxuICBnZXRDdHJsQnlOYW1lKGN0cmxOYW1lOiBzdHJpbmcsIGN0cmxUeXBlOiBNZ0NvbnRyb2xUeXBlKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eShjdHJsTmFtZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzLmZpbmQoY3RybCA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgoY3RybC5UeXBlID09PSBjdHJsVHlwZSkgJiYgTlN0cmluZy5FcXVhbHMoY3RybE5hbWUsIGN0cmwuZ2V0TmFtZSgpLCB0cnVlKSB8fFxyXG4gICAgICAgICAgTlN0cmluZy5FcXVhbHMoY3RybE5hbWUsIGN0cmwuTmFtZSwgdHJ1ZSkpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBhIGNvbnRyb2wgYnkgaXRzIElTTlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNuXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldENvbnRyb2xCeUlzbihpc246IG51bWJlcik6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgbGV0IGN0cmxCeUlzbjogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgICBjdHJsQnlJc24gPSB0aGlzLl9jb250cm9scy5maW5kKGN0cmwgPT4ge1xyXG4gICAgICByZXR1cm4gKGN0cmwuQ29udHJvbElzbiA9PT0gaXNuKVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN0cmxCeUlzbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IGEgY29udHJvbCBtYXRoY2hpbmcgdGhlIHByZWRpY2F0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJlZGljYXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldENvbnRyb2wocHJlZGljYXRlOiAodmFsdWU6IE1nQ29udHJvbEJhc2UpID0+IGJvb2xlYW4pOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9scy5maW5kKHByZWRpY2F0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyKGNhbGxhY2tGdW50aW9uOiAoaXRlbSwgaW5kZXgsIGFycmF5KSA9PiBib29sZWFuKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9scy5maWx0ZXIoY2FsbGFja0Z1bnRpb24pO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5yZXR1cm5zIHRydWUgaWYgdGhpcyB0YWJsZSBjb250YWlucyB0aGUgZ2l2ZW4gY29udHJvbDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB0byBsb29rIGZvcjwvcGFyYW0+XHJcbiAgY29udGFpbnMoY3RybDogTWdDb250cm9sQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvbnRhaW5zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoY3RybCAhPT0gbnVsbClcclxuICAgICAgY29udGFpbnMgPSB0aGlzLl9jb250cm9scy5Db250YWlucyhjdHJsKTtcclxuICAgIHJldHVybiBjb250YWlucztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5hZGQgYSBjb250cm9sIHRvIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5pcyB0aGUgY29udHJvbCB0byBiZSBhZGRlZDwvcGFyYW0+XHJcbiAgYWRkQ29udHJvbChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb250cm9scy5wdXNoKGN0cmwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNldCBhIGNvbnRyb2wgdG8gYSBjZWxsIGluIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5pcyB0aGUgY29udHJvbCB0byBiZSBhZGRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmRleFwiPndoZXJlIHRvIHNldCB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgc2V0Q29udHJvbEF0KGN0cmw6IE1nQ29udHJvbEJhc2UsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jb250cm9scy5sZW5ndGggPD0gaW5kZXgpXHJcbiAgICAgIHRoaXMuX2NvbnRyb2xzLlNldFNpemUoaW5kZXggKyAxKTtcclxuICAgIHRoaXMuX2NvbnRyb2xzLnNldF9JdGVtKGluZGV4LCBjdHJsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5yZXBsYWNlIGEgY29udHJvbCBpbiB0aGUgY29udHJvbCB0YWJsZSB3aXRoIG51bGw8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmRleFwiPm9mIGNvbnRyb2wgdG8gYmUgZGVsZXRlZDwvcGFyYW0+XHJcbiAgZGVsZXRlQ29udHJvbEF0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRyb2xzLnNldF9JdGVtKGluZGV4LCBudWxsKTtcclxuICB9XHJcblxyXG4gIFJlbW92ZShjdHJsOiBNZ0NvbnRyb2xCYXNlKTogYm9vbGVhbjtcclxuICBSZW1vdmUoaWR4OiBudW1iZXIpO1xyXG4gIFJlbW92ZShjdHJsT3JJZHg6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKGN0cmxPcklkeCA9PT0gbnVsbCB8fCBjdHJsT3JJZHggaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5SZW1vdmVfMChjdHJsT3JJZHgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5SZW1vdmVfMShjdHJsT3JJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnJlbW92ZXMgYSBjb250cm9sIGZyb20gdGhlIHRhYmxlIGFuZCByZXR1cm5zIHRydWUgb24gc3VjY2Vzczwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB0byByZW1vdmU8L3BhcmFtPlxyXG4gIHByaXZhdGUgUmVtb3ZlXzAoY3RybDogTWdDb250cm9sQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29udHJvbHMuUmVtb3ZlKGN0cmwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzLkNvbnRhaW5zKGN0cmwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnJlbW92ZXMgYSBjb250cm9sIGZyb20gdGhlIHRhYmxlIGJ5IGluZGV4Ljwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpZHggb2YgdGhlIGNvbnRyb2wgdG8gYmUgcmVtb3ZlZDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBSZW1vdmVfMShpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udHJvbHMuUmVtb3ZlQXQoaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5DdHJsXCI+dGhlIGNvbnRyb2wgd2hvc2UgaW5kZXggd2UgbmVlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5jbHVkZVN1YnNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaWR4IG9mIGEgY29udHJvbCBpbiB0aGUgdGFibGUsIGV4Y2x1ZGluZyBzdWJmb3JtcyBjb250cm9sPC9yZXR1cm5zPlxyXG4gIGdldENvbnRyb2xJZHgoaW5DdHJsOiBNZ0NvbnRyb2xCYXNlLCBpbmNsdWRlU3ViczogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZSA9IHRoaXMuX2NvbnRyb2xzLmdldF9JdGVtKGkpO1xyXG4gICAgICBpZiAoaW5DdHJsID09PSBjdHJsKVxyXG4gICAgICAgIHJldHVybiBjb3VudGVyO1xyXG4gICAgICBlbHNlIGlmIChpbmNsdWRlU3VicyB8fCAhY3RybC5pc1N1YmZvcm0oKSlcclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19