@sapui5/sap.fe.test 1.108.2 → 1.110.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 (84) hide show
  1. package/README.md +5 -1
  2. package/package.json +9 -7
  3. package/src/sap/fe/test/.library +17 -18
  4. package/src/sap/fe/test/BaseActions.js +3 -2
  5. package/src/sap/fe/test/BaseArrangements.js +3 -2
  6. package/src/sap/fe/test/BaseAssertions.js +26 -2
  7. package/src/sap/fe/test/CollaborationClient.js +21 -5
  8. package/src/sap/fe/test/CollaborationClient.ts +29 -1
  9. package/src/sap/fe/test/ConfirmDialog.js +12 -11
  10. package/src/sap/fe/test/FCLView.js +16 -15
  11. package/src/sap/fe/test/FeMocks.js +1 -11
  12. package/src/sap/fe/test/Flexibility.js +12 -7
  13. package/src/sap/fe/test/FlexibleColumnLayout.js +12 -11
  14. package/src/sap/fe/test/JestFlexibilityHelper.js +141 -0
  15. package/src/sap/fe/test/JestFlexibilityHelper.ts +135 -0
  16. package/src/sap/fe/test/JestTemplatingHelper.js +191 -207
  17. package/src/sap/fe/test/JestTemplatingHelper.ts +171 -91
  18. package/src/sap/fe/test/JourneyRunner.js +3 -2
  19. package/src/sap/fe/test/ListReport.js +3 -2
  20. package/src/sap/fe/test/LocationUtil.js +3 -2
  21. package/src/sap/fe/test/ObjectPage.js +129 -26
  22. package/src/sap/fe/test/Shell.js +9 -4
  23. package/src/sap/fe/test/Stubs.js +18 -17
  24. package/src/sap/fe/test/TemplatePage.js +3 -2
  25. package/src/sap/fe/test/TemplatingTestUtils.js +3 -2
  26. package/src/sap/fe/test/UI5MockHelper.js +39 -72
  27. package/src/sap/fe/test/UI5MockHelper.ts +3 -0
  28. package/src/sap/fe/test/Utils.js +4 -3
  29. package/src/sap/fe/test/api/APIHelper.js +3 -2
  30. package/src/sap/fe/test/api/BaseAPI.js +3 -2
  31. package/src/sap/fe/test/api/ChartActions.js +3 -2
  32. package/src/sap/fe/test/api/ChartAssertions.js +3 -2
  33. package/src/sap/fe/test/api/CollaborationAPI.js +2 -30
  34. package/src/sap/fe/test/api/DialogAPI.js +3 -2
  35. package/src/sap/fe/test/api/DialogActions.js +3 -2
  36. package/src/sap/fe/test/api/DialogAssertions.js +4 -3
  37. package/src/sap/fe/test/api/DialogCreateActions.js +6 -5
  38. package/src/sap/fe/test/api/DialogCreateAssertions.js +48 -49
  39. package/src/sap/fe/test/api/DialogHelper.js +4 -3
  40. package/src/sap/fe/test/api/DialogMassEditActions.js +3 -2
  41. package/src/sap/fe/test/api/DialogMassEditAssertions.js +3 -2
  42. package/src/sap/fe/test/api/DialogMessageActions.js +3 -2
  43. package/src/sap/fe/test/api/DialogMessageAssertions.js +82 -79
  44. package/src/sap/fe/test/api/DialogType.js +3 -2
  45. package/src/sap/fe/test/api/DialogValueHelpActions.js +3 -2
  46. package/src/sap/fe/test/api/DialogValueHelpAssertions.js +3 -2
  47. package/src/sap/fe/test/api/EditState.js +4 -3
  48. package/src/sap/fe/test/api/FilterBarAPI.js +3 -2
  49. package/src/sap/fe/test/api/FilterBarActions.js +3 -2
  50. package/src/sap/fe/test/api/FilterBarAssertions.js +3 -2
  51. package/src/sap/fe/test/api/FooterAPI.js +5 -4
  52. package/src/sap/fe/test/api/FooterActionsBase.js +3 -2
  53. package/src/sap/fe/test/api/FooterActionsOP.js +3 -2
  54. package/src/sap/fe/test/api/FooterAssertionsBase.js +3 -2
  55. package/src/sap/fe/test/api/FooterAssertionsOP.js +3 -2
  56. package/src/sap/fe/test/api/FormAPI.js +4 -2
  57. package/src/sap/fe/test/api/FormActions.js +3 -2
  58. package/src/sap/fe/test/api/FormAssertions.js +3 -2
  59. package/src/sap/fe/test/api/HeaderAPI.js +3 -2
  60. package/src/sap/fe/test/api/HeaderActions.js +3 -2
  61. package/src/sap/fe/test/api/HeaderActionsLR.js +3 -2
  62. package/src/sap/fe/test/api/HeaderAssertions.js +3 -2
  63. package/src/sap/fe/test/api/HeaderAssertionsLR.js +3 -2
  64. package/src/sap/fe/test/api/HeaderLR.js +3 -2
  65. package/src/sap/fe/test/api/KPICardAPI.js +5 -4
  66. package/src/sap/fe/test/api/KPICardActions.js +7 -11
  67. package/src/sap/fe/test/api/KPICardAssertions.js +3 -2
  68. package/src/sap/fe/test/api/TableAPI.js +5 -4
  69. package/src/sap/fe/test/api/TableActions.js +16 -9
  70. package/src/sap/fe/test/api/TableAssertions.js +8 -7
  71. package/src/sap/fe/test/builder/DialogBuilder.js +99 -102
  72. package/src/sap/fe/test/builder/FEBuilder.js +3 -2
  73. package/src/sap/fe/test/builder/KPIBuilder.js +16 -25
  74. package/src/sap/fe/test/builder/MacroFieldBuilder.js +4 -2
  75. package/src/sap/fe/test/builder/MdcFieldBuilder.js +3 -2
  76. package/src/sap/fe/test/builder/MdcFilterBarBuilder.js +3 -2
  77. package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +3 -2
  78. package/src/sap/fe/test/builder/MdcTableBuilder.js +196 -96
  79. package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +3 -2
  80. package/src/sap/fe/test/builder/VMBuilder.js +3 -2
  81. package/src/sap/fe/test/internal/ConsoleErrorChecker.js +13 -48
  82. package/src/sap/fe/test/internal/FEArrangements.js +3 -2
  83. package/src/sap/fe/test/internal/FEJourneyRunner.js +5 -3
  84. package/src/sap/fe/test/library.js +3 -2
@@ -7,7 +7,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
7
7
 
8
8
  var _exports = {};
9
9
  var mock = generic.mock;
