@sapui5/sap.fe.base 1.144.0 → 1.146.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.
@@ -26,7 +26,19 @@ type UI5ControllerMethodDefinition = {
26
26
  };
27
27
  export type NonAbstractClass<T> = Pick<T, keyof T> & (new (...args: unknown[]) => T);
28
28
 
29
- type UI5PropertyMetadata = {
29
+ /**
30
+ * Collection of decorators to support the creation of UI5 classes.
31
+ * @namespace
32
+ * @public
33
+ */
34
+ export const classSupportNamespace = "sap.fe.base.ClassSupport";
35
+
36
+ /**
37
+ * Definition of a UI5 property metadata.
38
+ * @public
39
+ * @ui5-experimental-since 1.145.0
40
+ */
41
+ export type UI5PropertyMetadata = {
30
42
  type: string;
31
43
  bindable?: boolean;
32
44
  required?: boolean;
@@ -40,6 +52,11 @@ type UI5PropertyMetadata = {
40
52
  allowedValues?: string[];
41
53
  visibility?: string;
42
54
  };
55
+ /**
56
+ * Definition of a UI5 aggregation metadata.
57
+ * @public
58
+ * @ui5-experimental-since 1.145.0
59
+ */
43
60
  export type UI5AggregationMetadata = {
44
61
  type: string;
45
62
  altTypes?: string[];
@@ -51,6 +68,11 @@ export type UI5AggregationMetadata = {
51
68
  visibility?: string;
52
69
  forwarding?: object;
53
70
  };
71
+ /**
72
+ * Definition of a UI5 association metadata.
73
+ * @public
74
+ * @ui5-experimental-since 1.145.0
75
+ */
54
76
  export type UI5AssociationMetadata = {
55
77
  type: string;
56
78
  multiple?: boolean;
@@ -114,14 +136,20 @@ type ControlPropertyNames<T> = {
114
136
  [K in keyof T]: T[K] extends Function ? never : K;
115
137
  }[keyof T];
116
138
 
139
+ /**
140
+ * Returns the properties of a control.
141
+ * @public
142
+ * @ui5-experimental-since 1.145.0
143
+ */
144
+ export type PropertiesOf<T, K extends keyof T | undefined = undefined> = Partial<Pick<T, ControlPropertyNames<T>>> &
145
+ (K extends keyof T ? Partial<Pick<T, K>> : {}) &
146
+ $ControlSettings;
147
+
117
148
  type EventNamesOf<T> = {
118
149
  [K in keyof T]: T[K] extends (event: infer E) => void ? (E extends UI5Event ? K : never) : never;
119
150
  }[keyof T];
120
151
  export type EventsOf<T> = Partial<Pick<T, EventNamesOf<T>>>;
121
152
 
122
- export type PropertiesOf<T, K extends keyof T | undefined = undefined> = Partial<Pick<T, ControlPropertyNames<T>>> &
123
- (K extends keyof T ? Partial<Pick<T, K>> : {}) &
124
- $ControlSettings;
125
153
  export type ConvertContextToString<T> = {
126
154
  [K in keyof T]: K extends "metaPath" | "contextPath" ? string : T[K];
127
155
  };
@@ -224,11 +252,31 @@ const ensureGetAPI = function (target: UI5APIControl): void {
224
252
  }
225
253
  };
226
254
 
255
+ /**
256
+ * Represents the state object of a building block.
257
+ * @public
258
+ * @ui5-experimental-since 1.145.0
259
+ */
227
260
  type ExtendWithObject<T, K> = T extends object ? K & { [TKey in keyof T]?: BindingInfoHolder<T[TKey]> } : K;
228
261
 
262
+ /**
263
+ * Represents the state object of a building block.
264
+ * @public
265
+ * @ui5-experimental-since 1.145.0
266
+ */
229
267
  export type StateOf<T> = {
230
268
  [K in keyof T]: T[K] extends Array<infer U> | ReadonlyArray<infer U> ? ExtendWithObject<U, ReadonlyArray<U>> : T[K];
231
269
  };
270
+ /**
271
+ * Type for a generic state object
272
+ */
273
+ export type GenericState = Record<string, never>;
274
+
275
+ /**
276
+ * Represents the state object of a building block.
277
+ * @public
278
+ * @ui5-experimental-since 1.145.0
279
+ */
232
280
  export type BindingInfoHolder<T> = T & {
233
281
  __bindingInfo: {
234
282
  path: string;
@@ -238,10 +286,12 @@ export type BindingInfoHolder<T> = T & {
238
286
  };
239
287
 
240
288
  /**
241
- * Allows to define a property that will hold the control state.
289
+ * Allows to define a property that holds the control state.
242
290
  *
243
- * Properties defined with this decorator will be automatically bound to the control state when used in JSX.
291
+ * Properties defined with this decorator are automatically bound to the control state when used in JSX.
244
292
  * Arrays need to be bound using the `bindState` function.
293
+ * @public
294
+ * @ui5-experimental-since 1.145.0
245
295
  * @returns A property decorator
246
296
  */
247
297
  export function defineState(): PropertyDecorator {
@@ -369,8 +419,10 @@ export function usingExtension(extensionClass: typeof ControllerExtension | Func
369
419
 
370
420
  /* #region CONTROL */
371
421
  /**
372
- * Indicates that the property shall be declared as an event on the control metadata.
422
+ * Indicates that the property is declared as an event on the control metadata.
373
423
  * @returns The decorated property
424
+ * @public
425
+ * @ui5-experimental-since 1.145.0
374
426
  */
375
427
  export function event(): PropertyDecorator {
376
428
  return function (target: UI5ControlDefinition, eventKey: string | Symbol) {
@@ -382,9 +434,11 @@ export function event(): PropertyDecorator {
382
434
  }
383
435
 
384
436
  /**
385
- * Defines the following property in the control metadata.
437
+ * Defines the following property as a managed object in the control metadata.
386
438
  * @param attributeDefinition The property definition
387
439
  * @returns The decorated property.
440
+ * @public
441
+ * @ui5-experimental-since 1.145.0
388
442
  */
389
443
  export function property(attributeDefinition: UI5PropertyMetadata): PropertyDecorator {
390
444
  return function (target: UI5ControlDefinition, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<unknown>) {
@@ -415,6 +469,8 @@ export function property(attributeDefinition: UI5PropertyMetadata): PropertyDeco
415
469
  * Defines and configures the following aggregation in the control metadata.
416
470
  * @param aggregationDefinition The aggregation definition
417
471
  * @returns The decorated property.
472
+ * @public
473
+ * @ui5-experimental-since 1.145.0
418
474
  */
419
475
  export function aggregation(aggregationDefinition: UI5AggregationMetadata): PropertyDecorator {
420
476
  return function (target: UI5ControlDefinition, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<unknown>) {
@@ -441,6 +497,8 @@ export function aggregation(aggregationDefinition: UI5AggregationMetadata): Prop
441
497
  * Defines and configures the following association in the control metadata.
442
498
  * @param ui5AssociationMetadata The definition of the association.
443
499
  * @returns The decorated property
500
+ * @public
501
+ * @ui5-experimental-since 1.145.0
444
502
  */
445
503
  export function association(ui5AssociationMetadata: UI5AssociationMetadata): PropertyDecorator {
446
504
  return function (target: UI5ControlDefinition, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<unknown>) {
@@ -459,6 +517,8 @@ export function association(ui5AssociationMetadata: UI5AssociationMetadata): Pro
459
517
  * Defines in the metadata that this control implements a specific interface.
460
518
  * @param interfaceName The name of the implemented interface
461
519
  * @returns The decorated method
520
+ * @public
521
+ * @ui5-experimental-since 1.144.0
462
522
  */
463
523
  export function implementInterface(interfaceName: string): PropertyDecorator {
464
524
  return function (target: UI5ControlDefinition) {
@@ -496,11 +556,13 @@ type UI5ControlAndMore = typeof Control &
496
556
 
497
557
  /**
498
558
  * Indicates that the following class should define a UI5 control of the specified name.
499
- * @param sTarget The fully qualified name of the UI5 class
500
- * @param metadataDefinition Inline metadata definition
501
- * @returns A class decorator that will create a ui5 class
559
+ * @param target The fully qualified name of the UI5 class
560
+ * @param metadataDefinition Additional inline metadata definition
561
+ * @returns A class decorator that creates a UI5 class out of the TS class
562
+ * @public
563
+ * @ui5-experimental-since 1.145.0
502
564
  */
503
- export function defineUI5Class(sTarget: string, metadataDefinition?: Partial<UI5ControlMetadataDefinition>): ClassDecorator {
565
+ export function defineUI5Class(target: string, metadataDefinition?: Partial<UI5ControlMetadataDefinition>): ClassDecorator {
504
566
  return function (constructor: UI5ControlAndMore) {
505
567
  if (!constructor.prototype.metadata) {
506
568
  constructor.prototype.metadata = {};
@@ -523,10 +585,11 @@ export function defineUI5Class(sTarget: string, metadataDefinition?: Partial<UI5
523
585
  }
524
586
  }
525
587
  }
526
- return registerUI5Metadata(constructor, sTarget, constructor.prototype);
588
+ return registerUI5Metadata(constructor, target, constructor.prototype);
527
589
  } as ClassDecorator;
528
590
  }
529
591
  type Constructor<T = {}> = new (...a: unknown[]) => T;
592
+
530
593
  /**
531
594
  * Mixin a specific interface including all its methods and properties into the control.
532
595
  * @param interfaceClass Implementation class of the control
@@ -625,14 +688,21 @@ function _addInterfaceProtoTypesToBaseClass(
625
688
  return baseCtor;
626
689
  }
627
690
 
691
+ /**
692
+ * The name identifier used to reference the component state model in the state management system.
693
+ * This constant defines the key under which component state data is stored and retrieved.
694
+ */
695
+ export const STATE_MODEL_NAME = "$componentState";
628
696
  function _getHandlerForStateProperty(jsonModel: JSONModel, prop: string): unknown {
629
697
  const pathInModel = `/${prop.toString()}`;
630
698
  const oObj = deepClone(jsonModel.getObject(pathInModel));
631
699
  let oTarget;
632
700
  if (prop === "__bindingInfo") {
633
- return { model: "$componentState" };
701
+ return { model: STATE_MODEL_NAME };
634
702
  }
635
- if (typeof oObj === "string") {
703
+ if (oObj === undefined || oObj === null) {
704
+ oTarget = oObj;
705
+ } else if (typeof oObj === "string") {
636
706
  oTarget = oObj;
637
707
  } else if (typeof oObj === "number") {
638
708
  oTarget = oObj;
@@ -647,7 +717,7 @@ function _getHandlerForStateProperty(jsonModel: JSONModel, prop: string): unknow
647
717
  } else if (ref === undefined && isNaN(Number(p.toString()))) {
648
718
  return {
649
719
  __bindingInfo: {
650
- model: "$componentState",
720
+ model: STATE_MODEL_NAME,
651
721
  path: p
652
722
  }
653
723
  };
@@ -658,9 +728,9 @@ function _getHandlerForStateProperty(jsonModel: JSONModel, prop: string): unknow
658
728
  } else {
659
729
  oTarget = { ...oObj };
660
730
  }
661
- if (typeof oTarget === "object") {
731
+ if (typeof oTarget === "object" && oTarget !== null) {
662
732
  oTarget.__bindingInfo = {
663
- model: "$componentState",
733
+ model: STATE_MODEL_NAME,
664
734
  path: pathInModel
665
735
  };
666
736
  }
@@ -683,8 +753,8 @@ function createStateProxy(
683
753
  initialData?: object
684
754
  ): JSONModel {
685
755
  // Lazy initialization of the state property
686
- targetControl.setModel(new JSONModel(initialData), "$componentState");
687
- const stateModel = targetControl.getModel("$componentState") as JSONModel;
756
+ targetControl.setModel(new JSONModel(initialData), STATE_MODEL_NAME);
757
+ const stateModel = targetControl.getModel(STATE_MODEL_NAME) as JSONModel;
688
758
  stateModel.attachPropertyChange((evt: Model$PropertyChangeEvent) => {
689
759
  const path = evt.getParameter("path")?.substring(1); // to remove the first /
690
760
  if (path && boundToStateProps.includes(path)) {
@@ -806,7 +876,7 @@ function _createStateProperty(
806
876
  if (!this.__stateCreated) {
807
877
  createStateProxy(targetControl, targetControl.__stateName, targetControl[boundProperties]);
808
878
  }
809
- (this.getModel("$componentState") as JSONModel).setProperty(`/${sPropertyName}`, oValue);
879
+ (this.getModel(STATE_MODEL_NAME) as JSONModel).setProperty(`/${sPropertyName}`, oValue);
810
880
  targetControl._updateStateDebounced(sPropertyName);
811
881
  }
812
882
  return fnSetProperty.call(this, sPropertyName, oValue, bSuppressInvalidate);
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/ClassSupport", "sap/ui/core/Element"], function (ClassSupport, Element) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/base/util/deepClone"], function (deepClone) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/base/util/deepClone"], function (deepClone) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define([], function () {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/ClassSupport", "sap/ui/core/Component", "sap/ui/core/mvc/View"], function (ClassSupport, Component, View) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/BindingInfo", "sap/ui/base/DataType", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, BindingInfo, DataType, EventHandlerResolver) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define([], function () {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/jsx-runtime/jsx-control", "sap/fe/base/jsx-runtime/jsx-renderManager", "sap/fe/base/jsx-runtime/jsx-xml"], function (jsxControl, jsxRenderManager, jsxXml) {
6
6
  "use strict";
@@ -17,6 +17,13 @@ sap.ui.define(["sap/fe/base/jsx-runtime/jsx-control", "sap/fe/base/jsx-runtime/j
17
17
  return jsxXml(ControlType, mSettings, key, xmlNamespaceMap);
18
18
  }
19
19
  };
20
+
21
+ /**
22
+ * Indicates that the next JSX call is rendered using the provided RenderManager.
23
+ * @param renderManager The UI5 RenderManager to use for rendering
24
+ * @param control The control to render
25
+ * @param renderMethod The method to be rendered
26
+ */
20
27
  jsx.renderUsingRenderManager = function (renderManager, control, renderMethod) {
21
28
  renderNextUsingRenderManager = renderManager;
22
29
  const returnValue = renderMethod(control);
@@ -57,6 +64,11 @@ sap.ui.define(["sap/fe/base/jsx-runtime/jsx-control", "sap/fe/base/jsx-runtime/j
57
64
  jsxContext = {};
58
65
  return callBackReturn;
59
66
  };
67
+
68
+ /**
69
+ * JSX support for UI5 controls.
70
+ * @returns The control or controls created
71
+ */
60
72
  return jsx;
61
73
  }, false);
62
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZW5kZXJOZXh0QXNYTUwiLCJyZW5kZXJOZXh0VXNpbmdSZW5kZXJNYW5hZ2VyIiwieG1sTmFtZXNwYWNlTWFwIiwianN4IiwiQ29udHJvbFR5cGUiLCJtU2V0dGluZ3MiLCJrZXkiLCJqc3hDb250cm9sIiwianN4Q29udGV4dCIsImpzeEZvcm1hdHRlckNvbnRleHQiLCJ1bmRlZmluZWQiLCJqc3hSZW5kZXJNYW5hZ2VyIiwianN4WG1sIiwicmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyIiwicmVuZGVyTWFuYWdlciIsImNvbnRyb2wiLCJyZW5kZXJNZXRob2QiLCJyZXR1cm5WYWx1ZSIsImRlZmluZVhNTE5hbWVzcGFjZU1hcCIsIm5hbWVzcGFjZU1hcCIsInJlbmRlckFzWE1MIiwiZ2V0Q29udGV4dCIsInNldEZvcm1hdHRlckNvbnRleHQiLCJjb250ZXh0IiwiZ2V0Rm9ybWF0dGVyQ29udGV4dCIsIndpdGhDb250ZXh0IiwiZnVuY3Rpb25Ub0V4ZWN1dGUiLCJjYWxsQmFja1JldHVybiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsianN4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqc3hDb250cm9sIGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3gtY29udHJvbFwiO1xuaW1wb3J0IGpzeFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeC1yZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQganN4WG1sIGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3gteG1sXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuXG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuXG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyB8IGJvb2xlYW4gfCBGdW5jdGlvbiB8IG51bWJlciB8IHVuZGVmaW5lZCB8IHN0cmluZ1tdID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIENvbnRyb2xQcm9wZXJ0aWVzPFQ+ID0gUGFydGlhbDxSZWNvcmQ8Q29udHJvbFByb3BlcnR5TmFtZXM8VD4sIEVsZW1lbnQ+PiAmIHtcblx0W2s6IHN0cmluZ106IEVsZW1lbnQ7XG59O1xuZXhwb3J0IHR5cGUgTm9uQ29udHJvbFByb3BlcnRpZXM8VD4gPSBQYXJ0aWFsPE9taXQ8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+PjtcbmV4cG9ydCB0eXBlIENvbW1hbmRQcm9wZXJ0aWVzID0gYGNtZDoke3N0cmluZ318JHtzdHJpbmd9YDtcblxubGV0IHJlbmRlck5leHRBc1hNTCA9IGZhbHNlO1xubGV0IHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXI6IFJlbmRlck1hbmFnZXIgfCB1bmRlZmluZWQ7XG5sZXQgeG1sTmFtZXNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5jb25zdCBqc3ggPSBmdW5jdGlvbiA8VD4oXG5cdENvbnRyb2xUeXBlOiB0eXBlb2YgQ29udHJvbCxcblx0bVNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHsga2V5OiBzdHJpbmc7IGNoaWxkcmVuPzogRWxlbWVudCB8IENvbnRyb2xQcm9wZXJ0aWVzPFQ+IH0sXG5cdGtleTogc3RyaW5nXG4pOiBzdHJpbmcgfCBDb250cm9sIHwgQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFyZW5kZXJOZXh0QXNYTUwgJiYgIXJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXIpIHtcblx0XHRyZXR1cm4ganN4Q29udHJvbChDb250cm9sVHlwZSwgbVNldHRpbmdzLCBrZXksIGpzeENvbnRleHQsIGpzeEZvcm1hdHRlckNvbnRleHQpO1xuXHR9IGVsc2UgaWYgKHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBqc3hSZW5kZXJNYW5hZ2VyKFxuXHRcdFx0Q29udHJvbFR5cGUgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRtU2V0dGluZ3MgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0XHRcdGtleSxcblx0XHRcdHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXJcblx0XHQpIGFzIHVua25vd24gYXMgc3RyaW5nIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ganN4WG1sKENvbnRyb2xUeXBlLCBtU2V0dGluZ3MsIGtleSwgeG1sTmFtZXNwYWNlTWFwKTtcblx0fVxufTtcbmpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIgPSBmdW5jdGlvbiAocmVuZGVyTWFuYWdlcjogUmVuZGVyTWFuYWdlciwgY29udHJvbDogQ29udHJvbCwgcmVuZGVyTWV0aG9kOiBGdW5jdGlvbik6IHZvaWQge1xuXHRyZW5kZXJOZXh0VXNpbmdSZW5kZXJNYW5hZ2VyID0gcmVuZGVyTWFuYWdlcjtcblx0Y29uc3QgcmV0dXJuVmFsdWUgPSByZW5kZXJNZXRob2QoY29udHJvbCk7XG5cdHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXIgPSB1bmRlZmluZWQ7XG5cdHJldHVyblZhbHVlKCk7XG59O1xuanN4LmRlZmluZVhNTE5hbWVzcGFjZU1hcCA9IGFzeW5jIGZ1bmN0aW9uIChuYW1lc3BhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJlbmRlck1ldGhvZDogRnVuY3Rpb24pOiBQcm9taXNlPHVua25vd24+IHtcblx0eG1sTmFtZXNwYWNlTWFwID0gbmFtZXNwYWNlTWFwO1xuXHRjb25zdCByZXR1cm5WYWx1ZSA9IGF3YWl0IHJlbmRlck1ldGhvZCgpO1xuXHR4bWxOYW1lc3BhY2VNYXAgPSB7fTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgSlNYIGNhbGwgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIFhNTC5cbiAqIEBwYXJhbSByZW5kZXJNZXRob2QgVGhlIG1ldGhvZCB0aGF0IG5lZWRzIHRvIGJlIHJlbmRlcmVkIGFzIFhNTFxuICogQHJldHVybnMgVGhlIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbFxuICovXG5qc3gucmVuZGVyQXNYTUwgPSBmdW5jdGlvbiA8VD4ocmVuZGVyTWV0aG9kOiAoKSA9PiBUKTogVCB7XG5cdHJlbmRlck5leHRBc1hNTCA9IHRydWU7XG5cdGNvbnN0IHJldHVyblZhbHVlID0gcmVuZGVyTWV0aG9kKCk7XG5cdHJlbmRlck5leHRBc1hNTCA9IGZhbHNlO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5leHBvcnQgdHlwZSBSZWY8VCBleHRlbmRzIEVsZW1lbnQ+ID0ge1xuXHRjdXJyZW50PzogVDtcblx0c2V0Q3VycmVudChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIEpTWENvbnRleHQgPSB7XG5cdG93bmVyQ29udHJvbD86IENvbnRyb2wgJiB7XG5cdFx0Y29udHJvbFJlZmVyZW5jZXM/OiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50Pjtcblx0XHRjb250cm9sUmVmZXJlbmNlc0lkPzogbnVtYmVyO1xuXHR9O1xuXHR2aWV3PzogVmlldztcblx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50O1xufTtcbmxldCBqc3hDb250ZXh0OiBKU1hDb250ZXh0ID0ge307XG5qc3guZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpOiBKU1hDb250ZXh0IHtcblx0cmV0dXJuIGpzeENvbnRleHQ7XG59O1xuXG5sZXQganN4Rm9ybWF0dGVyQ29udGV4dDogb2JqZWN0ID0ge307XG5qc3guc2V0Rm9ybWF0dGVyQ29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0OiBvYmplY3QpOiB2b2lkIHtcblx0anN4Rm9ybWF0dGVyQ29udGV4dCA9IGNvbnRleHQ7XG59O1xuXG5qc3guZ2V0Rm9ybWF0dGVyQ29udGV4dCA9IGZ1bmN0aW9uICgpOiB1bmtub3duIHtcblx0cmV0dXJuIGpzeEZvcm1hdHRlckNvbnRleHQ7XG59O1xuXG5qc3gud2l0aENvbnRleHQgPSBmdW5jdGlvbiA8VD4oY29udGV4dDogSlNYQ29udGV4dCwgZnVuY3Rpb25Ub0V4ZWN1dGU6ICgpID0+IFQpOiBUIHtcblx0anN4Q29udGV4dCA9IGNvbnRleHQ7XG5cdGNvbnN0IGNhbGxCYWNrUmV0dXJuID0gZnVuY3Rpb25Ub0V4ZWN1dGUoKTtcblx0anN4Q29udGV4dCA9IHt9O1xuXHRyZXR1cm4gY2FsbEJhY2tSZXR1cm47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc3g7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFtQkEsSUFBSUEsZUFBZSxHQUFHLEtBQUs7RUFDM0IsSUFBSUMsNEJBQXVEO0VBQzNELElBQUlDLGVBQXVDLEdBQUcsQ0FBQyxDQUFDO0VBQ2hELE1BQU1DLEdBQUcsR0FBRyxTQUFBQSxDQUNYQyxXQUEyQixFQUMzQkMsU0FBK0YsRUFDL0ZDLEdBQVcsRUFDZ0M7SUFDM0MsSUFBSSxDQUFDTixlQUFlLElBQUksQ0FBQ0MsNEJBQTRCLEVBQUU7TUFDdEQsT0FBT00sVUFBVSxDQUFDSCxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsR0FBRyxFQUFFRSxVQUFVLEVBQUVDLG1CQUFtQixDQUFDO0lBQ2hGLENBQUMsTUFBTSxJQUFJUiw0QkFBNEIsS0FBS1MsU0FBUyxFQUFFO01BQ3RELE9BQU9DLGdCQUFnQixDQUN0QlAsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLEdBQUcsRUFDSEwsNEJBQ0QsQ0FBQztJQUNGLENBQUMsTUFBTTtNQUNOLE9BQU9XLE1BQU0sQ0FBQ1IsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLEdBQUcsRUFBRUosZUFBZSxDQUFDO0lBQzVEO0VBQ0QsQ0FBQztFQUNEQyxHQUFHLENBQUNVLHdCQUF3QixHQUFHLFVBQVVDLGFBQTRCLEVBQUVDLE9BQWdCLEVBQUVDLFlBQXNCLEVBQVE7SUFDdEhmLDRCQUE0QixHQUFHYSxhQUFhO0lBQzVDLE1BQU1HLFdBQVcsR0FBR0QsWUFBWSxDQUFDRCxPQUFPLENBQUM7SUFDekNkLDRCQUE0QixHQUFHUyxTQUFTO0lBQ3hDTyxXQUFXLENBQUMsQ0FBQztFQUNkLENBQUM7RUFDRGQsR0FBRyxDQUFDZSxxQkFBcUIsR0FBRyxnQkFBZ0JDLFlBQW9DLEVBQUVILFlBQXNCLEVBQW9CO0lBQzNIZCxlQUFlLEdBQUdpQixZQUFZO0lBQzlCLE1BQU1GLFdBQVcsR0FBRyxNQUFNRCxZQUFZLENBQUMsQ0FBQztJQUN4Q2QsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixPQUFPZSxXQUFXO0VBQ25CLENBQUM7RUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FkLEdBQUcsQ0FBQ2lCLFdBQVcsR0FBRyxVQUFhSixZQUFxQixFQUFLO0lBQ3hEaEIsZUFBZSxHQUFHLElBQUk7SUFDdEIsTUFBTWlCLFdBQVcsR0FBR0QsWUFBWSxDQUFDLENBQUM7SUFDbENoQixlQUFlLEdBQUcsS0FBSztJQUN2QixPQUFPaUIsV0FBVztFQUNuQixDQUFDO0VBZUQsSUFBSVQsVUFBc0IsR0FBRyxDQUFDLENBQUM7RUFDL0JMLEdBQUcsQ0FBQ2tCLFVBQVUsR0FBRyxZQUF3QjtJQUN4QyxPQUFPYixVQUFVO0VBQ2xCLENBQUM7RUFFRCxJQUFJQyxtQkFBMkIsR0FBRyxDQUFDLENBQUM7RUFDcENOLEdBQUcsQ0FBQ21CLG1CQUFtQixHQUFHLFVBQVVDLE9BQWUsRUFBUTtJQUMxRGQsbUJBQW1CLEdBQUdjLE9BQU87RUFDOUIsQ0FBQztFQUVEcEIsR0FBRyxDQUFDcUIsbUJBQW1CLEdBQUcsWUFBcUI7SUFDOUMsT0FBT2YsbUJBQW1CO0VBQzNCLENBQUM7RUFFRE4sR0FBRyxDQUFDc0IsV0FBVyxHQUFHLFVBQWFGLE9BQW1CLEVBQUVHLGlCQUEwQixFQUFLO0lBQ2xGbEIsVUFBVSxHQUFHZSxPQUFPO0lBQ3BCLE1BQU1JLGNBQWMsR0FBR0QsaUJBQWlCLENBQUMsQ0FBQztJQUMxQ2xCLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixPQUFPbUIsY0FBYztFQUN0QixDQUFDO0VBQUMsT0FFYXhCLEdBQUc7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
74
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZW5kZXJOZXh0QXNYTUwiLCJyZW5kZXJOZXh0VXNpbmdSZW5kZXJNYW5hZ2VyIiwieG1sTmFtZXNwYWNlTWFwIiwianN4IiwiQ29udHJvbFR5cGUiLCJtU2V0dGluZ3MiLCJrZXkiLCJqc3hDb250cm9sIiwianN4Q29udGV4dCIsImpzeEZvcm1hdHRlckNvbnRleHQiLCJ1bmRlZmluZWQiLCJqc3hSZW5kZXJNYW5hZ2VyIiwianN4WG1sIiwicmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyIiwicmVuZGVyTWFuYWdlciIsImNvbnRyb2wiLCJyZW5kZXJNZXRob2QiLCJyZXR1cm5WYWx1ZSIsImRlZmluZVhNTE5hbWVzcGFjZU1hcCIsIm5hbWVzcGFjZU1hcCIsInJlbmRlckFzWE1MIiwiZ2V0Q29udGV4dCIsInNldEZvcm1hdHRlckNvbnRleHQiLCJjb250ZXh0IiwiZ2V0Rm9ybWF0dGVyQ29udGV4dCIsIndpdGhDb250ZXh0IiwiZnVuY3Rpb25Ub0V4ZWN1dGUiLCJjYWxsQmFja1JldHVybiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsianN4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqc3hDb250cm9sIGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3gtY29udHJvbFwiO1xuaW1wb3J0IGpzeFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeC1yZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQganN4WG1sIGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3gteG1sXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuXG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuXG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyB8IGJvb2xlYW4gfCBGdW5jdGlvbiB8IG51bWJlciB8IHVuZGVmaW5lZCB8IHN0cmluZ1tdID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIENvbnRyb2xQcm9wZXJ0aWVzPFQ+ID0gUGFydGlhbDxSZWNvcmQ8Q29udHJvbFByb3BlcnR5TmFtZXM8VD4sIEVsZW1lbnQ+PiAmIHtcblx0W2s6IHN0cmluZ106IEVsZW1lbnQ7XG59O1xuZXhwb3J0IHR5cGUgTm9uQ29udHJvbFByb3BlcnRpZXM8VD4gPSBQYXJ0aWFsPE9taXQ8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+PjtcbmV4cG9ydCB0eXBlIENvbW1hbmRQcm9wZXJ0aWVzID0gYGNtZDoke3N0cmluZ318JHtzdHJpbmd9YDtcblxubGV0IHJlbmRlck5leHRBc1hNTCA9IGZhbHNlO1xubGV0IHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXI6IFJlbmRlck1hbmFnZXIgfCB1bmRlZmluZWQ7XG5sZXQgeG1sTmFtZXNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5jb25zdCBqc3ggPSBmdW5jdGlvbiA8VD4oXG5cdENvbnRyb2xUeXBlOiB0eXBlb2YgQ29udHJvbCxcblx0bVNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHsga2V5OiBzdHJpbmc7IGNoaWxkcmVuPzogRWxlbWVudCB8IENvbnRyb2xQcm9wZXJ0aWVzPFQ+IH0sXG5cdGtleTogc3RyaW5nXG4pOiBzdHJpbmcgfCBDb250cm9sIHwgQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFyZW5kZXJOZXh0QXNYTUwgJiYgIXJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXIpIHtcblx0XHRyZXR1cm4ganN4Q29udHJvbChDb250cm9sVHlwZSwgbVNldHRpbmdzLCBrZXksIGpzeENvbnRleHQsIGpzeEZvcm1hdHRlckNvbnRleHQpO1xuXHR9IGVsc2UgaWYgKHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBqc3hSZW5kZXJNYW5hZ2VyKFxuXHRcdFx0Q29udHJvbFR5cGUgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRtU2V0dGluZ3MgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0XHRcdGtleSxcblx0XHRcdHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXJcblx0XHQpIGFzIHVua25vd24gYXMgc3RyaW5nIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ganN4WG1sKENvbnRyb2xUeXBlLCBtU2V0dGluZ3MsIGtleSwgeG1sTmFtZXNwYWNlTWFwKTtcblx0fVxufTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmV4dCBKU1ggY2FsbCBpcyByZW5kZXJlZCB1c2luZyB0aGUgcHJvdmlkZWQgUmVuZGVyTWFuYWdlci5cbiAqIEBwYXJhbSByZW5kZXJNYW5hZ2VyIFRoZSBVSTUgUmVuZGVyTWFuYWdlciB0byB1c2UgZm9yIHJlbmRlcmluZ1xuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyTWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuanN4LnJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciA9IGZ1bmN0aW9uIChyZW5kZXJNYW5hZ2VyOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBDb250cm9sLCByZW5kZXJNZXRob2Q6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdHJlbmRlck5leHRVc2luZ1JlbmRlck1hbmFnZXIgPSByZW5kZXJNYW5hZ2VyO1xuXHRjb25zdCByZXR1cm5WYWx1ZSA9IHJlbmRlck1ldGhvZChjb250cm9sKTtcblx0cmVuZGVyTmV4dFVzaW5nUmVuZGVyTWFuYWdlciA9IHVuZGVmaW5lZDtcblx0cmV0dXJuVmFsdWUoKTtcbn07XG5qc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwID0gYXN5bmMgZnVuY3Rpb24gKG5hbWVzcGFjZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgcmVuZGVyTWV0aG9kOiBGdW5jdGlvbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHR4bWxOYW1lc3BhY2VNYXAgPSBuYW1lc3BhY2VNYXA7XG5cdGNvbnN0IHJldHVyblZhbHVlID0gYXdhaXQgcmVuZGVyTWV0aG9kKCk7XG5cdHhtbE5hbWVzcGFjZU1hcCA9IHt9O1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmV4dCBKU1ggY2FsbCBzaG91bGQgYmUgcmVuZGVyZWQgYXMgWE1MLlxuICogQHBhcmFtIHJlbmRlck1ldGhvZCBUaGUgbWV0aG9kIHRoYXQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYXMgWE1MXG4gKiBAcmV0dXJucyBUaGUgWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sXG4gKi9cbmpzeC5yZW5kZXJBc1hNTCA9IGZ1bmN0aW9uIDxUPihyZW5kZXJNZXRob2Q6ICgpID0+IFQpOiBUIHtcblx0cmVuZGVyTmV4dEFzWE1MID0gdHJ1ZTtcblx0Y29uc3QgcmV0dXJuVmFsdWUgPSByZW5kZXJNZXRob2QoKTtcblx0cmVuZGVyTmV4dEFzWE1MID0gZmFsc2U7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZjxUIGV4dGVuZHMgRWxlbWVudD4gPSB7XG5cdGN1cnJlbnQ/OiBUO1xuXHRzZXRDdXJyZW50KG9Db250cm9sSW5zdGFuY2U6IFQpOiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgSlNYQ29udGV4dCA9IHtcblx0b3duZXJDb250cm9sPzogQ29udHJvbCAmIHtcblx0XHRjb250cm9sUmVmZXJlbmNlcz86IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+O1xuXHRcdGNvbnRyb2xSZWZlcmVuY2VzSWQ/OiBudW1iZXI7XG5cdH07XG5cdHZpZXc/OiBWaWV3O1xuXHRhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQ7XG59O1xubGV0IGpzeENvbnRleHQ6IEpTWENvbnRleHQgPSB7fTtcbmpzeC5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCk6IEpTWENvbnRleHQge1xuXHRyZXR1cm4ganN4Q29udGV4dDtcbn07XG5cbmxldCBqc3hGb3JtYXR0ZXJDb250ZXh0OiBvYmplY3QgPSB7fTtcbmpzeC5zZXRGb3JtYXR0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQ6IG9iamVjdCk6IHZvaWQge1xuXHRqc3hGb3JtYXR0ZXJDb250ZXh0ID0gY29udGV4dDtcbn07XG5cbmpzeC5nZXRGb3JtYXR0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKCk6IHVua25vd24ge1xuXHRyZXR1cm4ganN4Rm9ybWF0dGVyQ29udGV4dDtcbn07XG5cbmpzeC53aXRoQ29udGV4dCA9IGZ1bmN0aW9uIDxUPihjb250ZXh0OiBKU1hDb250ZXh0LCBmdW5jdGlvblRvRXhlY3V0ZTogKCkgPT4gVCk6IFQge1xuXHRqc3hDb250ZXh0ID0gY29udGV4dDtcblx0Y29uc3QgY2FsbEJhY2tSZXR1cm4gPSBmdW5jdGlvblRvRXhlY3V0ZSgpO1xuXHRqc3hDb250ZXh0ID0ge307XG5cdHJldHVybiBjYWxsQmFja1JldHVybjtcbn07XG5cbi8qKlxuICogSlNYIHN1cHBvcnQgZm9yIFVJNSBjb250cm9scy5cbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9yIGNvbnRyb2xzIGNyZWF0ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQganN4O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBbUJBLElBQUlBLGVBQWUsR0FBRyxLQUFLO0VBQzNCLElBQUlDLDRCQUF1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
@@ -38,6 +38,13 @@ const jsx = function <T>(
38
38
  return jsxXml(ControlType, mSettings, key, xmlNamespaceMap);
39
39
  }
40
40
  };
41
+
42
+ /**
43
+ * Indicates that the next JSX call is rendered using the provided RenderManager.
44
+ * @param renderManager The UI5 RenderManager to use for rendering
45
+ * @param control The control to render
46
+ * @param renderMethod The method to be rendered
47
+ */
41
48
  jsx.renderUsingRenderManager = function (renderManager: RenderManager, control: Control, renderMethod: Function): void {
42
49
  renderNextUsingRenderManager = renderManager;
43
50
  const returnValue = renderMethod(control);
@@ -96,4 +103,8 @@ jsx.withContext = function <T>(context: JSXContext, functionToExecute: () => T):
96
103
  return callBackReturn;
97
104
  };
98
105
 
106
+ /**
107
+ * JSX support for UI5 controls.
108
+ * @returns The control or controls created
109
+ */
99
110
  export default jsx;
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/jsx-runtime/jsx"], function (jsx) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (jsx, jsxs) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2025 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
5
  sap.ui.define(["sap/ui/core/Lib"], function (Library) {
6
6
  "use strict";
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
22
22
  controls: [],
23
23
  elements: [],
24
24
  // eslint-disable-next-line no-template-curly-in-string
25
- version: "1.144.0",
25
+ version: "1.146.0",
26
26
  noLibraryCSS: true
27
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
28
  });
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ // This is autogenerated, do not edit
9
+ }, false);
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJzYXAuZmUuYmFzZS1hdXRvLWV4dC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaXMgYXV0b2dlbmVyYXRlZCwgZG8gbm90IGVkaXRcblxuZGVjbGFyZSBtb2R1bGUgXCJzYXAvZmUvYmFzZS9saWJyYXJ5XCIge1xuXHQvLyBQdWJsaWMgRXhwb3J0c1xuXHQvKipcblx0ICogTGlicmFyeSBwcm92aWRpbmcgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcnVudGltZSBmb3IgU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cblx0ICogQG5hbWVzcGFjZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRleHBvcnQgY29uc3QgZmVCYXNlTmFtZXNwYWNlID0gXCJzYXAuZmUuYmFzZVwiO1xufVxuXG5kZWNsYXJlIG1vZHVsZSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiIHtcblx0aW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcblx0aW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcblx0aW1wb3J0IHR5cGUgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuXG5cdHR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xuXHR0eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRcdG92ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb247XG5cdFx0cHVibGljPzogYm9vbGVhbjtcblx0XHRmaW5hbD86IGJvb2xlYW47XG5cdH07XG5cblx0ZXhwb3J0IHR5cGUgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiA9IHtcblx0XHRkZWZhdWx0QWdncmVnYXRpb24/OiBzdHJpbmc7XG5cdFx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRcdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRcdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QWdncmVnYXRpb25NZXRhZGF0YT47XG5cdFx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdFx0YXNzb2NpYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhPjtcblx0XHRtZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbj47XG5cdFx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdFx0aW50ZXJmYWNlczogc3RyaW5nW107XG5cdFx0bGlicmFyeT86IHN0cmluZztcblx0XHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRcdGNvbmZpZz86IHtcblx0XHRcdGZ1bGxXaWR0aD86IGJvb2xlYW47XG5cdFx0fTtcblx0XHRzdGF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuXHRcdHN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRcdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0XHRyZXR1cm5UeXBlcz86IHN0cmluZ1tdO1xuXHRcdGJ1aWxkaW5nQmxvY2tNZXRhZGF0YT86IHVua25vd247XG5cdH07XG5cblx0dHlwZSBFeHRlbmRXaXRoT2JqZWN0PFQsIEs+ID0gVCBleHRlbmRzIG9iamVjdCA/IEsgJiB7IFtUS2V5IGluIGtleW9mIFRdPzogQmluZGluZ0luZm9Ib2xkZXI8VFtUS2V5XT4gfSA6IEs7XG5cblx0ZXhwb3J0IHR5cGUgQmluZGluZ0luZm9Ib2xkZXI8VD4gPSBUICYge1xuXHRcdF9fYmluZGluZ0luZm86IHtcblx0XHRcdHBhdGg6IHN0cmluZztcblx0XHRcdG1vZGVsOiBzdHJpbmc7XG5cdFx0XHR0eXBlOiBUO1xuXHRcdH07XG5cdH07XG5cblx0ZXhwb3J0IHR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdFx0Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFRTIGNvbXBpbGVyXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0XHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xuXHR9W2tleW9mIFRdO1xuXHQvLyBQdWJsaWMgVHlwZSBEZWZpbml0aW9uc1xuXHQvKipcblx0ICogRGVmaW5pdGlvbiBvZiBhIFVJNSBwcm9wZXJ0eSBtZXRhZGF0YS5cblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgdHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHRcdHR5cGU6IHN0cmluZztcblx0XHRiaW5kYWJsZT86IGJvb2xlYW47XG5cdFx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRcdGdyb3VwPzogc3RyaW5nO1xuXHRcdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdFx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdFx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdFx0YmluZFRvU3RhdGU/OiBib29sZWFuO1xuXHRcdGV4cGVjdGVkQW5ub3RhdGlvbnM/OiBzdHJpbmdbXTtcblx0XHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdFx0YWxsb3dlZFZhbHVlcz86IHN0cmluZ1tdO1xuXHRcdHZpc2liaWxpdHk/OiBzdHJpbmc7XG5cdH07XG5cdC8qKlxuXHQgKiBEZWZpbml0aW9uIG9mIGEgVUk1IGFnZ3JlZ2F0aW9uIG1ldGFkYXRhLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcblx0ICovXG5cdGV4cG9ydCB0eXBlIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEgPSB7XG5cdFx0dHlwZTogc3RyaW5nO1xuXHRcdGFsdFR5cGVzPzogc3RyaW5nW107XG5cdFx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRcdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdFx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0XHRkZWZhdWx0Q2xhc3M/OiB1bmtub3duO1xuXHRcdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0XHR2aXNpYmlsaXR5Pzogc3RyaW5nO1xuXHRcdGZvcndhcmRpbmc/OiBvYmplY3Q7XG5cdH07XG5cdC8qKlxuXHQgKiBEZWZpbml0aW9uIG9mIGEgVUk1IGFzc29jaWF0aW9uIG1ldGFkYXRhLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcblx0ICovXG5cdGV4cG9ydCB0eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdFx0dHlwZTogc3RyaW5nO1xuXHRcdG11bHRpcGxlPzogYm9vbGVhbjtcblx0XHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG5cdH07XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0aWVzIG9mIGEgY29udHJvbC5cblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2Y8VCwgSyBleHRlbmRzIGtleW9mIFQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+ID0gUGFydGlhbDxQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+Pj4gJlxuXHRcdChLIGV4dGVuZHMga2V5b2YgVCA/IFBhcnRpYWw8UGljazxULCBLPj4gOiB7fSkgJlxuXHRcdCRDb250cm9sU2V0dGluZ3M7XG5cdC8qKlxuXHQgKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgdHlwZSBTdGF0ZU9mPFQ+ID0ge1xuXHRcdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gfCBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gRXh0ZW5kV2l0aE9iamVjdDxVLCBSZWFkb25seUFycmF5PFU+PiA6IFRbS107XG5cdH07XG5cblx0Ly8gUHVibGljIEV4cG9ydHNcblx0LyoqXG5cdCAqIENvbGxlY3Rpb24gb2YgZGVjb3JhdG9ycyB0byBzdXBwb3J0IHRoZSBjcmVhdGlvbiBvZiBVSTUgY2xhc3Nlcy5cblx0ICogQG5hbWVzcGFjZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRleHBvcnQgY29uc3QgY2xhc3NTdXBwb3J0TmFtZXNwYWNlID0gXCJzYXAuZmUuYmFzZS5DbGFzc1N1cHBvcnRcIjtcblxuXHQvKipcblx0ICogQWxsb3dzIHRvIGRlZmluZSBhIHByb3BlcnR5IHRoYXQgd2lsbCBob2xkIHRoZSBjb250cm9sIHN0YXRlLlxuXHQgKlxuXHQgKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cblx0ICogQXJyYXlzIG5lZWQgdG8gYmUgYm91bmQgdXNpbmcgdGhlIGBiaW5kU3RhdGVgIGZ1bmN0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcblx0ICogQHJldHVybnMgQSBwcm9wZXJ0eSBkZWNvcmF0b3Jcblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuXHQvKiAjZW5kcmVnaW9uICovXG5cblx0LyogI3JlZ2lvbiBDT05UUk9MICovXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gZXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBhcyBhIG1hbmFnZWQgb2JqZWN0IGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvbiBUaGUgcHJvcGVydHkgZGVmaW5pdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShhdHRyaWJ1dGVEZWZpbml0aW9uOiBVSTVQcm9wZXJ0eU1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3I7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cblx0ICogQHBhcmFtIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiBUaGUgYWdncmVnYXRpb24gZGVmaW5pdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcblx0ICovXG5cdGV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuXHQvKipcblx0ICogRGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgZm9sbG93aW5nIGFzc29jaWF0aW9uIGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuXHQgKiBAcGFyYW0gdWk1QXNzb2NpYXRpb25NZXRhZGF0YSBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgYXNzb2NpYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuXHQgKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDQuMFxuXHQgKi9cblx0ZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvcjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgVUk1IGNsYXNzXG5cdCAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gQWRkaXRpb25hbCBpbmxpbmUgbWV0YWRhdGEgZGVmaW5pdGlvblxuXHQgKiBAcmV0dXJucyBBIGNsYXNzIGRlY29yYXRvciB0aGF0IHdpbGwgY3JlYXRlIGEgdWk1IGNsYXNzIG91dCBvZiB0aGUgVFMgY2xhc3Ncblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgZnVuY3Rpb24gZGVmaW5lVUk1Q2xhc3ModGFyZ2V0OiBzdHJpbmcsIG1ldGFkYXRhRGVmaW5pdGlvbj86IFBhcnRpYWw8VUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbj4pOiBDbGFzc0RlY29yYXRvcjtcbn1cblxuZGVjbGFyZSBtb2R1bGUgXCJzYXAvZmUvYmFzZS9CdWlsZGluZ0Jsb2NrQmFzZVwiIHtcblx0aW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcblx0aW1wb3J0IHR5cGUgeyBTdGF0ZU9mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuXHRpbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuXHRpbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5cdGltcG9ydCB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuXHRpbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5cdGltcG9ydCB0eXBlIHsgQWNjZXNzaWJpbGl0eUluZm8gfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuXHRpbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5cdGltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cblx0LyoqXG5cdCAqIERlc2NyaWJlcyB0aGUgc2V0dGluZ3MgdGhhdCBjYW4gYmUgcHJvdmlkZWQgdG8gdGhlIEJ1aWxkaW5nQmxvY2tCYXNlIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSAkQnVpbGRpbmdCbG9ja0Jhc2VTZXR0aW5nczxLID0ge30+IGV4dGVuZHMgJENvbnRyb2xTZXR0aW5ncyB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgc3RhdGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cblx0XHQgKiBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBzdGF0ZSBkYXRhIG1hbmFnZWQgYnkgdGhlIGNvbXBvbmVudCwgd2l0aCB0aGUgdHlwZVxuXHRcdCAqIGRldGVybWluZWQgYnkgdGhlIGdlbmVyaWMgcGFyYW1ldGVyIEsuXG5cdFx0ICovXG5cdFx0c3RhdGU/OiBTdGF0ZU9mPEs+IHwgUHJvcGVydHlCaW5kaW5nSW5mbyB8IGB7JHtzdHJpbmd9fWA7XG5cblx0XHQvKipcblx0XHQgKiBPcHRpb25hbCBjb250ZW50IG9mIGdlbmVyaWMgdHlwZSBULlxuXHRcdCAqIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIG1haW4gZGF0YSBvciBwYXlsb2FkIGZvciB0aGUgY29udGFpbmluZyBvYmplY3QuXG5cdFx0ICogV2hlbiB1bmRlZmluZWQsIGl0IGluZGljYXRlcyB0aGF0IG5vIGNvbnRlbnQgaGFzIGJlZW4gc2V0IG9yIGlzIGF2YWlsYWJsZS5cblx0XHQgKiBUaGUgc3BlY2lmaWMgdHlwZSBhbmQgc3RydWN0dXJlIG9mIHRoZSBjb250ZW50IGRlcGVuZHMgb24gdGhlIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIgVC5cblx0XHQgKi9cblx0XHRjb250ZW50PzogVUk1RWxlbWVudDtcblxuXHRcdC8qKlxuXHRcdCAqIEFzc29jaWF0aW9uIHRvIGNvbnRyb2xzIC8gSURzIHRoYXQgbGFiZWwgdGhpcyBjb250cm9sIChzZWUgV0FJLUFSSUEgYXR0cmlidXRlIGFyaWEtbGFiZWxsZWRieSkuXG5cdFx0ICovXG5cdFx0YXJpYUxhYmVsbGVkQnk/OiBDb250cm9sIHwgc3RyaW5nO1xuXHR9XG5cblx0Ly8gUHVibGljIENsYXNzZXNcblx0LyoqXG5cdCAqIEJhc2UgY2xhc3MgZm9yIGJ1aWxkaW5nIGJsb2Nrcy5cblx0ICogVGhpcyBjb250YWlucyB0aGUgbG93LWxldmVsIGZ1bmN0aW9uYWxpdHkgb2YgaGF2aW5nIGEgY29udGVudCBhZ2dyZWdhdGlvbiBhbmQgaGFuZGxpbmcgdGhlIHJlbmRlcmluZyBvZiB0aGUgY29udGVudCB3aXRob3V0IGFuIGFjdHVhbCBET00gZWxlbWVudC48YnIvPlxuXHQgKiBUaGUgYnVpbGRpbmcgYmxvY2sgYWxzbyBkZWZpbmVzIGEgc3RhdGUgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBidWlsZGluZyBibG9jay48YnIvPlxuXHQgKiBBY2Nlc3NpYmlsaXR5IGFuZCBjbGFzc2VzIGluZm9ybWF0aW9uIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGNvbnRlbnQgY29udHJvbC48YnIvPlxuXHQgKiBUaGlzIGNsYXNzIGlzIG5vdCBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5LCBpdCdzIHRoZXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seSAoYW5kIGRvY3VtZW50YXRpb24pXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlPFQgZXh0ZW5kcyBVSTVFbGVtZW50ID0gQ29udHJvbCwgSyBleHRlbmRzIG9iamVjdCA9IHt9PiBleHRlbmRzIENvbnRyb2wge1xuXHRcdC8qKlxuXHRcdCAqIE9wdGlvbmFsIGNvbnRlbnQgb2YgZ2VuZXJpYyB0eXBlIFQuXG5cdFx0ICpcblx0XHQgKiBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBtYWluIGRhdGEgb3IgcGF5bG9hZCBmb3IgdGhlIGNvbnRhaW5pbmcgb2JqZWN0LlxuXHRcdCAqIFdoZW4gdW5kZWZpbmVkLCBpdCBpbmRpY2F0ZXMgdGhhdCBubyBjb250ZW50IGhhcyBiZWVuIHNldCBvciBpcyBhdmFpbGFibGUuXG5cdFx0ICogVGhlIHNwZWNpZmljIHR5cGUgYW5kIHN0cnVjdHVyZSBvZiB0aGUgY29udGVudCBkZXBlbmRzIG9uIHRoZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyIFQuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGNvbnRlbnQ/OiBUO1xuXG5cdFx0Z2V0Q29udGVudCgpOiBUO1xuXG5cdFx0c2V0Q29udGVudChjb250ZW50OiBUKTogdGhpcztcblxuXHRcdGRlc3Ryb3lDb250ZW50KCk6IHRoaXM7XG5cblx0XHQvKipcblx0XHQgKiBBc3NvY2lhdGlvbiB0byBjb250cm9scyAvIElEcyB0aGF0IGxhYmVsIHRoaXMgY29udHJvbCAoc2VlIFdBSS1BUklBIGF0dHJpYnV0ZSBhcmlhLWxhYmVsbGVkYnkpLlxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRhcmlhTGFiZWxsZWRCeTogc3RyaW5nW107XG5cblx0XHRnZXRBcmlhTGFiZWxsZWRCeSgpOiBzdHJpbmdbXTtcblxuXHRcdHNldEFyaWFMYWJlbGxlZEJ5KGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmdbXSk6IHRoaXM7XG5cblx0XHQvKipcblx0XHQgKiBUaGUgY3VycmVudCBzdGF0ZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuXHRcdCAqXG5cdFx0ICogVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgc3RhdGUgZGF0YSBtYW5hZ2VkIGJ5IHRoZSBjb21wb25lbnQsIHdpdGggdGhlIHR5cGVcblx0XHQgKiBkZXRlcm1pbmVkIGJ5IHRoZSBnZW5lcmljIHBhcmFtZXRlciBLLlxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRzdGF0ZTogU3RhdGVPZjxLPjtcblxuXHRcdC8qKlxuXHRcdCAqIFNob3J0aGFuZCBmb3IgdGhlIEJpbmRpbmdUb29sa2l0LmJpbmRTdGF0ZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9iamVjdC5cblx0XHQgKiBAcGFyYW0gcGF0aCBBIHByb3BlcnR5IGluIHRoZSBzdGF0ZSBvYmplY3Rcblx0XHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gZm9yIHRoZSBzdGF0ZVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdFx0ICovXG5cdFx0cHVibGljIGJpbmRTdGF0ZTxTVCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHBhdGg6IGtleW9mIEspOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248U1Q+O1xuXG5cdFx0LyoqXG5cdFx0ICogU3luY2hyb25pemVzIGEgc3RhdGUgcHJvcGVydHkgd2l0aCBhbm90aGVyIGJ1aWxkaW5nIGJsb2NrJ3Mgc3RhdGUgcHJvcGVydHkuXG5cdFx0ICogQHBhcmFtIHByb3BOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBjdXJyZW50IHN0YXRlIG9iamVjdFxuXHRcdCAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBidWlsZGluZyBibG9ja1xuXHRcdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgaW4gdGhlIHNvdXJjZSBidWlsZGluZyBibG9jaydzIHN0YXRlIG9iamVjdFxuXHRcdCAqL1xuXHRcdHB1YmxpYyBzeW5jU3RhdGVQcm9wZXJ0eShwcm9wTmFtZTogc3RyaW5nLCBzb3VyY2U6IEJ1aWxkaW5nQmxvY2tCYXNlLCBwcm9wZXJ0eTogc3RyaW5nKTogdm9pZDtcblxuXHRcdG9uU3RhdGVDaGFuZ2UoX2NoYW5nZWRQcm9wczogc3RyaW5nW10pOiB2b2lkO1xuXHR9XG5cblx0ZXhwb3J0IGRlZmF1bHQgQnVpbGRpbmdCbG9ja0Jhc2U7XG59XG5cbmRlY2xhcmUgbW9kdWxlIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIiB7XG5cdC8vIFB1YmxpYyBFeHBvcnRzXG5cdC8qKlxuXHQgKiBDb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBtYW5pcHVsYXRpb24gb2YgdWk1IGJpbmRpbmdzXG5cdCAqIEBwdWJsaWNcblx0ICogQG5hbWVzcGFjZVxuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRleHBvcnQgY29uc3QgYmluZGluZ1Rvb2xraXROYW1lc3BhY2UgPSBcInNhcC5mZS5iYXNlLkJpbmRpbmdUb29sa2l0XCI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119