10
-
11
10
  /**
12
11
  * Factory function to create a new MockContext.
13
12
  *
@@ -22,8 +21,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
22
21
  mocked._isKeptAlive = false;
23
22
  mocked._contextData = oContextData || {};
24
23
  mocked._oBinding = oBinding;
25
- mocked._isInactive = !!isInactive; // Default behavior
24
+ mocked._isInactive = !!isInactive;
26
25
 
26
+ // Default behavior
27
27
  mocked.mock.isA.mockImplementation(function (sClassName) {
28
28
  return sClassName === "sap.ui.model.odata.v4.Context";
29
29
  });
@@ -36,7 +36,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
36
36
  return mocked._contextData[key];
37
37
  }));
38
38
  }
39
-
40
39
  return Promise.resolve(mocked._contextData[keyOrKeys]);
41
40
  });
42
41
  mocked.mock.requestObject.mockImplementation(function (key) {
@@ -48,7 +47,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
48
47
  });
49
48
  mocked.mock.getObject.mockImplementation(function (path) {
50
49
  var result = path ? mocked._contextData[path] : mocked._contextData;
51
-
52
50
  if (!result && path && path.indexOf("/") > -1) {
53
51
  var parts = path.split("/");
54
52
  result = parts.reduce(function (sum, part) {
@@ -56,7 +54,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
56
54
  return sum;
57
55
  }, mocked._contextData);
58
56
  }
59
-
60
57
  return result;
61
58
  });
62
59
  mocked.mock.getPath.mockImplementation(function () {
@@ -67,7 +64,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
67
64
  });
68
65
  mocked.mock.getModel.mockImplementation(function () {
69
66
  var _mocked$_oBinding;
70
-
71
67
  return (_mocked$_oBinding = mocked._oBinding) === null || _mocked$_oBinding === void 0 ? void 0 : _mocked$_oBinding.getModel();
72
68
  });
73
69
  mocked.mock.setKeepAlive.mockImplementation(function (bool, _fnOnBeforeDestroy, _bRequestMessages) {
@@ -84,16 +80,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
84
80
  /**
85
81
  * For compatibility reasons, we keep a new operator. Use the factory function createMockContext instead.
86
82
  */
87
-
88
-
89
83
  _exports.createMockContext = createMockContext;
90
84
  var MockContext = createMockContext;
85
+
91
86
  /**
92
87
  * Utility type to mock a sap.ui.base.Event
93
88
  */
94
-
95
89
  _exports.MockContext = MockContext;
96
-
97
90
  /**
98
91
  * Factory function to create a new MockEvent.
99
92
  *
@@ -102,8 +95,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
102
95
  */
103
96
  function createMockEvent(params) {
104
97
  var mocked = mock(Event);
105
- mocked._params = params || {}; // Default behavior
98
+ mocked._params = params || {};
106
99
 
100
+ // Default behavior
107
101
  mocked.mock.getParameter.mockImplementation(function (name) {
108
102
  return mocked._params[name];
109
103
  });
@@ -112,16 +106,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
112
106
  /**
113
107
  * For compatibility reasons, we keep a new operator. Use the factory function createMockEvent instead.
114
108
  */
115
-
116
-
117
109
  _exports.createMockEvent = createMockEvent;
118
110
  var MockEvent = createMockEvent;
111
+
119
112
  /**
120
113
  * Utility type to mock a sap.ui.model.odata.v4.ODataListBinding
121
114
  */
122
-
123
115
  _exports.MockEvent = MockEvent;
124
-
125
116
  /**
126
117
  * Factory function to create a new MockListBinding.
127
118
  *
@@ -135,13 +126,14 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
135
126
  mocked._aMockContexts = aContextData.map(function (contextData) {
136
127
  return createMockContext(contextData, mocked);
137
128
  });
138
- mocked._mockModel = oMockModel; // Utility API
129
+ mocked._mockModel = oMockModel;
139
130
 
131
+ // Utility API
140
132
  mocked.setModel = function (model) {
141
133
  mocked._mockModel = model;
142
- }; // Default behavior
143
-
134
+ };
144
135
 
136
+ // Default behavior
145
137
  mocked.mock.isA.mockImplementation(function (sClassName) {
146
138
  return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
147
139
  });
@@ -154,6 +146,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
154
146
  mocked.mock.getAllCurrentContexts.mockImplementation(function () {
155
147
  return mocked._aMockContexts;
156
148
  });
149
+ mocked.mock.getContexts.mockImplementation(function () {
150
+ return mocked._aMockContexts;
151
+ });
157
152
  mocked.mock.getModel.mockImplementation(function () {
158
153
  return mocked._mockModel;
159
154
  });
@@ -163,16 +158,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
163
158
  /**
164
159
  * For compatibility reasons, we keep a new operator. Use the factory function createMockListBinding instead.
165
160
  */
166
-
167
-
168
161
  _exports.createMockListBinding = createMockListBinding;
169
162
  var MockListBinding = createMockListBinding;
163
+
170
164
  /**
171
165
  * Utility type to mock a sap.ui.model.odata.v4.ODataPropertyBinding
172
166
  */
173
-
174
167
  _exports.MockListBinding = MockListBinding;
175
-
176
168
  /**
177
169
  * Factory function to create a new MockPropertyBinding.
178
170
  *
@@ -185,8 +177,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
185
177
  var mocked = mock(ODataPropertyBinding);
186
178
  mocked._mockModel = oMockModel;
187
179
  mocked._value = value;
188
- mocked._path = path; // Default behavior
180
+ mocked._path = path;
189
181
 
182
+ // Default behavior
190
183
  mocked.mock.isA.mockImplementation(function (sClassName) {
191
184
  return sClassName === "sap.ui.model.odata.v4.ODataPropertyBinding";
192
185
  });
@@ -204,16 +197,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
204
197
  /**
205
198
  * For compatibility reasons, we keep a new operator. Use the factory function createMockPropertyBinding instead.
206
199
  */
207
-
208
-
209
200
  _exports.createMockPropertyBinding = createMockPropertyBinding;
210
201
  var MockPropertyBinding = createMockPropertyBinding;
202
+
211
203
  /**
212
204
  * Utility type to mock a sap.ui.model.CompositeBinding
213
205
  */
214
-
215
206
  _exports.MockPropertyBinding = MockPropertyBinding;
216
-
217
207
  /**
218
208
  * Factory function to create a new MockCompositeBinding.
219
209
  *
@@ -222,8 +212,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
222
212
  */
223
213
  function createMockCompositeBinding(aBindings) {
224
214
  var mocked = mock(CompositeBinding);
225
- mocked._aBindings = aBindings; // Default behavior
215
+ mocked._aBindings = aBindings;
226
216
 
217
+ // Default behavior
227
218
  mocked.mock.isA.mockImplementation(function (sClassName) {
228
219
  return sClassName === "sap.ui.model.CompositeBinding";
229
220
  });
@@ -240,16 +231,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
240
231
  /**
241
232
  * For compatibility reasons, we keep a new operator. Use the factory function createMockCompositeBinding instead.
242
233
  */
243
-
244
-
245
234
  _exports.createMockCompositeBinding = createMockCompositeBinding;
246
235
  var MockCompositeBinding = createMockCompositeBinding;
236
+
247
237
  /**
248
238
  * Utility type to mock a sap.ui.model.odata.v4.ODataContextBinding
249
239
  */
250
-
251
240
  _exports.MockCompositeBinding = MockCompositeBinding;
252
-
253
241
  /**
254
242
  * Factory function to create a new MockContextBinding.
255
243
  *
@@ -260,17 +248,17 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
260
248
  function createMockContextBinding(oContext, oMockModel) {
261
249
  var mocked = mock(ODataContextBinding);
262
250
  mocked.mockModel = oMockModel;
263
- mocked.oMockContext = createMockContext(oContext || {}, mocked); // Utility API
251
+ mocked.oMockContext = createMockContext(oContext || {}, mocked);
264
252
 
253
+ // Utility API
265
254
  mocked.getInternalMockContext = function () {
266
255
  return mocked.oMockContext;
267
256
  };
268
-
269
257
  mocked.setModel = function (oModel) {
270
258
  mocked.mockModel = oModel;
271
- }; // Default behavior
272
-
259
+ };
273
260
 
261
+ // Default behavior
274
262
  mocked.mock.isA.mockImplementation(function (sClassName) {
275
263
  return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
276
264
  });
@@ -286,16 +274,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
286
274
  /**
287
275
  * For compatibility reasons, we keep a new operator. Use the factory function createMockContextBinding instead.
288
276
  */
289
-
290
-
291
277
  _exports.createMockContextBinding = createMockContextBinding;
292
278
  var MockContextBinding = createMockContextBinding;
279
+
293
280
  /**
294
281
  * Utility type to mock a sap.ui.model.odata.v4.ODataMetaModel
295
282
  */
296
-
297
283
  _exports.MockContextBinding = MockContextBinding;
298
-
299
284
  /**
300
285
  * Factory function to create a new MockMetaModel.
301
286
  *
@@ -304,8 +289,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
304
289
  */
305
290
  function createMockMetaModel(oMetaData) {
306
291
  var mocked = mock(ODataMetaModel);
307
- mocked.oMetaContext = createMockContext(oMetaData || {}); // Default behavior
292
+ mocked.oMetaContext = createMockContext(oMetaData || {});
308
293
 
294
+ // Default behavior
309
295
  mocked.mock.getMetaContext.mockImplementation(function (sPath) {
310
296
  return createMockContext({
311
297
  $path: sPath
@@ -328,16 +314,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
328
314
  /**
329
315
  * For compatibility reasons, we keep a new operator. Use the factory function createMockMetaModel instead.
330
316
  */
331
-
332
-
333
317
  _exports.createMockMetaModel = createMockMetaModel;
334
318
  var MockMetaModel = createMockMetaModel;
319
+
335
320
  /**
336
321
  * Utility type to mock a sap.ui.model.odata.v4.ODataModel
337
322
  */
338
-
339
323
  _exports.MockMetaModel = MockMetaModel;
340
-
341
324
  /**
342
325
  * Factory function to create a new MockModel.
343
326
  *
@@ -349,21 +332,19 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
349
332
  var mocked = mock(ODataModel);
350
333
  mocked.mockListBinding = oMockListBinding;
351
334
  mocked.mockContextBinding = oMockContextBinding;
352
-
353
335
  if (oMockListBinding) {
354
336
  oMockListBinding.setModel(mocked);
355
337
  }
356
-
357
338
  if (oMockContextBinding) {
358
339
  oMockContextBinding.setModel(mocked);
359
- } // Utility API
360
-
340
+ }
361
341
 
342
+ // Utility API
362
343
  mocked.setMetaModel = function (oMetaModel) {
363
344
  mocked.oMetaModel = oMetaModel;
364
- }; // Default behavior
365
-
345
+ };
366
346
 
347
+ // Default behavior
367
348
  mocked.mock.bindList.mockImplementation(function () {
368
349
  return mocked.mockListBinding;
369
350
  });
@@ -378,8 +359,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
378
359
  /**
379
360
  * For compatibility reasons, we keep a new operator. Use the factory function createMockModel instead.
380
361
  */
381
-
382
-
383
362
  _exports.createMockModel = createMockModel;
384
363
  var MockModel = createMockModel;
385
364
  /**
@@ -388,9 +367,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
388
367
  * @param oMockListBinding A list binding that will be returned when calling bindList.
389
368
  * @returns A new MockModel
390
369
  */
391
-
392
370
  _exports.MockModel = MockModel;
393
-
394
371
  function createMockModelFromListBinding(oMockListBinding) {
395
372
  return createMockModel(oMockListBinding);
396
373
  }
@@ -400,28 +377,24 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
400
377
  * @param oMockContextBinding A context binding that will be returned when calling bindContext.
401
378
  * @returns A new MockModel
402
379
  */
403
-
404
-
405
380
  _exports.createMockModelFromListBinding = createMockModelFromListBinding;
406
-
407
381
  function createMockModelFromContextBinding(oMockContextBinding) {
408
382
  return createMockModel(undefined, oMockContextBinding);
409
383
  }
384
+
410
385
  /**
411
386
  * Utility type to mock a sap.ui.core.mvc.View
412
387
  */
413
-
414
-
415
388
  _exports.createMockModelFromContextBinding = createMockModelFromContextBinding;
416
-
417
389
  /**
418
390
  * Factory function to create a new MockView.
419
391
  *
420
392
  * @returns A new MockView
421
393
  */
422
394
  function createMockView() {
423
- var mocked = mock(View); // Default behavior
395
+ var mocked = mock(View);
424
396
 
397
+ // Default behavior
425
398
  mocked.mock.isA.mockImplementation(function (sClassName) {
426
399
  return sClassName === "sap.ui.core.mvc.View";
427
400
  });
@@ -430,16 +403,13 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
430
403
  /**
431
404
  * For compatibility reasons, we keep a new operator. Use the factory function createMockView instead.
432
405
  */
433
-
434
-
435
406
  _exports.createMockView = createMockView;
436
407
  var MockView = createMockView;
408
+
437
409
  /**
438
410
  * Utility type to mock a sap.fe.core.PageController
439
411
  */
440
-
441
412
  _exports.MockView = MockView;
442
-
443
413
  /**
444
414
  * Factory function to create a new MockController.
445
415
  *
@@ -451,8 +421,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
451
421
  mocked._editFlow = mock(InternalEditFlow);
452
422
  mocked._sideEffects = mock(SideEffects);
453
423
  mocked.editFlow = mock(EditFlow);
454
- mocked.share = mock(Share); // Default Behavior
424
+ mocked.share = mock(Share);
455
425
 
426
+ // Default Behavior
456
427
  mocked.mock.getView.mockReturnValue(createMockView());
457
428
  mocked.mock.isA.mockReturnValue(false);
458
429
  return mocked;
@@ -460,12 +431,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
460
431
  /**
461
432
  * For compatibility reasons, we keep a new operator. Use the factory function mockController instead.
462
433
  */
463
-
464
-
465
434
  _exports.createMockController = createMockController;
466
435
  var MockController = createMockController;
467
436
  _exports.MockController = MockController;
468
-
469
437
  /**
470
438
  * Generate model, view and controller mocks that refer to each other.
471
439
  *
@@ -485,8 +453,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
485
453
  controller: controller
486
454
  };
487
455
  }
488
-
489
456
  _exports.mockMVC = mockMVC;
490
457
  return _exports;
491
458
  }, false);
492
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsIk1vY2tFdmVudCIsImNyZWF0ZU1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0RGF0YSIsIm9Nb2NrTW9kZWwiLCJPRGF0YUxpc3RCaW5kaW5nIiwiX2FNb2NrQ29udGV4dHMiLCJjb250ZXh0RGF0YSIsIl9tb2NrTW9kZWwiLCJzZXRNb2RlbCIsIm1vZGVsIiwicmVxdWVzdENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm1vY2tSZXR1cm5WYWx1ZSIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX2VkaXRGbG93IiwiSW50ZXJuYWxFZGl0RmxvdyIsIl9zaWRlRWZmZWN0cyIsIlNpZGVFZmZlY3RzIiwiZWRpdEZsb3ciLCJFZGl0RmxvdyIsInNoYXJlIiwiU2hhcmUiLCJnZXRWaWV3IiwiTW9ja0NvbnRyb2xsZXIiLCJtb2NrTVZDIiwiZXhpc3RpbmciLCJ2aWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXaXRoTW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgeyBtb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEVkaXRGbG93XCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFxuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udGV4dCA9IFdpdGhNb2NrPENvbnRleHQ+ICYge1xuXHRfaXNLZXB0QWxpdmU6IGJvb2xlYW47XG5cdF9jb250ZXh0RGF0YTogYW55O1xuXHRfb0JpbmRpbmc6IGFueTtcblx0X2lzSW5hY3RpdmU6IGJvb2xlYW47XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHREYXRhIEEgbWFwIG9mIHRoZSBkaWZmZXJlbnQgcHJvcGVydGllcyBvZiB0aGUgY29udGV4dC4gVGhlIHZhbHVlIGZvciB0aGUga2V5ICckcGF0aCcgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgJ2dldFBhdGgnIG1ldGhvZFxuICogQHBhcmFtIG9CaW5kaW5nIFRoZSBiaW5kaW5nIG9mIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gaXNJbmFjdGl2ZSBJcyB0aGUgY29udGV4dCBpbmlhY3RpdmUgb3Igbm90XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHREYXRhPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pOiBNb2NrQ29udGV4dCB7XG5cdC8vIFVnbHkgd29ya2Fyb3VuZCB0byBnZXQgYSBwcm9wZXIgbW9jayBwYmplY3QsIGFzIENvbnRleHQgaXNuJ3QgcHJvcGVybHkgZXhwb3J0ZWQgZnJvbSBVSTVcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPYmplY3QuZ2V0UHJvdG90eXBlT2YoKENvbnRleHQgYXMgYW55KS5jcmVhdGVOZXdDb250ZXh0KG51bGwsIG51bGwsIFwiL2VcIikpKSBhcyBNb2NrQ29udGV4dDtcblx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGZhbHNlO1xuXHRtb2NrZWQuX2NvbnRleHREYXRhID0gb0NvbnRleHREYXRhIHx8IHt9O1xuXHRtb2NrZWQuX29CaW5kaW5nID0gb0JpbmRpbmc7XG5cdG1vY2tlZC5faXNJbmFjdGl2ZSA9ICEhaXNJbmFjdGl2ZTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQcm9wZXJ0eS5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fY29udGV4dERhdGFba2V5XTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnJlcXVlc3RQcm9wZXJ0eS5tb2NrSW1wbGVtZW50YXRpb24oKGtleU9yS2V5czogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShrZXlPcktleXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGtleU9yS2V5cy5tYXAoKGtleSkgPT4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja2VkLl9jb250ZXh0RGF0YVtrZXlPcktleXNdKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnJlcXVlc3RPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja2VkLl9jb250ZXh0RGF0YVtrZXldKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnNldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRtb2NrZWQuX2NvbnRleHREYXRhW2tleV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblxuXHRtb2NrZWQubW9jay5nZXRPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uKChwYXRoOiBzdHJpbmcpID0+IHtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IG1vY2tlZC5fY29udGV4dERhdGFbcGF0aF0gOiBtb2NrZWQuX2NvbnRleHREYXRhO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgcGF0aCAmJiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRyZXN1bHQgPSBwYXJ0cy5yZWR1Y2UoKHN1bSwgcGFydDogYW55KSA9PiB7XG5cdFx0XHRcdHN1bSA9IHBhcnQgPyBzdW1bcGFydF0gOiBzdW07XG5cdFx0XHRcdHJldHVybiBzdW07XG5cdFx0XHR9LCBtb2NrZWQuX2NvbnRleHREYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblxuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX2NvbnRleHREYXRhW1wiJHBhdGhcIl0pO1xuXHRtb2NrZWQubW9jay5nZXRCaW5kaW5nLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX29CaW5kaW5nKTtcblx0bW9ja2VkLm1vY2suZ2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmc/LmdldE1vZGVsKCkpO1xuXHRtb2NrZWQubW9jay5zZXRLZWVwQWxpdmUubW9ja0ltcGxlbWVudGF0aW9uKChib29sOiBib29sZWFuLCBfZm5PbkJlZm9yZURlc3Ryb3k/OiBhbnksIF9iUmVxdWVzdE1lc3NhZ2VzPzogYm9vbGVhbikgPT4ge1xuXHRcdG1vY2tlZC5faXNLZXB0QWxpdmUgPSBib29sO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suaXNLZWVwQWxpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNLZXB0QWxpdmUpO1xuXHRtb2NrZWQubW9jay5pc0luYWN0aXZlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX2lzSW5hY3RpdmUpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRleHQ6IG5ldyAob1ZhbHVlcz86IGFueSwgb0JpbmRpbmc/OiBhbnksIGlzSW5hY3RpdmU/OiBib29sZWFuKSA9PiBNb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5iYXNlLkV2ZW50XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tFdmVudCA9IFdpdGhNb2NrPEV2ZW50PiAmIHtcblx0X3BhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tFdmVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBldmVudFxuICogQHJldHVybnMgQSBuZXcgTW9ja0V2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrRXZlbnQocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IE1vY2tFdmVudCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soRXZlbnQpIGFzIE1vY2tFdmVudDtcblx0bW9ja2VkLl9wYXJhbXMgPSBwYXJhbXMgfHwge307XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5nZXRQYXJhbWV0ZXIubW9ja0ltcGxlbWVudGF0aW9uKChuYW1lKSA9PiBtb2NrZWQuX3BhcmFtc1tuYW1lXSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0V2ZW50OiBuZXcgKHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IE1vY2tFdmVudCA9IGNyZWF0ZU1vY2tFdmVudCBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1xuICovXG5leHBvcnQgdHlwZSBNb2NrTGlzdEJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YUxpc3RCaW5kaW5nPiAmIHtcblx0X2FNb2NrQ29udGV4dHM6IE1vY2tDb250ZXh0W107XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG1vZGVsOiBNb2NrTW9kZWwpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTGlzdEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFDb250ZXh0RGF0YSBBbiBhcnJheSBvZiBvYmplY3RzIGhvbGRpbmcgdGhlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZXh0cyByZWZlcmVuY2VkIGJ5IHRoZSBMaXN0QmluZGluZ1xuICogQHBhcmFtIG9Nb2NrTW9kZWwgVGhlIG1vZGVsIG9mIHRoZSBMaXN0QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja0xpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcoYUNvbnRleHREYXRhPzogYW55W10sIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpOiBNb2NrTGlzdEJpbmRpbmcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTGlzdEJpbmRpbmcpIGFzIE1vY2tMaXN0QmluZGluZztcblx0YUNvbnRleHREYXRhID0gYUNvbnRleHREYXRhIHx8IFtdO1xuXHRtb2NrZWQuX2FNb2NrQ29udGV4dHMgPSBhQ29udGV4dERhdGEubWFwKChjb250ZXh0RGF0YSkgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dChjb250ZXh0RGF0YSwgbW9ja2VkKTtcblx0fSk7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblxuXHQvLyBVdGlsaXR5IEFQSVxuXHRtb2NrZWQuc2V0TW9kZWwgPSAobW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5fbW9ja01vZGVsID0gbW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2FNb2NrQ29udGV4dHMpO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Q3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldEFsbEN1cnJlbnRDb250ZXh0cy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FNb2NrQ29udGV4dHM7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFVwZGF0ZUdyb3VwSWQubW9ja1JldHVyblZhbHVlKFwiYXV0b1wiKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0xpc3RCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTGlzdEJpbmRpbmc6IG5ldyAoYUNvbnRleHRzPzogYW55W10sIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja0xpc3RCaW5kaW5nID0gY3JlYXRlTW9ja0xpc3RCaW5kaW5nIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YVByb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgdHlwZSBNb2NrUHJvcGVydHlCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFQcm9wZXJ0eUJpbmRpbmc+ICYge1xuXHRfdmFsdWU/OiBhbnk7XG5cdF9wYXRoPzogc3RyaW5nO1xuXHRfbW9ja01vZGVsPzogTW9ja01vZGVsO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHJldHVybmQgYnkgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHBhcmFtIG9Nb2NrTW9kZWwgVGhlIG1vZGVsIG9mIHRoZSBQcm9wZXJ0eUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tQcm9wZXJ0eUJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcodmFsdWU6IGFueSwgcGF0aD86IHN0cmluZywgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tQcm9wZXJ0eUJpbmRpbmcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhUHJvcGVydHlCaW5kaW5nKSBhcyBNb2NrUHJvcGVydHlCaW5kaW5nO1xuXHRtb2NrZWQuX21vY2tNb2RlbCA9IG9Nb2NrTW9kZWw7XG5cdG1vY2tlZC5fdmFsdWUgPSB2YWx1ZTtcblx0bW9ja2VkLl9wYXRoID0gcGF0aDtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9tb2NrTW9kZWw7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX3ZhbHVlO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0UGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX3BhdGg7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrUHJvcGVydHlCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrUHJvcGVydHlCaW5kaW5nOiBuZXcgKHZhbHVlOiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBjcmVhdGVNb2NrUHJvcGVydHlCaW5kaW5nIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb21wb3NpdGVCaW5kaW5nID0gV2l0aE1vY2s8Q29tcG9zaXRlQmluZGluZz4gJiB7XG5cdF9hQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXTtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBhQmluZGluZ3MgVGhlIGJpbmRpbmdzIG9mIHRoZSBDb21wb3NpdGVCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29tcG9zaXRlQmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pOiBNb2NrQ29tcG9zaXRlQmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soQ29tcG9zaXRlQmluZGluZykgYXMgTW9ja0NvbXBvc2l0ZUJpbmRpbmc7XG5cdG1vY2tlZC5fYUJpbmRpbmdzID0gYUJpbmRpbmdzO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmdzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYUJpbmRpbmdzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VmFsdWUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3MubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLmdldFZhbHVlKCkpO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb21wb3NpdGVCaW5kaW5nOiBuZXcgKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKSA9PiBNb2NrQ29tcG9zaXRlQmluZGluZyA9IGNyZWF0ZU1vY2tDb21wb3NpdGVCaW5kaW5nIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250ZXh0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhQ29udGV4dEJpbmRpbmc+ICYge1xuXHRvTW9ja0NvbnRleHQ6IE1vY2tDb250ZXh0O1xuXHRpc0tlcHRBbGl2ZTogYm9vbGVhbjtcblx0bW9ja01vZGVsPzogTW9ja01vZGVsO1xuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBhY2Nlc3MgdGhlIGludGVybmFsIE1vY2tDb250ZXh0IG9mIHRoZSBDb250ZXh0QmluZGluZ1xuXHQgKi9cblx0Z2V0SW50ZXJuYWxNb2NrQ29udGV4dDogKCkgPT4gTW9ja0NvbnRleHQ7XG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBzZXQgdGhlIG1vZGVsIG9mIHRoZSBDb250ZXh0QmluZGluZ1xuXHQgKi9cblx0c2V0TW9kZWw6IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250ZXh0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyhvQ29udGV4dD86IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tDb250ZXh0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFDb250ZXh0QmluZGluZykgYXMgTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRtb2NrZWQubW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLm9Nb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCBtb2NrZWQpO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5nZXRJbnRlcm5hbE1vY2tDb250ZXh0ID0gKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQub01vY2tDb250ZXh0O1xuXHR9O1xuXHRtb2NrZWQuc2V0TW9kZWwgPSAob01vZGVsOiBNb2NrTW9kZWwpID0+IHtcblx0XHRtb2NrZWQubW9ja01vZGVsID0gb01vZGVsO1xuXHR9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldEJvdW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQub01vY2tDb250ZXh0O1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm1vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmV4ZWN1dGUubW9ja1Jlc29sdmVkVmFsdWUodHJ1ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRleHRCaW5kaW5nOiBuZXcgKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrQ29udGV4dEJpbmRpbmcgPSBjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tNZXRhTW9kZWwgPSBXaXRoTW9jazxPRGF0YU1ldGFNb2RlbD4gJiB7XG5cdG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTWV0YU1vZGVsLlxuICpcbiAqIEBwYXJhbSBvTWV0YURhdGEgQSBtYXAgb2YgdGhlIGRpZmZlcmVudCBtZXRhZGF0YSBwcm9wZXJ0aWVzIG9mIHRoZSBNZXRhTW9kZWwgKHBhdGggLT4gdmFsdWUpLlxuICogQHJldHVybnMgQSBuZXcgTW9ja01ldGFNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01ldGFNb2RlbChvTWV0YURhdGE/OiBhbnkpOiBNb2NrTWV0YU1vZGVsIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YU1ldGFNb2RlbCkgYXMgTW9ja01ldGFNb2RlbDtcblx0bW9ja2VkLm9NZXRhQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KG9NZXRhRGF0YSB8fCB7fSk7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5nZXRNZXRhQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suY3JlYXRlQmluZGluZ0NvbnRleHQubW9ja0ltcGxlbWVudGF0aW9uKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YVBhdGgubW9ja0ltcGxlbWVudGF0aW9uKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgbWV0YW1vZGVsID0gbmV3IE9EYXRhTWV0YU1vZGVsKCk7XG5cdFx0cmV0dXJuIHNQYXRoID8gbWV0YW1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKSA6IHNQYXRoO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01ldGFNb2RlbCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja01ldGFNb2RlbDogbmV3IChvTWV0YURhdGE/OiBhbnkpID0+IE1vY2tNZXRhTW9kZWwgPSBjcmVhdGVNb2NrTWV0YU1vZGVsIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTW9kZWw+ICYge1xuXHRvTWV0YU1vZGVsPzogTW9ja01ldGFNb2RlbDtcblx0bW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nO1xuXHRtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmc7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbWV0YW1vZGVsIG9mIHRoZSBNb2NrTW9kZWxcblx0ICovXG5cdHNldE1ldGFNb2RlbDogKG9NZXRhTW9kZWw6IE1vY2tNZXRhTW9kZWwpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTW9kZWwuXG4gKlxuICogQHBhcmFtIG9Nb2NrTGlzdEJpbmRpbmcgQSBsaXN0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kTGlzdC5cbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbChvTW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBvTW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YU1vZGVsKSBhcyBNb2NrTW9kZWw7XG5cdG1vY2tlZC5tb2NrTGlzdEJpbmRpbmcgPSBvTW9ja0xpc3RCaW5kaW5nO1xuXHRtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nID0gb01vY2tDb250ZXh0QmluZGluZztcblx0aWYgKG9Nb2NrTGlzdEJpbmRpbmcpIHtcblx0XHRvTW9ja0xpc3RCaW5kaW5nLnNldE1vZGVsKG1vY2tlZCk7XG5cdH1cblx0aWYgKG9Nb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRvTW9ja0NvbnRleHRCaW5kaW5nLnNldE1vZGVsKG1vY2tlZCk7XG5cdH1cblxuXHQvLyBVdGlsaXR5IEFQSVxuXHRtb2NrZWQuc2V0TWV0YU1vZGVsID0gKG9NZXRhTW9kZWw6IE1vY2tNZXRhTW9kZWwpID0+IHtcblx0XHRtb2NrZWQub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5iaW5kTGlzdC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0xpc3RCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suYmluZENvbnRleHQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm1vY2tDb250ZXh0QmluZGluZztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1ldGFNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQub01ldGFNb2RlbDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja01vZGVsOiBuZXcgKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpID0+IE1vY2tNb2RlbCA9XG5cdGNyZWF0ZU1vY2tNb2RlbCBhcyBhbnk7XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbCB1c2VkIHdpdGggYSBsaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmcob01vY2tMaXN0QmluZGluZzogTW9ja0xpc3RCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0cmV0dXJuIGNyZWF0ZU1vY2tNb2RlbChvTW9ja0xpc3RCaW5kaW5nKTtcbn1cbi8qKlxuICogIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbCB1c2VkIHdpdGggYSBjb250ZXh0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gb01vY2tDb250ZXh0QmluZGluZyBBIGNvbnRleHQgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRDb250ZXh0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmcob01vY2tDb250ZXh0QmluZGluZzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0cmV0dXJuIGNyZWF0ZU1vY2tNb2RlbCh1bmRlZmluZWQsIG9Nb2NrQ29udGV4dEJpbmRpbmcpO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmNvcmUubXZjLlZpZXdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja1ZpZXcgPSBXaXRoTW9jazxWaWV3Pjtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja1ZpZXcuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja1ZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3KCk6IE1vY2tWaWV3IHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhWaWV3KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrVmlldyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja1ZpZXc6IG5ldyAoKSA9PiBNb2NrVmlldyA9IGNyZWF0ZU1vY2tWaWV3IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC5mZS5jb3JlLlBhZ2VDb250cm9sbGVyXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250cm9sbGVyID0gV2l0aE1vY2s8Q29udHJvbGxlcj4gJiB7XG5cdF9yb3V0aW5nOiBXaXRoTW9jazxJbnRlcm5hbFJvdXRpbmc+O1xuXHRfZWRpdEZsb3c6IFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+O1xuXHRfc2lkZUVmZmVjdHM6IFdpdGhNb2NrPFNpZGVFZmZlY3RzPjtcblx0ZWRpdEZsb3c6IFdpdGhNb2NrPEVkaXRGbG93Pjtcblx0c2hhcmU6IFdpdGhNb2NrPFNoYXJlPjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250cm9sbGVyLlxuICpcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udHJvbGxlcigpOiBNb2NrQ29udHJvbGxlciB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soQ29udHJvbGxlcikgYXMgTW9ja0NvbnRyb2xsZXI7XG5cdG1vY2tlZC5fcm91dGluZyA9IG1vY2soSW50ZXJuYWxSb3V0aW5nKTtcblx0bW9ja2VkLl9lZGl0RmxvdyA9IG1vY2soSW50ZXJuYWxFZGl0Rmxvdyk7XG5cdG1vY2tlZC5fc2lkZUVmZmVjdHMgPSBtb2NrKFNpZGVFZmZlY3RzKTtcblx0bW9ja2VkLmVkaXRGbG93ID0gbW9jayhFZGl0Rmxvdyk7XG5cdG1vY2tlZC5zaGFyZSA9IG1vY2soU2hhcmUpO1xuXG5cdC8vIERlZmF1bHQgQmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUoY3JlYXRlTW9ja1ZpZXcoKSk7XG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBtb2NrQ29udHJvbGxlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRyb2xsZXI6IG5ldyAoKSA9PiBNb2NrQ29udHJvbGxlciA9IGNyZWF0ZU1vY2tDb250cm9sbGVyIGFzIGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBNVkNNb2NrIHtcblx0bW9kZWw6IE1vY2tNb2RlbDtcblx0dmlldzogTW9ja1ZpZXc7XG5cdGNvbnRyb2xsZXI6IE1vY2tDb250cm9sbGVyO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgY3JlYXRlTW9ja01vZGVsKCk7XG5cdGNvbnN0IHZpZXcgPSBleGlzdGluZz8udmlldyB8fCBjcmVhdGVNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3Lm1vY2suZ2V0Q29udHJvbGxlci5tb2NrUmV0dXJuVmFsdWUoY29udHJvbGxlcik7XG5cdHZpZXcubW9jay5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7OztFQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0EsaUJBQVQsQ0FBMkJDLFlBQTNCLEVBQStDQyxRQUEvQyxFQUErREMsVUFBL0QsRUFBa0c7SUFDeEc7SUFDQSxJQUFNQyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxjQUFQLENBQXVCQyxPQUFELENBQWlCQyxnQkFBakIsQ0FBa0MsSUFBbEMsRUFBd0MsSUFBeEMsRUFBOEMsSUFBOUMsQ0FBdEIsQ0FBRCxDQUFuQjtJQUNBTCxNQUFNLENBQUNNLFlBQVAsR0FBc0IsS0FBdEI7SUFDQU4sTUFBTSxDQUFDTyxZQUFQLEdBQXNCVixZQUFZLElBQUksRUFBdEM7SUFDQUcsTUFBTSxDQUFDUSxTQUFQLEdBQW1CVixRQUFuQjtJQUNBRSxNQUFNLENBQUNTLFdBQVAsR0FBcUIsQ0FBQyxDQUFDVixVQUF2QixDQU53RyxDQVF4Rzs7SUFDQUMsTUFBTSxDQUFDQyxJQUFQLENBQVlTLEdBQVosQ0FBZ0JDLGtCQUFoQixDQUFtQyxVQUFDQyxVQUFELEVBQXdCO01BQzFELE9BQU9BLFVBQVUsS0FBSywrQkFBdEI7SUFDQSxDQUZEO0lBR0FaLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWSxXQUFaLENBQXdCRixrQkFBeEIsQ0FBMkMsVUFBQ0csR0FBRCxFQUFpQjtNQUMzRCxPQUFPZCxNQUFNLENBQUNPLFlBQVAsQ0FBb0JPLEdBQXBCLENBQVA7SUFDQSxDQUZEO0lBR0FkLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZYyxlQUFaLENBQTRCSixrQkFBNUIs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
459
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsIk1vY2tFdmVudCIsImNyZWF0ZU1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0RGF0YSIsIm9Nb2NrTW9kZWwiLCJPRGF0YUxpc3RCaW5kaW5nIiwiX2FNb2NrQ29udGV4dHMiLCJjb250ZXh0RGF0YSIsIl9tb2NrTW9kZWwiLCJzZXRNb2RlbCIsIm1vZGVsIiwicmVxdWVzdENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJnZXRVcGRhdGVHcm91cElkIiwibW9ja1JldHVyblZhbHVlIiwiTW9ja0xpc3RCaW5kaW5nIiwiY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyIsIk9EYXRhUHJvcGVydHlCaW5kaW5nIiwiX3ZhbHVlIiwiX3BhdGgiLCJnZXRWYWx1ZSIsIk1vY2tQcm9wZXJ0eUJpbmRpbmciLCJjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsIkNvbXBvc2l0ZUJpbmRpbmciLCJfYUJpbmRpbmdzIiwiZ2V0QmluZGluZ3MiLCJiaW5kaW5nIiwiTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmciLCJvQ29udGV4dCIsIk9EYXRhQ29udGV4dEJpbmRpbmciLCJtb2NrTW9kZWwiLCJvTW9ja0NvbnRleHQiLCJnZXRJbnRlcm5hbE1vY2tDb250ZXh0Iiwib01vZGVsIiwiZ2V0Qm91bmRDb250ZXh0IiwiZXhlY3V0ZSIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiTW9ja0NvbnRleHRCaW5kaW5nIiwiY3JlYXRlTW9ja01ldGFNb2RlbCIsIm9NZXRhRGF0YSIsIk9EYXRhTWV0YU1vZGVsIiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aCIsIiRwYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1ldGFtb2RlbCIsIk1vY2tNZXRhTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWwiLCJvTW9ja0xpc3RCaW5kaW5nIiwib01vY2tDb250ZXh0QmluZGluZyIsIk9EYXRhTW9kZWwiLCJtb2NrTGlzdEJpbmRpbmciLCJtb2NrQ29udGV4dEJpbmRpbmciLCJzZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiYmluZExpc3QiLCJiaW5kQ29udGV4dCIsImdldE1ldGFNb2RlbCIsIk1vY2tNb2RlbCIsImNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyIsImNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyIsInVuZGVmaW5lZCIsImNyZWF0ZU1vY2tWaWV3IiwiVmlldyIsIk1vY2tWaWV3IiwiY3JlYXRlTW9ja0NvbnRyb2xsZXIiLCJDb250cm9sbGVyIiwiX3JvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmciLCJfZWRpdEZsb3ciLCJJbnRlcm5hbEVkaXRGbG93IiwiX3NpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHMiLCJlZGl0RmxvdyIsIkVkaXRGbG93Iiwic2hhcmUiLCJTaGFyZSIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUk1TW9ja0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCB7IG1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250ZXh0ID0gV2l0aE1vY2s8Q29udGV4dD4gJiB7XG5cdF9pc0tlcHRBbGl2ZTogYm9vbGVhbjtcblx0X2NvbnRleHREYXRhOiBhbnk7XG5cdF9vQmluZGluZzogYW55O1xuXHRfaXNJbmFjdGl2ZTogYm9vbGVhbjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dERhdGEgQSBtYXAgb2YgdGhlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZXh0LiBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgJyRwYXRoJyB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSAnZ2V0UGF0aCcgbWV0aG9kXG4gKiBAcGFyYW0gb0JpbmRpbmcgVGhlIGJpbmRpbmcgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBpc0luYWN0aXZlIElzIHRoZSBjb250ZXh0IGluaWFjdGl2ZSBvciBub3RcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dERhdGE/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbik6IE1vY2tDb250ZXh0IHtcblx0Ly8gVWdseSB3b3JrYXJvdW5kIHRvIGdldCBhIHByb3BlciBtb2NrIHBiamVjdCwgYXMgQ29udGV4dCBpc24ndCBwcm9wZXJseSBleHBvcnRlZCBmcm9tIFVJNVxuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9iamVjdC5nZXRQcm90b3R5cGVPZigoQ29udGV4dCBhcyBhbnkpLmNyZWF0ZU5ld0NvbnRleHQobnVsbCwgbnVsbCwgXCIvZVwiKSkpIGFzIE1vY2tDb250ZXh0O1xuXHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gZmFsc2U7XG5cdG1vY2tlZC5fY29udGV4dERhdGEgPSBvQ29udGV4dERhdGEgfHwge307XG5cdG1vY2tlZC5fb0JpbmRpbmcgPSBvQmluZGluZztcblx0bW9ja2VkLl9pc0luYWN0aXZlID0gISFpc0luYWN0aXZlO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5T3JLZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5T3JLZXlzLm1hcCgoa2V5KSA9PiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleU9yS2V5c10pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suc2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdG1vY2tlZC5fY29udGV4dERhdGFba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gbW9ja2VkLl9jb250ZXh0RGF0YVtwYXRoXSA6IG1vY2tlZC5fY29udGV4dERhdGE7XG5cblx0XHRpZiAoIXJlc3VsdCAmJiBwYXRoICYmIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdHJlc3VsdCA9IHBhcnRzLnJlZHVjZSgoc3VtLCBwYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0c3VtID0gcGFydCA/IHN1bVtwYXJ0XSA6IHN1bTtcblx0XHRcdFx0cmV0dXJuIHN1bTtcblx0XHRcdH0sIG1vY2tlZC5fY29udGV4dERhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fY29udGV4dERhdGFbXCIkcGF0aFwiXSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmcpO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZz8uZ2V0TW9kZWwoKSk7XG5cdG1vY2tlZC5tb2NrLnNldEtlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0tlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0tlcHRBbGl2ZSk7XG5cdG1vY2tlZC5tb2NrLmlzSW5hY3RpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNJbmFjdGl2ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dDogbmV3IChvVmFsdWVzPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pID0+IE1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmJhc2UuRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0V2ZW50ID0gV2l0aE1vY2s8RXZlbnQ+ICYge1xuXHRfcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0V2ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogTW9ja0V2ZW50IHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhFdmVudCkgYXMgTW9ja0V2ZW50O1xuXHRtb2NrZWQuX3BhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFBhcmFtZXRlci5tb2NrSW1wbGVtZW50YXRpb24oKG5hbWUpID0+IG1vY2tlZC5fcGFyYW1zW25hbWVdKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBuZXcgT0RhdGFNZXRhTW9kZWwoKTtcblx0XHRyZXR1cm4gc1BhdGggPyBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpIDogc1BhdGg7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTWV0YU1vZGVsOiBuZXcgKG9NZXRhRGF0YT86IGFueSkgPT4gTW9ja01ldGFNb2RlbCA9IGNyZWF0ZU1vY2tNZXRhTW9kZWwgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01vZGVsID0gV2l0aE1vY2s8T0RhdGFNb2RlbD4gJiB7XG5cdG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZztcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtZXRhbW9kZWwgb2YgdGhlIE1vY2tNb2RlbFxuXHQgKi9cblx0c2V0TWV0YU1vZGVsOiAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTW9kZWwpIGFzIE1vY2tNb2RlbDtcblx0bW9ja2VkLm1vY2tMaXN0QmluZGluZyA9IG9Nb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmcgPSBvTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRpZiAob01vY2tMaXN0QmluZGluZykge1xuXHRcdG9Nb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXHRpZiAob01vY2tDb250ZXh0QmluZGluZykge1xuXHRcdG9Nb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNZXRhTW9kZWwgPSAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmJpbmRMaXN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5iaW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YU1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTW9kZWw6IG5ldyAob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykgPT4gTW9ja01vZGVsID1cblx0Y3JlYXRlTW9ja01vZGVsIGFzIGFueTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGxpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyhvTW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmcpO1xufVxuLyoqXG4gKiAgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGNvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyhvTW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKHVuZGVmaW5lZCwgb01vY2tDb250ZXh0QmluZGluZyk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuY29yZS5tdmMuVmlld1xuICovXG5leHBvcnQgdHlwZSBNb2NrVmlldyA9IFdpdGhNb2NrPFZpZXc+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcoKTogTW9ja1ZpZXcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFZpZXcpO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrVmlldzogbmV3ICgpID0+IE1vY2tWaWV3ID0gY3JlYXRlTW9ja1ZpZXcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSBXaXRoTW9jazxDb250cm9sbGVyPiAmIHtcblx0X3JvdXRpbmc6IFdpdGhNb2NrPEludGVybmFsUm91dGluZz47XG5cdF9lZGl0RmxvdzogV2l0aE1vY2s8SW50ZXJuYWxFZGl0Rmxvdz47XG5cdF9zaWRlRWZmZWN0czogV2l0aE1vY2s8U2lkZUVmZmVjdHM+O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xuXHRzaGFyZTogV2l0aE1vY2s8U2hhcmU+O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250cm9sbGVyKCk6IE1vY2tDb250cm9sbGVyIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb250cm9sbGVyKSBhcyBNb2NrQ29udHJvbGxlcjtcblx0bW9ja2VkLl9yb3V0aW5nID0gbW9jayhJbnRlcm5hbFJvdXRpbmcpO1xuXHRtb2NrZWQuX2VkaXRGbG93ID0gbW9jayhJbnRlcm5hbEVkaXRGbG93KTtcblx0bW9ja2VkLl9zaWRlRWZmZWN0cyA9IG1vY2soU2lkZUVmZmVjdHMpO1xuXHRtb2NrZWQuZWRpdEZsb3cgPSBtb2NrKEVkaXRGbG93KTtcblx0bW9ja2VkLnNoYXJlID0gbW9jayhTaGFyZSk7XG5cblx0Ly8gRGVmYXVsdCBCZWhhdmlvclxuXHRtb2NrZWQubW9jay5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZShjcmVhdGVNb2NrVmlldygpKTtcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1vY2tDb250cm9sbGVyIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udHJvbGxlcjogbmV3ICgpID0+IE1vY2tDb250cm9sbGVyID0gY3JlYXRlTW9ja0NvbnRyb2xsZXIgYXMgYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG4vKipcbiAqIEdlbmVyYXRlIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIG1vY2tzIHRoYXQgcmVmZXIgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmcgT3B0aW9uYWwgZXhpc3RpbmcgbW9ja2VkIGluc3RhbmNlcyB0aGF0IHNob3VsZCBiZSB1c2VkXG4gKiBAcmV0dXJucyBNb2NrZWQgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrTVZDKGV4aXN0aW5nPzogUGFydGlhbDxNVkNNb2NrPik6IE1WQ01vY2sge1xuXHRjb25zdCBtb2RlbCA9IGV4aXN0aW5nPy5tb2RlbCB8fCBjcmVhdGVNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IGNyZWF0ZU1vY2tWaWV3KCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSBleGlzdGluZz8uY29udHJvbGxlciB8fCBjcmVhdGVNb2NrQ29udHJvbGxlcigpO1xuXG5cdHZpZXcubW9jay5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5tb2NrLmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2RlbCk7XG5cdGNvbnRyb2xsZXIubW9jay5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZSh2aWV3KTtcblxuXHRyZXR1cm4geyBtb2RlbCwgdmlldywgY29udHJvbGxlciB9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLGlCQUFpQixDQUFDQyxZQUFrQixFQUFFQyxRQUFjLEVBQUVDLFVBQW9CLEVBQWU7SUFDeEc7SUFDQSxJQUFNQyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLENBQUVDLE9BQU8sQ0FBU0MsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFnQjtJQUM5R0wsTUFBTSxDQUFDTSxZQUFZLEdBQUcsS0FBSztJQUMzQk4sTUFBTSxDQUFDTyxZQUFZLEdBQUdWLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDeENHLE1BQU0sQ0FBQ1EsU0FBUyxHQUFHVixRQUFRO0lBQzNCRSxNQUFNLENBQUNTLFdBQVcsR0FBRyxDQUFDLENBQUNWLFVBQVU7O0lBRWpDO0lBQ0FDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUyxHQUFHLENBQUNDLGtCQUFrQixDQUFDLFVBQUNDLFVBQWtCLEVBQUs7TUFDMUQsT0FBT0EsVUFBVSxLQUFLLCtCQUErQjtJQUN0RCxDQUFDLENBQUM7SUFDRlosTUFBTSxDQUFDQyxJQUFJLENBQUNZLFdBQVcsQ0FBQ0Ysa0JBQWtCLENBQUMsVUFBQ0csR0FBVyxFQUFLO01BQzNELE9BQU9k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
@@ -163,6 +163,9 @@ export function createMockListBinding(aContextData?: any[], oMockModel?: MockMod
163
163
  mocked.mock.getAllCurrentContexts.mockImplementation(() => {
164
164
  return mocked._aMockContexts;
165
165
  });
166
+ mocked.mock.getContexts.mockImplementation(() => {
167
+ return mocked._aMockContexts;
168
+ });
166
169
  mocked.mock.getModel.mockImplementation(() => {
167
170
  return mocked._mockModel;
168
171
  });
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(
7
8
  [
@@ -135,7 +136,7 @@ sap.ui.define(
135
136
  appName: "SalesOrderCreateFCL",
136
137
  appPath: "/apps/salesorder-CreateFCL/webapp"
137
138
  },
138
- "SalesOrder": {
139
+ SalesOrder: {
139
140
  appName: "SalesOrder",
140
141
  appPath: "/apps/salesorder/webapp"
141
142
  }
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(["sap/fe/test/Utils", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder"], function (Utils, OpaBuilder, FEBuilder) {
7
8
  "use strict";
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(
7
8
  ["sap/fe/test/Utils", "sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder", "sap/m/p13n/BasePanel"],
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(
7
8
  ["./BaseAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder"],
@@ -1,7 +1,8 @@
1
1
  /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
2
+ * !
3
+ SAP UI development toolkit for HTML5 (SAPUI5)
3
4
  (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
+
5
6
  */
6
7
  sap.ui.define(
7
8
  ["./BaseAPI", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder", "sap/ui/core/SortOrder"],