From b23aff146e8629760541bf93d2cb40d08c60cc4e Mon Sep 17 00:00:00 2001 From: Ahash Sritharan Date: Mon, 9 Oct 2023 07:38:48 +0200 Subject: [PATCH] Moved model classes to namespace class --- README.md | 24 +- READMEDOCS.md | 24 +- build/README.md | 24 +- build/src/XrmEx.d.ts | 640 +++--- build/src/XrmEx.js | 1567 +++++++-------- docs/assets/search.js | 2 +- ...> src_XrmEx.XrmEx.Class.BooleanField.html} | 249 +-- ...l => src_XrmEx.XrmEx.Class.DateField.html} | 245 +-- ....html => src_XrmEx.XrmEx.Class.Field.html} | 205 +- ...=> src_XrmEx.XrmEx.Class.GridControl.html} | 131 +- ...=> src_XrmEx.XrmEx.Class.LookupField.html} | 297 +-- ...rmEx.Class.MultiSelectOptionSetField.html} | 269 +-- ...=> src_XrmEx.XrmEx.Class.NumberField.html} | 261 +-- ...src_XrmEx.XrmEx.Class.OptionsetField.html} | 301 +-- ...tml => src_XrmEx.XrmEx.Class.Section.html} | 83 +- ...ab.html => src_XrmEx.XrmEx.Class.Tab.html} | 103 +- ...l => src_XrmEx.XrmEx.Class.TextField.html} | 249 +-- docs/classes/src_XrmEx.XrmEx.Form.html | 54 +- ...src_XrmEx.XrmEx.addGlobalNotification.html | 16 +- ...XrmEx.XrmEx.checkRequestParameterType.html | 16 +- .../src_XrmEx.XrmEx.executeAction.html | 16 +- .../src_XrmEx.XrmEx.executeFunction.html | 16 +- ...mEx.XrmEx.getEnvironmentVariableValue.html | 16 +- .../src_XrmEx.XrmEx.getFunctionName.html | 16 +- .../src_XrmEx.XrmEx.normalizeGuid.html | 16 +- .../src_XrmEx.XrmEx.openAlertDialog.html | 16 +- ..._XrmEx.XrmEx.removeGlobalNotification.html | 16 +- .../functions/src_XrmEx.XrmEx.throwError.html | 16 +- ...s__types_xrm.Xrm.Attributes.Attribute.html | 2 +- ...s_xrm.Xrm.Attributes.BooleanAttribute.html | 2 +- ...ypes_xrm.Xrm.Attributes.DateAttribute.html | 2 +- ...es_xrm.Xrm.Attributes.LookupAttribute.html | 2 +- ...ributes.MultiSelectOptionSetAttribute.html | 2 +- ...es_xrm.Xrm.Attributes.NumberAttribute.html | 2 +- ...xrm.Xrm.Attributes.OptionSetAttribute.html | 2 +- ...es_xrm.Xrm.Attributes.StringAttribute.html | 2 +- ...s__types_xrm.Xrm.Controls.GridControl.html | 2 +- ...dules__types_xrm.Xrm.Controls.Section.html | 2 +- ...e_modules__types_xrm.Xrm.Controls.Tab.html | 2 +- docs/modules/src_XrmEx.XrmEx.Class.html | 94 + docs/modules/src_XrmEx.XrmEx.html | 33 +- docs/modules/src_XrmEx.html | 2 +- release/xrm-ex.zip | Bin 53152 -> 54179 bytes src/XrmEx.ts | 1734 +++++++++-------- testBuild/src/XrmEx.d.ts | 640 +++--- testBuild/src/XrmEx.js | 1567 +++++++-------- tests/contact.spec.ts | 18 +- 47 files changed, 4551 insertions(+), 4447 deletions(-) rename docs/classes/{src_XrmEx.XrmEx.BooleanField.html => src_XrmEx.XrmEx.Class.BooleanField.html} (76%) rename docs/classes/{src_XrmEx.XrmEx.DateField.html => src_XrmEx.XrmEx.Class.DateField.html} (76%) rename docs/classes/{src_XrmEx.XrmEx.Field.html => src_XrmEx.XrmEx.Class.Field.html} (79%) rename docs/classes/{src_XrmEx.XrmEx.GridControl.html => src_XrmEx.XrmEx.Class.GridControl.html} (81%) rename docs/classes/{src_XrmEx.XrmEx.LookupField.html => src_XrmEx.XrmEx.Class.LookupField.html} (78%) rename docs/classes/{src_XrmEx.XrmEx.MultiSelectOptionSetField.html => src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html} (74%) rename docs/classes/{src_XrmEx.XrmEx.NumberField.html => src_XrmEx.XrmEx.Class.NumberField.html} (77%) rename docs/classes/{src_XrmEx.XrmEx.OptionsetField.html => src_XrmEx.XrmEx.Class.OptionsetField.html} (75%) rename docs/classes/{src_XrmEx.XrmEx.Section.html => src_XrmEx.XrmEx.Class.Section.html} (76%) rename docs/classes/{src_XrmEx.XrmEx.Tab.html => src_XrmEx.XrmEx.Class.Tab.html} (78%) rename docs/classes/{src_XrmEx.XrmEx.TextField.html => src_XrmEx.XrmEx.Class.TextField.html} (76%) create mode 100644 docs/modules/src_XrmEx.XrmEx.Class.html diff --git a/README.md b/README.md index bec53e3..9bddeae 100644 --- a/README.md +++ b/README.md @@ -75,11 +75,11 @@ var YourNamespace = YourNamespace || {}; YourNamespace.Contact = YourNamespace.Contact || {}; (function (Self) { //Only properties assigned to the Self object will be exposed to the global scope class Fields { - Firstname = new XrmEx.TextField("firstname"); - Customer = new XrmEx.LookupField("parentcustomerid"); - DoNotEmail = new XrmEx.BooleanField("donotemail"); - Birthday = new XrmEx.DateField("birthdate"); - PreferredContactMethod = new XrmEx.OptionsetField( + Firstname = new XrmEx.Class.TextField("firstname"); + Customer = new XrmEx.Class.LookupField("parentcustomerid"); + DoNotEmail = new XrmEx.Class.BooleanField("donotemail"); + Birthday = new XrmEx.Class.DateField("birthdate"); + PreferredContactMethod = new XrmEx.Class.OptionsetField( "preferredcontactmethodcode", { Any: 1, @@ -91,17 +91,17 @@ YourNamespace.Contact = YourNamespace.Contact || {}; ); } class Tabs { - General = new XrmEx.Tab("tab1", { - Section1: new XrmEx.Section("section1"), - Section2: new XrmEx.Section("section2"), + General = new XrmEx.Class.Tab("tab1", { + Section1: new XrmEx.Class.Section("section1"), + Section2: new XrmEx.Class.Section("section2"), }); - Details = new XrmEx.Tab("tab2", { - Section1: new XrmEx.Section("section1"), - Section2: new XrmEx.Section("section2"), + Details = new XrmEx.Class.Tab("tab2", { + Section1: new XrmEx.Class.Section("section1"), + Section2: new XrmEx.Class.Section("section2"), }); } class Grids { - ContactSubgrid = new XrmEx.GridControl("Test"); + ContactSubgrid = new XrmEx.Class.GridControl("Test"); } /**@type {Fields}*/ var fields; /**@type {Tabs()}*/ var tabs; diff --git a/READMEDOCS.md b/READMEDOCS.md index 785969e..a026f78 100644 --- a/READMEDOCS.md +++ b/READMEDOCS.md @@ -39,11 +39,11 @@ var YourNamespace = YourNamespace || {}; YourNamespace.Contact = YourNamespace.Contact || {}; (function (Self) { //Only properties assigned to the Self object will be exposed to the global scope class Fields { - Firstname = new XrmEx.TextField("firstname"); - Customer = new XrmEx.LookupField("parentcustomerid"); - DoNotEmail = new XrmEx.BooleanField("donotemail"); - Birthday = new XrmEx.DateField("birthdate"); - PreferredContactMethod = new XrmEx.OptionsetField( + Firstname = new XrmEx.Class.TextField("firstname"); + Customer = new XrmEx.Class.LookupField("parentcustomerid"); + DoNotEmail = new XrmEx.Class.BooleanField("donotemail"); + Birthday = new XrmEx.Class.DateField("birthdate"); + PreferredContactMethod = new XrmEx.Class.OptionsetField( "preferredcontactmethodcode", { Any: 1, @@ -55,17 +55,17 @@ YourNamespace.Contact = YourNamespace.Contact || {}; ); } class Tabs { - General = new XrmEx.Tab("tab1", { - Section1: new XrmEx.Section("section1"), - Section2: new XrmEx.Section("section2"), + General = new XrmEx.Class.Tab("tab1", { + Section1: new XrmEx.Class.Section("section1"), + Section2: new XrmEx.Class.Section("section2"), }); - Details = new XrmEx.Tab("tab2", { - Section1: new XrmEx.Section("section1"), - Section2: new XrmEx.Section("section2"), + Details = new XrmEx.Class.Tab("tab2", { + Section1: new XrmEx.Class.Section("section1"), + Section2: new XrmEx.Class.Section("section2"), }); } class Grids { - ContactSubgrid = new XrmEx.GridControl("Test"); + ContactSubgrid = new XrmEx.Class.GridControl("Test"); } /**@type {Fields}*/ var fields; /**@type {Tabs()}*/ var tabs; diff --git a/build/README.md b/build/README.md index bec53e3..9bddeae 100644 --- a/build/README.md +++ b/build/README.md @@ -75,11 +75,11 @@ var YourNamespace = YourNamespace || {}; YourNamespace.Contact = YourNamespace.Contact || {}; (function (Self) { //Only properties assigned to the Self object will be exposed to the global scope class Fields { - Firstname = new XrmEx.TextField("firstname"); - Customer = new XrmEx.LookupField("parentcustomerid"); - DoNotEmail = new XrmEx.BooleanField("donotemail"); - Birthday = new XrmEx.DateField("birthdate"); - PreferredContactMethod = new XrmEx.OptionsetField( + Firstname = new XrmEx.Class.TextField("firstname"); + Customer = new XrmEx.Class.LookupField("parentcustomerid"); + DoNotEmail = new XrmEx.Class.BooleanField("donotemail"); + Birthday = new XrmEx.Class.DateField("birthdate"); + PreferredContactMethod = new XrmEx.Class.OptionsetField( "preferredcontactmethodcode", { Any: 1, @@ -91,17 +91,17 @@ YourNamespace.Contact = YourNamespace.Contact || {}; ); } class Tabs { - General = new XrmEx.Tab("tab1", { - Section1: new XrmEx.Section("section1"), - Section2: new XrmEx.Section("section2"), + General = new XrmEx.Class.Tab("tab1", { + Section1: new XrmEx.Class.Section("section1"), + Section2: new XrmEx.Class.Section("section2"), }); - Details = new XrmEx.Tab("tab2", { - Section1: new XrmEx.Section("section1"), - Section2: new XrmEx.Section("section2"), + Details = new XrmEx.Class.Tab("tab2", { + Section1: new XrmEx.Class.Section("section1"), + Section2: new XrmEx.Class.Section("section2"), }); } class Grids { - ContactSubgrid = new XrmEx.GridControl("Test"); + ContactSubgrid = new XrmEx.Class.GridControl("Test"); } /**@type {Fields}*/ var fields; /**@type {Tabs()}*/ var tabs; diff --git a/build/src/XrmEx.d.ts b/build/src/XrmEx.d.ts index 0ea7614..7af0d74 100644 --- a/build/src/XrmEx.d.ts +++ b/build/src/XrmEx.d.ts @@ -28,12 +28,12 @@ export declare namespace XrmEx { * @param {string} errorMessage - The error message to throw. * @throws {Error} - Always throws an error with the given error message. */ - export function throwError(errorMessage: string): never; + function throwError(errorMessage: string): never; /** * Returns the name of the calling function. * @returns {string} - The name of the calling function. */ - export function getFunctionName(): string; + function getFunctionName(): string; /** * Displays a notification for an app with the given message and level, and lets you specify whether to show a close button. * @param {string} message - The message to display in the notification. @@ -41,13 +41,13 @@ export declare namespace XrmEx { * @param {boolean} [showCloseButton=false] - Whether to show a close button on the notification. Defaults to false. * @returns {Promise} - A promise that resolves with the ID of the created notification. */ - export function addGlobalNotification(message: string, level: "SUCCESS" | "ERROR" | "WARNING" | "INFO", showCloseButton?: boolean): Promise; + function addGlobalNotification(message: string, level: "SUCCESS" | "ERROR" | "WARNING" | "INFO", showCloseButton?: boolean): Promise; /** * Clears a notification in the app with the given unique ID. * @param {string} uniqueId - The unique ID of the notification to clear. * @returns {Promise} - A promise that resolves when the notification has been cleared. */ - export function removeGlobalNotification(uniqueId: string): Promise; + function removeGlobalNotification(uniqueId: string): Promise; /** * Retrieves the value of an environment variable by using its schema name as key. * If the environment variable has both a default value and a current value, this function will retrieve the current value. @@ -55,14 +55,14 @@ export declare namespace XrmEx { * @returns {Promise} - A promise that resolves with the value of the environment variable. * @async */ - export function getEnvironmentVariableValue(environmentVariableSchemaName: string): Promise; + function getEnvironmentVariableValue(environmentVariableSchemaName: string): Promise; /** * Checks if the given request parameter is of a supported type and has a valid value. * @param {RequestParameter} requestParameter - The request parameter to check. * @returns {void} * @throws {Error} - Throws an error if the request parameter is not of a supported type or has an invalid value. */ - export function checkRequestParameterType(requestParameter: RequestParameter): void; + function checkRequestParameterType(requestParameter: RequestParameter): void; /** * Executes an Action. * @param {string} actionName - The unique name of the action. @@ -71,7 +71,7 @@ export declare namespace XrmEx { * @returns {Promise} - A Promise with the request response. * @throws {Error} - Throws an error if the request parameter is not of a supported type or has an invalid value. */ - export function executeAction(actionName: string, requestParameters: RequestParameter[], boundEntity?: EntityReference): Promise; + function executeAction(actionName: string, requestParameters: RequestParameter[], boundEntity?: EntityReference): Promise; /** * Executes a Function. * @param {string} functionName - The unique name of the function. @@ -80,24 +80,24 @@ export declare namespace XrmEx { * @returns {Promise} - A Promise with the request response. * @throws {Error} - Throws an error if the request parameter is not of a supported type or has an invalid value. */ - export function executeFunction(functionName: string, requestParameters: RequestParameter[], boundEntity?: EntityReference): Promise; + function executeFunction(functionName: string, requestParameters: RequestParameter[], boundEntity?: EntityReference): Promise; /** * Makes a GUID lowercase and removes brackets. * @param {string} guid - The GUID to normalize. * @returns {string} - The normalized GUID. */ - export function normalizeGuid(guid: string): string; + function normalizeGuid(guid: string): string; /** * Opens a dialog with dynamic height and width based on text content. * @param {string} title - The title of the dialog. * @param {string} text - The text content of the dialog. * @returns {Promise} - A Promise with the dialog response. */ - export function openAlertDialog(title: string, text: string): Promise; + function openAlertDialog(title: string, text: string): Promise; /** * Represents a form in Dynamics 365. */ - export class Form { + class Form { protected static _formContext: Xrm.FormContext; protected static _executionContext: Xrm.Events.EventContext; constructor(); @@ -157,317 +157,319 @@ export declare namespace XrmEx { * Adds a handler to be called when the attribute's value is changed. * @param handler The function reference. */ - static addOnChangeEventHandler(fields: Field[], handlers: Xrm.Events.ContextSensitiveHandler | Xrm.Events.ContextSensitiveHandler[], execute?: boolean): void; + static addOnChangeEventHandler(fields: Class.Field[], handlers: Xrm.Events.ContextSensitiveHandler | Xrm.Events.ContextSensitiveHandler[], execute?: boolean): void; } - /** + namespace Class { + /** * Used to execute methods related to a single Attribute */ - export class Field implements Xrm.Attributes.Attribute { - static allFields: Field[]; - readonly Name: string; - protected _attribute?: Xrm.Attributes.Attribute; - constructor(attributeName: string); - setValue(value: any): void; - getAttributeType(): Xrm.Attributes.AttributeType; - getFormat(): Xrm.Attributes.AttributeFormat; - getIsDirty(): boolean; - getName(): string; - getParent(): Xrm.Entity; - getRequiredLevel(): Xrm.Attributes.RequirementLevel; - getSubmitMode(): Xrm.SubmitMode; - getUserPrivilege(): Xrm.Privilege; - removeOnChange(handler: Xrm.Events.Attribute.ChangeEventHandler): void; - setSubmitMode(submitMode: Xrm.SubmitMode): void; - getValue(): any; - setIsValid(isValid: boolean, message?: string): void; - get Attribute(): Xrm.Attributes.Attribute; - get controls(): Xrm.Collection.ItemCollection; - /** - * Gets the value. - * @returns The value. - */ - get Value(): any; - set Value(value: any); - /** - * Sets a control-local notification message. - * @param message The message. - * @param uniqueId Unique identifier. - * @returns true if it succeeds, false if it fails. - * @remarks When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon - * appears next to the control. Tapping on the icon will display the message. - */ - setNotification(message: string, uniqueId: string): this; - /** - * Sets the visibility state. - * @param visible true to show, false to hide. - */ - setVisible(visible: boolean): this; - /** - * Sets the state of the control to either enabled, or disabled. - * @param disabled true to disable, false to enable. - */ - setDisabled(disabled: boolean): this; - /** - * Sets the required level. - * @param requirementLevel The requirement level, as either "none", "required", or "recommended" - */ - setRequiredLevel(requirementLevel: Xrm.Attributes.RequirementLevel): this; - /** - * Sets the required level. - * @param required The requirement level, as either false for "none" or true for "required" - */ - setRequired(required: boolean): this; - /**Fire all "on change" event handlers. */ - fireOnChange(): this; - /** - * Adds a handler or an array of handlers to be called when the attribute's value is changed. - * @param handlers The function reference or an array of function references. - */ - addOnChange(handlers: Xrm.Events.ContextSensitiveHandler | Xrm.Events.ContextSensitiveHandler[]): this; - /** - * Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification. - */ - addNotification(message: string, notificationLevel: "ERROR" | "RECOMMENDATION", uniqueId: string, actions?: Xrm.Controls.ControlNotificationAction[]): this; - /** - * Clears the notification identified by uniqueId. - * @param uniqueId (Optional) Unique identifier. - * @returns true if it succeeds, false if it fails. - * @remarks If the uniqueId parameter is not used, the current notification shown will be removed. - */ - removeNotification(uniqueId: string): this; - } - export class TextField extends Field implements Xrm.Attributes.StringAttribute { - protected _attribute: Xrm.Attributes.StringAttribute; - constructor(attribute: string); - getMaxLength(): number; - getFormat(): Xrm.Attributes.StringAttributeFormat; - get Attribute(): Xrm.Attributes.StringAttribute; - get controls(): Xrm.Collection.ItemCollection; - get Value(): string; - set Value(value: string); - } - export class NumberField extends Field implements Xrm.Attributes.NumberAttribute { - protected _attribute: Xrm.Attributes.NumberAttribute; - constructor(attribute: string); - getFormat(): Xrm.Attributes.IntegerAttributeFormat; - getMax(): number; - getMin(): number; - getPrecision(): number; - setPrecision(precision: number): void; - get Attribute(): Xrm.Attributes.NumberAttribute; - get controls(): Xrm.Collection.ItemCollection; - get Value(): number; - set Value(value: number); - } - export class DateField extends Field implements Xrm.Attributes.DateAttribute { - protected _attribute: Xrm.Attributes.DateAttribute; - constructor(attribute: string); - getFormat(): Xrm.Attributes.DateAttributeFormat; - get Attribute(): Xrm.Attributes.DateAttribute; - get controls(): Xrm.Collection.ItemCollection; - get Value(): Date; - set Value(value: Date); - } - export class BooleanField extends Field implements Xrm.Attributes.BooleanAttribute { - protected _attribute: Xrm.Attributes.BooleanAttribute; - constructor(attribute: string); - getAttributeType(): "boolean"; - getInitialValue(): boolean; - get Attribute(): Xrm.Attributes.BooleanAttribute; - get controls(): Xrm.Collection.ItemCollection; - get Value(): boolean; - set Value(value: boolean); - } - export class MultiSelectOptionSetField extends Field implements Xrm.Attributes.MultiSelectOptionSetAttribute { - protected _attribute: Xrm.Attributes.MultiSelectOptionSetAttribute; - Option: Options; - constructor(attributeName: string, option?: Options); - getFormat(): Xrm.Attributes.OptionSetAttributeFormat; - getOption(value: number | string): Xrm.OptionSetValue; - getOptions(): Xrm.OptionSetValue[]; - getSelectedOption(): Xrm.OptionSetValue[]; - getText(): string[]; - getInitialValue(): number[]; - get Attribute(): Xrm.Attributes.MultiSelectOptionSetAttribute; - get controls(): Xrm.Collection.ItemCollection; - get Value(): number[]; - set Value(value: (keyof Options)[] | number[]); - } - export class LookupField extends Field implements Xrm.Attributes.LookupAttribute { - protected _attribute: Xrm.Attributes.LookupAttribute; - protected _customFilters: any; - constructor(attribute: string); - getIsPartyList(): boolean; - get Attribute(): Xrm.Attributes.LookupAttribute; - get controls(): Xrm.Collection.ItemCollection; - /**Gets the id of the first lookup value*/ - get Id(): string; - /**Gets the entityType of the first lookup value*/ - get EntityType(): string; - /**Gets the formatted value of the first lookup value*/ - get FormattedValue(): string; - get Value(): Xrm.LookupValue[]; - set Value(value: Xrm.LookupValue[]); - /** - * Sets the value of a lookup - * @param id Guid of the record - * @param entityType logicalname of the entity - * @param name formatted value - * @param append if true, adds value to the array instead of replacing it - */ - setLookupValue(id: string, entityType: any, name: any, append?: boolean): this; - /** - * Retrieves an entity record. - * @param options (Optional) OData system query options, $select and $expand, to retrieve your data. - * - Use the $select system query option to limit the properties returned by including a comma-separated - * list of property names. This is an important performance best practice. If properties aren’t - * specified using $select, all properties will be returned. - * - Use the $expand system query option to control what data from related entities is returned. If you - * just include the name of the navigation property, you’ll receive all the properties for related - * records. You can limit the properties returned for related records using the $select system query - * option in parentheses after the navigation property name. Use this for both single-valued and - * collection-valued navigation properties. - * - You can also specify multiple query options by using & to separate the query options. - * @example options example: - * options: $select=name&$expand=primarycontactid($select=contactid,fullname) - * @returns On success, returns a promise containing a JSON object with the retrieved attributes and their values. - * @see {@link https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/xrm-webapi/retrieverecord External Link: retrieveRecord (Client API reference)} - */ - retrieve(options: string): Promise; - /** - * Adds an additional custom filter to the lookup, with the "AND" filter operator. - * @param filter Specifies the filter, as a serialized FetchXML "filter" node. - * @param entityLogicalName (Optional) The logical name of the entity. - * @remarks If entityLogicalName is not specified, the filter will be applied to all entities - * valid for the Lookup control. - * @example Example filter: - * - * - */ - addPreFilterToLookup(filterXml: string, entityLogicalName?: string): this; - /** - * Adds an additional custom filter to the lookup, with the "AND" filter operator. - * @param entityLogicalName (Optional) The logical name of the entity. - * @param primaryAttributeIdName (Optional) The logical name of the primary key. - * @param fetchXml Specifies the FetchXML used to filter. - * @remarks If entityLogicalName is not specified, the filter will be applied to all entities - * valid for the Lookup control. - * @example Example fetchXml: - * - * - * - * - * - * - */ - addPreFilterToLookupAdvanced(entityLogicalName: string, primaryAttributeIdName: string, fetchXml: string): Promise; - /** - * Removes all filters set on the current lookup attribute by using addPreFilterToLookup or addPreFilterToLookupAdvanced - */ - clearPreFilterFromLookup(): this; - } - type OptionValues = { - [key: string]: number; - }; - export class OptionsetField extends Field implements Xrm.Attributes.OptionSetAttribute { - protected _attribute: Xrm.Attributes.OptionSetAttribute; - protected _control: Xrm.Controls.OptionSetControl; - Option: Options; - constructor(attributeName: string, option?: Options); - getFormat(): Xrm.Attributes.OptionSetAttributeFormat; - getOption(value: number | string): Xrm.OptionSetValue; - getOptions(): Xrm.OptionSetValue[]; - getSelectedOption(): Xrm.OptionSetValue; - getText(): string; - getInitialValue(): number; - get Attribute(): Xrm.Attributes.OptionSetAttribute; - get controls(): Xrm.Collection.ItemCollection; - get control(): Xrm.Controls.OptionSetControl; - get Value(): number; - set Value(value: keyof Options | number); - /** - * Adds an option. - * - * @param values an array with the option values to add - * @param index (Optional) zero-based index of the option. - * - * @remarks This method does not check that the values within the options you add are valid. - * If index is not provided, the new option will be added to the end of the list. - */ - addOption(values: number[], index?: number): this; - /** - * Removes the option matching the value. - * - * @param value The value. - */ - removeOption(values: number[]): this; - /** - * Clears all options. - */ - clearOptions(): this; - } - export class Section implements Xrm.Controls.Section { - readonly Name: string; - protected _section?: Xrm.Controls.Section; - parentTab?: Xrm.Controls.Tab; - constructor(name: string); - get Section(): Xrm.Controls.Section; - getName(): string; - getParent(): Xrm.Controls.Tab; - controls: Xrm.Collection.ItemCollection; - setVisible(visible: boolean): void; - getVisible(): boolean; - getLabel(): string; - setLabel(label: string): void; - } - type TabSections = { - [key: string]: Section; - }; - export class Tab implements Xrm.Controls.Tab { - readonly Name: string; - protected _tab?: Xrm.Controls.Tab; - Section: Sections; - constructor(name: string, section?: Sections); - sections: Xrm.Collection.ItemCollection; - get Tab(): Xrm.Controls.Tab; - addTabStateChange(handler: Xrm.Events.ContextSensitiveHandler): void; - getDisplayState(): Xrm.DisplayState; - getName(): string; - getParent(): Xrm.Ui; - removeTabStateChange(handler: Xrm.Events.ContextSensitiveHandler): void; - setDisplayState(displayState: Xrm.DisplayState): void; - setVisible(visible: boolean): void; - getVisible(): boolean; - getLabel(): string; - setLabel(label: string): void; - setFocus(): void; - } - export class GridControl implements Xrm.Controls.GridControl { - readonly Name: string; - protected _gridControl?: Xrm.Controls.GridControl; - constructor(name: string); - get GridControl(): Xrm.Controls.GridControl; - get Grid(): Xrm.Controls.Grid; - addOnLoad(handler: Xrm.Events.GridControl.LoadEventHandler): void; - getContextType(): XrmEnum.GridControlContext; - getEntityName(): string; - getFetchXml(): string; - getGrid(): Xrm.Controls.Grid; - getRelationship(): Xrm.Controls.GridRelationship; - getUrl(client?: XrmEnum.GridClient): string; - getViewSelector(): Xrm.Controls.ViewSelector; - openRelatedGrid(): void; - refresh(): void; - refreshRibbon(): void; - removeOnLoad(handler: () => void): void; - getControlType(): string; - getName(): string; - getParent(): Xrm.Controls.Section; - getLabel(): string; - setLabel(label: string): void; - getVisible(): boolean; - setVisible(visible: boolean): void; + export class Field implements Xrm.Attributes.Attribute { + static allFields: Field[]; + readonly Name: string; + protected _attribute?: Xrm.Attributes.Attribute; + constructor(attributeName: string); + setValue(value: any): void; + getAttributeType(): Xrm.Attributes.AttributeType; + getFormat(): Xrm.Attributes.AttributeFormat; + getIsDirty(): boolean; + getName(): string; + getParent(): Xrm.Entity; + getRequiredLevel(): Xrm.Attributes.RequirementLevel; + getSubmitMode(): Xrm.SubmitMode; + getUserPrivilege(): Xrm.Privilege; + removeOnChange(handler: Xrm.Events.Attribute.ChangeEventHandler): void; + setSubmitMode(submitMode: Xrm.SubmitMode): void; + getValue(): any; + setIsValid(isValid: boolean, message?: string): void; + get Attribute(): Xrm.Attributes.Attribute; + get controls(): Xrm.Collection.ItemCollection; + /** + * Gets the value. + * @returns The value. + */ + get Value(): any; + set Value(value: any); + /** + * Sets a control-local notification message. + * @param message The message. + * @param uniqueId Unique identifier. + * @returns true if it succeeds, false if it fails. + * @remarks When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon + * appears next to the control. Tapping on the icon will display the message. + */ + setNotification(message: string, uniqueId: string): this; + /** + * Sets the visibility state. + * @param visible true to show, false to hide. + */ + setVisible(visible: boolean): this; + /** + * Sets the state of the control to either enabled, or disabled. + * @param disabled true to disable, false to enable. + */ + setDisabled(disabled: boolean): this; + /** + * Sets the required level. + * @param requirementLevel The requirement level, as either "none", "required", or "recommended" + */ + setRequiredLevel(requirementLevel: Xrm.Attributes.RequirementLevel): this; + /** + * Sets the required level. + * @param required The requirement level, as either false for "none" or true for "required" + */ + setRequired(required: boolean): this; + /**Fire all "on change" event handlers. */ + fireOnChange(): this; + /** + * Adds a handler or an array of handlers to be called when the attribute's value is changed. + * @param handlers The function reference or an array of function references. + */ + addOnChange(handlers: Xrm.Events.ContextSensitiveHandler | Xrm.Events.ContextSensitiveHandler[]): this; + /** + * Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification. + */ + addNotification(message: string, notificationLevel: "ERROR" | "RECOMMENDATION", uniqueId: string, actions?: Xrm.Controls.ControlNotificationAction[]): this; + /** + * Clears the notification identified by uniqueId. + * @param uniqueId (Optional) Unique identifier. + * @returns true if it succeeds, false if it fails. + * @remarks If the uniqueId parameter is not used, the current notification shown will be removed. + */ + removeNotification(uniqueId: string): this; + } + export class TextField extends Field implements Xrm.Attributes.StringAttribute { + protected _attribute: Xrm.Attributes.StringAttribute; + constructor(attribute: string); + getMaxLength(): number; + getFormat(): Xrm.Attributes.StringAttributeFormat; + get Attribute(): Xrm.Attributes.StringAttribute; + get controls(): Xrm.Collection.ItemCollection; + get Value(): string; + set Value(value: string); + } + export class NumberField extends Field implements Xrm.Attributes.NumberAttribute { + protected _attribute: Xrm.Attributes.NumberAttribute; + constructor(attribute: string); + getFormat(): Xrm.Attributes.IntegerAttributeFormat; + getMax(): number; + getMin(): number; + getPrecision(): number; + setPrecision(precision: number): void; + get Attribute(): Xrm.Attributes.NumberAttribute; + get controls(): Xrm.Collection.ItemCollection; + get Value(): number; + set Value(value: number); + } + export class DateField extends Field implements Xrm.Attributes.DateAttribute { + protected _attribute: Xrm.Attributes.DateAttribute; + constructor(attribute: string); + getFormat(): Xrm.Attributes.DateAttributeFormat; + get Attribute(): Xrm.Attributes.DateAttribute; + get controls(): Xrm.Collection.ItemCollection; + get Value(): Date; + set Value(value: Date); + } + export class BooleanField extends Field implements Xrm.Attributes.BooleanAttribute { + protected _attribute: Xrm.Attributes.BooleanAttribute; + constructor(attribute: string); + getAttributeType(): "boolean"; + getInitialValue(): boolean; + get Attribute(): Xrm.Attributes.BooleanAttribute; + get controls(): Xrm.Collection.ItemCollection; + get Value(): boolean; + set Value(value: boolean); + } + export class MultiSelectOptionSetField extends Field implements Xrm.Attributes.MultiSelectOptionSetAttribute { + protected _attribute: Xrm.Attributes.MultiSelectOptionSetAttribute; + Option: Options; + constructor(attributeName: string, option?: Options); + getFormat(): Xrm.Attributes.OptionSetAttributeFormat; + getOption(value: number | string): Xrm.OptionSetValue; + getOptions(): Xrm.OptionSetValue[]; + getSelectedOption(): Xrm.OptionSetValue[]; + getText(): string[]; + getInitialValue(): number[]; + get Attribute(): Xrm.Attributes.MultiSelectOptionSetAttribute; + get controls(): Xrm.Collection.ItemCollection; + get Value(): number[]; + set Value(value: (keyof Options)[] | number[]); + } + export class LookupField extends Field implements Xrm.Attributes.LookupAttribute { + protected _attribute: Xrm.Attributes.LookupAttribute; + protected _customFilters: any; + constructor(attribute: string); + getIsPartyList(): boolean; + get Attribute(): Xrm.Attributes.LookupAttribute; + get controls(): Xrm.Collection.ItemCollection; + /**Gets the id of the first lookup value*/ + get Id(): string; + /**Gets the entityType of the first lookup value*/ + get EntityType(): string; + /**Gets the formatted value of the first lookup value*/ + get FormattedValue(): string; + get Value(): Xrm.LookupValue[]; + set Value(value: Xrm.LookupValue[]); + /** + * Sets the value of a lookup + * @param id Guid of the record + * @param entityType logicalname of the entity + * @param name formatted value + * @param append if true, adds value to the array instead of replacing it + */ + setLookupValue(id: string, entityType: any, name: any, append?: boolean): this; + /** + * Retrieves an entity record. + * @param options (Optional) OData system query options, $select and $expand, to retrieve your data. + * - Use the $select system query option to limit the properties returned by including a comma-separated + * list of property names. This is an important performance best practice. If properties aren’t + * specified using $select, all properties will be returned. + * - Use the $expand system query option to control what data from related entities is returned. If you + * just include the name of the navigation property, you’ll receive all the properties for related + * records. You can limit the properties returned for related records using the $select system query + * option in parentheses after the navigation property name. Use this for both single-valued and + * collection-valued navigation properties. + * - You can also specify multiple query options by using & to separate the query options. + * @example options example: + * options: $select=name&$expand=primarycontactid($select=contactid,fullname) + * @returns On success, returns a promise containing a JSON object with the retrieved attributes and their values. + * @see {@link https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/xrm-webapi/retrieverecord External Link: retrieveRecord (Client API reference)} + */ + retrieve(options: string): Promise; + /** + * Adds an additional custom filter to the lookup, with the "AND" filter operator. + * @param filter Specifies the filter, as a serialized FetchXML "filter" node. + * @param entityLogicalName (Optional) The logical name of the entity. + * @remarks If entityLogicalName is not specified, the filter will be applied to all entities + * valid for the Lookup control. + * @example Example filter: + * + * + */ + addPreFilterToLookup(filterXml: string, entityLogicalName?: string): this; + /** + * Adds an additional custom filter to the lookup, with the "AND" filter operator. + * @param entityLogicalName (Optional) The logical name of the entity. + * @param primaryAttributeIdName (Optional) The logical name of the primary key. + * @param fetchXml Specifies the FetchXML used to filter. + * @remarks If entityLogicalName is not specified, the filter will be applied to all entities + * valid for the Lookup control. + * @example Example fetchXml: + * + * + * + * + * + * + */ + addPreFilterToLookupAdvanced(entityLogicalName: string, primaryAttributeIdName: string, fetchXml: string): Promise; + /** + * Removes all filters set on the current lookup attribute by using addPreFilterToLookup or addPreFilterToLookupAdvanced + */ + clearPreFilterFromLookup(): this; + } + type OptionValues = { + [key: string]: number; + }; + export class OptionsetField extends Field implements Xrm.Attributes.OptionSetAttribute { + protected _attribute: Xrm.Attributes.OptionSetAttribute; + protected _control: Xrm.Controls.OptionSetControl; + Option: Options; + constructor(attributeName: string, option?: Options); + getFormat(): Xrm.Attributes.OptionSetAttributeFormat; + getOption(value: number | string): Xrm.OptionSetValue; + getOptions(): Xrm.OptionSetValue[]; + getSelectedOption(): Xrm.OptionSetValue; + getText(): string; + getInitialValue(): number; + get Attribute(): Xrm.Attributes.OptionSetAttribute; + get controls(): Xrm.Collection.ItemCollection; + get control(): Xrm.Controls.OptionSetControl; + get Value(): number; + set Value(value: keyof Options | number); + /** + * Adds an option. + * + * @param values an array with the option values to add + * @param index (Optional) zero-based index of the option. + * + * @remarks This method does not check that the values within the options you add are valid. + * If index is not provided, the new option will be added to the end of the list. + */ + addOption(values: number[], index?: number): this; + /** + * Removes the option matching the value. + * + * @param value The value. + */ + removeOption(values: number[]): this; + /** + * Clears all options. + */ + clearOptions(): this; + } + export class Section implements Xrm.Controls.Section { + readonly Name: string; + protected _section?: Xrm.Controls.Section; + parentTab?: Xrm.Controls.Tab; + constructor(name: string); + get Section(): Xrm.Controls.Section; + getName(): string; + getParent(): Xrm.Controls.Tab; + controls: Xrm.Collection.ItemCollection; + setVisible(visible: boolean): void; + getVisible(): boolean; + getLabel(): string; + setLabel(label: string): void; + } + type TabSections = { + [key: string]: Section; + }; + export class Tab implements Xrm.Controls.Tab { + readonly Name: string; + protected _tab?: Xrm.Controls.Tab; + Section: Sections; + constructor(name: string, section?: Sections); + sections: Xrm.Collection.ItemCollection; + get Tab(): Xrm.Controls.Tab; + addTabStateChange(handler: Xrm.Events.ContextSensitiveHandler): void; + getDisplayState(): Xrm.DisplayState; + getName(): string; + getParent(): Xrm.Ui; + removeTabStateChange(handler: Xrm.Events.ContextSensitiveHandler): void; + setDisplayState(displayState: Xrm.DisplayState): void; + setVisible(visible: boolean): void; + getVisible(): boolean; + getLabel(): string; + setLabel(label: string): void; + setFocus(): void; + } + export class GridControl implements Xrm.Controls.GridControl { + readonly Name: string; + protected _gridControl?: Xrm.Controls.GridControl; + constructor(name: string); + get GridControl(): Xrm.Controls.GridControl; + get Grid(): Xrm.Controls.Grid; + addOnLoad(handler: Xrm.Events.GridControl.LoadEventHandler): void; + getContextType(): XrmEnum.GridControlContext; + getEntityName(): string; + getFetchXml(): string; + getGrid(): Xrm.Controls.Grid; + getRelationship(): Xrm.Controls.GridRelationship; + getUrl(client?: XrmEnum.GridClient): string; + getViewSelector(): Xrm.Controls.ViewSelector; + openRelatedGrid(): void; + refresh(): void; + refreshRibbon(): void; + removeOnLoad(handler: () => void): void; + getControlType(): string; + getName(): string; + getParent(): Xrm.Controls.Section; + getLabel(): string; + setLabel(label: string): void; + getVisible(): boolean; + setVisible(visible: boolean): void; + } + export {}; } - export {}; } export {}; diff --git a/build/src/XrmEx.js b/build/src/XrmEx.js index 54c96d5..182f12d 100644 --- a/build/src/XrmEx.js +++ b/build/src/XrmEx.js @@ -19,7 +19,7 @@ var XrmEx; const error = new Error(); const stackTrace = error.stack?.split("\n").map((line) => line.trim()); const callingFunctionLine = stackTrace && stackTrace.length >= 3 ? stackTrace[2] : undefined; - const functionNameMatch = callingFunctionLine?.match(/at\s+([^\s]+)\s+\(/); + const functionNameMatch = callingFunctionLine?.match(/at\s+([^\s]+)\s+\(/) || callingFunctionLine?.match(/at\s+([^\s]+)/); const functionName = functionNameMatch ? functionNameMatch[1] : ""; return functionName; } @@ -328,6 +328,8 @@ var XrmEx; } /**Sets a reference to the current form context*/ static set formContext(context) { + if (!context) + throw new Error(`XrmEx.Form.setFormContext: The executionContext or formContext was not passed to the function.`); if ("getFormContext" in context) { this._executionContext = context; this._formContext = context.getFormContext(); @@ -335,10 +337,12 @@ var XrmEx; else if ("data" in context) this._formContext = context; else - throw new Error(`XrmEx.Form.setFormContext: The executionContext or formContext was not passed to the function.`); + throw new Error(`XrmEx.Form.setFormContext: The passed context is not an executionContext or formContext.`); } /**Sets a reference to the current execution context*/ static set executionContext(context) { + if (!context) + throw new Error(`XrmEx.Form.setExecutionContext: The executionContext or formContext was not passed to the function.`); if ("getFormContext" in context) { this._executionContext = context; this._formContext = context.getFormContext(); @@ -346,7 +350,7 @@ var XrmEx; else if ("data" in context) this._formContext = context; else - throw new Error(`XrmEx.Form.setExecutionContext: The executionContext or formContext was not passed to the function.`); + throw new Error(`XrmEx.Form.setExecutionContext: The passed context is not an executionContext or formContext.`); } /**Returns true if form is from type create*/ static get IsCreate() { @@ -486,844 +490,847 @@ var XrmEx; } } XrmEx.Form = Form; - /** + let Class; + (function (Class) { + /** * Used to execute methods related to a single Attribute */ - class Field { - static allFields = []; - Name; - _attribute; - constructor(attributeName) { - const existingField = Field.allFields.find((f) => f.Name === attributeName); - if (existingField) { - return existingField; - } - this.Name = attributeName; - Field.allFields.push(this); - } - setValue(value) { - return this.Attribute.setValue(value); - } - getAttributeType() { - return this.Attribute.getAttributeType(); - } - getFormat() { - return this.Attribute.getFormat(); - } - getIsDirty() { - return this.Attribute.getIsDirty(); - } - getName() { - return this.Attribute.getName(); - } - getParent() { - return this.Attribute.getParent(); - } - getRequiredLevel() { - return this.Attribute.getRequiredLevel(); - } - getSubmitMode() { - return this.Attribute.getSubmitMode(); - } - getUserPrivilege() { - return this.Attribute.getUserPrivilege(); - } - removeOnChange(handler) { - return this.Attribute.removeOnChange(handler); - } - setSubmitMode(submitMode) { - return this.Attribute.setSubmitMode(submitMode); - } - getValue() { - return this.Attribute.getValue(); - } - setIsValid(isValid, message) { - return this.Attribute.setIsValid(isValid, message); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`The attribute '${this.Name}' was not found on the form.`)); - } - get controls() { - return this.Attribute.controls; - } - /** - * Gets the value. - * @returns The value. - */ - get Value() { - return this.Attribute.getValue(); - } - set Value(value) { - this.Attribute.setValue(value); - } - /** - * Sets a control-local notification message. - * @param message The message. - * @param uniqueId Unique identifier. - * @returns true if it succeeds, false if it fails. - * @remarks When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon - * appears next to the control. Tapping on the icon will display the message. - */ - setNotification(message, uniqueId) { - try { - if (!message) - throw new Error(`no message was provided.`); - if (!uniqueId) - throw new Error(`no uniqueId was provided.`); - this.controls.forEach((control) => control.setNotification(message, uniqueId)); - return this; + class Field { + static allFields = []; + Name; + _attribute; + constructor(attributeName) { + const existingField = Field.allFields.find((f) => f.Name === attributeName); + if (existingField) { + return existingField; + } + this.Name = attributeName; + Field.allFields.push(this); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + setValue(value) { + return this.Attribute.setValue(value); } - } - /** - * Sets the visibility state. - * @param visible true to show, false to hide. - */ - setVisible(visible) { - try { - this.controls.forEach((control) => control.setVisible(visible)); - return this; + getAttributeType() { + return this.Attribute.getAttributeType(); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getFormat() { + return this.Attribute.getFormat(); } - } - /** - * Sets the state of the control to either enabled, or disabled. - * @param disabled true to disable, false to enable. - */ - setDisabled(disabled) { - try { - this.controls.forEach((control) => control.setDisabled(disabled)); - return this; + getIsDirty() { + return this.Attribute.getIsDirty(); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getName() { + return this.Attribute.getName(); } - } - /** - * Sets the required level. - * @param requirementLevel The requirement level, as either "none", "required", or "recommended" - */ - setRequiredLevel(requirementLevel) { - try { - this.Attribute.setRequiredLevel(requirementLevel); - return this; + getParent() { + return this.Attribute.getParent(); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getRequiredLevel() { + return this.Attribute.getRequiredLevel(); } - } - /** - * Sets the required level. - * @param required The requirement level, as either false for "none" or true for "required" - */ - setRequired(required) { - try { - this.Attribute.setRequiredLevel(required ? "required" : "none"); - return this; + getSubmitMode() { + return this.Attribute.getSubmitMode(); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getUserPrivilege() { + return this.Attribute.getUserPrivilege(); } - } - /**Fire all "on change" event handlers. */ - fireOnChange() { - try { - this.Attribute.fireOnChange(); - return this; + removeOnChange(handler) { + return this.Attribute.removeOnChange(handler); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + setSubmitMode(submitMode) { + return this.Attribute.setSubmitMode(submitMode); } - } - /** - * Adds a handler or an array of handlers to be called when the attribute's value is changed. - * @param handlers The function reference or an array of function references. - */ - addOnChange(handlers) { - try { - if (Array.isArray(handlers)) { - for (const handler of handlers) { - if (typeof handler !== "function") - throw new Error(`'${handler}' is not a function`); - this.Attribute.removeOnChange(handler); - this.Attribute.addOnChange(handler); - } + getValue() { + return this.Attribute.getValue(); + } + setIsValid(isValid, message) { + return this.Attribute.setIsValid(isValid, message); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`The attribute '${this.Name}' was not found on the form.`)); + } + get controls() { + return this.Attribute.controls; + } + /** + * Gets the value. + * @returns The value. + */ + get Value() { + return this.Attribute.getValue(); + } + set Value(value) { + this.Attribute.setValue(value); + } + /** + * Sets a control-local notification message. + * @param message The message. + * @param uniqueId Unique identifier. + * @returns true if it succeeds, false if it fails. + * @remarks When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon + * appears next to the control. Tapping on the icon will display the message. + */ + setNotification(message, uniqueId) { + try { + if (!message) + throw new Error(`no message was provided.`); + if (!uniqueId) + throw new Error(`no uniqueId was provided.`); + this.controls.forEach((control) => control.setNotification(message, uniqueId)); + return this; } - else { - if (typeof handlers !== "function") - throw new Error(`'${handlers}' is not a function`); - this.Attribute.removeOnChange(handlers); - this.Attribute.addOnChange(handlers); + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); } - return this; } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + /** + * Sets the visibility state. + * @param visible true to show, false to hide. + */ + setVisible(visible) { + try { + this.controls.forEach((control) => control.setVisible(visible)); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } } - } - /** - * Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification. - */ - addNotification(message, notificationLevel, uniqueId, actions) { - try { - if (!uniqueId) - throw new Error(`no uniqueId was provided.`); - if (actions && !Array.isArray(actions)) - throw new Error(`the action parameter is not an array of ControlNotificationAction`); - this.controls.forEach((control) => { - control.addNotification({ - messages: [message], - notificationLevel: notificationLevel, - uniqueId: uniqueId, - actions: actions, + /** + * Sets the state of the control to either enabled, or disabled. + * @param disabled true to disable, false to enable. + */ + setDisabled(disabled) { + try { + this.controls.forEach((control) => control.setDisabled(disabled)); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Sets the required level. + * @param requirementLevel The requirement level, as either "none", "required", or "recommended" + */ + setRequiredLevel(requirementLevel) { + try { + this.Attribute.setRequiredLevel(requirementLevel); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Sets the required level. + * @param required The requirement level, as either false for "none" or true for "required" + */ + setRequired(required) { + try { + this.Attribute.setRequiredLevel(required ? "required" : "none"); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /**Fire all "on change" event handlers. */ + fireOnChange() { + try { + this.Attribute.fireOnChange(); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Adds a handler or an array of handlers to be called when the attribute's value is changed. + * @param handlers The function reference or an array of function references. + */ + addOnChange(handlers) { + try { + if (Array.isArray(handlers)) { + for (const handler of handlers) { + if (typeof handler !== "function") + throw new Error(`'${handler}' is not a function`); + this.Attribute.removeOnChange(handler); + this.Attribute.addOnChange(handler); + } + } + else { + if (typeof handlers !== "function") + throw new Error(`'${handlers}' is not a function`); + this.Attribute.removeOnChange(handlers); + this.Attribute.addOnChange(handlers); + } + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification. + */ + addNotification(message, notificationLevel, uniqueId, actions) { + try { + if (!uniqueId) + throw new Error(`no uniqueId was provided.`); + if (actions && !Array.isArray(actions)) + throw new Error(`the action parameter is not an array of ControlNotificationAction`); + this.controls.forEach((control) => { + control.addNotification({ + messages: [message], + notificationLevel: notificationLevel, + uniqueId: uniqueId, + actions: actions, + }); }); - }); - return this; + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + /** + * Clears the notification identified by uniqueId. + * @param uniqueId (Optional) Unique identifier. + * @returns true if it succeeds, false if it fails. + * @remarks If the uniqueId parameter is not used, the current notification shown will be removed. + */ + removeNotification(uniqueId) { + try { + this.controls.forEach((control) => { + control.clearNotification(uniqueId); + }); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } } } - /** - * Clears the notification identified by uniqueId. - * @param uniqueId (Optional) Unique identifier. - * @returns true if it succeeds, false if it fails. - * @remarks If the uniqueId parameter is not used, the current notification shown will be removed. - */ - removeNotification(uniqueId) { - try { - this.controls.forEach((control) => { - control.clearNotification(uniqueId); - }); - return this; + Class.Field = Field; + class TextField extends Field { + constructor(attribute) { + super(attribute); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getMaxLength() { + return this.Attribute.getMaxLength(); } - } - } - XrmEx.Field = Field; - class TextField extends Field { - constructor(attribute) { - super(attribute); - } - getMaxLength() { - return this.Attribute.getMaxLength(); - } - getFormat() { - return this.Attribute.getFormat(); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - get Value() { - return this.Attribute.getValue() ?? null; - } - set Value(value) { - this.Attribute.setValue(value); - } - } - XrmEx.TextField = TextField; - class NumberField extends Field { - constructor(attribute) { - super(attribute); - } - getFormat() { - return this.Attribute.getFormat(); - } - getMax() { - return this.Attribute.getMax(); - } - getMin() { - return this.Attribute.getMin(); - } - getPrecision() { - return this.Attribute.getPrecision(); - } - setPrecision(precision) { - return this.Attribute.setPrecision(precision); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - get Value() { - return this.Attribute.getValue() ?? null; - } - set Value(value) { - this.Attribute.setValue(value); - } - } - XrmEx.NumberField = NumberField; - class DateField extends Field { - constructor(attribute) { - super(attribute); - } - getFormat() { - return this.Attribute.getFormat(); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - get Value() { - return this.Attribute.getValue() ?? null; - } - set Value(value) { - this.Attribute.setValue(value); - } - } - XrmEx.DateField = DateField; - class BooleanField extends Field { - constructor(attribute) { - super(attribute); - } - getAttributeType() { - return this.Attribute.getAttributeType(); - } - getInitialValue() { - return this.Attribute.getInitialValue(); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - get Value() { - return this.Attribute.getValue() ?? null; - } - set Value(value) { - this.Attribute.setValue(value); - } - } - XrmEx.BooleanField = BooleanField; - class MultiSelectOptionSetField extends Field { - Option; - constructor(attributeName, option) { - super(attributeName); - this.Option = option; - } - getFormat() { - return this.Attribute.getFormat(); - } - getOption(value) { - if (typeof value === "number") { - return this.Attribute.getOption(value); + getFormat() { + return this.Attribute.getFormat(); } - else { - return this.Attribute.getOption(value); + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); } - } - getOptions() { - return this.Attribute.getOptions(); - } - getSelectedOption() { - return this.Attribute.getSelectedOption(); - } - getText() { - return this.Attribute.getText(); - } - getInitialValue() { - return this.Attribute.getInitialValue(); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - get Value() { - return this.Attribute.getValue(); - } - set Value(value) { - if (Array.isArray(value)) { - let values = []; - value.forEach((v) => { - if (typeof v == "number") - values.push(v); - else - values.push(this.Option[v]); - }); - this.Attribute.setValue(values); + get controls() { + return this.Attribute.controls; + } + get Value() { + return this.Attribute.getValue() ?? null; + } + set Value(value) { + this.Attribute.setValue(value); } - else - XrmEx.throwError(`Field Value '${value}' is not an Array`); - } - } - XrmEx.MultiSelectOptionSetField = MultiSelectOptionSetField; - class LookupField extends Field { - _customFilters = []; - constructor(attribute) { - super(attribute); - } - getIsPartyList() { - return this.Attribute.getIsPartyList(); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - /**Gets the id of the first lookup value*/ - get Id() { - return this.Value && this.Value.length > 0 - ? XrmEx.normalizeGuid(this.Value[0].id) - : null; - } - /**Gets the entityType of the first lookup value*/ - get EntityType() { - return this.Value && this.Value.length > 0 - ? this.Value[0].entityType - : null; - } - /**Gets the formatted value of the first lookup value*/ - get FormattedValue() { - return this.Value && this.Value.length > 0 ? this.Value[0].name : null; - } - get Value() { - return this.Attribute.getValue() ?? null; - } - set Value(value) { - this.Attribute.setValue(value); } - /** - * Sets the value of a lookup - * @param id Guid of the record - * @param entityType logicalname of the entity - * @param name formatted value - * @param append if true, adds value to the array instead of replacing it - */ - setLookupValue(id, entityType, name, append = false) { - try { - if (!id) - throw new Error(`no id parameter was provided.`); - if (!entityType) - throw new Error(`no entityType parameter was provided.`); - id = XrmEx.normalizeGuid(id); - const lookupValue = { - id, - entityType, - name, - }; - this.Value = - append && this.Value ? this.Value.concat(lookupValue) : [lookupValue]; - return this; + Class.TextField = TextField; + class NumberField extends Field { + constructor(attribute) { + super(attribute); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getFormat() { + return this.Attribute.getFormat(); + } + getMax() { + return this.Attribute.getMax(); + } + getMin() { + return this.Attribute.getMin(); + } + getPrecision() { + return this.Attribute.getPrecision(); + } + setPrecision(precision) { + return this.Attribute.setPrecision(precision); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); + } + get controls() { + return this.Attribute.controls; + } + get Value() { + return this.Attribute.getValue() ?? null; + } + set Value(value) { + this.Attribute.setValue(value); } } - /** - * Retrieves an entity record. - * @param options (Optional) OData system query options, $select and $expand, to retrieve your data. - * - Use the $select system query option to limit the properties returned by including a comma-separated - * list of property names. This is an important performance best practice. If properties aren’t - * specified using $select, all properties will be returned. - * - Use the $expand system query option to control what data from related entities is returned. If you - * just include the name of the navigation property, you’ll receive all the properties for related - * records. You can limit the properties returned for related records using the $select system query - * option in parentheses after the navigation property name. Use this for both single-valued and - * collection-valued navigation properties. - * - You can also specify multiple query options by using & to separate the query options. - * @example options example: - * options: $select=name&$expand=primarycontactid($select=contactid,fullname) - * @returns On success, returns a promise containing a JSON object with the retrieved attributes and their values. - * @see {@link https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/xrm-webapi/retrieverecord External Link: retrieveRecord (Client API reference)} - */ - async retrieve(options) { - try { - if (!this.Id || !this.EntityType) - return null; - const record = await Xrm.WebApi.retrieveRecord(this.EntityType, this.Id, options); - return record; + Class.NumberField = NumberField; + class DateField extends Field { + constructor(attribute) { + super(attribute); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getFormat() { + return this.Attribute.getFormat(); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); + } + get controls() { + return this.Attribute.controls; + } + get Value() { + return this.Attribute.getValue() ?? null; + } + set Value(value) { + this.Attribute.setValue(value); } } - /** - * Adds an additional custom filter to the lookup, with the "AND" filter operator. - * @param filter Specifies the filter, as a serialized FetchXML "filter" node. - * @param entityLogicalName (Optional) The logical name of the entity. - * @remarks If entityLogicalName is not specified, the filter will be applied to all entities - * valid for the Lookup control. - * @example Example filter: - * - * - */ - addPreFilterToLookup(filterXml, entityLogicalName) { - try { - _addCustomFilter.controls = this.controls; - this.controls.forEach((control) => { - control.addPreSearch(_addCustomFilter); - }); - this._customFilters.push(_addCustomFilter); - return this; + Class.DateField = DateField; + class BooleanField extends Field { + constructor(attribute) { + super(attribute); } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getAttributeType() { + return this.Attribute.getAttributeType(); } - function _addCustomFilter() { - _addCustomFilter.controls.forEach((control) => { - control.addCustomFilter(filterXml, entityLogicalName); - }); + getInitialValue() { + return this.Attribute.getInitialValue(); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); + } + get controls() { + return this.Attribute.controls; + } + get Value() { + return this.Attribute.getValue() ?? null; + } + set Value(value) { + this.Attribute.setValue(value); } } - /** - * Adds an additional custom filter to the lookup, with the "AND" filter operator. - * @param entityLogicalName (Optional) The logical name of the entity. - * @param primaryAttributeIdName (Optional) The logical name of the primary key. - * @param fetchXml Specifies the FetchXML used to filter. - * @remarks If entityLogicalName is not specified, the filter will be applied to all entities - * valid for the Lookup control. - * @example Example fetchXml: - * - * - * - * - * - * - */ - async addPreFilterToLookupAdvanced(entityLogicalName, primaryAttributeIdName, fetchXml) { - try { - const result = await Xrm.WebApi.online.retrieveMultipleRecords(entityLogicalName, "?fetchXml=" + fetchXml); - const data = result.entities; - let filteredEntities = ""; - _addCustomFilter.controls = this.controls; - data.forEach((item) => { - filteredEntities += `${item[primaryAttributeIdName]}`; - }); - fetchXml = filteredEntities - ? `${filteredEntities}` - : ``; - this.controls.forEach((control) => { - control.addPreSearch(_addCustomFilter); - }); - this._customFilters.push(_addCustomFilter); + Class.BooleanField = BooleanField; + class MultiSelectOptionSetField extends Field { + Option; + constructor(attributeName, option) { + super(attributeName); + this.Option = option; } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getFormat() { + return this.Attribute.getFormat(); } - function _addCustomFilter() { - _addCustomFilter.controls.forEach((control) => { - control.addCustomFilter(fetchXml, entityLogicalName); - }); + getOption(value) { + if (typeof value === "number") { + return this.Attribute.getOption(value); + } + else { + return this.Attribute.getOption(value); + } + } + getOptions() { + return this.Attribute.getOptions(); + } + getSelectedOption() { + return this.Attribute.getSelectedOption(); + } + getText() { + return this.Attribute.getText(); + } + getInitialValue() { + return this.Attribute.getInitialValue(); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); + } + get controls() { + return this.Attribute.controls; + } + get Value() { + return this.Attribute.getValue(); + } + set Value(value) { + if (Array.isArray(value)) { + let values = []; + value.forEach((v) => { + if (typeof v == "number") + values.push(v); + else + values.push(this.Option[v]); + }); + this.Attribute.setValue(values); + } + else + XrmEx.throwError(`Field Value '${value}' is not an Array`); } } - /** - * Removes all filters set on the current lookup attribute by using addPreFilterToLookup or addPreFilterToLookupAdvanced - */ - clearPreFilterFromLookup() { - try { - this._customFilters.forEach((customFilter) => { + Class.MultiSelectOptionSetField = MultiSelectOptionSetField; + class LookupField extends Field { + _customFilters = []; + constructor(attribute) { + super(attribute); + } + getIsPartyList() { + return this.Attribute.getIsPartyList(); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); + } + get controls() { + return this.Attribute.controls; + } + /**Gets the id of the first lookup value*/ + get Id() { + return this.Value && this.Value.length > 0 + ? XrmEx.normalizeGuid(this.Value[0].id) + : null; + } + /**Gets the entityType of the first lookup value*/ + get EntityType() { + return this.Value && this.Value.length > 0 + ? this.Value[0].entityType + : null; + } + /**Gets the formatted value of the first lookup value*/ + get FormattedValue() { + return this.Value && this.Value.length > 0 ? this.Value[0].name : null; + } + get Value() { + return this.Attribute.getValue() ?? null; + } + set Value(value) { + this.Attribute.setValue(value); + } + /** + * Sets the value of a lookup + * @param id Guid of the record + * @param entityType logicalname of the entity + * @param name formatted value + * @param append if true, adds value to the array instead of replacing it + */ + setLookupValue(id, entityType, name, append = false) { + try { + if (!id) + throw new Error(`no id parameter was provided.`); + if (!entityType) + throw new Error(`no entityType parameter was provided.`); + id = XrmEx.normalizeGuid(id); + const lookupValue = { + id, + entityType, + name, + }; + this.Value = + append && this.Value ? this.Value.concat(lookupValue) : [lookupValue]; + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Retrieves an entity record. + * @param options (Optional) OData system query options, $select and $expand, to retrieve your data. + * - Use the $select system query option to limit the properties returned by including a comma-separated + * list of property names. This is an important performance best practice. If properties aren’t + * specified using $select, all properties will be returned. + * - Use the $expand system query option to control what data from related entities is returned. If you + * just include the name of the navigation property, you’ll receive all the properties for related + * records. You can limit the properties returned for related records using the $select system query + * option in parentheses after the navigation property name. Use this for both single-valued and + * collection-valued navigation properties. + * - You can also specify multiple query options by using & to separate the query options. + * @example options example: + * options: $select=name&$expand=primarycontactid($select=contactid,fullname) + * @returns On success, returns a promise containing a JSON object with the retrieved attributes and their values. + * @see {@link https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/xrm-webapi/retrieverecord External Link: retrieveRecord (Client API reference)} + */ + async retrieve(options) { + try { + if (!this.Id || !this.EntityType) + return null; + const record = await Xrm.WebApi.retrieveRecord(this.EntityType, this.Id, options); + return record; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Adds an additional custom filter to the lookup, with the "AND" filter operator. + * @param filter Specifies the filter, as a serialized FetchXML "filter" node. + * @param entityLogicalName (Optional) The logical name of the entity. + * @remarks If entityLogicalName is not specified, the filter will be applied to all entities + * valid for the Lookup control. + * @example Example filter: + * + * + */ + addPreFilterToLookup(filterXml, entityLogicalName) { + try { + _addCustomFilter.controls = this.controls; this.controls.forEach((control) => { - control.removePreSearch(customFilter); + control.addPreSearch(_addCustomFilter); }); - }); - return this; + this._customFilters.push(_addCustomFilter); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + function _addCustomFilter() { + _addCustomFilter.controls.forEach((control) => { + control.addCustomFilter(filterXml, entityLogicalName); + }); + } } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + /** + * Adds an additional custom filter to the lookup, with the "AND" filter operator. + * @param entityLogicalName (Optional) The logical name of the entity. + * @param primaryAttributeIdName (Optional) The logical name of the primary key. + * @param fetchXml Specifies the FetchXML used to filter. + * @remarks If entityLogicalName is not specified, the filter will be applied to all entities + * valid for the Lookup control. + * @example Example fetchXml: + * + * + * + * + * + * + */ + async addPreFilterToLookupAdvanced(entityLogicalName, primaryAttributeIdName, fetchXml) { + try { + const result = await Xrm.WebApi.online.retrieveMultipleRecords(entityLogicalName, "?fetchXml=" + fetchXml); + const data = result.entities; + let filteredEntities = ""; + _addCustomFilter.controls = this.controls; + data.forEach((item) => { + filteredEntities += `${item[primaryAttributeIdName]}`; + }); + fetchXml = filteredEntities + ? `${filteredEntities}` + : ``; + this.controls.forEach((control) => { + control.addPreSearch(_addCustomFilter); + }); + this._customFilters.push(_addCustomFilter); + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + function _addCustomFilter() { + _addCustomFilter.controls.forEach((control) => { + control.addCustomFilter(fetchXml, entityLogicalName); + }); + } + } + /** + * Removes all filters set on the current lookup attribute by using addPreFilterToLookup or addPreFilterToLookupAdvanced + */ + clearPreFilterFromLookup() { + try { + this._customFilters.forEach((customFilter) => { + this.controls.forEach((control) => { + control.removePreSearch(customFilter); + }); + }); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } } } - } - XrmEx.LookupField = LookupField; - class OptionsetField extends Field { - _control; - Option; - constructor(attributeName, option) { - super(attributeName); - this.Option = option; - } - getFormat() { - return this.Attribute.getFormat(); - } - getOption(value) { - if (typeof value === "number") { - return this.Attribute.getOption(value); + Class.LookupField = LookupField; + class OptionsetField extends Field { + _control; + Option; + constructor(attributeName, option) { + super(attributeName); + this.Option = option; } - else { - return this.Attribute.getOption(value); + getFormat() { + return this.Attribute.getFormat(); } - } - getOptions() { - return this.Attribute.getOptions(); - } - getSelectedOption() { - return this.Attribute.getSelectedOption(); - } - getText() { - return this.Attribute.getText(); - } - getInitialValue() { - return this.Attribute.getInitialValue(); - } - get Attribute() { - return (this._attribute ??= - Form.formContext.getAttribute(this.Name) ?? - XrmEx.throwError(`Field '${this.Name}' does not exist`)); - } - get controls() { - return this.Attribute.controls; - } - get control() { - return (this._control ??= - Form.formContext.getControl(this.Name) ?? - XrmEx.throwError(`Control '${this.Name}' does not exist`)); - } - get Value() { - return this.Attribute.getValue(); - } - set Value(value) { - if (typeof value == "number") - this.Attribute.setValue(value); - else - this.Attribute.setValue(this.Option[value]); - } - /** - * Adds an option. - * - * @param values an array with the option values to add - * @param index (Optional) zero-based index of the option. - * - * @remarks This method does not check that the values within the options you add are valid. - * If index is not provided, the new option will be added to the end of the list. - */ - addOption(values, index) { - try { - if (!Array.isArray(values)) - throw new Error(`values is not an Array:\nvalues: '${values}'`); - const optionSetValues = this.control.getAttribute().getOptions() ?? []; - for (const element of optionSetValues) { - if (values.includes(element.value)) { - this.control.addOption(element, index); - } + getOption(value) { + if (typeof value === "number") { + return this.Attribute.getOption(value); + } + else { + return this.Attribute.getOption(value); } - return this; } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + getOptions() { + return this.Attribute.getOptions(); } - } - /** - * Removes the option matching the value. - * - * @param value The value. - */ - removeOption(values) { - try { - if (!Array.isArray(values)) - throw new Error(`values is not an Array:\nvalues: '${values}'`); - const optionSetValues = this.control.getAttribute().getOptions() ?? []; - for (const element of optionSetValues) { - if (values.includes(element.value)) { - this.control.removeOption(element.value); + getSelectedOption() { + return this.Attribute.getSelectedOption(); + } + getText() { + return this.Attribute.getText(); + } + getInitialValue() { + return this.Attribute.getInitialValue(); + } + get Attribute() { + return (this._attribute ??= + Form.formContext.getAttribute(this.Name) ?? + XrmEx.throwError(`Field '${this.Name}' does not exist`)); + } + get controls() { + return this.Attribute.controls; + } + get control() { + return (this._control ??= + Form.formContext.getControl(this.Name) ?? + XrmEx.throwError(`Control '${this.Name}' does not exist`)); + } + get Value() { + return this.Attribute.getValue(); + } + set Value(value) { + if (typeof value == "number") + this.Attribute.setValue(value); + else + this.Attribute.setValue(this.Option[value]); + } + /** + * Adds an option. + * + * @param values an array with the option values to add + * @param index (Optional) zero-based index of the option. + * + * @remarks This method does not check that the values within the options you add are valid. + * If index is not provided, the new option will be added to the end of the list. + */ + addOption(values, index) { + try { + if (!Array.isArray(values)) + throw new Error(`values is not an Array:\nvalues: '${values}'`); + const optionSetValues = this.control.getAttribute().getOptions() ?? []; + for (const element of optionSetValues) { + if (values.includes(element.value)) { + this.control.addOption(element, index); + } } + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); } - return this; } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + /** + * Removes the option matching the value. + * + * @param value The value. + */ + removeOption(values) { + try { + if (!Array.isArray(values)) + throw new Error(`values is not an Array:\nvalues: '${values}'`); + const optionSetValues = this.control.getAttribute().getOptions() ?? []; + for (const element of optionSetValues) { + if (values.includes(element.value)) { + this.control.removeOption(element.value); + } + } + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } + } + /** + * Clears all options. + */ + clearOptions() { + try { + this.control.clearOptions(); + return this; + } + catch (error) { + throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + } } } - /** - * Clears all options. - */ - clearOptions() { - try { - this.control.clearOptions(); - return this; + Class.OptionsetField = OptionsetField; + class Section { + Name; + _section; + parentTab; + constructor(name) { + this.Name = name; } - catch (error) { - throw new Error(`XrmEx.${XrmEx.getFunctionName()}:\n${error.message}`); + get Section() { + return (this._section ??= + this.parentTab.sections.get(this.Name) ?? + XrmEx.throwError(`The section '${this.Name}' was not found on the form.`)); } - } - } - XrmEx.OptionsetField = OptionsetField; - class Section { - Name; - _section; - parentTab; - constructor(name) { - this.Name = name; - } - get Section() { - return (this._section ??= - this.parentTab.sections.get(this.Name) ?? - XrmEx.throwError(`The section '${this.Name}' was not found on the form.`)); - } - getName() { - return this.Section.getName(); - } - getParent() { - return this.Section.getParent(); - } - controls; - setVisible(visible) { - return this.Section.setVisible(visible); - } - getVisible() { - return this.Section.getVisible(); - } - getLabel() { - return this.Section.getLabel(); - } - setLabel(label) { - return this.Section.setLabel(label); - } - } - XrmEx.Section = Section; - class Tab { - Name; - _tab; - Section; - constructor(name, section) { - this.Name = name; - this.Section = section; - for (let key in section) { - section[key].parentTab = this; + getName() { + return this.Section.getName(); + } + getParent() { + return this.Section.getParent(); + } + controls; + setVisible(visible) { + return this.Section.setVisible(visible); + } + getVisible() { + return this.Section.getVisible(); + } + getLabel() { + return this.Section.getLabel(); + } + setLabel(label) { + return this.Section.setLabel(label); } } - sections; - get Tab() { - return (this._tab ??= - Form.formContext.ui.tabs.get(this.Name) ?? - XrmEx.throwError(`The tab '${this.Name}' was not found on the form.`)); - } - addTabStateChange(handler) { - return this.Tab.addTabStateChange(handler); - } - getDisplayState() { - return this.Tab.getDisplayState(); - } - getName() { - return this.Tab.getName(); - } - getParent() { - return this.Tab.getParent(); - } - removeTabStateChange(handler) { - return this.Tab.removeTabStateChange(handler); - } - setDisplayState(displayState) { - return this.Tab.setDisplayState(displayState); - } - setVisible(visible) { - return this.Tab.setVisible(visible); - } - getVisible() { - return this.Tab.getVisible(); - } - getLabel() { - return this.Tab.getLabel(); - } - setLabel(label) { - return this.Tab.setLabel(label); - } - setFocus() { - return this.Tab.setFocus(); - } - } - XrmEx.Tab = Tab; - class GridControl { - Name; - _gridControl; - constructor(name) { - this.Name = name; - } - get GridControl() { - return ((this._gridControl ??= - Form.formContext.getControl(this.Name)) ?? - XrmEx.throwError(`The grid '${this.Name}' was not found on the form.`)); - } - get Grid() { - return this.GridControl.getGrid(); - } - addOnLoad(handler) { - return this.GridControl.addOnLoad(handler); - } - getContextType() { - return this.GridControl.getContextType(); - } - getEntityName() { - return this.GridControl.getEntityName(); - } - getFetchXml() { - return this.GridControl.getFetchXml(); - } - getGrid() { - return this.GridControl.getGrid(); - } - getRelationship() { - return this.GridControl.getRelationship(); - } - getUrl(client) { - return this.GridControl.getUrl(client); - } - getViewSelector() { - return this.GridControl.getViewSelector(); - } - openRelatedGrid() { - return this.GridControl.openRelatedGrid(); - } - refresh() { - return this.GridControl.refresh(); - } - refreshRibbon() { - return this.GridControl.refreshRibbon(); - } - removeOnLoad(handler) { - return this.GridControl.removeOnLoad(handler); - } - getControlType() { - return this.GridControl.getControlType(); - } - getName() { - return this.GridControl.getName(); - } - getParent() { - return this.GridControl.getParent(); - } - getLabel() { - return this.GridControl.getLabel(); - } - setLabel(label) { - return this.GridControl.setLabel(label); - } - getVisible() { - return this.GridControl.getVisible(); + Class.Section = Section; + class Tab { + Name; + _tab; + Section; + constructor(name, section) { + this.Name = name; + this.Section = section; + for (let key in section) { + section[key].parentTab = this; + } + } + sections; + get Tab() { + return (this._tab ??= + Form.formContext.ui.tabs.get(this.Name) ?? + XrmEx.throwError(`The tab '${this.Name}' was not found on the form.`)); + } + addTabStateChange(handler) { + return this.Tab.addTabStateChange(handler); + } + getDisplayState() { + return this.Tab.getDisplayState(); + } + getName() { + return this.Tab.getName(); + } + getParent() { + return this.Tab.getParent(); + } + removeTabStateChange(handler) { + return this.Tab.removeTabStateChange(handler); + } + setDisplayState(displayState) { + return this.Tab.setDisplayState(displayState); + } + setVisible(visible) { + return this.Tab.setVisible(visible); + } + getVisible() { + return this.Tab.getVisible(); + } + getLabel() { + return this.Tab.getLabel(); + } + setLabel(label) { + return this.Tab.setLabel(label); + } + setFocus() { + return this.Tab.setFocus(); + } } - setVisible(visible) { - return this.GridControl.setVisible(visible); + Class.Tab = Tab; + class GridControl { + Name; + _gridControl; + constructor(name) { + this.Name = name; + } + get GridControl() { + return ((this._gridControl ??= + Form.formContext.getControl(this.Name)) ?? + XrmEx.throwError(`The grid '${this.Name}' was not found on the form.`)); + } + get Grid() { + return this.GridControl.getGrid(); + } + addOnLoad(handler) { + return this.GridControl.addOnLoad(handler); + } + getContextType() { + return this.GridControl.getContextType(); + } + getEntityName() { + return this.GridControl.getEntityName(); + } + getFetchXml() { + return this.GridControl.getFetchXml(); + } + getGrid() { + return this.GridControl.getGrid(); + } + getRelationship() { + return this.GridControl.getRelationship(); + } + getUrl(client) { + return this.GridControl.getUrl(client); + } + getViewSelector() { + return this.GridControl.getViewSelector(); + } + openRelatedGrid() { + return this.GridControl.openRelatedGrid(); + } + refresh() { + return this.GridControl.refresh(); + } + refreshRibbon() { + return this.GridControl.refreshRibbon(); + } + removeOnLoad(handler) { + return this.GridControl.removeOnLoad(handler); + } + getControlType() { + return this.GridControl.getControlType(); + } + getName() { + return this.GridControl.getName(); + } + getParent() { + return this.GridControl.getParent(); + } + getLabel() { + return this.GridControl.getLabel(); + } + setLabel(label) { + return this.GridControl.setLabel(label); + } + getVisible() { + return this.GridControl.getVisible(); + } + setVisible(visible) { + return this.GridControl.setVisible(visible); + } } - } - XrmEx.GridControl = GridControl; + Class.GridControl = GridControl; + })(Class = XrmEx.Class || (XrmEx.Class = {})); })(XrmEx || (XrmEx = {})); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWHJtRXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvWHJtRXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOERBQThEO0FBa0M5RCxNQUFNLEtBQVcsS0FBSyxDQXM1Q3JCO0FBdDVDRCxXQUFpQixLQUFLO0lBQ3BCOzs7O09BSUc7SUFDSCxTQUFnQixVQUFVLENBQUMsWUFBb0I7UUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRmUsZ0JBQVUsYUFFekIsQ0FBQTtJQUNEOzs7T0FHRztJQUNILFNBQWdCLGVBQWU7UUFDN0IsSUFBSTtZQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RSxNQUFNLG1CQUFtQixHQUN2QixVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25FLE1BQU0saUJBQWlCLEdBQ3JCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRW5FLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBZGUscUJBQWUsa0JBYzlCLENBQUE7SUFDRDs7Ozs7O09BTUc7SUFDSSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLE9BQWUsRUFDZixLQUErQyxFQUMvQyxlQUFlLEdBQUcsS0FBSztRQUV2QixNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxDQUFDO1lBQ1YsS0FBSyxFQUFFLENBQUM7WUFDUixPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHO1lBQ25CLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLFlBQVk7WUFDbkIsT0FBTztZQUNQLGVBQWU7U0FDaEIsQ0FBQztRQUNGLElBQUk7WUFDRixPQUFPLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxRDtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUF2QnFCLDJCQUFxQix3QkF1QjFDLENBQUE7SUFDRDs7OztPQUlHO0lBQ0ksS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxRQUFnQjtRQUVoQixJQUFJO1lBQ0YsT0FBTyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEQ7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBUnFCLDhCQUF3QiwyQkFRN0MsQ0FBQTtJQUNEOzs7Ozs7T0FNRztJQUNJLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsNkJBQXFDO1FBRXJDLE9BQU8sZUFBZSxDQUFDLGtDQUFrQyxFQUFFO1lBQ3pEO2dCQUNFLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSw2QkFBNkI7YUFDckM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBVnFCLGlDQUEyQiw4QkFVaEQsQ0FBQTtJQUNEOzs7T0FHRztJQUNILElBQUksT0FBTyxHQUFHO1FBQ1osTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUMzRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO1FBQzNFLE9BQU8sRUFBRTtZQUNQLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLFNBQVM7U0FDbEI7UUFDRCxRQUFRLEVBQUU7WUFDUixRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLFFBQVE7U0FDakI7UUFDRCxlQUFlLEVBQUU7WUFDZixRQUFRLEVBQUUscUJBQXFCO1lBQy9CLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLFFBQVE7U0FDakI7UUFDRCxPQUFPLEVBQUU7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxRQUFRO1NBQ2pCO1FBQ0QsTUFBTSxFQUFFO1lBQ04sUUFBUSxFQUFFLHFCQUFxQjtZQUMvQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxRQUFRO1NBQ2pCO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDaEIsUUFBUSxFQUFFLGlDQUFpQztZQUMzQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxRQUFRO1NBQ2pCO1FBQ0QsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUMxRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO1FBQzNFLFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLFFBQVE7U0FDakI7S0FDRixDQUFDO0lBQ0Y7Ozs7O09BS0c7SUFDSCxTQUFnQix5QkFBeUIsQ0FDdkMsZ0JBQWtDO1FBRWxDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUJBQXFCLGdCQUFnQixDQUFDLElBQUksb0JBQW9CLGdCQUFnQixDQUFDLElBQUksb0JBQW9CLENBQ3hHLENBQUM7UUFDSixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ2pELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxnQkFBZ0IsQ0FBQyxLQUFLLHFCQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLGlDQUFpQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUNsSyxJQUNFLGdCQUFnQixDQUFDLElBQUksS0FBSyxpQkFBaUI7WUFDM0MsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFDbEM7WUFDQSxJQUNFLENBQUMsZ0JBQWdCLENBQUMsS0FBSztnQkFDdkIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDNUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUNwRDtnQkFDQSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDckM7WUFDRCxPQUFPLENBQ0wsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QixDQUFDLFFBQVEsR0FBRyxTQUFTLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUMzRDthQUFNLElBQUksZ0JBQWdCLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO1lBQ3ZELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztnQkFDdEMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDMUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLE9BQU8sQ0FBQyxLQUFLLFFBQVE7b0JBQ3JCLENBQUMsQ0FBQztvQkFDRixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQ2xDLEVBQ0Q7Z0JBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7YUFBTSxJQUFJLGdCQUFnQixDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDL0MsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDckM7U0FDRjthQUFNO1lBQ0wsSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFO2dCQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDckM7U0FDRjtJQUNILENBQUM7SUE5Q2UsK0JBQXlCLDRCQThDeEMsQ0FBQTtJQUNEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxVQUFrQixFQUNsQixpQkFBcUMsRUFDckMsV0FBNkI7UUFFN0IsTUFBTSxtQkFBbUIsR0FBUSxFQUFFLENBQUM7UUFDcEMsSUFBSSxXQUFXO1lBQ2IsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsV0FBVztnQkFDbEIsSUFBSSxFQUFFLGlCQUFpQjthQUN4QixDQUFDLENBQUM7UUFDTCxLQUFLLE1BQU0sZ0JBQWdCLElBQUksaUJBQWlCLEVBQUU7WUFDaEQseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM1QyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFDM0MsUUFBUSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRO2dCQUNqRCxrQkFBa0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCO2FBQ3RFLENBQUM7U0FDSDtRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3ZCO1lBQ0UsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDN0MsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGFBQWEsRUFBRSxVQUFVO2dCQUN6QixjQUFjLEVBQUUsbUJBQW1CO2FBQ3BDLENBQUM7U0FDSCxFQUNELEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksUUFBUSxDQUFDLEVBQUU7WUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQWhDcUIsbUJBQWEsZ0JBZ0NsQyxDQUFBO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssVUFBVSxlQUFlLENBQ25DLFlBQW9CLEVBQ3BCLGlCQUFxQyxFQUNyQyxXQUE2QjtRQUU3QixNQUFNLG1CQUFtQixHQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFdBQVc7WUFDYixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxXQUFXO2dCQUNsQixJQUFJLEVBQUUsaUJBQWlCO2FBQ3hCLENBQUMsQ0FBQztRQUNMLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxpQkFBaUIsRUFBRTtZQUNoRCx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUMzQyxRQUFRLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVE7Z0JBQ2pELGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0I7YUFDdEUsQ0FBQztTQUNIO1FBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDdkI7WUFDRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM3QyxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsYUFBYSxFQUFFLFlBQVk7Z0JBQzNCLGNBQWMsRUFBRSxtQkFBbUI7YUFDcEMsQ0FBQztTQUNILEVBQ0QsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUFFLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBaENxQixxQkFBZSxrQkFnQ3BDLENBQUE7SUFFRDs7OztPQUlHO0lBQ0gsU0FBZ0IsYUFBYSxDQUFDLElBQVk7UUFDeEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFKZSxtQkFBYSxnQkFJNUIsQ0FBQTtJQUNEOzs7OztPQUtHO0lBQ0ksS0FBSyxVQUFVLGVBQWUsQ0FDbkMsS0FBYSxFQUNiLElBQVk7UUFFWixJQUFJO1lBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0QyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNuQixJQUFJLEtBQUssR0FBRyxZQUFZLENBQ3RCLEdBQUcsRUFDSCwwQ0FBMEMsQ0FDM0MsQ0FBQztnQkFDRixJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7b0JBQ2YsY0FBYyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7aUJBQy9CO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUM1QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUNuRCxFQUFFLENBQ0gsQ0FBQztZQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3BCLFlBQVksQ0FBQyxVQUFVLEVBQUUsMENBQTBDLENBQUMsRUFDcEUsSUFBSSxDQUNMLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6RCxPQUFPLE1BQU0sR0FBRyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQ3pDO2dCQUNFLGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLElBQUk7Z0JBQ0osS0FBSzthQUNOLEVBQ0Q7Z0JBQ0UsTUFBTTtnQkFDTixLQUFLO2FBQ04sQ0FDRixDQUFDO1NBQ0g7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDbEU7UUFDRDs7Ozs7OztXQU9HO1FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBWSxFQUFFLElBQVk7WUFDOUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBdkRxQixxQkFBZSxrQkF1RHBDLENBQUE7SUFDRDs7T0FFRztJQUNILE1BQWEsSUFBSTtRQUNMLE1BQU0sQ0FBQyxZQUFZLENBQWtCO1FBQ3JDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBMEI7UUFDNUQsZ0JBQWUsQ0FBQztRQUNoQixpREFBaUQ7UUFDakQsTUFBTSxLQUFLLFdBQVc7WUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNCLENBQUM7UUFDRCxxREFBcUQ7UUFDckQsTUFBTSxLQUFLLGdCQUFnQjtZQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNoQyxDQUFDO1FBQ0Qsb0RBQW9EO1FBQ3BELE1BQU0sS0FBSyxlQUFlO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsQ0FBQztRQUNELGlEQUFpRDtRQUNqRCxNQUFNLEtBQUssV0FBVyxDQUFDLE9BQWtEO1lBQ3ZFLElBQUksZ0JBQWdCLElBQUksT0FBTyxFQUFFO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUM5QztpQkFBTSxJQUFJLE1BQU0sSUFBSSxPQUFPO2dCQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDOztnQkFFeEQsTUFBTSxJQUFJLEtBQUssQ0FDYixnR0FBZ0csQ0FDakcsQ0FBQztRQUNOLENBQUM7UUFDRCxzREFBc0Q7UUFDdEQsTUFBTSxLQUFLLGdCQUFnQixDQUN6QixPQUFrRDtZQUVsRCxJQUFJLGdCQUFnQixJQUFJLE9BQU8sRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztnQkFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDOUM7aUJBQU0sSUFBSSxNQUFNLElBQUksT0FBTztnQkFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQzs7Z0JBRXhELE1BQU0sSUFBSSxLQUFLLENBQ2IscUdBQXFHLENBQ3RHLENBQUM7UUFDTixDQUFDO1FBQ0QsNkNBQTZDO1FBQzdDLE1BQU0sS0FBSyxRQUFRO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLFFBQVE7WUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELGlEQUFpRDtRQUNqRCxNQUFNLEtBQUssV0FBVztZQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsaURBQWlEO1FBQ2pELE1BQU0sS0FBSyxXQUFXO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRDs7Ozs7Ozs7OztXQVVHO1FBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUN4QixPQUFlLEVBQ2YsS0FBZ0MsRUFDaEMsUUFBZ0I7WUFFaEIsSUFBSTtnQkFDRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUM1QyxPQUFPLEVBQ1AsS0FBSyxFQUNMLFFBQVEsQ0FDVCxDQUFDO2FBQ0g7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN4RTtRQUNILENBQUM7UUFDRDs7OztXQUlHO1FBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQWdCO1lBQzVDLElBQUk7Z0JBQ0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1RDtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUNEOztXQUVHO1FBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUMxQixRQUV3QztZQUV4QyxJQUFJO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM1QixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdkI7Z0JBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMzQixJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRTt3QkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8scUJBQXFCLENBQUMsQ0FBQztxQkFDbkQ7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUNEOzs7OztXQUtHO1FBQ0gsTUFBTSxDQUFDLHlCQUF5QixDQUM5QixRQUV3QztZQUV4QyxJQUFJO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM1QixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdkI7Z0JBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMzQixJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRTt3QkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8scUJBQXFCLENBQUMsQ0FBQztxQkFDbkQ7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUNEOzs7V0FHRztRQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FDMUIsUUFFd0M7WUFFeEMsSUFBSTtnQkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDNUIsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3ZCO2dCQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUU7d0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLHFCQUFxQixDQUFDLENBQUM7cUJBQ25EO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0MsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUNEOzs7V0FHRztRQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsTUFBZSxFQUNmLFFBRXdDLEVBQ3hDLE9BQWlCO1lBRWpCLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzVCLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN2QjtnQkFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzNCLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFO3dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxxQkFBcUIsQ0FBQyxDQUFDO3FCQUNuRDtvQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ3ZCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksT0FBTyxFQUFFO29CQUNYLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDdkIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDakMsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztLQUNGO0lBcE1ZLFVBQUksT0FvTWhCLENBQUE7SUFDRDs7T0FFRztJQUNILE1BQWEsS0FBSztRQUNULE1BQU0sQ0FBQyxTQUFTLEdBQVksRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBVTtRQUNwQixVQUFVLENBQTRCO1FBRWhELFlBQVksYUFBcUI7WUFDL0IsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FDaEMsQ0FBQztZQUNGLElBQUksYUFBYSxFQUFFO2dCQUNqQixPQUFPLGFBQWEsQ0FBQzthQUN0QjtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxRQUFRLENBQUMsS0FBVTtZQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxnQkFBZ0I7WUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsU0FBUztZQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsVUFBVTtZQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTztZQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsU0FBUztZQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsZ0JBQWdCO1lBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUNELGFBQWE7WUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELGdCQUFnQjtZQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFDRCxjQUFjLENBQUMsT0FBZ0Q7WUFDN0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsYUFBYSxDQUFDLFVBQTBCO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELFFBQVE7WUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELFVBQVUsQ0FBQyxPQUFnQixFQUFFLE9BQWdCO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFXLFNBQVM7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUN4QyxLQUFLLENBQUMsVUFBVSxDQUNkLGtCQUFrQixJQUFJLENBQUMsSUFBSSw4QkFBOEIsQ0FDMUQsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELElBQVcsUUFBUTtZQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ2pDLENBQUM7UUFFRDs7O1dBR0c7UUFDSCxJQUFXLEtBQUs7WUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQVcsS0FBSyxDQUFDLEtBQVU7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVEOzs7Ozs7O1dBT0c7UUFDSSxlQUFlLENBQUMsT0FBZSxFQUFFLFFBQWdCO1lBQ3RELElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE9BQU87b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsUUFBUTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQzNDLENBQUM7Z0JBQ0YsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUVEOzs7V0FHRztRQUNJLFVBQVUsQ0FBQyxPQUFnQjtZQUNoQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN4RTtRQUNILENBQUM7UUFFRDs7O1dBR0c7UUFDSSxXQUFXLENBQUMsUUFBaUI7WUFDbEMsSUFBSTtnQkFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDO1FBRUQ7OztXQUdHO1FBQ0ksZ0JBQWdCLENBQ3JCLGdCQUFpRDtZQUVqRCxJQUFJO2dCQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbEQsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUVEOzs7V0FHRztRQUNJLFdBQVcsQ0FBQyxRQUFpQjtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDO1FBRUQsMENBQTBDO1FBQ25DLFlBQVk7WUFDakIsSUFBSTtnQkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5QixPQUFPLElBQUksQ0FBQzthQUNiO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDO1FBRUQ7OztXQUdHO1FBQ0ksV0FBVyxDQUNoQixRQUV3QztZQUV4QyxJQUFJO2dCQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDM0IsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7d0JBQzlCLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVTs0QkFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8scUJBQXFCLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUNyQztpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVU7d0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxRQUFRLHFCQUFxQixDQUFDLENBQUM7b0JBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdEM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ0ksZUFBZSxDQUNwQixPQUFlLEVBQ2YsaUJBQTZDLEVBQzdDLFFBQWdCLEVBQ2hCLE9BQWtEO1lBRWxELElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFFBQVE7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO29CQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRSxDQUNwRSxDQUFDO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ2hDLE9BQU8sQ0FBQyxlQUFlLENBQUM7d0JBQ3RCLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzt3QkFDbkIsaUJBQWlCLEVBQUUsaUJBQWlCO3dCQUNwQyxRQUFRLEVBQUUsUUFBUTt3QkFDbEIsT0FBTyxFQUFFLE9BQU87cUJBQ2pCLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLElBQUksQ0FBQzthQUNiO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDO1FBQ0Q7Ozs7O1dBS0c7UUFDSCxrQkFBa0IsQ0FBQyxRQUFnQjtZQUNqQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ2hDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQzs7SUE3T1UsV0FBSyxRQThPakIsQ0FBQTtJQUNELE1BQWEsU0FDWCxTQUFRLEtBQUs7UUFJYixZQUFZLFNBQWlCO1lBQzNCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsWUFBWTtZQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsU0FBUztZQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQTBDLENBQUM7UUFDNUUsQ0FBQztRQUNELElBQUksU0FBUztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLO1lBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsS0FBYTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQ0Y7SUE1QlksZUFBUyxZQTRCckIsQ0FBQTtJQUNELE1BQWEsV0FDWCxTQUFRLEtBQUs7UUFJYixZQUFZLFNBQWlCO1lBQzNCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsU0FBUztZQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQTJDLENBQUM7UUFDN0UsQ0FBQztRQUNELE1BQU07WUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELE1BQU07WUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELFlBQVk7WUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUNELFlBQVksQ0FBQyxTQUFpQjtZQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLFNBQVM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksUUFBUTtZQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksS0FBSztZQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDM0MsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEtBQWE7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUNGO0lBckNZLGlCQUFXLGNBcUN2QixDQUFBO0lBQ0QsTUFBYSxTQUFVLFNBQVEsS0FBSztRQUVsQyxZQUFZLFNBQWlCO1lBQzNCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsU0FBUztZQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQXdDLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksU0FBUztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLO1lBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsS0FBVztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQ0Y7SUF0QlksZUFBUyxZQXNCckIsQ0FBQTtJQUNELE1BQWEsWUFDWCxTQUFRLEtBQUs7UUFJYixZQUFZLFNBQWlCO1lBQzNCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsZ0JBQWdCO1lBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUNELGVBQWU7WUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksU0FBUztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLO1lBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsS0FBYztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQ0Y7SUE1Qlksa0JBQVksZUE0QnhCLENBQUE7SUFDRCxNQUFhLHlCQUNYLFNBQVEsS0FBSztRQUliLE1BQU0sQ0FBVTtRQUNoQixZQUFZLGFBQXFCLEVBQUUsTUFBZ0I7WUFDakQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTO1lBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBNkMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQXNCO1lBQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEM7UUFDSCxDQUFDO1FBQ0QsVUFBVTtZQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsaUJBQWlCO1lBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELGVBQWU7WUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksU0FBUztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLO1lBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFtQztZQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNsQixJQUFJLE9BQU8sQ0FBQyxJQUFJLFFBQVE7d0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7d0JBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNqQzs7Z0JBQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7S0FDRjtJQXJEWSwrQkFBeUIsNEJBcURyQyxDQUFBO0lBQ0QsTUFBYSxXQUNYLFNBQVEsS0FBSztRQUlILGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDbkMsWUFBWSxTQUFpQjtZQUMzQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUNELGNBQWM7WUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksU0FBUztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsMENBQTBDO1FBQzFDLElBQUksRUFBRTtZQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNYLENBQUM7UUFDRCxrREFBa0Q7UUFDbEQsSUFBSSxVQUFVO1lBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDWCxDQUFDO1FBQ0QsdURBQXVEO1FBQ3ZELElBQUksY0FBYztZQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pFLENBQUM7UUFDRCxJQUFJLEtBQUs7WUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUF3QjtZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0Q7Ozs7OztXQU1HO1FBQ0gsY0FBYyxDQUNaLEVBQVUsRUFDVixVQUFlLEVBQ2YsSUFBUyxFQUNULE1BQU0sR0FBRyxLQUFLO1lBRWQsSUFBSTtnQkFDRixJQUFJLENBQUMsRUFBRTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxVQUFVO29CQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztnQkFDM0QsRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sV0FBVyxHQUFHO29CQUNsQixFQUFFO29CQUNGLFVBQVU7b0JBQ1YsSUFBSTtpQkFDTCxDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLO29CQUNSLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUNEOzs7Ozs7Ozs7Ozs7Ozs7O1dBZ0JHO1FBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFlO1lBQzVCLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FDNUMsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsRUFBRSxFQUNQLE9BQU8sQ0FDUixDQUFDO2dCQUNGLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN4RTtRQUNILENBQUM7UUFDRDs7Ozs7Ozs7O1dBU0c7UUFDSCxvQkFBb0IsQ0FBQyxTQUFpQixFQUFFLGlCQUEwQjtZQUNoRSxJQUFJO2dCQUNGLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNoQyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN4RTtZQUVELFNBQVMsZ0JBQWdCO2dCQUN2QixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzVDLE9BQU8sQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3hELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRDs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUNILEtBQUssQ0FBQyw0QkFBNEIsQ0FDaEMsaUJBQXlCLEVBQ3pCLHNCQUE4QixFQUM5QixRQUFnQjtZQUVoQixJQUFJO2dCQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQzVELGlCQUFpQixFQUNqQixZQUFZLEdBQUcsUUFBUSxDQUN4QixDQUFDO2dCQUNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNwQixnQkFBZ0IsSUFBSSxVQUFVLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZFLENBQUMsQ0FBQyxDQUFDO2dCQUNILFFBQVEsR0FBRyxnQkFBZ0I7b0JBQ3pCLENBQUMsQ0FBQyxpQ0FBaUMsc0JBQXNCLG1CQUFtQixnQkFBZ0IsdUJBQXVCO29CQUNuSCxDQUFDLENBQUMsaUNBQWlDLHNCQUFzQiw4QkFBOEIsQ0FBQztnQkFDMUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzVDO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7WUFDRCxTQUFTLGdCQUFnQjtnQkFDdkIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUM1QyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0Q7O1dBRUc7UUFDSCx3QkFBd0I7WUFDdEIsSUFBSTtnQkFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDekIsQ0FBQyxZQUFnRCxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ2hDLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FDRixDQUFDO2dCQUNGLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN4RTtRQUNILENBQUM7S0FDRjtJQWxNWSxpQkFBVyxjQWtNdkIsQ0FBQTtJQUlELE1BQWEsY0FDWCxTQUFRLEtBQUs7UUFJSCxRQUFRLENBQWlDO1FBQ25ELE1BQU0sQ0FBVTtRQUNoQixZQUFZLGFBQXFCLEVBQUUsTUFBZ0I7WUFDakQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTO1lBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBNkMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQXNCO1lBQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEM7UUFDSCxDQUFDO1FBQ0QsVUFBVTtZQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsaUJBQWlCO1lBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELGVBQWU7WUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksU0FBUztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxRQUFRO1lBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxPQUFPO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUN0QyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxJQUFJLEtBQUs7WUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEtBQTZCO1lBQ3JDLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtnQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Z0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0Q7Ozs7Ozs7O1dBUUc7UUFDSCxTQUFTLENBQUMsTUFBZ0IsRUFBRSxLQUFjO1lBQ3hDLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdkUsS0FBSyxNQUFNLE9BQU8sSUFBSSxlQUFlLEVBQUU7b0JBQ3JDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDeEM7aUJBQ0Y7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztRQUNEOzs7O1dBSUc7UUFDSCxZQUFZLENBQUMsTUFBZ0I7WUFDM0IsSUFBSTtnQkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN2RSxLQUFLLE1BQU0sT0FBTyxJQUFJLGVBQWUsRUFBRTtvQkFDckMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUMxQztpQkFDRjtnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDO1FBQ0Q7O1dBRUc7UUFDSCxZQUFZO1lBQ1YsSUFBSTtnQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQzthQUNiO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDO0tBQ0Y7SUE1R1ksb0JBQWMsaUJBNEcxQixDQUFBO0lBQ0QsTUFBYSxPQUFPO1FBQ0YsSUFBSSxDQUFVO1FBQ3BCLFFBQVEsQ0FBd0I7UUFDbkMsU0FBUyxDQUFvQjtRQUNwQyxZQUFZLElBQVk7WUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQVcsT0FBTztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUN0QyxLQUFLLENBQUMsVUFBVSxDQUNkLGdCQUFnQixJQUFJLENBQUMsSUFBSSw4QkFBOEIsQ0FDeEQsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELFNBQVM7WUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELFFBQVEsQ0FBc0Q7UUFDOUQsVUFBVSxDQUFDLE9BQWdCO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELFVBQVU7WUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUNELFFBQVE7WUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELFFBQVEsQ0FBQyxLQUFhO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztLQUNGO0lBakNZLGFBQU8sVUFpQ25CLENBQUE7SUFJRCxNQUFhLEdBQUc7UUFDRSxJQUFJLENBQVU7UUFDcEIsSUFBSSxDQUFvQjtRQUNsQyxPQUFPLENBQVc7UUFDbEIsWUFBWSxJQUFZLEVBQUUsT0FBa0I7WUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQy9CO1FBQ0gsQ0FBQztRQUNELFFBQVEsQ0FBc0Q7UUFFOUQsSUFBVyxHQUFHO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDdkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLDhCQUE4QixDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsT0FBMkM7WUFDM0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxlQUFlO1lBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPO1lBQ0wsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxTQUFTO1lBQ1AsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxvQkFBb0IsQ0FBQyxPQUEyQztZQUM5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELGVBQWUsQ0FBQyxZQUE4QjtZQUM1QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxVQUFVLENBQUMsT0FBZ0I7WUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsVUFBVTtZQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBQ0QsUUFBUTtZQUNOLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsUUFBUSxDQUFDLEtBQWE7WUFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsUUFBUTtZQUNOLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQ0Y7SUFuRFksU0FBRyxNQW1EZixDQUFBO0lBQ0QsTUFBYSxXQUFXO1FBQ04sSUFBSSxDQUFVO1FBQ3BCLFlBQVksQ0FBNEI7UUFDbEQsWUFBWSxJQUFZO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFXLFdBQVc7WUFDcEIsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUEyQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxDQUN2RSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQVcsSUFBSTtZQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsU0FBUyxDQUFDLE9BQWdEO1lBQ3hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELGNBQWM7WUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUNELGFBQWE7WUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELFdBQVc7WUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELGVBQWU7WUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUEyQjtZQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxlQUFlO1lBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFDRCxlQUFlO1lBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPO1lBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxhQUFhO1lBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLENBQUM7UUFDRCxZQUFZLENBQUMsT0FBbUI7WUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsY0FBYztZQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTztZQUNMLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsU0FBUztZQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsUUFBUTtZQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsUUFBUSxDQUFDLEtBQWE7WUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsVUFBVTtZQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsVUFBVSxDQUFDLE9BQWdCO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQztLQUNGO0lBekVZLGlCQUFXLGNBeUV2QixDQUFBO0FBQ0gsQ0FBQyxFQXQ1Q2dCLEtBQUssS0FBTCxLQUFLLFFBczVDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vbm9kZV9tb2R1bGVzL0B0eXBlcy94cm0vaW5kZXguZC50c1wiIC8+XG4vKipcbiAqIFJlcHJlc2VudHMgYSBwYXJhbWV0ZXIgZm9yIGEgcmVxdWVzdC5cbiAqIEB0eXBlIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAqIEBwcm9wZXJ0eSB7J0Jvb2xlYW4nIHwgJ0RhdGVUaW1lJyB8ICdEZWNpbWFsJyB8ICdFbnRpdHknIHwgJ0VudGl0eUNvbGxlY3Rpb24nIHwgJ0VudGl0eVJlZmVyZW5jZScgfCAnRmxvYXQnIHwgJ0ludGVnZXInIHwgJ01vbmV5JyB8ICdQaWNrbGlzdCcgfCAnU3RyaW5nJ30gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIuXG4gKiBAcHJvcGVydHkgeyp9IFZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuXG4gKi9cbnR5cGUgUmVxdWVzdFBhcmFtZXRlciA9IHtcbiAgTmFtZTogc3RyaW5nO1xuICBUeXBlOlxuICAgIHwgXCJCb29sZWFuXCJcbiAgICB8IFwiRGF0ZVRpbWVcIlxuICAgIHwgXCJEZWNpbWFsXCJcbiAgICB8IFwiRW50aXR5XCJcbiAgICB8IFwiRW50aXR5Q29sbGVjdGlvblwiXG4gICAgfCBcIkVudGl0eVJlZmVyZW5jZVwiXG4gICAgfCBcIkZsb2F0XCJcbiAgICB8IFwiSW50ZWdlclwiXG4gICAgfCBcIk1vbmV5XCJcbiAgICB8IFwiUGlja2xpc3RcIlxuICAgIHwgXCJTdHJpbmdcIjtcbiAgVmFsdWU6IGFueTtcbn07XG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYW4gZW50aXR5LlxuICogQHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFRoZSBJRCBvZiB0aGUgZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVudGl0eVR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZW50aXR5LlxuICovXG50eXBlIEVudGl0eVJlZmVyZW5jZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZW50aXR5VHlwZTogc3RyaW5nO1xufTtcbmV4cG9ydCBuYW1lc3BhY2UgWHJtRXgge1xuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byB0aHJvdy5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gQWx3YXlzIHRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBnaXZlbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JNZXNzYWdlOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24uXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICBjb25zdCBzdGFja1RyYWNlID0gZXJyb3Iuc3RhY2s/LnNwbGl0KFwiXFxuXCIpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpO1xuICAgICAgY29uc3QgY2FsbGluZ0Z1bmN0aW9uTGluZSA9XG4gICAgICAgIHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS5sZW5ndGggPj0gMyA/IHN0YWNrVHJhY2VbMl0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWVNYXRjaCA9XG4gICAgICAgIGNhbGxpbmdGdW5jdGlvbkxpbmU/Lm1hdGNoKC9hdFxccysoW15cXHNdKylcXHMrXFwoLyk7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWVNYXRjaCA/IGZ1bmN0aW9uTmFtZU1hdGNoWzFdIDogXCJcIjtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LmdldEZ1bmN0aW9uTmFtZTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIG5vdGlmaWNhdGlvbiBmb3IgYW4gYXBwIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UgYW5kIGxldmVsLCBhbmQgbGV0cyB5b3Ugc3BlY2lmeSB3aGV0aGVyIHRvIHNob3cgYSBjbG9zZSBidXR0b24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgbm90aWZpY2F0aW9uLlxuICAgKiBAcGFyYW0geydTVUNDRVNTJyB8ICdFUlJPUicgfCAnV0FSTklORycgfCAnSU5GTyd9IGxldmVsIC0gVGhlIGxldmVsIG9mIHRoZSBub3RpZmljYXRpb24uIENhbiBiZSAnU1VDQ0VTUycsICdFUlJPUicsICdXQVJOSU5HJywgb3IgJ0lORk8nLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG93Q2xvc2VCdXR0b249ZmFsc2VdIC0gV2hldGhlciB0byBzaG93IGEgY2xvc2UgYnV0dG9uIG9uIHRoZSBub3RpZmljYXRpb24uIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIG9mIHRoZSBjcmVhdGVkIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRHbG9iYWxOb3RpZmljYXRpb24oXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGxldmVsOiBcIlNVQ0NFU1NcIiB8IFwiRVJST1JcIiB8IFwiV0FSTklOR1wiIHwgXCJJTkZPXCIsXG4gICAgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2VcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsZXZlbE1hcCA9IHtcbiAgICAgIFNVQ0NFU1M6IDEsXG4gICAgICBFUlJPUjogMixcbiAgICAgIFdBUk5JTkc6IDMsXG4gICAgICBJTkZPOiA0LFxuICAgIH07XG4gICAgY29uc3QgbWVzc2FnZUxldmVsID0gbGV2ZWxNYXBbbGV2ZWxdIHx8IGxldmVsTWFwLklORk87XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xuICAgICAgdHlwZTogMixcbiAgICAgIGxldmVsOiBtZXNzYWdlTGV2ZWwsXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2hvd0Nsb3NlQnV0dG9uLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBYcm0uQXBwLmFkZEdsb2JhbE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtnZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGEgbm90aWZpY2F0aW9uIGluIHRoZSBhcHAgd2l0aCB0aGUgZ2l2ZW4gdW5pcXVlIElELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pcXVlSWQgLSBUaGUgdW5pcXVlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbm90aWZpY2F0aW9uIGhhcyBiZWVuIGNsZWFyZWQuXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtb3ZlR2xvYmFsTm90aWZpY2F0aW9uKFxuICAgIHVuaXF1ZUlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IFhybS5BcHAuY2xlYXJHbG9iYWxOb3RpZmljYXRpb24odW5pcXVlSWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtnZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBieSB1c2luZyBpdHMgc2NoZW1hIG5hbWUgYXMga2V5LlxuICAgKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIGJvdGggYSBkZWZhdWx0IHZhbHVlIGFuZCBhIGN1cnJlbnQgdmFsdWUsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXRyaWV2ZSB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVudmlyb25tZW50VmFyaWFibGVTY2hlbWFOYW1lIC0gVGhlIHNjaGVtYSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqIEBhc3luY1xuICAgKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2NoZW1hTmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGdW5jdGlvbihcIlJldHJpZXZlRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlXCIsIFtcbiAgICAgIHtcbiAgICAgICAgTmFtZTogXCJEZWZpbml0aW9uU2NoZW1hTmFtZVwiLFxuICAgICAgICBUeXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICBWYWx1ZTogZW52aXJvbm1lbnRWYXJpYWJsZVNjaGVtYU5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIC8qKlxuICAgKiBBIG1hcCBvZiBDUk0gZGF0YSB0eXBlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHR5cGUgbmFtZXMsIHN0cnVjdHVyYWwgcHJvcGVydGllcywgYW5kIEphdmFTY3JpcHQgdHlwZXMuXG4gICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgeyB0eXBlTmFtZTogc3RyaW5nLCBzdHJ1Y3R1cmFsUHJvcGVydHk6IG51bWJlciwganNUeXBlOiBzdHJpbmcgfT59XG4gICAqL1xuICBsZXQgdHlwZU1hcCA9IHtcbiAgICBTdHJpbmc6IHsgdHlwZU5hbWU6IFwiRWRtLlN0cmluZ1wiLCBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsIGpzVHlwZTogXCJzdHJpbmdcIiB9LFxuICAgIEludGVnZXI6IHsgdHlwZU5hbWU6IFwiRWRtLkludDMyXCIsIHN0cnVjdHVyYWxQcm9wZXJ0eTogMSwganNUeXBlOiBcIm51bWJlclwiIH0sXG4gICAgQm9vbGVhbjoge1xuICAgICAgdHlwZU5hbWU6IFwiRWRtLkJvb2xlYW5cIixcbiAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogMSxcbiAgICAgIGpzVHlwZTogXCJib29sZWFuXCIsXG4gICAgfSxcbiAgICBEYXRlVGltZToge1xuICAgICAgdHlwZU5hbWU6IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG4gICAgICBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsXG4gICAgICBqc1R5cGU6IFwib2JqZWN0XCIsXG4gICAgfSxcbiAgICBFbnRpdHlSZWZlcmVuY2U6IHtcbiAgICAgIHR5cGVOYW1lOiBcIm1zY3JtLmNybWJhc2VlbnRpdHlcIixcbiAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogNSxcbiAgICAgIGpzVHlwZTogXCJvYmplY3RcIixcbiAgICB9LFxuICAgIERlY2ltYWw6IHtcbiAgICAgIHR5cGVOYW1lOiBcIkVkbS5EZWNpbWFsXCIsXG4gICAgICBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsXG4gICAgICBqc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBFbnRpdHk6IHtcbiAgICAgIHR5cGVOYW1lOiBcIm1zY3JtLmNybWJhc2VlbnRpdHlcIixcbiAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogNSxcbiAgICAgIGpzVHlwZTogXCJvYmplY3RcIixcbiAgICB9LFxuICAgIEVudGl0eUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGVOYW1lOiBcIkNvbGxlY3Rpb24obXNjcm0uY3JtYmFzZWVudGl0eSlcIixcbiAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogNCxcbiAgICAgIGpzVHlwZTogXCJvYmplY3RcIixcbiAgICB9LFxuICAgIEZsb2F0OiB7IHR5cGVOYW1lOiBcIkVkbS5Eb3VibGVcIiwgc3RydWN0dXJhbFByb3BlcnR5OiAxLCBqc1R5cGU6IFwibnVtYmVyXCIgfSxcbiAgICBNb25leTogeyB0eXBlTmFtZTogXCJFZG0uRGVjaW1hbFwiLCBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsIGpzVHlwZTogXCJudW1iZXJcIiB9LFxuICAgIFBpY2tsaXN0OiB7XG4gICAgICB0eXBlTmFtZTogXCJFZG0uSW50MzJcIixcbiAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogMSxcbiAgICAgIGpzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICB9O1xuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiByZXF1ZXN0IHBhcmFtZXRlciBpcyBvZiBhIHN1cHBvcnRlZCB0eXBlIGFuZCBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtSZXF1ZXN0UGFyYW1ldGVyfSByZXF1ZXN0UGFyYW1ldGVyIC0gVGhlIHJlcXVlc3QgcGFyYW1ldGVyIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQHRocm93cyB7RXJyb3J9IC0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0IHBhcmFtZXRlciBpcyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZSBvciBoYXMgYW4gaW52YWxpZCB2YWx1ZS5cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja1JlcXVlc3RQYXJhbWV0ZXJUeXBlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXI6IFJlcXVlc3RQYXJhbWV0ZXJcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0eXBlTWFwW3JlcXVlc3RQYXJhbWV0ZXIuVHlwZV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgcHJvcGVydHkgdHlwZSAke3JlcXVlc3RQYXJhbWV0ZXIuVHlwZX0gb2YgdGhlIHByb3BlcnR5ICR7cmVxdWVzdFBhcmFtZXRlci5OYW1lfSBpcyBub3Qgc3VwcG9ydGVkLmBcbiAgICAgICk7XG4gICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gdHlwZU1hcFtyZXF1ZXN0UGFyYW1ldGVyLlR5cGVdLmpzVHlwZTtcbiAgICBjb25zdCBhY3R1YWxUeXBlID0gdHlwZW9mIHJlcXVlc3RQYXJhbWV0ZXIuVmFsdWU7XG4gICAgY29uc3QgaW52YWxpZFR5cGVNZXNzYWdlID0gYFRoZSB2YWx1ZSAke3JlcXVlc3RQYXJhbWV0ZXIuVmFsdWV9XFxub2YgdGhlIHByb3BlcnR5ICR7cmVxdWVzdFBhcmFtZXRlci5OYW1lfVxcbmlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZSAke3JlcXVlc3RQYXJhbWV0ZXIuVHlwZX0uYDtcbiAgICBpZiAoXG4gICAgICByZXF1ZXN0UGFyYW1ldGVyLlR5cGUgPT09IFwiRW50aXR5UmVmZXJlbmNlXCIgfHxcbiAgICAgIHJlcXVlc3RQYXJhbWV0ZXIuVHlwZSA9PT0gXCJFbnRpdHlcIlxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICAhcmVxdWVzdFBhcmFtZXRlci5WYWx1ZSB8fFxuICAgICAgICAhcmVxdWVzdFBhcmFtZXRlci5WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcImlkXCIpIHx8XG4gICAgICAgICFyZXF1ZXN0UGFyYW1ldGVyLlZhbHVlLmhhc093blByb3BlcnR5KFwiZW50aXR5VHlwZVwiKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihpbnZhbGlkVHlwZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdHlwZU1hcFtcbiAgICAgICAgcmVxdWVzdFBhcmFtZXRlci5UeXBlXG4gICAgICBdLnR5cGVOYW1lID0gYG1zY3JtLiR7cmVxdWVzdFBhcmFtZXRlci5WYWx1ZS5lbnRpdHlUeXBlfWA7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0UGFyYW1ldGVyLlR5cGUgPT09IFwiRW50aXR5Q29sbGVjdGlvblwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFBcnJheS5pc0FycmF5KHJlcXVlc3RQYXJhbWV0ZXIuVmFsdWUpIHx8XG4gICAgICAgIHJlcXVlc3RQYXJhbWV0ZXIuVmFsdWUuZXZlcnkoXG4gICAgICAgICAgKHYpID0+XG4gICAgICAgICAgICB0eXBlb2YgdiAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgIXYgfHxcbiAgICAgICAgICAgICF2Lmhhc093blByb3BlcnR5KFwiaWRcIikgfHxcbiAgICAgICAgICAgICF2Lmhhc093blByb3BlcnR5KFwiZW50aXR5VHlwZVwiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGludmFsaWRUeXBlTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0UGFyYW1ldGVyLlR5cGUgPT09IFwiRGF0ZVRpbWVcIikge1xuICAgICAgaWYgKCEocmVxdWVzdFBhcmFtZXRlci5WYWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihpbnZhbGlkVHlwZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWN0dWFsVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihpbnZhbGlkVHlwZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRXhlY3V0ZXMgYW4gQWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uTmFtZSAtIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgYWN0aW9uLlxuICAgKiBAcGFyYW0ge1JlcXVlc3RQYXJhbWV0ZXJbXX0gcmVxdWVzdFBhcmFtZXRlcnMgLSBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdGhlIHBhcmFtZXRlciBuYW1lLCB0eXBlIGFuZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlSZWZlcmVuY2V9IFtib3VuZEVudGl0eV0gLSBBbiBvcHRpb25hbCBFbnRpdHlSZWZlcmVuY2Ugb2YgdGhlIGJvdW5kIGVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gLSBBIFByb21pc2Ugd2l0aCB0aGUgcmVxdWVzdCByZXNwb25zZS5cbiAgICogQHRocm93cyB7RXJyb3J9IC0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0IHBhcmFtZXRlciBpcyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZSBvciBoYXMgYW4gaW52YWxpZCB2YWx1ZS5cbiAgICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlQWN0aW9uKFxuICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcltdLFxuICAgIGJvdW5kRW50aXR5PzogRW50aXR5UmVmZXJlbmNlXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyRGVmaW5pdGlvbjogYW55ID0ge307XG4gICAgaWYgKGJvdW5kRW50aXR5KVxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgIE5hbWU6IFwiZW50aXR5XCIsXG4gICAgICAgIFZhbHVlOiBib3VuZEVudGl0eSxcbiAgICAgICAgVHlwZTogXCJFbnRpdHlSZWZlcmVuY2VcIixcbiAgICAgIH0pO1xuICAgIGZvciAoY29uc3QgcmVxdWVzdFBhcmFtZXRlciBvZiByZXF1ZXN0UGFyYW1ldGVycykge1xuICAgICAgY2hlY2tSZXF1ZXN0UGFyYW1ldGVyVHlwZShyZXF1ZXN0UGFyYW1ldGVyKTtcbiAgICAgIHBhcmFtZXRlckRlZmluaXRpb25bcmVxdWVzdFBhcmFtZXRlci5OYW1lXSA9IHtcbiAgICAgICAgdHlwZU5hbWU6IHR5cGVNYXBbcmVxdWVzdFBhcmFtZXRlci5UeXBlXS50eXBlTmFtZSxcbiAgICAgICAgc3RydWN0dXJhbFByb3BlcnR5OiB0eXBlTWFwW3JlcXVlc3RQYXJhbWV0ZXIuVHlwZV0uc3RydWN0dXJhbFByb3BlcnR5LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcmVxID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZ2V0TWV0YWRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgYm91bmRQYXJhbWV0ZXI6IGJvdW5kRW50aXR5ID8gXCJlbnRpdHlcIiA6IG51bGwsXG4gICAgICAgICAgb3BlcmF0aW9uVHlwZTogMCxcbiAgICAgICAgICBvcGVyYXRpb25OYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHBhcmFtZXRlclR5cGVzOiBwYXJhbWV0ZXJEZWZpbml0aW9uLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICAuLi5yZXF1ZXN0UGFyYW1ldGVycy5tYXAoKHApID0+ICh7IFtwLk5hbWVdOiBwLlZhbHVlIH0pKVxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBYcm0uV2ViQXBpLm9ubGluZS5leGVjdXRlKHJlcSk7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSByZXR1cm4gcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IHJlc3BvbnNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIEZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gVGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtSZXF1ZXN0UGFyYW1ldGVyW119IHJlcXVlc3RQYXJhbWV0ZXJzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBwYXJhbWV0ZXIgbmFtZSwgdHlwZSBhbmQgdmFsdWUuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVmZXJlbmNlfSBbYm91bmRFbnRpdHldIC0gQW4gb3B0aW9uYWwgRW50aXR5UmVmZXJlbmNlIG9mIHRoZSBib3VuZCBlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IC0gQSBQcm9taXNlIHdpdGggdGhlIHJlcXVlc3QgcmVzcG9uc2UuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSAtIFRocm93cyBhbiBlcnJvciBpZiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXIgaXMgbm90IG9mIGEgc3VwcG9ydGVkIHR5cGUgb3IgaGFzIGFuIGludmFsaWQgdmFsdWUuXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUZ1bmN0aW9uKFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVyW10sXG4gICAgYm91bmRFbnRpdHk/OiBFbnRpdHlSZWZlcmVuY2VcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWZpbml0aW9uOiBhbnkgPSB7fTtcbiAgICBpZiAoYm91bmRFbnRpdHkpXG4gICAgICByZXF1ZXN0UGFyYW1ldGVycy5wdXNoKHtcbiAgICAgICAgTmFtZTogXCJlbnRpdHlcIixcbiAgICAgICAgVmFsdWU6IGJvdW5kRW50aXR5LFxuICAgICAgICBUeXBlOiBcIkVudGl0eVJlZmVyZW5jZVwiLFxuICAgICAgfSk7XG4gICAgZm9yIChjb25zdCByZXF1ZXN0UGFyYW1ldGVyIG9mIHJlcXVlc3RQYXJhbWV0ZXJzKSB7XG4gICAgICBjaGVja1JlcXVlc3RQYXJhbWV0ZXJUeXBlKHJlcXVlc3RQYXJhbWV0ZXIpO1xuICAgICAgcGFyYW1ldGVyRGVmaW5pdGlvbltyZXF1ZXN0UGFyYW1ldGVyLk5hbWVdID0ge1xuICAgICAgICB0eXBlTmFtZTogdHlwZU1hcFtyZXF1ZXN0UGFyYW1ldGVyLlR5cGVdLnR5cGVOYW1lLFxuICAgICAgICBzdHJ1Y3R1cmFsUHJvcGVydHk6IHR5cGVNYXBbcmVxdWVzdFBhcmFtZXRlci5UeXBlXS5zdHJ1Y3R1cmFsUHJvcGVydHksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXEgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBnZXRNZXRhZGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBib3VuZFBhcmFtZXRlcjogYm91bmRFbnRpdHkgPyBcImVudGl0eVwiIDogbnVsbCxcbiAgICAgICAgICBvcGVyYXRpb25UeXBlOiAxLFxuICAgICAgICAgIG9wZXJhdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBwYXJhbWV0ZXJUeXBlczogcGFyYW1ldGVyRGVmaW5pdGlvbixcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgLi4ucmVxdWVzdFBhcmFtZXRlcnMubWFwKChwKSA9PiAoeyBbcC5OYW1lXTogcC5WYWx1ZSB9KSlcbiAgICApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgWHJtLldlYkFwaS5vbmxpbmUuZXhlY3V0ZShyZXEpO1xuICAgIGlmIChyZXNwb25zZS5vaykgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBHVUlEIGxvd2VyY2FzZSBhbmQgcmVtb3ZlcyBicmFja2V0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGd1aWQgLSBUaGUgR1VJRCB0byBub3JtYWxpemUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5vcm1hbGl6ZWQgR1VJRC5cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVHdWlkKGd1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBndWlkICE9PSBcInN0cmluZ1wiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC5ub3JtYWxpemVHdWlkOlxcbicke2d1aWR9JyBpcyBub3QgYSBzdHJpbmdgKTtcbiAgICByZXR1cm4gZ3VpZC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1t7fV0vZywgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIE9wZW5zIGEgZGlhbG9nIHdpdGggZHluYW1pYyBoZWlnaHQgYW5kIHdpZHRoIGJhc2VkIG9uIHRleHQgY29udGVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZGlhbG9nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIEEgUHJvbWlzZSB3aXRoIHRoZSBkaWFsb2cgcmVzcG9uc2UuXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFsZXJ0RGlhbG9nKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdGV4dDogc3RyaW5nXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB0ZXh0LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgICAgbGV0IGFkZGl0aW9uYWxSb3dzID0gMDtcbiAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGxldCB3aWR0aCA9IGdldFRleHRXaWR0aChcbiAgICAgICAgICByb3csXG4gICAgICAgICAgXCIxcmVtIFNlZ29lIFVJIFJlZ3VsYXIsIFNlZ29lVUksIFNlZ29lIFVJXCJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHdpZHRoID4gOTQwKSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJvd3MgKz0gd2lkdGggLyA5NDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9uZ2VzdFJvdyA9IHJvd3MucmVkdWNlKFxuICAgICAgICAoYWNjLCByb3cpID0+IChyb3cubGVuZ3RoID4gYWNjLmxlbmd0aCA/IHJvdyA6IGFjYyksXG4gICAgICAgIFwiXCJcbiAgICAgICk7XG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKFxuICAgICAgICBnZXRUZXh0V2lkdGgobG9uZ2VzdFJvdywgXCIxcmVtIFNlZ29lIFVJIFJlZ3VsYXIsIFNlZ29lVUksIFNlZ29lIFVJXCIpLFxuICAgICAgICAxMDAwXG4gICAgICApO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gMTA5ICsgKHJvd3MubGVuZ3RoICsgYWRkaXRpb25hbFJvd3MpICogMjA7XG4gICAgICByZXR1cm4gYXdhaXQgWHJtLk5hdmlnYXRpb24ub3BlbkFsZXJ0RGlhbG9nKFxuICAgICAgICB7XG4gICAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsOiBcIk9rXCIsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke2dldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzZXMgY2FudmFzLm1lYXN1cmVUZXh0IHRvIGNvbXB1dGUgYW5kIHJldHVybiB0aGUgd2lkdGggb2YgdGhlIGdpdmVuIHRleHQgb2YgZ2l2ZW4gZm9udCBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBUaGUgdGV4dCB0byBiZSByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZm9udCBUaGUgY3NzIGZvbnQgZGVzY3JpcHRvciB0aGF0IHRleHQgaXMgdG8gYmUgcmVuZGVyZWQgd2l0aCAoZS5nLiBcImJvbGQgMTRweCB2ZXJkYW5hXCIpLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTgyNDEvY2FsY3VsYXRlLXRleHQtd2lkdGgtd2l0aC1qYXZhc2NyaXB0LzIxMDE1MzkzIzIxMDE1MzkzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0VGV4dFdpZHRoKHRleHQ6IHN0cmluZywgZm9udDogc3RyaW5nKSB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjb250ZXh0LmZvbnQgPSBmb250O1xuICAgICAgY29uc3QgbWV0cmljcyA9IGNvbnRleHQubWVhc3VyZVRleHQodGV4dCk7XG4gICAgICByZXR1cm4gbWV0cmljcy53aWR0aDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBmb3JtIGluIER5bmFtaWNzIDM2NS5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBGb3JtIHtcbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9mb3JtQ29udGV4dDogWHJtLkZvcm1Db250ZXh0O1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX2V4ZWN1dGlvbkNvbnRleHQ6IFhybS5FdmVudHMuRXZlbnRDb250ZXh0O1xuICAgIGNvbnN0cnVjdG9yKCkge31cbiAgICAvKipHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZvcm0gY29udGV4dCovXG4gICAgc3RhdGljIGdldCBmb3JtQ29udGV4dCgpOiBYcm0uRm9ybUNvbnRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Db250ZXh0O1xuICAgIH1cbiAgICAvKipHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGV4ZWN1dGlvIGNvbnRleHQqL1xuICAgIHN0YXRpYyBnZXQgZXhlY3V0aW9uQ29udGV4dCgpOiBYcm0uRXZlbnRzLkV2ZW50Q29udGV4dCB7XG4gICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dDtcbiAgICB9XG4gICAgLyoqR2V0cyBhIGxvb2t1cCB2YWx1ZSB0aGF0IHJlZmVyZW5jZXMgdGhlIHJlY29yZC4qL1xuICAgIHN0YXRpYyBnZXQgZW50aXR5UmVmZXJlbmNlKCkge1xuICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQuZGF0YS5lbnRpdHkuZ2V0RW50aXR5UmVmZXJlbmNlKCk7XG4gICAgfVxuICAgIC8qKlNldHMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZm9ybSBjb250ZXh0Ki9cbiAgICBzdGF0aWMgc2V0IGZvcm1Db250ZXh0KGNvbnRleHQ6IFhybS5Gb3JtQ29udGV4dCB8IFhybS5FdmVudHMuRXZlbnRDb250ZXh0KSB7XG4gICAgICBpZiAoXCJnZXRGb3JtQ29udGV4dFwiIGluIGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250ZXh0ID0gY29udGV4dC5nZXRGb3JtQ29udGV4dCgpO1xuICAgICAgfSBlbHNlIGlmIChcImRhdGFcIiBpbiBjb250ZXh0KSB0aGlzLl9mb3JtQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgWHJtRXguRm9ybS5zZXRGb3JtQ29udGV4dDogVGhlIGV4ZWN1dGlvbkNvbnRleHQgb3IgZm9ybUNvbnRleHQgd2FzIG5vdCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLmBcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dCovXG4gICAgc3RhdGljIHNldCBleGVjdXRpb25Db250ZXh0KFxuICAgICAgY29udGV4dDogWHJtLkZvcm1Db250ZXh0IHwgWHJtLkV2ZW50cy5FdmVudENvbnRleHRcbiAgICApIHtcbiAgICAgIGlmIChcImdldEZvcm1Db250ZXh0XCIgaW4gY29udGV4dCkge1xuICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRleHQgPSBjb250ZXh0LmdldEZvcm1Db250ZXh0KCk7XG4gICAgICB9IGVsc2UgaWYgKFwiZGF0YVwiIGluIGNvbnRleHQpIHRoaXMuX2Zvcm1Db250ZXh0ID0gY29udGV4dDtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBYcm1FeC5Gb3JtLnNldEV4ZWN1dGlvbkNvbnRleHQ6IFRoZSBleGVjdXRpb25Db250ZXh0IG9yIGZvcm1Db250ZXh0IHdhcyBub3QgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5gXG4gICAgICAgICk7XG4gICAgfVxuICAgIC8qKlJldHVybnMgdHJ1ZSBpZiBmb3JtIGlzIGZyb20gdHlwZSBjcmVhdGUqL1xuICAgIHN0YXRpYyBnZXQgSXNDcmVhdGUoKSB7XG4gICAgICByZXR1cm4gRm9ybS5mb3JtQ29udGV4dC51aS5nZXRGb3JtVHlwZSgpID09IDE7XG4gICAgfVxuICAgIC8qKlJldHVybnMgdHJ1ZSBpZiBmb3JtIGlzIGZyb20gdHlwZSB1cGRhdGUqL1xuICAgIHN0YXRpYyBnZXQgSXNVcGRhdGUoKSB7XG4gICAgICByZXR1cm4gRm9ybS5mb3JtQ29udGV4dC51aS5nZXRGb3JtVHlwZSgpID09IDI7XG4gICAgfVxuICAgIC8qKlJldHVybnMgdHJ1ZSBpZiBmb3JtIGlzIG5vdCBmcm9tIHR5cGUgY3JlYXRlKi9cbiAgICBzdGF0aWMgZ2V0IElzTm90Q3JlYXRlKCkge1xuICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQudWkuZ2V0Rm9ybVR5cGUoKSAhPSAxO1xuICAgIH1cbiAgICAvKipSZXR1cm5zIHRydWUgaWYgZm9ybSBpcyBub3QgZnJvbSB0eXBlIHVwZGF0ZSovXG4gICAgc3RhdGljIGdldCBJc05vdFVwZGF0ZSgpIHtcbiAgICAgIHJldHVybiBGb3JtLmZvcm1Db250ZXh0LnVpLmdldEZvcm1UeXBlKCkgIT0gMjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBmb3JtIGxldmVsIG5vdGlmaWNhdGlvbi4gQW55IG51bWJlciBvZiBub3RpZmljYXRpb25zIGNhbiBiZSBkaXNwbGF5ZWQgYW5kIHdpbGwgcmVtYWluIHVudGlsIHJlbW92ZWQgdXNpbmcgY2xlYXJGb3JtTm90aWZpY2F0aW9uLlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGlzIGxpbWl0ZWQgc28gZWFjaCBuZXcgbWVzc2FnZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0b3AuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHRleHQgb2YgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBsZXZlbCBUaGUgbGV2ZWwgb2YgdGhlIG5vdGlmaWNhdGlvbiB3aGljaCBkZWZpbmVzIGhvdyB0aGUgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCwgc3VjaCBhcyB0aGUgaWNvbi5cbiAgICAgKiBFUlJPUjogTm90aWZpY2F0aW9uIHdpbGwgdXNlIHRoZSBzeXN0ZW0gZXJyb3IgaWNvbi5cbiAgICAgKiBXQVJOSU5HOiBOb3RpZmljYXRpb24gd2lsbCB1c2UgdGhlIHN5c3RlbSB3YXJuaW5nIGljb24uXG4gICAgICogSU5GTzogTm90aWZpY2F0aW9uIHdpbGwgdXNlIHRoZSBzeXN0ZW0gaW5mbyBpY29uLlxuICAgICAqIEBwYXJhbSB1bmlxdWVJZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vdGlmaWNhdGlvbiB3aGljaCBpcyB1c2VkIHdpdGggY2xlYXJGb3JtTm90aWZpY2F0aW9uIHRvIHJlbW92ZSB0aGUgbm90aWZpY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkRm9ybU5vdGlmaWNhdGlvbihcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGxldmVsOiBYcm0uRm9ybU5vdGlmaWNhdGlvbkxldmVsLFxuICAgICAgdW5pcXVlSWQ6IHN0cmluZ1xuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQudWkuc2V0Rm9ybU5vdGlmaWNhdGlvbihcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIHVuaXF1ZUlkXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGZvcm0gbm90aWZpY2F0aW9uIGRlc2NyaWJlZCBieSB1bmlxdWVJZC5cbiAgICAgKiBAcGFyYW0gdW5pcXVlSWQgVW5pcXVlIGlkZW50aWZpZXIuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNlIGZhbHNlLlxuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVGb3JtTm90aWZpY2F0aW9uKHVuaXF1ZUlkOiBzdHJpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBGb3JtLmZvcm1Db250ZXh0LnVpLmNsZWFyRm9ybU5vdGlmaWNhdGlvbih1bmlxdWVJZCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVjb3JkIGlzIHNhdmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBhZGRPblNhdmVFdmVudEhhbmRsZXIoXG4gICAgICBoYW5kbGVyczpcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyXG4gICAgICAgIHwgWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcltdXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgaGFuZGxlcnMgPSBbaGFuZGxlcnNdO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtoYW5kbGVyfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5kYXRhLmVudGl0eS5hZGRPblNhdmUoaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgT25TYXZlIGlzIGNvbXBsZXRlLlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBoYW5kbGVyLlxuICAgICAqIEByZW1hcmtzIEFkZGVkIGluIDkuMlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Bvd2VyYXBwcy9kZXZlbG9wZXIvbW9kZWwtZHJpdmVuLWFwcHMvY2xpZW50YXBpL3JlZmVyZW5jZS9ldmVudHMvcG9zdHNhdmUgRXh0ZXJuYWwgTGluazogUG9zdFNhdmUgRXZlbnQgRG9jdW1lbnRhdGlvbn1cbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkT25Qb3N0U2F2ZUV2ZW50SGFuZGxlcihcbiAgICAgIGhhbmRsZXJzOlxuICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyW11cbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IFtoYW5kbGVyc107XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2hhbmRsZXJ9JyBpcyBub3QgYSBmdW5jdGlvbmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBGb3JtLmZvcm1Db250ZXh0LmRhdGEuZW50aXR5LmFkZE9uUG9zdFNhdmUoaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGZvcm0gZGF0YSBpcyBsb2FkZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGZvcm0gZGF0YSBsb2Fkcy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZXZlbnQgaGFuZGxlciBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkT25Mb2FkRXZlbnRIYW5kbGVyKFxuICAgICAgaGFuZGxlcnM6XG4gICAgICAgIHwgWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlclxuICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJbXVxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgICAgICAgIGhhbmRsZXJzID0gW2hhbmRsZXJzXTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7aGFuZGxlcn0nIGlzIG5vdCBhIGZ1bmN0aW9uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZGF0YS5hZGRPbkxvYWQoaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGZ1bmN0aW9uIHJlZmVyZW5jZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkT25DaGFuZ2VFdmVudEhhbmRsZXIoXG4gICAgICBmaWVsZHM6IEZpZWxkW10sXG4gICAgICBoYW5kbGVyczpcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyXG4gICAgICAgIHwgWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcltdLFxuICAgICAgZXhlY3V0ZT86IGJvb2xlYW5cbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IFtoYW5kbGVyc107XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2hhbmRsZXJ9JyBpcyBub3QgYSBmdW5jdGlvbmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGZpZWxkLmFkZE9uQ2hhbmdlKGhhbmRsZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGV4ZWN1dGUpIHtcbiAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGZpZWxkLkF0dHJpYnV0ZS5maXJlT25DaGFuZ2UoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZWQgdG8gZXhlY3V0ZSBtZXRob2RzIHJlbGF0ZWQgdG8gYSBzaW5nbGUgQXR0cmlidXRlXG4gICAqL1xuICBleHBvcnQgY2xhc3MgRmllbGQgaW1wbGVtZW50cyBYcm0uQXR0cmlidXRlcy5BdHRyaWJ1dGUge1xuICAgIHB1YmxpYyBzdGF0aWMgYWxsRmllbGRzOiBGaWVsZFtdID0gW107XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgTmFtZSE6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2F0dHJpYnV0ZT86IFhybS5BdHRyaWJ1dGVzLkF0dHJpYnV0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgICAgY29uc3QgZXhpc3RpbmdGaWVsZCA9IEZpZWxkLmFsbEZpZWxkcy5maW5kKFxuICAgICAgICAoZikgPT4gZi5OYW1lID09PSBhdHRyaWJ1dGVOYW1lXG4gICAgICApO1xuICAgICAgaWYgKGV4aXN0aW5nRmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nRmllbGQ7XG4gICAgICB9XG4gICAgICB0aGlzLk5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICAgICAgRmllbGQuYWxsRmllbGRzLnB1c2godGhpcyk7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldEF0dHJpYnV0ZVR5cGUoKTogWHJtLkF0dHJpYnV0ZXMuQXR0cmlidXRlVHlwZSB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0QXR0cmlidXRlVHlwZSgpO1xuICAgIH1cbiAgICBnZXRGb3JtYXQoKTogWHJtLkF0dHJpYnV0ZXMuQXR0cmlidXRlRm9ybWF0IHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRGb3JtYXQoKTtcbiAgICB9XG4gICAgZ2V0SXNEaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRJc0RpcnR5KCk7XG4gICAgfVxuICAgIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXROYW1lKCk7XG4gICAgfVxuICAgIGdldFBhcmVudCgpOiBYcm0uRW50aXR5IHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRQYXJlbnQoKTtcbiAgICB9XG4gICAgZ2V0UmVxdWlyZWRMZXZlbCgpOiBYcm0uQXR0cmlidXRlcy5SZXF1aXJlbWVudExldmVsIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRSZXF1aXJlZExldmVsKCk7XG4gICAgfVxuICAgIGdldFN1Ym1pdE1vZGUoKTogWHJtLlN1Ym1pdE1vZGUge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFN1Ym1pdE1vZGUoKTtcbiAgICB9XG4gICAgZ2V0VXNlclByaXZpbGVnZSgpOiBYcm0uUHJpdmlsZWdlIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRVc2VyUHJpdmlsZWdlKCk7XG4gICAgfVxuICAgIHJlbW92ZU9uQ2hhbmdlKGhhbmRsZXI6IFhybS5FdmVudHMuQXR0cmlidXRlLkNoYW5nZUV2ZW50SGFuZGxlcik6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLnJlbW92ZU9uQ2hhbmdlKGhhbmRsZXIpO1xuICAgIH1cbiAgICBzZXRTdWJtaXRNb2RlKHN1Ym1pdE1vZGU6IFhybS5TdWJtaXRNb2RlKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuc2V0U3VibWl0TW9kZShzdWJtaXRNb2RlKTtcbiAgICB9XG4gICAgZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgc2V0SXNWYWxpZChpc1ZhbGlkOiBib29sZWFuLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuc2V0SXNWYWxpZChpc1ZhbGlkLCBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IEF0dHJpYnV0ZSgpOiBYcm0uQXR0cmlidXRlcy5BdHRyaWJ1dGUge1xuICAgICAgcmV0dXJuICh0aGlzLl9hdHRyaWJ1dGUgPz89XG4gICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0QXR0cmlidXRlKHRoaXMuTmFtZSkgPz9cbiAgICAgICAgWHJtRXgudGhyb3dFcnJvcihcbiAgICAgICAgICBgVGhlIGF0dHJpYnV0ZSAnJHt0aGlzLk5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBmb3JtLmBcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb250cm9scygpOiBYcm0uQ29sbGVjdGlvbi5JdGVtQ29sbGVjdGlvbjxYcm0uQ29udHJvbHMuU3RhbmRhcmRDb250cm9sPiB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgVmFsdWUoKTogYW55IHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBjb250cm9sLWxvY2FsIG5vdGlmaWNhdGlvbiBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB1bmlxdWVJZCBVbmlxdWUgaWRlbnRpZmllci5cbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGl0IHN1Y2NlZWRzLCBmYWxzZSBpZiBpdCBmYWlscy5cbiAgICAgKiBAcmVtYXJrcyAgICAgV2hlbiB0aGlzIG1ldGhvZCBpcyB1c2VkIG9uIE1pY3Jvc29mdCBEeW5hbWljcyBDUk0gZm9yIHRhYmxldHMgYSByZWQgXCJYXCIgaWNvblxuICAgICAqICAgICAgICAgICAgICBhcHBlYXJzIG5leHQgdG8gdGhlIGNvbnRyb2wuIFRhcHBpbmcgb24gdGhlIGljb24gd2lsbCBkaXNwbGF5IHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXROb3RpZmljYXRpb24obWVzc2FnZTogc3RyaW5nLCB1bmlxdWVJZDogc3RyaW5nKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIW1lc3NhZ2UpIHRocm93IG5ldyBFcnJvcihgbm8gbWVzc2FnZSB3YXMgcHJvdmlkZWQuYCk7XG4gICAgICAgIGlmICghdW5pcXVlSWQpIHRocm93IG5ldyBFcnJvcihgbm8gdW5pcXVlSWQgd2FzIHByb3ZpZGVkLmApO1xuICAgICAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+XG4gICAgICAgICAgY29udHJvbC5zZXROb3RpZmljYXRpb24obWVzc2FnZSwgdW5pcXVlSWQpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2aXNpYmlsaXR5IHN0YXRlLlxuICAgICAqIEBwYXJhbSB2aXNpYmxlIHRydWUgdG8gc2hvdywgZmFsc2UgdG8gaGlkZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IGNvbnRyb2wuc2V0VmlzaWJsZSh2aXNpYmxlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgY29udHJvbCB0byBlaXRoZXIgZW5hYmxlZCwgb3IgZGlzYWJsZWQuXG4gICAgICogQHBhcmFtIGRpc2FibGVkIHRydWUgdG8gZGlzYWJsZSwgZmFsc2UgdG8gZW5hYmxlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbik6IHRoaXMge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiBjb250cm9sLnNldERpc2FibGVkKGRpc2FibGVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXF1aXJlZCBsZXZlbC5cbiAgICAgKiBAcGFyYW0gcmVxdWlyZW1lbnRMZXZlbCBUaGUgcmVxdWlyZW1lbnQgbGV2ZWwsIGFzIGVpdGhlciBcIm5vbmVcIiwgXCJyZXF1aXJlZFwiLCBvciBcInJlY29tbWVuZGVkXCJcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0UmVxdWlyZWRMZXZlbChcbiAgICAgIHJlcXVpcmVtZW50TGV2ZWw6IFhybS5BdHRyaWJ1dGVzLlJlcXVpcmVtZW50TGV2ZWxcbiAgICApOiB0aGlzIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuQXR0cmlidXRlLnNldFJlcXVpcmVkTGV2ZWwocmVxdWlyZW1lbnRMZXZlbCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXF1aXJlZCBsZXZlbC5cbiAgICAgKiBAcGFyYW0gcmVxdWlyZWQgVGhlIHJlcXVpcmVtZW50IGxldmVsLCBhcyBlaXRoZXIgZmFsc2UgZm9yIFwibm9uZVwiIG9yIHRydWUgZm9yIFwicmVxdWlyZWRcIlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRSZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbik6IHRoaXMge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0UmVxdWlyZWRMZXZlbChyZXF1aXJlZCA/IFwicmVxdWlyZWRcIiA6IFwibm9uZVwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKkZpcmUgYWxsIFwib24gY2hhbmdlXCIgZXZlbnQgaGFuZGxlcnMuICovXG4gICAgcHVibGljIGZpcmVPbkNoYW5nZSgpOiB0aGlzIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuQXR0cmlidXRlLmZpcmVPbkNoYW5nZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGhhbmRsZXIgb3IgYW4gYXJyYXkgb2YgaGFuZGxlcnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIGhhbmRsZXJzIFRoZSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcmVmZXJlbmNlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkT25DaGFuZ2UoXG4gICAgICBoYW5kbGVyczpcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyXG4gICAgICAgIHwgWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcltdXG4gICAgKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2hhbmRsZXJ9JyBpcyBub3QgYSBmdW5jdGlvbmApO1xuICAgICAgICAgICAgdGhpcy5BdHRyaWJ1dGUucmVtb3ZlT25DaGFuZ2UoaGFuZGxlcik7XG4gICAgICAgICAgICB0aGlzLkF0dHJpYnV0ZS5hZGRPbkNoYW5nZShoYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVycyAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtoYW5kbGVyc30nIGlzIG5vdCBhIGZ1bmN0aW9uYCk7XG4gICAgICAgICAgdGhpcy5BdHRyaWJ1dGUucmVtb3ZlT25DaGFuZ2UoaGFuZGxlcnMpO1xuICAgICAgICAgIHRoaXMuQXR0cmlidXRlLmFkZE9uQ2hhbmdlKGhhbmRsZXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYW4gZXJyb3Igb3IgcmVjb21tZW5kYXRpb24gbm90aWZpY2F0aW9uIGZvciBhIGNvbnRyb2wsIGFuZCBsZXRzIHlvdSBzcGVjaWZ5IGFjdGlvbnMgdG8gZXhlY3V0ZSBiYXNlZCBvbiB0aGUgbm90aWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGROb3RpZmljYXRpb24oXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBub3RpZmljYXRpb25MZXZlbDogXCJFUlJPUlwiIHwgXCJSRUNPTU1FTkRBVElPTlwiLFxuICAgICAgdW5pcXVlSWQ6IHN0cmluZyxcbiAgICAgIGFjdGlvbnM/OiBYcm0uQ29udHJvbHMuQ29udHJvbE5vdGlmaWNhdGlvbkFjdGlvbltdXG4gICAgKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXVuaXF1ZUlkKSB0aHJvdyBuZXcgRXJyb3IoYG5vIHVuaXF1ZUlkIHdhcyBwcm92aWRlZC5gKTtcbiAgICAgICAgaWYgKGFjdGlvbnMgJiYgIUFycmF5LmlzQXJyYXkoYWN0aW9ucykpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHRoZSBhY3Rpb24gcGFyYW1ldGVyIGlzIG5vdCBhbiBhcnJheSBvZiBDb250cm9sTm90aWZpY2F0aW9uQWN0aW9uYFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnRyb2wuYWRkTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBbbWVzc2FnZV0sXG4gICAgICAgICAgICBub3RpZmljYXRpb25MZXZlbDogbm90aWZpY2F0aW9uTGV2ZWwsXG4gICAgICAgICAgICB1bmlxdWVJZDogdW5pcXVlSWQsXG4gICAgICAgICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIG5vdGlmaWNhdGlvbiBpZGVudGlmaWVkIGJ5IHVuaXF1ZUlkLlxuICAgICAqIEBwYXJhbSB1bmlxdWVJZCAoT3B0aW9uYWwpIFVuaXF1ZSBpZGVudGlmaWVyLlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIGZhbHNlIGlmIGl0IGZhaWxzLlxuICAgICAqIEByZW1hcmtzIElmIHRoZSB1bmlxdWVJZCBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIHRoZSBjdXJyZW50IG5vdGlmaWNhdGlvbiBzaG93biB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcmVtb3ZlTm90aWZpY2F0aW9uKHVuaXF1ZUlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnRyb2wuY2xlYXJOb3RpZmljYXRpb24odW5pcXVlSWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBleHBvcnQgY2xhc3MgVGV4dEZpZWxkXG4gICAgZXh0ZW5kcyBGaWVsZFxuICAgIGltcGxlbWVudHMgWHJtLkF0dHJpYnV0ZXMuU3RyaW5nQXR0cmlidXRlXG4gIHtcbiAgICBwcm90ZWN0ZWQgZGVjbGFyZSBfYXR0cmlidXRlOiBYcm0uQXR0cmlidXRlcy5TdHJpbmdBdHRyaWJ1dGU7XG4gICAgY29uc3RydWN0b3IoYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGF0dHJpYnV0ZSk7XG4gICAgfVxuICAgIGdldE1heExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldE1heExlbmd0aCgpO1xuICAgIH1cbiAgICBnZXRGb3JtYXQoKTogWHJtLkF0dHJpYnV0ZXMuU3RyaW5nQXR0cmlidXRlRm9ybWF0IHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRGb3JtYXQoKSBhcyBYcm0uQXR0cmlidXRlcy5TdHJpbmdBdHRyaWJ1dGVGb3JtYXQ7XG4gICAgfVxuICAgIGdldCBBdHRyaWJ1dGUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2F0dHJpYnV0ZSA/Pz1cbiAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xuICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBGaWVsZCAnJHt0aGlzLk5hbWV9JyBkb2VzIG5vdCBleGlzdGApKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2xzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmNvbnRyb2xzO1xuICAgIH1cbiAgICBnZXQgVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpID8/IG51bGw7XG4gICAgfVxuICAgIHNldCBWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGV4cG9ydCBjbGFzcyBOdW1iZXJGaWVsZFxuICAgIGV4dGVuZHMgRmllbGRcbiAgICBpbXBsZW1lbnRzIFhybS5BdHRyaWJ1dGVzLk51bWJlckF0dHJpYnV0ZVxuICB7XG4gICAgcHJvdGVjdGVkIGRlY2xhcmUgX2F0dHJpYnV0ZTogWHJtLkF0dHJpYnV0ZXMuTnVtYmVyQXR0cmlidXRlO1xuICAgIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgICBzdXBlcihhdHRyaWJ1dGUpO1xuICAgIH1cbiAgICBnZXRGb3JtYXQoKTogWHJtLkF0dHJpYnV0ZXMuSW50ZWdlckF0dHJpYnV0ZUZvcm1hdCB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0Rm9ybWF0KCkgYXMgWHJtLkF0dHJpYnV0ZXMuSW50ZWdlckF0dHJpYnV0ZUZvcm1hdDtcbiAgICB9XG4gICAgZ2V0TWF4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0TWF4KCk7XG4gICAgfVxuICAgIGdldE1pbigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldE1pbigpO1xuICAgIH1cbiAgICBnZXRQcmVjaXNpb24oKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRQcmVjaXNpb24oKTtcbiAgICB9XG4gICAgc2V0UHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuc2V0UHJlY2lzaW9uKHByZWNpc2lvbik7XG4gICAgfVxuICAgIGdldCBBdHRyaWJ1dGUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2F0dHJpYnV0ZSA/Pz1cbiAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xuICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBGaWVsZCAnJHt0aGlzLk5hbWV9JyBkb2VzIG5vdCBleGlzdGApKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2xzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmNvbnRyb2xzO1xuICAgIH1cbiAgICBnZXQgVmFsdWUoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpID8/IG51bGw7XG4gICAgfVxuICAgIHNldCBWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGV4cG9ydCBjbGFzcyBEYXRlRmllbGQgZXh0ZW5kcyBGaWVsZCBpbXBsZW1lbnRzIFhybS5BdHRyaWJ1dGVzLkRhdGVBdHRyaWJ1dGUge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIF9hdHRyaWJ1dGU6IFhybS5BdHRyaWJ1dGVzLkRhdGVBdHRyaWJ1dGU7XG4gICAgY29uc3RydWN0b3IoYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGF0dHJpYnV0ZSk7XG4gICAgfVxuICAgIGdldEZvcm1hdCgpOiBYcm0uQXR0cmlidXRlcy5EYXRlQXR0cmlidXRlRm9ybWF0IHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRGb3JtYXQoKSBhcyBYcm0uQXR0cmlidXRlcy5EYXRlQXR0cmlidXRlRm9ybWF0O1xuICAgIH1cbiAgICBnZXQgQXR0cmlidXRlKCkge1xuICAgICAgcmV0dXJuICh0aGlzLl9hdHRyaWJ1dGUgPz89XG4gICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0QXR0cmlidXRlKHRoaXMuTmFtZSkgPz9cbiAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XG4gICAgfVxuICAgIGdldCBjb250cm9scygpIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5jb250cm9scztcbiAgICB9XG4gICAgZ2V0IFZhbHVlKCk6IERhdGUge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFZhbHVlKCkgPz8gbnVsbDtcbiAgICB9XG4gICAgc2V0IFZhbHVlKHZhbHVlOiBEYXRlKSB7XG4gICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGV4cG9ydCBjbGFzcyBCb29sZWFuRmllbGRcbiAgICBleHRlbmRzIEZpZWxkXG4gICAgaW1wbGVtZW50cyBYcm0uQXR0cmlidXRlcy5Cb29sZWFuQXR0cmlidXRlXG4gIHtcbiAgICBwcm90ZWN0ZWQgZGVjbGFyZSBfYXR0cmlidXRlOiBYcm0uQXR0cmlidXRlcy5Cb29sZWFuQXR0cmlidXRlO1xuICAgIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgICBzdXBlcihhdHRyaWJ1dGUpO1xuICAgIH1cbiAgICBnZXRBdHRyaWJ1dGVUeXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEF0dHJpYnV0ZVR5cGUoKTtcbiAgICB9XG4gICAgZ2V0SW5pdGlhbFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEluaXRpYWxWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgQXR0cmlidXRlKCkge1xuICAgICAgcmV0dXJuICh0aGlzLl9hdHRyaWJ1dGUgPz89XG4gICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0QXR0cmlidXRlKHRoaXMuTmFtZSkgPz9cbiAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XG4gICAgfVxuICAgIGdldCBjb250cm9scygpIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5jb250cm9scztcbiAgICB9XG4gICAgZ2V0IFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFZhbHVlKCkgPz8gbnVsbDtcbiAgICB9XG4gICAgc2V0IFZhbHVlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdE9wdGlvblNldEZpZWxkPE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25WYWx1ZXM+XG4gICAgZXh0ZW5kcyBGaWVsZFxuICAgIGltcGxlbWVudHMgWHJtLkF0dHJpYnV0ZXMuTXVsdGlTZWxlY3RPcHRpb25TZXRBdHRyaWJ1dGVcbiAge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIF9hdHRyaWJ1dGU6IFhybS5BdHRyaWJ1dGVzLk11bHRpU2VsZWN0T3B0aW9uU2V0QXR0cmlidXRlO1xuICAgIE9wdGlvbjogT3B0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIG9wdGlvbj86IE9wdGlvbnMpIHtcbiAgICAgIHN1cGVyKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgdGhpcy5PcHRpb24gPSBvcHRpb247XG4gICAgfVxuICAgIGdldEZvcm1hdCgpOiBYcm0uQXR0cmlidXRlcy5PcHRpb25TZXRBdHRyaWJ1dGVGb3JtYXQge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEZvcm1hdCgpIGFzIFhybS5BdHRyaWJ1dGVzLk9wdGlvblNldEF0dHJpYnV0ZUZvcm1hdDtcbiAgICB9XG4gICAgZ2V0T3B0aW9uKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBYcm0uT3B0aW9uU2V0VmFsdWUge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0T3B0aW9uKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRPcHRpb24odmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXRPcHRpb25zKCk6IFhybS5PcHRpb25TZXRWYWx1ZVtdIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRPcHRpb25zKCk7XG4gICAgfVxuICAgIGdldFNlbGVjdGVkT3B0aW9uKCk6IFhybS5PcHRpb25TZXRWYWx1ZVtdIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRTZWxlY3RlZE9wdGlvbigpO1xuICAgIH1cbiAgICBnZXRUZXh0KCk6IHN0cmluZ1tdIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRUZXh0KCk7XG4gICAgfVxuICAgIGdldEluaXRpYWxWYWx1ZSgpOiBudW1iZXJbXSB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0SW5pdGlhbFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBBdHRyaWJ1dGUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2F0dHJpYnV0ZSA/Pz1cbiAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xuICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBGaWVsZCAnJHt0aGlzLk5hbWV9JyBkb2VzIG5vdCBleGlzdGApKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2xzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmNvbnRyb2xzO1xuICAgIH1cbiAgICBnZXQgVmFsdWUoKTogbnVtYmVyW10ge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIHNldCBWYWx1ZSh2YWx1ZTogKGtleW9mIE9wdGlvbnMpW10gfCBudW1iZXJbXSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSBcIm51bWJlclwiKSB2YWx1ZXMucHVzaCh2KTtcbiAgICAgICAgICBlbHNlIHZhbHVlcy5wdXNoKHRoaXMuT3B0aW9uW3ZdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuQXR0cmlidXRlLnNldFZhbHVlKHZhbHVlcyk7XG4gICAgICB9IGVsc2UgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgVmFsdWUgJyR7dmFsdWV9JyBpcyBub3QgYW4gQXJyYXlgKTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IGNsYXNzIExvb2t1cEZpZWxkXG4gICAgZXh0ZW5kcyBGaWVsZFxuICAgIGltcGxlbWVudHMgWHJtLkF0dHJpYnV0ZXMuTG9va3VwQXR0cmlidXRlXG4gIHtcbiAgICBwcm90ZWN0ZWQgZGVjbGFyZSBfYXR0cmlidXRlOiBYcm0uQXR0cmlidXRlcy5Mb29rdXBBdHRyaWJ1dGU7XG4gICAgcHJvdGVjdGVkIF9jdXN0b21GaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgICAgc3VwZXIoYXR0cmlidXRlKTtcbiAgICB9XG4gICAgZ2V0SXNQYXJ0eUxpc3QoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0SXNQYXJ0eUxpc3QoKTtcbiAgICB9XG4gICAgZ2V0IEF0dHJpYnV0ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5fYXR0cmlidXRlID8/PVxuICAgICAgICBGb3JtLmZvcm1Db250ZXh0LmdldEF0dHJpYnV0ZSh0aGlzLk5hbWUpID8/XG4gICAgICAgIFhybUV4LnRocm93RXJyb3IoYEZpZWxkICcke3RoaXMuTmFtZX0nIGRvZXMgbm90IGV4aXN0YCkpO1xuICAgIH1cbiAgICBnZXQgY29udHJvbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuY29udHJvbHM7XG4gICAgfVxuICAgIC8qKkdldHMgdGhlIGlkIG9mIHRoZSBmaXJzdCBsb29rdXAgdmFsdWUqL1xuICAgIGdldCBJZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLlZhbHVlICYmIHRoaXMuVmFsdWUubGVuZ3RoID4gMFxuICAgICAgICA/IFhybUV4Lm5vcm1hbGl6ZUd1aWQodGhpcy5WYWx1ZVswXS5pZClcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICAvKipHZXRzIHRoZSBlbnRpdHlUeXBlIG9mIHRoZSBmaXJzdCBsb29rdXAgdmFsdWUqL1xuICAgIGdldCBFbnRpdHlUeXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuVmFsdWUgJiYgdGhpcy5WYWx1ZS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5WYWx1ZVswXS5lbnRpdHlUeXBlXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgLyoqR2V0cyB0aGUgZm9ybWF0dGVkIHZhbHVlIG9mIHRoZSBmaXJzdCBsb29rdXAgdmFsdWUqL1xuICAgIGdldCBGb3JtYXR0ZWRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLlZhbHVlICYmIHRoaXMuVmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuVmFsdWVbMF0ubmFtZSA6IG51bGw7XG4gICAgfVxuICAgIGdldCBWYWx1ZSgpOiBYcm0uTG9va3VwVmFsdWVbXSB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0VmFsdWUoKSA/PyBudWxsO1xuICAgIH1cbiAgICBzZXQgVmFsdWUodmFsdWU6IFhybS5Mb29rdXBWYWx1ZVtdKSB7XG4gICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgbG9va3VwXG4gICAgICogQHBhcmFtIGlkIEd1aWQgb2YgdGhlIHJlY29yZFxuICAgICAqIEBwYXJhbSBlbnRpdHlUeXBlIGxvZ2ljYWxuYW1lIG9mIHRoZSBlbnRpdHlcbiAgICAgKiBAcGFyYW0gbmFtZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYXBwZW5kIGlmIHRydWUsIGFkZHMgdmFsdWUgdG8gdGhlIGFycmF5IGluc3RlYWQgb2YgcmVwbGFjaW5nIGl0XG4gICAgICovXG4gICAgc2V0TG9va3VwVmFsdWUoXG4gICAgICBpZDogc3RyaW5nLFxuICAgICAgZW50aXR5VHlwZTogYW55LFxuICAgICAgbmFtZTogYW55LFxuICAgICAgYXBwZW5kID0gZmFsc2VcbiAgICApOiB0aGlzIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghaWQpIHRocm93IG5ldyBFcnJvcihgbm8gaWQgcGFyYW1ldGVyIHdhcyBwcm92aWRlZC5gKTtcbiAgICAgICAgaWYgKCFlbnRpdHlUeXBlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gZW50aXR5VHlwZSBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkLmApO1xuICAgICAgICBpZCA9IFhybUV4Lm5vcm1hbGl6ZUd1aWQoaWQpO1xuICAgICAgICBjb25zdCBsb29rdXBWYWx1ZSA9IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuVmFsdWUgPVxuICAgICAgICAgIGFwcGVuZCAmJiB0aGlzLlZhbHVlID8gdGhpcy5WYWx1ZS5jb25jYXQobG9va3VwVmFsdWUpIDogW2xvb2t1cFZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYW4gZW50aXR5IHJlY29yZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAoT3B0aW9uYWwpIE9EYXRhIHN5c3RlbSBxdWVyeSBvcHRpb25zLCAkc2VsZWN0IGFuZCAkZXhwYW5kLCB0byByZXRyaWV2ZSB5b3VyIGRhdGEuXG4gICAgICogLSBVc2UgdGhlICRzZWxlY3Qgc3lzdGVtIHF1ZXJ5IG9wdGlvbiB0byBsaW1pdCB0aGUgcHJvcGVydGllcyByZXR1cm5lZCBieSBpbmNsdWRpbmcgYSBjb21tYS1zZXBhcmF0ZWRcbiAgICAgKiAgIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBlcmZvcm1hbmNlIGJlc3QgcHJhY3RpY2UuIElmIHByb3BlcnRpZXMgYXJlbuKAmXRcbiAgICAgKiAgIHNwZWNpZmllZCB1c2luZyAkc2VsZWN0LCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqIC0gVXNlIHRoZSAkZXhwYW5kIHN5c3RlbSBxdWVyeSBvcHRpb24gdG8gY29udHJvbCB3aGF0IGRhdGEgZnJvbSByZWxhdGVkIGVudGl0aWVzIGlzIHJldHVybmVkLiBJZiB5b3VcbiAgICAgKiAgIGp1c3QgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSwgeW914oCZbGwgcmVjZWl2ZSBhbGwgdGhlIHByb3BlcnRpZXMgZm9yIHJlbGF0ZWRcbiAgICAgKiAgIHJlY29yZHMuIFlvdSBjYW4gbGltaXQgdGhlIHByb3BlcnRpZXMgcmV0dXJuZWQgZm9yIHJlbGF0ZWQgcmVjb3JkcyB1c2luZyB0aGUgJHNlbGVjdCBzeXN0ZW0gcXVlcnlcbiAgICAgKiAgIG9wdGlvbiBpbiBwYXJlbnRoZXNlcyBhZnRlciB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBuYW1lLiBVc2UgdGhpcyBmb3IgYm90aCBzaW5nbGUtdmFsdWVkIGFuZFxuICAgICAqICAgY29sbGVjdGlvbi12YWx1ZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICAgICAqIC0gWW91IGNhbiBhbHNvIHNwZWNpZnkgbXVsdGlwbGUgcXVlcnkgb3B0aW9ucyBieSB1c2luZyAmIHRvIHNlcGFyYXRlIHRoZSBxdWVyeSBvcHRpb25zLlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPm9wdGlvbnMgZXhhbXBsZTo8L2NhcHRpb24+XG4gICAgICogb3B0aW9uczogJHNlbGVjdD1uYW1lJiRleHBhbmQ9cHJpbWFyeWNvbnRhY3RpZCgkc2VsZWN0PWNvbnRhY3RpZCxmdWxsbmFtZSlcbiAgICAgKiBAcmV0dXJucyBPbiBzdWNjZXNzLCByZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIGEgSlNPTiBvYmplY3Qgd2l0aCB0aGUgcmV0cmlldmVkIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9keW5hbWljczM2NS9jdXN0b21lci1lbmdhZ2VtZW50L2RldmVsb3Blci9jbGllbnRhcGkvcmVmZXJlbmNlL3hybS13ZWJhcGkvcmV0cmlldmVyZWNvcmQgRXh0ZXJuYWwgTGluazogcmV0cmlldmVSZWNvcmQgKENsaWVudCBBUEkgcmVmZXJlbmNlKX1cbiAgICAgKi9cbiAgICBhc3luYyByZXRyaWV2ZShvcHRpb25zOiBzdHJpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghdGhpcy5JZCB8fCAhdGhpcy5FbnRpdHlUeXBlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXdhaXQgWHJtLldlYkFwaS5yZXRyaWV2ZVJlY29yZChcbiAgICAgICAgICB0aGlzLkVudGl0eVR5cGUsXG4gICAgICAgICAgdGhpcy5JZCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGFkZGl0aW9uYWwgY3VzdG9tIGZpbHRlciB0byB0aGUgbG9va3VwLCB3aXRoIHRoZSBcIkFORFwiIGZpbHRlciBvcGVyYXRvci5cbiAgICAgKiBAcGFyYW0gZmlsdGVyIFNwZWNpZmllcyB0aGUgZmlsdGVyLCBhcyBhIHNlcmlhbGl6ZWQgRmV0Y2hYTUwgXCJmaWx0ZXJcIiBub2RlLlxuICAgICAqIEBwYXJhbSBlbnRpdHlMb2dpY2FsTmFtZSAoT3B0aW9uYWwpIFRoZSBsb2dpY2FsIG5hbWUgb2YgdGhlIGVudGl0eS5cbiAgICAgKiBAcmVtYXJrcyAgICAgSWYgZW50aXR5TG9naWNhbE5hbWUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGVudGl0aWVzXG4gICAgICogICAgICAgICAgICAgIHZhbGlkIGZvciB0aGUgTG9va3VwIGNvbnRyb2wuXG4gICAgICogQGV4YW1wbGUgICAgIEV4YW1wbGUgZmlsdGVyOiA8ZmlsdGVyIHR5cGU9XCJhbmRcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXR0cmlidXRlPVwiYWRkcmVzczFfY2l0eVwiIG9wZXJhdG9yPVwiZXFcIiB2YWx1ZT1cIlJlZG1vbmRcIiAvPlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XG4gICAgICovXG4gICAgYWRkUHJlRmlsdGVyVG9Mb29rdXAoZmlsdGVyWG1sOiBzdHJpbmcsIGVudGl0eUxvZ2ljYWxOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICBfYWRkQ3VzdG9tRmlsdGVyLmNvbnRyb2xzID0gdGhpcy5jb250cm9scztcbiAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29udHJvbC5hZGRQcmVTZWFyY2goX2FkZEN1c3RvbUZpbHRlcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jdXN0b21GaWx0ZXJzLnB1c2goX2FkZEN1c3RvbUZpbHRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX2FkZEN1c3RvbUZpbHRlcigpIHtcbiAgICAgICAgX2FkZEN1c3RvbUZpbHRlci5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29udHJvbC5hZGRDdXN0b21GaWx0ZXIoZmlsdGVyWG1sLCBlbnRpdHlMb2dpY2FsTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGFkZGl0aW9uYWwgY3VzdG9tIGZpbHRlciB0byB0aGUgbG9va3VwLCB3aXRoIHRoZSBcIkFORFwiIGZpbHRlciBvcGVyYXRvci5cbiAgICAgKiBAcGFyYW0gZW50aXR5TG9naWNhbE5hbWUgKE9wdGlvbmFsKSBUaGUgbG9naWNhbCBuYW1lIG9mIHRoZSBlbnRpdHkuXG4gICAgICogQHBhcmFtIHByaW1hcnlBdHRyaWJ1dGVJZE5hbWUgKE9wdGlvbmFsKSBUaGUgbG9naWNhbCBuYW1lIG9mIHRoZSBwcmltYXJ5IGtleS5cbiAgICAgKiBAcGFyYW0gZmV0Y2hYbWwgU3BlY2lmaWVzIHRoZSBGZXRjaFhNTCB1c2VkIHRvIGZpbHRlci5cbiAgICAgKiBAcmVtYXJrcyAgICAgSWYgZW50aXR5TG9naWNhbE5hbWUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGVudGl0aWVzXG4gICAgICogICAgICAgICAgICAgIHZhbGlkIGZvciB0aGUgTG9va3VwIGNvbnRyb2wuXG4gICAgICogQGV4YW1wbGUgICAgIEV4YW1wbGUgZmV0Y2hYbWw6IDxmZXRjaD5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRpdHkgbmFtZT1cImNvbnRhY3RcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyPlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXR0cmlidXRlPVwiYWRkcmVzczFfY2l0eVwiIG9wZXJhdG9yPVwiZXFcIiB2YWx1ZT1cIlJlZG1vbmRcIiAvPlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbnRpdHk+XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZldGNoPlxuICAgICAqL1xuICAgIGFzeW5jIGFkZFByZUZpbHRlclRvTG9va3VwQWR2YW5jZWQoXG4gICAgICBlbnRpdHlMb2dpY2FsTmFtZTogc3RyaW5nLFxuICAgICAgcHJpbWFyeUF0dHJpYnV0ZUlkTmFtZTogc3RyaW5nLFxuICAgICAgZmV0Y2hYbWw6IHN0cmluZ1xuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgWHJtLldlYkFwaS5vbmxpbmUucmV0cmlldmVNdWx0aXBsZVJlY29yZHMoXG4gICAgICAgICAgZW50aXR5TG9naWNhbE5hbWUsXG4gICAgICAgICAgXCI/ZmV0Y2hYbWw9XCIgKyBmZXRjaFhtbFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmVudGl0aWVzO1xuICAgICAgICBsZXQgZmlsdGVyZWRFbnRpdGllcyA9IFwiXCI7XG4gICAgICAgIF9hZGRDdXN0b21GaWx0ZXIuY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzO1xuICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBmaWx0ZXJlZEVudGl0aWVzICs9IGA8dmFsdWU+JHtpdGVtW3ByaW1hcnlBdHRyaWJ1dGVJZE5hbWVdfTwvdmFsdWU+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZldGNoWG1sID0gZmlsdGVyZWRFbnRpdGllc1xuICAgICAgICAgID8gYDxmaWx0ZXI+PGNvbmRpdGlvbiBhdHRyaWJ1dGU9JyR7cHJpbWFyeUF0dHJpYnV0ZUlkTmFtZX0nIG9wZXJhdG9yPSdpbic+JHtmaWx0ZXJlZEVudGl0aWVzfTwvY29uZGl0aW9uPjwvZmlsdGVyPmBcbiAgICAgICAgICA6IGA8ZmlsdGVyPjxjb25kaXRpb24gYXR0cmlidXRlPScke3ByaW1hcnlBdHRyaWJ1dGVJZE5hbWV9JyBvcGVyYXRvcj0nbnVsbCcvPjwvZmlsdGVyPmA7XG4gICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnRyb2wuYWRkUHJlU2VhcmNoKF9hZGRDdXN0b21GaWx0ZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY3VzdG9tRmlsdGVycy5wdXNoKF9hZGRDdXN0b21GaWx0ZXIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9hZGRDdXN0b21GaWx0ZXIoKSB7XG4gICAgICAgIF9hZGRDdXN0b21GaWx0ZXIuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnRyb2wuYWRkQ3VzdG9tRmlsdGVyKGZldGNoWG1sLCBlbnRpdHlMb2dpY2FsTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBmaWx0ZXJzIHNldCBvbiB0aGUgY3VycmVudCBsb29rdXAgYXR0cmlidXRlIGJ5IHVzaW5nIGFkZFByZUZpbHRlclRvTG9va3VwIG9yIGFkZFByZUZpbHRlclRvTG9va3VwQWR2YW5jZWRcbiAgICAgKi9cbiAgICBjbGVhclByZUZpbHRlckZyb21Mb29rdXAoKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9jdXN0b21GaWx0ZXJzLmZvckVhY2goXG4gICAgICAgICAgKGN1c3RvbUZpbHRlcjogWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlUHJlU2VhcmNoKGN1c3RvbUZpbHRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdHlwZSBPcHRpb25WYWx1ZXMgPSB7XG4gICAgW2tleTogc3RyaW5nXTogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgY2xhc3MgT3B0aW9uc2V0RmllbGQ8T3B0aW9ucyBleHRlbmRzIE9wdGlvblZhbHVlcz5cbiAgICBleHRlbmRzIEZpZWxkXG4gICAgaW1wbGVtZW50cyBYcm0uQXR0cmlidXRlcy5PcHRpb25TZXRBdHRyaWJ1dGVcbiAge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIF9hdHRyaWJ1dGU6IFhybS5BdHRyaWJ1dGVzLk9wdGlvblNldEF0dHJpYnV0ZTtcbiAgICBwcm90ZWN0ZWQgX2NvbnRyb2whOiBYcm0uQ29udHJvbHMuT3B0aW9uU2V0Q29udHJvbDtcbiAgICBPcHRpb246IE9wdGlvbnM7XG4gICAgY29uc3RydWN0b3IoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBvcHRpb24/OiBPcHRpb25zKSB7XG4gICAgICBzdXBlcihhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIHRoaXMuT3B0aW9uID0gb3B0aW9uO1xuICAgIH1cbiAgICBnZXRGb3JtYXQoKTogWHJtLkF0dHJpYnV0ZXMuT3B0aW9uU2V0QXR0cmlidXRlRm9ybWF0IHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRGb3JtYXQoKSBhcyBYcm0uQXR0cmlidXRlcy5PcHRpb25TZXRBdHRyaWJ1dGVGb3JtYXQ7XG4gICAgfVxuICAgIGdldE9wdGlvbih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogWHJtLk9wdGlvblNldFZhbHVlIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldE9wdGlvbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0T3B0aW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0T3B0aW9ucygpOiBYcm0uT3B0aW9uU2V0VmFsdWVbXSB7XG4gICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0T3B0aW9ucygpO1xuICAgIH1cbiAgICBnZXRTZWxlY3RlZE9wdGlvbigpOiBYcm0uT3B0aW9uU2V0VmFsdWUge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFNlbGVjdGVkT3B0aW9uKCk7XG4gICAgfVxuICAgIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRUZXh0KCk7XG4gICAgfVxuICAgIGdldEluaXRpYWxWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEluaXRpYWxWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgQXR0cmlidXRlKCkge1xuICAgICAgcmV0dXJuICh0aGlzLl9hdHRyaWJ1dGUgPz89XG4gICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0QXR0cmlidXRlKHRoaXMuTmFtZSkgPz9cbiAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XG4gICAgfVxuICAgIGdldCBjb250cm9scygpIHtcbiAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5jb250cm9scztcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2woKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX2NvbnRyb2wgPz89XG4gICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0Q29udHJvbCh0aGlzLk5hbWUpID8/XG4gICAgICAgIFhybUV4LnRocm93RXJyb3IoYENvbnRyb2wgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XG4gICAgfVxuICAgIGdldCBWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIHNldCBWYWx1ZSh2YWx1ZToga2V5b2YgT3B0aW9ucyB8IG51bWJlcikge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICBlbHNlIHRoaXMuQXR0cmlidXRlLnNldFZhbHVlKHRoaXMuT3B0aW9uW3ZhbHVlXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gb3B0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlcyBhbiBhcnJheSB3aXRoIHRoZSBvcHRpb24gdmFsdWVzIHRvIGFkZFxuICAgICAqIEBwYXJhbSBpbmRleCAoT3B0aW9uYWwpIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNoZWNrIHRoYXQgdGhlIHZhbHVlcyB3aXRoaW4gdGhlIG9wdGlvbnMgeW91IGFkZCBhcmUgdmFsaWQuXG4gICAgICogICAgICAgICAgSWYgaW5kZXggaXMgbm90IHByb3ZpZGVkLCB0aGUgbmV3IG9wdGlvbiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICovXG4gICAgYWRkT3B0aW9uKHZhbHVlczogbnVtYmVyW10sIGluZGV4PzogbnVtYmVyKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlcyBpcyBub3QgYW4gQXJyYXk6XFxudmFsdWVzOiAnJHt2YWx1ZXN9J2ApO1xuICAgICAgICBjb25zdCBvcHRpb25TZXRWYWx1ZXMgPSB0aGlzLmNvbnRyb2wuZ2V0QXR0cmlidXRlKCkuZ2V0T3B0aW9ucygpID8/IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygb3B0aW9uU2V0VmFsdWVzKSB7XG4gICAgICAgICAgaWYgKHZhbHVlcy5pbmNsdWRlcyhlbGVtZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFkZE9wdGlvbihlbGVtZW50LCBpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgb3B0aW9uIG1hdGNoaW5nIHRoZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUuXG4gICAgICovXG4gICAgcmVtb3ZlT3B0aW9uKHZhbHVlczogbnVtYmVyW10pOiB0aGlzIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdmFsdWVzIGlzIG5vdCBhbiBBcnJheTpcXG52YWx1ZXM6ICcke3ZhbHVlc30nYCk7XG4gICAgICAgIGNvbnN0IG9wdGlvblNldFZhbHVlcyA9IHRoaXMuY29udHJvbC5nZXRBdHRyaWJ1dGUoKS5nZXRPcHRpb25zKCkgPz8gW107XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBvcHRpb25TZXRWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAodmFsdWVzLmluY2x1ZGVzKGVsZW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wucmVtb3ZlT3B0aW9uKGVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBjbGVhck9wdGlvbnMoKTogdGhpcyB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuY2xlYXJPcHRpb25zKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZXhwb3J0IGNsYXNzIFNlY3Rpb24gaW1wbGVtZW50cyBYcm0uQ29udHJvbHMuU2VjdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IE5hbWUhOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9zZWN0aW9uPzogWHJtLkNvbnRyb2xzLlNlY3Rpb247XG4gICAgcHVibGljIHBhcmVudFRhYj86IFhybS5Db250cm9scy5UYWI7XG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLk5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IFNlY3Rpb24oKTogWHJtLkNvbnRyb2xzLlNlY3Rpb24ge1xuICAgICAgcmV0dXJuICh0aGlzLl9zZWN0aW9uID8/PVxuICAgICAgICB0aGlzLnBhcmVudFRhYi5zZWN0aW9ucy5nZXQodGhpcy5OYW1lKSA/P1xuICAgICAgICBYcm1FeC50aHJvd0Vycm9yKFxuICAgICAgICAgIGBUaGUgc2VjdGlvbiAnJHt0aGlzLk5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBmb3JtLmBcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLlNlY3Rpb24uZ2V0TmFtZSgpO1xuICAgIH1cbiAgICBnZXRQYXJlbnQoKTogWHJtLkNvbnRyb2xzLlRhYiB7XG4gICAgICByZXR1cm4gdGhpcy5TZWN0aW9uLmdldFBhcmVudCgpO1xuICAgIH1cbiAgICBjb250cm9sczogWHJtLkNvbGxlY3Rpb24uSXRlbUNvbGxlY3Rpb248WHJtLkNvbnRyb2xzLkNvbnRyb2w+O1xuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuU2VjdGlvbi5zZXRWaXNpYmxlKHZpc2libGUpO1xuICAgIH1cbiAgICBnZXRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG4gICAgfVxuICAgIGdldExhYmVsKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5TZWN0aW9uLmdldExhYmVsKCk7XG4gICAgfVxuICAgIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIHJldHVybiB0aGlzLlNlY3Rpb24uc2V0TGFiZWwobGFiZWwpO1xuICAgIH1cbiAgfVxuICB0eXBlIFRhYlNlY3Rpb25zID0ge1xuICAgIFtrZXk6IHN0cmluZ106IFNlY3Rpb247XG4gIH07XG4gIGV4cG9ydCBjbGFzcyBUYWI8U2VjdGlvbnMgZXh0ZW5kcyBUYWJTZWN0aW9ucz4gaW1wbGVtZW50cyBYcm0uQ29udHJvbHMuVGFiIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgTmFtZSE6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3RhYj86IFhybS5Db250cm9scy5UYWI7XG4gICAgU2VjdGlvbjogU2VjdGlvbnM7XG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBzZWN0aW9uPzogU2VjdGlvbnMpIHtcbiAgICAgIHRoaXMuTmFtZSA9IG5hbWU7XG4gICAgICB0aGlzLlNlY3Rpb24gPSBzZWN0aW9uO1xuICAgICAgZm9yIChsZXQga2V5IGluIHNlY3Rpb24pIHtcbiAgICAgICAgc2VjdGlvbltrZXldLnBhcmVudFRhYiA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIHNlY3Rpb25zOiBYcm0uQ29sbGVjdGlvbi5JdGVtQ29sbGVjdGlvbjxYcm0uQ29udHJvbHMuU2VjdGlvbj47XG5cbiAgICBwdWJsaWMgZ2V0IFRhYigpOiBYcm0uQ29udHJvbHMuVGFiIHtcbiAgICAgIHJldHVybiAodGhpcy5fdGFiID8/PVxuICAgICAgICBGb3JtLmZvcm1Db250ZXh0LnVpLnRhYnMuZ2V0KHRoaXMuTmFtZSkgPz9cbiAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgVGhlIHRhYiAnJHt0aGlzLk5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBmb3JtLmApKTtcbiAgICB9XG4gICAgYWRkVGFiU3RhdGVDaGFuZ2UoaGFuZGxlcjogWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcik6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuVGFiLmFkZFRhYlN0YXRlQ2hhbmdlKGhhbmRsZXIpO1xuICAgIH1cbiAgICBnZXREaXNwbGF5U3RhdGUoKTogWHJtLkRpc3BsYXlTdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5UYWIuZ2V0RGlzcGxheVN0YXRlKCk7XG4gICAgfVxuICAgIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLlRhYi5nZXROYW1lKCk7XG4gICAgfVxuICAgIGdldFBhcmVudCgpOiBYcm0uVWkge1xuICAgICAgcmV0dXJuIHRoaXMuVGFiLmdldFBhcmVudCgpO1xuICAgIH1cbiAgICByZW1vdmVUYWJTdGF0ZUNoYW5nZShoYW5kbGVyOiBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5UYWIucmVtb3ZlVGFiU3RhdGVDaGFuZ2UoaGFuZGxlcik7XG4gICAgfVxuICAgIHNldERpc3BsYXlTdGF0ZShkaXNwbGF5U3RhdGU6IFhybS5EaXNwbGF5U3RhdGUpOiB2b2lkIHtcbiAgICAgIHJldHVybiB0aGlzLlRhYi5zZXREaXNwbGF5U3RhdGUoZGlzcGxheVN0YXRlKTtcbiAgICB9XG4gICAgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5UYWIuc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICB9XG4gICAgZ2V0VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLlRhYi5nZXRWaXNpYmxlKCk7XG4gICAgfVxuICAgIGdldExhYmVsKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5UYWIuZ2V0TGFiZWwoKTtcbiAgICB9XG4gICAgc2V0TGFiZWwobGFiZWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuVGFiLnNldExhYmVsKGxhYmVsKTtcbiAgICB9XG4gICAgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5UYWIuc2V0Rm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IGNsYXNzIEdyaWRDb250cm9sIGltcGxlbWVudHMgWHJtLkNvbnRyb2xzLkdyaWRDb250cm9sIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgTmFtZSE6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2dyaWRDb250cm9sPzogWHJtLkNvbnRyb2xzLkdyaWRDb250cm9sO1xuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgICAgdGhpcy5OYW1lID0gbmFtZTtcbiAgICB9XG4gICAgcHVibGljIGdldCBHcmlkQ29udHJvbCgpOiBYcm0uQ29udHJvbHMuR3JpZENvbnRyb2wge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuX2dyaWRDb250cm9sID8/PVxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0Q29udHJvbDxYcm0uQ29udHJvbHMuR3JpZENvbnRyb2w+KHRoaXMuTmFtZSkpID8/XG4gICAgICAgIFhybUV4LnRocm93RXJyb3IoYFRoZSBncmlkICcke3RoaXMuTmFtZX0nIHdhcyBub3QgZm91bmQgb24gdGhlIGZvcm0uYClcbiAgICAgICk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgR3JpZCgpOiBYcm0uQ29udHJvbHMuR3JpZCB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRHcmlkKCk7XG4gICAgfVxuICAgIGFkZE9uTG9hZChoYW5kbGVyOiBYcm0uRXZlbnRzLkdyaWRDb250cm9sLkxvYWRFdmVudEhhbmRsZXIpOiB2b2lkIHtcbiAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmFkZE9uTG9hZChoYW5kbGVyKTtcbiAgICB9XG4gICAgZ2V0Q29udGV4dFR5cGUoKTogWHJtRW51bS5HcmlkQ29udHJvbENvbnRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0Q29udGV4dFR5cGUoKTtcbiAgICB9XG4gICAgZ2V0RW50aXR5TmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0RW50aXR5TmFtZSgpO1xuICAgIH1cbiAgICBnZXRGZXRjaFhtbCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0RmV0Y2hYbWwoKTtcbiAgICB9XG4gICAgZ2V0R3JpZCgpOiBYcm0uQ29udHJvbHMuR3JpZCB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRHcmlkKCk7XG4gICAgfVxuICAgIGdldFJlbGF0aW9uc2hpcCgpOiBYcm0uQ29udHJvbHMuR3JpZFJlbGF0aW9uc2hpcCB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRSZWxhdGlvbnNoaXAoKTtcbiAgICB9XG4gICAgZ2V0VXJsKGNsaWVudD86IFhybUVudW0uR3JpZENsaWVudCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRVcmwoY2xpZW50KTtcbiAgICB9XG4gICAgZ2V0Vmlld1NlbGVjdG9yKCk6IFhybS5Db250cm9scy5WaWV3U2VsZWN0b3Ige1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0Vmlld1NlbGVjdG9yKCk7XG4gICAgfVxuICAgIG9wZW5SZWxhdGVkR3JpZCgpOiB2b2lkIHtcbiAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLm9wZW5SZWxhdGVkR3JpZCgpO1xuICAgIH1cbiAgICByZWZyZXNoKCk6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wucmVmcmVzaCgpO1xuICAgIH1cbiAgICByZWZyZXNoUmliYm9uKCk6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wucmVmcmVzaFJpYmJvbigpO1xuICAgIH1cbiAgICByZW1vdmVPbkxvYWQoaGFuZGxlcjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wucmVtb3ZlT25Mb2FkKGhhbmRsZXIpO1xuICAgIH1cbiAgICBnZXRDb250cm9sVHlwZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0Q29udHJvbFR5cGUoKTtcbiAgICB9XG4gICAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0TmFtZSgpO1xuICAgIH1cbiAgICBnZXRQYXJlbnQoKTogWHJtLkNvbnRyb2xzLlNlY3Rpb24ge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuZ2V0UGFyZW50KCk7XG4gICAgfVxuICAgIGdldExhYmVsKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRMYWJlbCgpO1xuICAgIH1cbiAgICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5zZXRMYWJlbChsYWJlbCk7XG4gICAgfVxuICAgIGdldFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRWaXNpYmxlKCk7XG4gICAgfVxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWHJtRXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvWHJtRXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOERBQThEO0FBa0M5RCxNQUFNLEtBQVcsS0FBSyxDQTY0Q3JCO0FBNzRDRCxXQUFpQixLQUFLO0lBQ3BCOzs7O09BSUc7SUFDSCxTQUFnQixVQUFVLENBQUMsWUFBb0I7UUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRmUsZ0JBQVUsYUFFekIsQ0FBQTtJQUNEOzs7T0FHRztJQUNILFNBQWdCLGVBQWU7UUFDN0IsSUFBSTtZQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RSxNQUFNLG1CQUFtQixHQUN2QixVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25FLE1BQU0saUJBQWlCLEdBQ3JCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVuRSxPQUFPLFlBQVksQ0FBQztTQUNyQjtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FB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LENBQUM7WUFDcEMsQ0FBQztZQUNELGFBQWE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFDLENBQUM7WUFDRCxZQUFZLENBQUMsT0FBbUI7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELGNBQWM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNDLENBQUM7WUFDRCxPQUFPO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsU0FBUztnQkFDUCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUNELFFBQVE7Z0JBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFDRCxRQUFRLENBQUMsS0FBYTtnQkFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsVUFBVTtnQkFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsQ0FBQztZQUNELFVBQVUsQ0FBQyxPQUFnQjtnQkFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxDQUFDO1NBQ0Y7UUF6RVksaUJBQVcsY0F5RXZCLENBQUE7SUFDSCxDQUFDLEVBaDNCZ0IsS0FBSyxHQUFMLFdBQUssS0FBTCxXQUFLLFFBZzNCckI7QUFDSCxDQUFDLEVBNzRDZ0IsS0FBSyxLQUFMLEtBQUssUUE2NENyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9ub2RlX21vZHVsZXMvQHR5cGVzL3hybS9pbmRleC5kLnRzXCIgLz5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBwYXJhbWV0ZXIgZm9yIGEgcmVxdWVzdC5cclxuICogQHR5cGUge09iamVjdH0gUmVxdWVzdFBhcmFtZXRlclxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXHJcbiAqIEBwcm9wZXJ0eSB7J0Jvb2xlYW4nIHwgJ0RhdGVUaW1lJyB8ICdEZWNpbWFsJyB8ICdFbnRpdHknIHwgJ0VudGl0eUNvbGxlY3Rpb24nIHwgJ0VudGl0eVJlZmVyZW5jZScgfCAnRmxvYXQnIHwgJ0ludGVnZXInIHwgJ01vbmV5JyB8ICdQaWNrbGlzdCcgfCAnU3RyaW5nJ30gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIuXHJcbiAqIEBwcm9wZXJ0eSB7Kn0gVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cclxuICovXHJcbnR5cGUgUmVxdWVzdFBhcmFtZXRlciA9IHtcclxuICBOYW1lOiBzdHJpbmc7XHJcbiAgVHlwZTpcclxuICB8IFwiQm9vbGVhblwiXHJcbiAgfCBcIkRhdGVUaW1lXCJcclxuICB8IFwiRGVjaW1hbFwiXHJcbiAgfCBcIkVudGl0eVwiXHJcbiAgfCBcIkVudGl0eUNvbGxlY3Rpb25cIlxyXG4gIHwgXCJFbnRpdHlSZWZlcmVuY2VcIlxyXG4gIHwgXCJGbG9hdFwiXHJcbiAgfCBcIkludGVnZXJcIlxyXG4gIHwgXCJNb25leVwiXHJcbiAgfCBcIlBpY2tsaXN0XCJcclxuICB8IFwiU3RyaW5nXCI7XHJcbiAgVmFsdWU6IGFueTtcclxufTtcclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYW4gZW50aXR5LlxyXG4gKiBAdHlwZVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBUaGUgSUQgb2YgdGhlIGVudGl0eS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVudGl0eVR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZW50aXR5LlxyXG4gKi9cclxudHlwZSBFbnRpdHlSZWZlcmVuY2UgPSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBlbnRpdHlUeXBlOiBzdHJpbmc7XHJcbn07XHJcbmV4cG9ydCBuYW1lc3BhY2UgWHJtRXgge1xyXG4gIC8qKlxyXG4gICAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBnaXZlbiBlcnJvciBtZXNzYWdlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byB0aHJvdy5cclxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBBbHdheXMgdGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JNZXNzYWdlOiBzdHJpbmcpOiBuZXZlciB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUoKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XHJcbiAgICAgIGNvbnN0IHN0YWNrVHJhY2UgPSBlcnJvci5zdGFjaz8uc3BsaXQoXCJcXG5cIikubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSk7XHJcbiAgICAgIGNvbnN0IGNhbGxpbmdGdW5jdGlvbkxpbmUgPVxyXG4gICAgICAgIHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS5sZW5ndGggPj0gMyA/IHN0YWNrVHJhY2VbMl0gOiB1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZU1hdGNoID1cclxuICAgICAgICBjYWxsaW5nRnVuY3Rpb25MaW5lPy5tYXRjaCgvYXRcXHMrKFteXFxzXSspXFxzK1xcKC8pIHx8IGNhbGxpbmdGdW5jdGlvbkxpbmU/Lm1hdGNoKC9hdFxccysoW15cXHNdKykvKTtcclxuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lTWF0Y2ggPyBmdW5jdGlvbk5hbWVNYXRjaFsxXSA6IFwiXCI7XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb25OYW1lO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LmdldEZ1bmN0aW9uTmFtZTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXlzIGEgbm90aWZpY2F0aW9uIGZvciBhbiBhcHAgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhbmQgbGV2ZWwsIGFuZCBsZXRzIHlvdSBzcGVjaWZ5IHdoZXRoZXIgdG8gc2hvdyBhIGNsb3NlIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgaW4gdGhlIG5vdGlmaWNhdGlvbi5cclxuICAgKiBAcGFyYW0geydTVUNDRVNTJyB8ICdFUlJPUicgfCAnV0FSTklORycgfCAnSU5GTyd9IGxldmVsIC0gVGhlIGxldmVsIG9mIHRoZSBub3RpZmljYXRpb24uIENhbiBiZSAnU1VDQ0VTUycsICdFUlJPUicsICdXQVJOSU5HJywgb3IgJ0lORk8nLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Nob3dDbG9zZUJ1dHRvbj1mYWxzZV0gLSBXaGV0aGVyIHRvIHNob3cgYSBjbG9zZSBidXR0b24gb24gdGhlIG5vdGlmaWNhdGlvbi4gRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCBvZiB0aGUgY3JlYXRlZCBub3RpZmljYXRpb24uXHJcbiAgICovXHJcbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEdsb2JhbE5vdGlmaWNhdGlvbihcclxuICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgIGxldmVsOiBcIlNVQ0NFU1NcIiB8IFwiRVJST1JcIiB8IFwiV0FSTklOR1wiIHwgXCJJTkZPXCIsXHJcbiAgICBzaG93Q2xvc2VCdXR0b24gPSBmYWxzZVxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBsZXZlbE1hcCA9IHtcclxuICAgICAgU1VDQ0VTUzogMSxcclxuICAgICAgRVJST1I6IDIsXHJcbiAgICAgIFdBUk5JTkc6IDMsXHJcbiAgICAgIElORk86IDQsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgbWVzc2FnZUxldmVsID0gbGV2ZWxNYXBbbGV2ZWxdIHx8IGxldmVsTWFwLklORk87XHJcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB7XHJcbiAgICAgIHR5cGU6IDIsXHJcbiAgICAgIGxldmVsOiBtZXNzYWdlTGV2ZWwsXHJcbiAgICAgIG1lc3NhZ2UsXHJcbiAgICAgIHNob3dDbG9zZUJ1dHRvbixcclxuICAgIH07XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgWHJtLkFwcC5hZGRHbG9iYWxOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke2dldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENsZWFycyBhIG5vdGlmaWNhdGlvbiBpbiB0aGUgYXBwIHdpdGggdGhlIGdpdmVuIHVuaXF1ZSBJRC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pcXVlSWQgLSBUaGUgdW5pcXVlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBub3RpZmljYXRpb24gaGFzIGJlZW4gY2xlYXJlZC5cclxuICAgKi9cclxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtb3ZlR2xvYmFsTm90aWZpY2F0aW9uKFxyXG4gICAgdW5pcXVlSWQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgWHJtLkFwcC5jbGVhckdsb2JhbE5vdGlmaWNhdGlvbih1bmlxdWVJZCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtnZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGJ5IHVzaW5nIGl0cyBzY2hlbWEgbmFtZSBhcyBrZXkuXHJcbiAgICogSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGhhcyBib3RoIGEgZGVmYXVsdCB2YWx1ZSBhbmQgYSBjdXJyZW50IHZhbHVlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVudmlyb25tZW50VmFyaWFibGVTY2hlbWFOYW1lIC0gVGhlIHNjaGVtYSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cclxuICAgKiBAYXN5bmNcclxuICAgKi9cclxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlKFxyXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZVNjaGVtYU5hbWU6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gZXhlY3V0ZUZ1bmN0aW9uKFwiUmV0cmlldmVFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWVcIiwgW1xyXG4gICAgICB7XHJcbiAgICAgICAgTmFtZTogXCJEZWZpbml0aW9uU2NoZW1hTmFtZVwiLFxyXG4gICAgICAgIFR5cGU6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgVmFsdWU6IGVudmlyb25tZW50VmFyaWFibGVTY2hlbWFOYW1lLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEEgbWFwIG9mIENSTSBkYXRhIHR5cGVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdHlwZSBuYW1lcywgc3RydWN0dXJhbCBwcm9wZXJ0aWVzLCBhbmQgSmF2YVNjcmlwdCB0eXBlcy5cclxuICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIHsgdHlwZU5hbWU6IHN0cmluZywgc3RydWN0dXJhbFByb3BlcnR5OiBudW1iZXIsIGpzVHlwZTogc3RyaW5nIH0+fVxyXG4gICAqL1xyXG4gIGxldCB0eXBlTWFwID0ge1xyXG4gICAgU3RyaW5nOiB7IHR5cGVOYW1lOiBcIkVkbS5TdHJpbmdcIiwgc3RydWN0dXJhbFByb3BlcnR5OiAxLCBqc1R5cGU6IFwic3RyaW5nXCIgfSxcclxuICAgIEludGVnZXI6IHsgdHlwZU5hbWU6IFwiRWRtLkludDMyXCIsIHN0cnVjdHVyYWxQcm9wZXJ0eTogMSwganNUeXBlOiBcIm51bWJlclwiIH0sXHJcbiAgICBCb29sZWFuOiB7XHJcbiAgICAgIHR5cGVOYW1lOiBcIkVkbS5Cb29sZWFuXCIsXHJcbiAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogMSxcclxuICAgICAganNUeXBlOiBcImJvb2xlYW5cIixcclxuICAgIH0sXHJcbiAgICBEYXRlVGltZToge1xyXG4gICAgICB0eXBlTmFtZTogXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcclxuICAgICAgc3RydWN0dXJhbFByb3BlcnR5OiAxLFxyXG4gICAgICBqc1R5cGU6IFwib2JqZWN0XCIsXHJcbiAgICB9LFxyXG4gICAgRW50aXR5UmVmZXJlbmNlOiB7XHJcbiAgICAgIHR5cGVOYW1lOiBcIm1zY3JtLmNybWJhc2VlbnRpdHlcIixcclxuICAgICAgc3RydWN0dXJhbFByb3BlcnR5OiA1LFxyXG4gICAgICBqc1R5cGU6IFwib2JqZWN0XCIsXHJcbiAgICB9LFxyXG4gICAgRGVjaW1hbDoge1xyXG4gICAgICB0eXBlTmFtZTogXCJFZG0uRGVjaW1hbFwiLFxyXG4gICAgICBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsXHJcbiAgICAgIGpzVHlwZTogXCJudW1iZXJcIixcclxuICAgIH0sXHJcbiAgICBFbnRpdHk6IHtcclxuICAgICAgdHlwZU5hbWU6IFwibXNjcm0uY3JtYmFzZWVudGl0eVwiLFxyXG4gICAgICBzdHJ1Y3R1cmFsUHJvcGVydHk6IDUsXHJcbiAgICAgIGpzVHlwZTogXCJvYmplY3RcIixcclxuICAgIH0sXHJcbiAgICBFbnRpdHlDb2xsZWN0aW9uOiB7XHJcbiAgICAgIHR5cGVOYW1lOiBcIkNvbGxlY3Rpb24obXNjcm0uY3JtYmFzZWVudGl0eSlcIixcclxuICAgICAgc3RydWN0dXJhbFByb3BlcnR5OiA0LFxyXG4gICAgICBqc1R5cGU6IFwib2JqZWN0XCIsXHJcbiAgICB9LFxyXG4gICAgRmxvYXQ6IHsgdHlwZU5hbWU6IFwiRWRtLkRvdWJsZVwiLCBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsIGpzVHlwZTogXCJudW1iZXJcIiB9LFxyXG4gICAgTW9uZXk6IHsgdHlwZU5hbWU6IFwiRWRtLkRlY2ltYWxcIiwgc3RydWN0dXJhbFByb3BlcnR5OiAxLCBqc1R5cGU6IFwibnVtYmVyXCIgfSxcclxuICAgIFBpY2tsaXN0OiB7XHJcbiAgICAgIHR5cGVOYW1lOiBcIkVkbS5JbnQzMlwiLFxyXG4gICAgICBzdHJ1Y3R1cmFsUHJvcGVydHk6IDEsXHJcbiAgICAgIGpzVHlwZTogXCJudW1iZXJcIixcclxuICAgIH0sXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHJlcXVlc3QgcGFyYW1ldGVyIGlzIG9mIGEgc3VwcG9ydGVkIHR5cGUgYW5kIGhhcyBhIHZhbGlkIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7UmVxdWVzdFBhcmFtZXRlcn0gcmVxdWVzdFBhcmFtZXRlciAtIFRoZSByZXF1ZXN0IHBhcmFtZXRlciB0byBjaGVjay5cclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHJlcXVlc3QgcGFyYW1ldGVyIGlzIG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlIG9yIGhhcyBhbiBpbnZhbGlkIHZhbHVlLlxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja1JlcXVlc3RQYXJhbWV0ZXJUeXBlKFxyXG4gICAgcmVxdWVzdFBhcmFtZXRlcjogUmVxdWVzdFBhcmFtZXRlclxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCF0eXBlTWFwW3JlcXVlc3RQYXJhbWV0ZXIuVHlwZV0pXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgVGhlIHByb3BlcnR5IHR5cGUgJHtyZXF1ZXN0UGFyYW1ldGVyLlR5cGV9IG9mIHRoZSBwcm9wZXJ0eSAke3JlcXVlc3RQYXJhbWV0ZXIuTmFtZX0gaXMgbm90IHN1cHBvcnRlZC5gXHJcbiAgICAgICk7XHJcbiAgICBjb25zdCBleHBlY3RlZFR5cGUgPSB0eXBlTWFwW3JlcXVlc3RQYXJhbWV0ZXIuVHlwZV0uanNUeXBlO1xyXG4gICAgY29uc3QgYWN0dWFsVHlwZSA9IHR5cGVvZiByZXF1ZXN0UGFyYW1ldGVyLlZhbHVlO1xyXG4gICAgY29uc3QgaW52YWxpZFR5cGVNZXNzYWdlID0gYFRoZSB2YWx1ZSAke3JlcXVlc3RQYXJhbWV0ZXIuVmFsdWV9XFxub2YgdGhlIHByb3BlcnR5ICR7cmVxdWVzdFBhcmFtZXRlci5OYW1lfVxcbmlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZSAke3JlcXVlc3RQYXJhbWV0ZXIuVHlwZX0uYDtcclxuICAgIGlmIChcclxuICAgICAgcmVxdWVzdFBhcmFtZXRlci5UeXBlID09PSBcIkVudGl0eVJlZmVyZW5jZVwiIHx8XHJcbiAgICAgIHJlcXVlc3RQYXJhbWV0ZXIuVHlwZSA9PT0gXCJFbnRpdHlcIlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhcmVxdWVzdFBhcmFtZXRlci5WYWx1ZSB8fFxyXG4gICAgICAgICFyZXF1ZXN0UGFyYW1ldGVyLlZhbHVlLmhhc093blByb3BlcnR5KFwiaWRcIikgfHxcclxuICAgICAgICAhcmVxdWVzdFBhcmFtZXRlci5WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcImVudGl0eVR5cGVcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGludmFsaWRUeXBlTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgICAgdHlwZU1hcFtcclxuICAgICAgICByZXF1ZXN0UGFyYW1ldGVyLlR5cGVcclxuICAgICAgXS50eXBlTmFtZSA9IGBtc2NybS4ke3JlcXVlc3RQYXJhbWV0ZXIuVmFsdWUuZW50aXR5VHlwZX1gO1xyXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0UGFyYW1ldGVyLlR5cGUgPT09IFwiRW50aXR5Q29sbGVjdGlvblwiKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhQXJyYXkuaXNBcnJheShyZXF1ZXN0UGFyYW1ldGVyLlZhbHVlKSB8fFxyXG4gICAgICAgIHJlcXVlc3RQYXJhbWV0ZXIuVmFsdWUuZXZlcnkoXHJcbiAgICAgICAgICAodikgPT5cclxuICAgICAgICAgICAgdHlwZW9mIHYgIT09IFwib2JqZWN0XCIgfHxcclxuICAgICAgICAgICAgIXYgfHxcclxuICAgICAgICAgICAgIXYuaGFzT3duUHJvcGVydHkoXCJpZFwiKSB8fFxyXG4gICAgICAgICAgICAhdi5oYXNPd25Qcm9wZXJ0eShcImVudGl0eVR5cGVcIilcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihpbnZhbGlkVHlwZU1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RQYXJhbWV0ZXIuVHlwZSA9PT0gXCJEYXRlVGltZVwiKSB7XHJcbiAgICAgIGlmICghKHJlcXVlc3RQYXJhbWV0ZXIuVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihpbnZhbGlkVHlwZU1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoYWN0dWFsVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGludmFsaWRUeXBlTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgYW4gQWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25OYW1lIC0gVGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgICogQHBhcmFtIHtSZXF1ZXN0UGFyYW1ldGVyW119IHJlcXVlc3RQYXJhbWV0ZXJzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBwYXJhbWV0ZXIgbmFtZSwgdHlwZSBhbmQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtFbnRpdHlSZWZlcmVuY2V9IFtib3VuZEVudGl0eV0gLSBBbiBvcHRpb25hbCBFbnRpdHlSZWZlcmVuY2Ugb2YgdGhlIGJvdW5kIGVudGl0eS5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIEEgUHJvbWlzZSB3aXRoIHRoZSByZXF1ZXN0IHJlc3BvbnNlLlxyXG4gICAqIEB0aHJvd3Mge0Vycm9yfSAtIFRocm93cyBhbiBlcnJvciBpZiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXIgaXMgbm90IG9mIGEgc3VwcG9ydGVkIHR5cGUgb3IgaGFzIGFuIGludmFsaWQgdmFsdWUuXHJcbiAgICovXHJcbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBY3Rpb24oXHJcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmcsXHJcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcltdLFxyXG4gICAgYm91bmRFbnRpdHk/OiBFbnRpdHlSZWZlcmVuY2VcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgcGFyYW1ldGVyRGVmaW5pdGlvbjogYW55ID0ge307XHJcbiAgICBpZiAoYm91bmRFbnRpdHkpXHJcbiAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLnB1c2goe1xyXG4gICAgICAgIE5hbWU6IFwiZW50aXR5XCIsXHJcbiAgICAgICAgVmFsdWU6IGJvdW5kRW50aXR5LFxyXG4gICAgICAgIFR5cGU6IFwiRW50aXR5UmVmZXJlbmNlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgZm9yIChjb25zdCByZXF1ZXN0UGFyYW1ldGVyIG9mIHJlcXVlc3RQYXJhbWV0ZXJzKSB7XHJcbiAgICAgIGNoZWNrUmVxdWVzdFBhcmFtZXRlclR5cGUocmVxdWVzdFBhcmFtZXRlcik7XHJcbiAgICAgIHBhcmFtZXRlckRlZmluaXRpb25bcmVxdWVzdFBhcmFtZXRlci5OYW1lXSA9IHtcclxuICAgICAgICB0eXBlTmFtZTogdHlwZU1hcFtyZXF1ZXN0UGFyYW1ldGVyLlR5cGVdLnR5cGVOYW1lLFxyXG4gICAgICAgIHN0cnVjdHVyYWxQcm9wZXJ0eTogdHlwZU1hcFtyZXF1ZXN0UGFyYW1ldGVyLlR5cGVdLnN0cnVjdHVyYWxQcm9wZXJ0eSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlcSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHtcclxuICAgICAgICBnZXRNZXRhZGF0YTogKCkgPT4gKHtcclxuICAgICAgICAgIGJvdW5kUGFyYW1ldGVyOiBib3VuZEVudGl0eSA/IFwiZW50aXR5XCIgOiBudWxsLFxyXG4gICAgICAgICAgb3BlcmF0aW9uVHlwZTogMCxcclxuICAgICAgICAgIG9wZXJhdGlvbk5hbWU6IGFjdGlvbk5hbWUsXHJcbiAgICAgICAgICBwYXJhbWV0ZXJUeXBlczogcGFyYW1ldGVyRGVmaW5pdGlvbixcclxuICAgICAgICB9KSxcclxuICAgICAgfSxcclxuICAgICAgLi4ucmVxdWVzdFBhcmFtZXRlcnMubWFwKChwKSA9PiAoeyBbcC5OYW1lXTogcC5WYWx1ZSB9KSlcclxuICAgICk7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFhybS5XZWJBcGkub25saW5lLmV4ZWN1dGUocmVxKTtcclxuICAgIGlmIChyZXNwb25zZS5vaykgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyBhIEZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUgLSBUaGUgdW5pcXVlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSB7UmVxdWVzdFBhcmFtZXRlcltdfSByZXF1ZXN0UGFyYW1ldGVycyAtIEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgcGFyYW1ldGVyIG5hbWUsIHR5cGUgYW5kIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7RW50aXR5UmVmZXJlbmNlfSBbYm91bmRFbnRpdHldIC0gQW4gb3B0aW9uYWwgRW50aXR5UmVmZXJlbmNlIG9mIHRoZSBib3VuZCBlbnRpdHkuXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gLSBBIFByb21pc2Ugd2l0aCB0aGUgcmVxdWVzdCByZXNwb25zZS5cclxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHJlcXVlc3QgcGFyYW1ldGVyIGlzIG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlIG9yIGhhcyBhbiBpbnZhbGlkIHZhbHVlLlxyXG4gICAqL1xyXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlRnVuY3Rpb24oXHJcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcclxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVyW10sXHJcbiAgICBib3VuZEVudGl0eT86IEVudGl0eVJlZmVyZW5jZVxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWZpbml0aW9uOiBhbnkgPSB7fTtcclxuICAgIGlmIChib3VuZEVudGl0eSlcclxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnMucHVzaCh7XHJcbiAgICAgICAgTmFtZTogXCJlbnRpdHlcIixcclxuICAgICAgICBWYWx1ZTogYm91bmRFbnRpdHksXHJcbiAgICAgICAgVHlwZTogXCJFbnRpdHlSZWZlcmVuY2VcIixcclxuICAgICAgfSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXIgb2YgcmVxdWVzdFBhcmFtZXRlcnMpIHtcclxuICAgICAgY2hlY2tSZXF1ZXN0UGFyYW1ldGVyVHlwZShyZXF1ZXN0UGFyYW1ldGVyKTtcclxuICAgICAgcGFyYW1ldGVyRGVmaW5pdGlvbltyZXF1ZXN0UGFyYW1ldGVyLk5hbWVdID0ge1xyXG4gICAgICAgIHR5cGVOYW1lOiB0eXBlTWFwW3JlcXVlc3RQYXJhbWV0ZXIuVHlwZV0udHlwZU5hbWUsXHJcbiAgICAgICAgc3RydWN0dXJhbFByb3BlcnR5OiB0eXBlTWFwW3JlcXVlc3RQYXJhbWV0ZXIuVHlwZV0uc3RydWN0dXJhbFByb3BlcnR5LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVxID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge1xyXG4gICAgICAgIGdldE1ldGFkYXRhOiAoKSA9PiAoe1xyXG4gICAgICAgICAgYm91bmRQYXJhbWV0ZXI6IGJvdW5kRW50aXR5ID8gXCJlbnRpdHlcIiA6IG51bGwsXHJcbiAgICAgICAgICBvcGVyYXRpb25UeXBlOiAxLFxyXG4gICAgICAgICAgb3BlcmF0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICAgcGFyYW1ldGVyVHlwZXM6IHBhcmFtZXRlckRlZmluaXRpb24sXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLnJlcXVlc3RQYXJhbWV0ZXJzLm1hcCgocCkgPT4gKHsgW3AuTmFtZV06IHAuVmFsdWUgfSkpXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBYcm0uV2ViQXBpLm9ubGluZS5leGVjdXRlKHJlcSk7XHJcbiAgICBpZiAocmVzcG9uc2Uub2spIHJldHVybiByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gcmVzcG9uc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZXMgYSBHVUlEIGxvd2VyY2FzZSBhbmQgcmVtb3ZlcyBicmFja2V0cy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3VpZCAtIFRoZSBHVUlEIHRvIG5vcm1hbGl6ZS5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBub3JtYWxpemVkIEdVSUQuXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUd1aWQoZ3VpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgZ3VpZCAhPT0gXCJzdHJpbmdcIilcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC5ub3JtYWxpemVHdWlkOlxcbicke2d1aWR9JyBpcyBub3QgYSBzdHJpbmdgKTtcclxuICAgIHJldHVybiBndWlkLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW3t9XS9nLCBcIlwiKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT3BlbnMgYSBkaWFsb2cgd2l0aCBkeW5hbWljIGhlaWdodCBhbmQgd2lkdGggYmFzZWQgb24gdGV4dCBjb250ZW50LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZGlhbG9nLlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IC0gQSBQcm9taXNlIHdpdGggdGhlIGRpYWxvZyByZXNwb25zZS5cclxuICAgKi9cclxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFsZXJ0RGlhbG9nKFxyXG4gICAgdGl0bGU6IHN0cmluZyxcclxuICAgIHRleHQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vKTtcclxuICAgICAgbGV0IGFkZGl0aW9uYWxSb3dzID0gMDtcclxuICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICBsZXQgd2lkdGggPSBnZXRUZXh0V2lkdGgoXHJcbiAgICAgICAgICByb3csXHJcbiAgICAgICAgICBcIjFyZW0gU2Vnb2UgVUkgUmVndWxhciwgU2Vnb2VVSSwgU2Vnb2UgVUlcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHdpZHRoID4gOTQwKSB7XHJcbiAgICAgICAgICBhZGRpdGlvbmFsUm93cyArPSB3aWR0aCAvIDk0MDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBsb25nZXN0Um93ID0gcm93cy5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYywgcm93KSA9PiAocm93Lmxlbmd0aCA+IGFjYy5sZW5ndGggPyByb3cgOiBhY2MpLFxyXG4gICAgICAgIFwiXCJcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihcclxuICAgICAgICBnZXRUZXh0V2lkdGgobG9uZ2VzdFJvdywgXCIxcmVtIFNlZ29lIFVJIFJlZ3VsYXIsIFNlZ29lVUksIFNlZ29lIFVJXCIpLFxyXG4gICAgICAgIDEwMDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gMTA5ICsgKHJvd3MubGVuZ3RoICsgYWRkaXRpb25hbFJvd3MpICogMjA7XHJcbiAgICAgIHJldHVybiBhd2FpdCBYcm0uTmF2aWdhdGlvbi5vcGVuQWxlcnREaWFsb2coXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsOiBcIk9rXCIsXHJcbiAgICAgICAgICB0ZXh0LFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICB3aWR0aCxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtnZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VzIGNhbnZhcy5tZWFzdXJlVGV4dCB0byBjb21wdXRlIGFuZCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBnaXZlbiB0ZXh0IG9mIGdpdmVuIGZvbnQgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZvbnQgVGhlIGNzcyBmb250IGRlc2NyaXB0b3IgdGhhdCB0ZXh0IGlzIHRvIGJlIHJlbmRlcmVkIHdpdGggKGUuZy4gXCJib2xkIDE0cHggdmVyZGFuYVwiKS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExODI0MS9jYWxjdWxhdGUtdGV4dC13aWR0aC13aXRoLWphdmFzY3JpcHQvMjEwMTUzOTMjMjEwMTUzOTNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZ2V0VGV4dFdpZHRoKHRleHQ6IHN0cmluZywgZm9udDogc3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XHJcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICBjb250ZXh0LmZvbnQgPSBmb250O1xyXG4gICAgICBjb25zdCBtZXRyaWNzID0gY29udGV4dC5tZWFzdXJlVGV4dCh0ZXh0KTtcclxuICAgICAgcmV0dXJuIG1ldHJpY3Mud2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJlcHJlc2VudHMgYSBmb3JtIGluIER5bmFtaWNzIDM2NS5cclxuICAgKi9cclxuICBleHBvcnQgY2xhc3MgRm9ybSB7XHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9mb3JtQ29udGV4dDogWHJtLkZvcm1Db250ZXh0O1xyXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfZXhlY3V0aW9uQ29udGV4dDogWHJtLkV2ZW50cy5FdmVudENvbnRleHQ7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gICAgLyoqR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmb3JtIGNvbnRleHQqL1xyXG4gICAgc3RhdGljIGdldCBmb3JtQ29udGV4dCgpOiBYcm0uRm9ybUNvbnRleHQge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICAvKipHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGV4ZWN1dGlvIGNvbnRleHQqL1xyXG4gICAgc3RhdGljIGdldCBleGVjdXRpb25Db250ZXh0KCk6IFhybS5FdmVudHMuRXZlbnRDb250ZXh0IHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICAvKipHZXRzIGEgbG9va3VwIHZhbHVlIHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVjb3JkLiovXHJcbiAgICBzdGF0aWMgZ2V0IGVudGl0eVJlZmVyZW5jZSgpIHtcclxuICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQuZGF0YS5lbnRpdHkuZ2V0RW50aXR5UmVmZXJlbmNlKCk7XHJcbiAgICB9XHJcbiAgICAvKipTZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZvcm0gY29udGV4dCovXHJcbiAgICBzdGF0aWMgc2V0IGZvcm1Db250ZXh0KGNvbnRleHQ6IFhybS5Gb3JtQ29udGV4dCB8IFhybS5FdmVudHMuRXZlbnRDb250ZXh0KSB7XHJcbiAgICAgIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC5Gb3JtLnNldEZvcm1Db250ZXh0OiBUaGUgZXhlY3V0aW9uQ29udGV4dCBvciBmb3JtQ29udGV4dCB3YXMgbm90IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uYCk7XHJcbiAgICAgIGlmIChcImdldEZvcm1Db250ZXh0XCIgaW4gY29udGV4dCkge1xyXG4gICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuX2Zvcm1Db250ZXh0ID0gY29udGV4dC5nZXRGb3JtQ29udGV4dCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKFwiZGF0YVwiIGluIGNvbnRleHQpIHRoaXMuX2Zvcm1Db250ZXh0ID0gY29udGV4dDtcclxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LkZvcm0uc2V0Rm9ybUNvbnRleHQ6IFRoZSBwYXNzZWQgY29udGV4dCBpcyBub3QgYW4gZXhlY3V0aW9uQ29udGV4dCBvciBmb3JtQ29udGV4dC5gKTtcclxuICAgIH1cclxuICAgIC8qKlNldHMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQqL1xyXG4gICAgc3RhdGljIHNldCBleGVjdXRpb25Db250ZXh0KGNvbnRleHQ6IFhybS5Gb3JtQ29udGV4dCB8IFhybS5FdmVudHMuRXZlbnRDb250ZXh0KSB7XHJcbiAgICAgIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC5Gb3JtLnNldEV4ZWN1dGlvbkNvbnRleHQ6IFRoZSBleGVjdXRpb25Db250ZXh0IG9yIGZvcm1Db250ZXh0IHdhcyBub3QgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5gKTtcclxuICAgICAgaWYgKFwiZ2V0Rm9ybUNvbnRleHRcIiBpbiBjb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRleHQgPSBjb250ZXh0LmdldEZvcm1Db250ZXh0KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXCJkYXRhXCIgaW4gY29udGV4dCkgdGhpcy5fZm9ybUNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgWHJtRXguRm9ybS5zZXRFeGVjdXRpb25Db250ZXh0OiBUaGUgcGFzc2VkIGNvbnRleHQgaXMgbm90IGFuIGV4ZWN1dGlvbkNvbnRleHQgb3IgZm9ybUNvbnRleHQuYCk7XHJcbiAgICB9XHJcbiAgICAvKipSZXR1cm5zIHRydWUgaWYgZm9ybSBpcyBmcm9tIHR5cGUgY3JlYXRlKi9cclxuICAgIHN0YXRpYyBnZXQgSXNDcmVhdGUoKSB7XHJcbiAgICAgIHJldHVybiBGb3JtLmZvcm1Db250ZXh0LnVpLmdldEZvcm1UeXBlKCkgPT0gMTtcclxuICAgIH1cclxuICAgIC8qKlJldHVybnMgdHJ1ZSBpZiBmb3JtIGlzIGZyb20gdHlwZSB1cGRhdGUqL1xyXG4gICAgc3RhdGljIGdldCBJc1VwZGF0ZSgpIHtcclxuICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQudWkuZ2V0Rm9ybVR5cGUoKSA9PSAyO1xyXG4gICAgfVxyXG4gICAgLyoqUmV0dXJucyB0cnVlIGlmIGZvcm0gaXMgbm90IGZyb20gdHlwZSBjcmVhdGUqL1xyXG4gICAgc3RhdGljIGdldCBJc05vdENyZWF0ZSgpIHtcclxuICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQudWkuZ2V0Rm9ybVR5cGUoKSAhPSAxO1xyXG4gICAgfVxyXG4gICAgLyoqUmV0dXJucyB0cnVlIGlmIGZvcm0gaXMgbm90IGZyb20gdHlwZSB1cGRhdGUqL1xyXG4gICAgc3RhdGljIGdldCBJc05vdFVwZGF0ZSgpIHtcclxuICAgICAgcmV0dXJuIEZvcm0uZm9ybUNvbnRleHQudWkuZ2V0Rm9ybVR5cGUoKSAhPSAyO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGZvcm0gbGV2ZWwgbm90aWZpY2F0aW9uLiBBbnkgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgY2FuIGJlIGRpc3BsYXllZCBhbmQgd2lsbCByZW1haW4gdW50aWwgcmVtb3ZlZCB1c2luZyBjbGVhckZvcm1Ob3RpZmljYXRpb24uXHJcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBub3RpZmljYXRpb24gYXJlYSBpcyBsaW1pdGVkIHNvIGVhY2ggbmV3IG1lc3NhZ2Ugd2lsbCBiZSBhZGRlZCB0byB0aGUgdG9wLlxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHRleHQgb2YgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLlxyXG4gICAgICogQHBhcmFtIGxldmVsIFRoZSBsZXZlbCBvZiB0aGUgbm90aWZpY2F0aW9uIHdoaWNoIGRlZmluZXMgaG93IHRoZSBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkLCBzdWNoIGFzIHRoZSBpY29uLlxyXG4gICAgICogRVJST1I6IE5vdGlmaWNhdGlvbiB3aWxsIHVzZSB0aGUgc3lzdGVtIGVycm9yIGljb24uXHJcbiAgICAgKiBXQVJOSU5HOiBOb3RpZmljYXRpb24gd2lsbCB1c2UgdGhlIHN5c3RlbSB3YXJuaW5nIGljb24uXHJcbiAgICAgKiBJTkZPOiBOb3RpZmljYXRpb24gd2lsbCB1c2UgdGhlIHN5c3RlbSBpbmZvIGljb24uXHJcbiAgICAgKiBAcGFyYW0gdW5pcXVlSWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBub3RpZmljYXRpb24gd2hpY2ggaXMgdXNlZCB3aXRoIGNsZWFyRm9ybU5vdGlmaWNhdGlvbiB0byByZW1vdmUgdGhlIG5vdGlmaWNhdGlvbi5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZEZvcm1Ob3RpZmljYXRpb24oXHJcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcclxuICAgICAgbGV2ZWw6IFhybS5Gb3JtTm90aWZpY2F0aW9uTGV2ZWwsXHJcbiAgICAgIHVuaXF1ZUlkOiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBGb3JtLmZvcm1Db250ZXh0LnVpLnNldEZvcm1Ob3RpZmljYXRpb24oXHJcbiAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICB1bmlxdWVJZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdGhlIGZvcm0gbm90aWZpY2F0aW9uIGRlc2NyaWJlZCBieSB1bmlxdWVJZC5cclxuICAgICAqIEBwYXJhbSB1bmlxdWVJZCBVbmlxdWUgaWRlbnRpZmllci5cclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlbW92ZUZvcm1Ob3RpZmljYXRpb24odW5pcXVlSWQ6IHN0cmluZykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBGb3JtLmZvcm1Db250ZXh0LnVpLmNsZWFyRm9ybU5vdGlmaWNhdGlvbih1bmlxdWVJZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVjb3JkIGlzIHNhdmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWRkT25TYXZlRXZlbnRIYW5kbGVyKFxyXG4gICAgICBoYW5kbGVyczpcclxuICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJcclxuICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJbXVxyXG4gICAgKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xyXG4gICAgICAgICAgaGFuZGxlcnMgPSBbaGFuZGxlcnNdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2hhbmRsZXJ9JyBpcyBub3QgYSBmdW5jdGlvbmApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5kYXRhLmVudGl0eS5hZGRPblNhdmUoaGFuZGxlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBPblNhdmUgaXMgY29tcGxldGUuXHJcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlci5cclxuICAgICAqIEByZW1hcmtzIEFkZGVkIGluIDkuMlxyXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcG93ZXJhcHBzL2RldmVsb3Blci9tb2RlbC1kcml2ZW4tYXBwcy9jbGllbnRhcGkvcmVmZXJlbmNlL2V2ZW50cy9wb3N0c2F2ZSBFeHRlcm5hbCBMaW5rOiBQb3N0U2F2ZSBFdmVudCBEb2N1bWVudGF0aW9ufVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWRkT25Qb3N0U2F2ZUV2ZW50SGFuZGxlcihcclxuICAgICAgaGFuZGxlcnM6XHJcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyXHJcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyW11cclxuICAgICkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcclxuICAgICAgICAgIGhhbmRsZXJzID0gW2hhbmRsZXJzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtoYW5kbGVyfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZGF0YS5lbnRpdHkuYWRkT25Qb3N0U2F2ZShoYW5kbGVyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBmb3JtIGRhdGEgaXMgbG9hZGVkLlxyXG4gICAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGZvcm0gZGF0YSBsb2Fkcy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZXZlbnQgaGFuZGxlciBwaXBlbGluZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZE9uTG9hZEV2ZW50SGFuZGxlcihcclxuICAgICAgaGFuZGxlcnM6XHJcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyXHJcbiAgICAgICAgfCBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyW11cclxuICAgICkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcclxuICAgICAgICAgIGhhbmRsZXJzID0gW2hhbmRsZXJzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtoYW5kbGVyfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZGF0YS5hZGRPbkxvYWQoaGFuZGxlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgYXR0cmlidXRlJ3MgdmFsdWUgaXMgY2hhbmdlZC5cclxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBmdW5jdGlvbiByZWZlcmVuY2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZGRPbkNoYW5nZUV2ZW50SGFuZGxlcihcclxuICAgICAgZmllbGRzOiBDbGFzcy5GaWVsZFtdLFxyXG4gICAgICBoYW5kbGVyczpcclxuICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJcclxuICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJbXSxcclxuICAgICAgZXhlY3V0ZT86IGJvb2xlYW5cclxuICAgICkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcclxuICAgICAgICAgIGhhbmRsZXJzID0gW2hhbmRsZXJzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtoYW5kbGVyfScgaXMgbm90IGEgZnVuY3Rpb25gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZC5hZGRPbkNoYW5nZShoYW5kbGVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChleGVjdXRlKSB7XHJcbiAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgZmllbGQuQXR0cmlidXRlLmZpcmVPbkNoYW5nZSgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBuYW1lc3BhY2UgQ2xhc3Mge1xyXG4gICAgLyoqXHJcbiAqIFVzZWQgdG8gZXhlY3V0ZSBtZXRob2RzIHJlbGF0ZWQgdG8gYSBzaW5nbGUgQXR0cmlidXRlXHJcbiAqL1xyXG4gICAgZXhwb3J0IGNsYXNzIEZpZWxkIGltcGxlbWVudHMgWHJtLkF0dHJpYnV0ZXMuQXR0cmlidXRlIHtcclxuICAgICAgcHVibGljIHN0YXRpYyBhbGxGaWVsZHM6IEZpZWxkW10gPSBbXTtcclxuXHJcbiAgICAgIHB1YmxpYyByZWFkb25seSBOYW1lITogc3RyaW5nO1xyXG4gICAgICBwcm90ZWN0ZWQgX2F0dHJpYnV0ZT86IFhybS5BdHRyaWJ1dGVzLkF0dHJpYnV0ZTtcclxuXHJcbiAgICAgIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRmllbGQgPSBGaWVsZC5hbGxGaWVsZHMuZmluZChcclxuICAgICAgICAgIChmKSA9PiBmLk5hbWUgPT09IGF0dHJpYnV0ZU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChleGlzdGluZ0ZpZWxkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdGaWVsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5OYW1lID0gYXR0cmlidXRlTmFtZTtcclxuICAgICAgICBGaWVsZC5hbGxGaWVsZHMucHVzaCh0aGlzKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRBdHRyaWJ1dGVUeXBlKCk6IFhybS5BdHRyaWJ1dGVzLkF0dHJpYnV0ZVR5cGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRBdHRyaWJ1dGVUeXBlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0Rm9ybWF0KCk6IFhybS5BdHRyaWJ1dGVzLkF0dHJpYnV0ZUZvcm1hdCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEZvcm1hdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldElzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldElzRGlydHkoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXROYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldE5hbWUoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRQYXJlbnQoKTogWHJtLkVudGl0eSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFBhcmVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFJlcXVpcmVkTGV2ZWwoKTogWHJtLkF0dHJpYnV0ZXMuUmVxdWlyZW1lbnRMZXZlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFJlcXVpcmVkTGV2ZWwoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRTdWJtaXRNb2RlKCk6IFhybS5TdWJtaXRNb2RlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0U3VibWl0TW9kZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFVzZXJQcml2aWxlZ2UoKTogWHJtLlByaXZpbGVnZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFVzZXJQcml2aWxlZ2UoKTtcclxuICAgICAgfVxyXG4gICAgICByZW1vdmVPbkNoYW5nZShoYW5kbGVyOiBYcm0uRXZlbnRzLkF0dHJpYnV0ZS5DaGFuZ2VFdmVudEhhbmRsZXIpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUucmVtb3ZlT25DaGFuZ2UoaGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgICAgc2V0U3VibWl0TW9kZShzdWJtaXRNb2RlOiBYcm0uU3VibWl0TW9kZSk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5zZXRTdWJtaXRNb2RlKHN1Ym1pdE1vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldElzVmFsaWQoaXNWYWxpZDogYm9vbGVhbiwgbWVzc2FnZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5zZXRJc1ZhbGlkKGlzVmFsaWQsIG1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwdWJsaWMgZ2V0IEF0dHJpYnV0ZSgpOiBYcm0uQXR0cmlidXRlcy5BdHRyaWJ1dGUge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fYXR0cmlidXRlID8/PVxyXG4gICAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xyXG4gICAgICAgICAgWHJtRXgudGhyb3dFcnJvcihcclxuICAgICAgICAgICAgYFRoZSBhdHRyaWJ1dGUgJyR7dGhpcy5OYW1lfScgd2FzIG5vdCBmb3VuZCBvbiB0aGUgZm9ybS5gXHJcbiAgICAgICAgICApKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHVibGljIGdldCBjb250cm9scygpOiBYcm0uQ29sbGVjdGlvbi5JdGVtQ29sbGVjdGlvbjxYcm0uQ29udHJvbHMuU3RhbmRhcmRDb250cm9sPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmNvbnRyb2xzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogR2V0cyB0aGUgdmFsdWUuXHJcbiAgICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZS5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXQgVmFsdWUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0VmFsdWUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHVibGljIHNldCBWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogU2V0cyBhIGNvbnRyb2wtbG9jYWwgbm90aWZpY2F0aW9uIG1lc3NhZ2UuXHJcbiAgICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxyXG4gICAgICAgKiBAcGFyYW0gdW5pcXVlSWQgVW5pcXVlIGlkZW50aWZpZXIuXHJcbiAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIGZhbHNlIGlmIGl0IGZhaWxzLlxyXG4gICAgICAgKiBAcmVtYXJrcyAgICAgV2hlbiB0aGlzIG1ldGhvZCBpcyB1c2VkIG9uIE1pY3Jvc29mdCBEeW5hbWljcyBDUk0gZm9yIHRhYmxldHMgYSByZWQgXCJYXCIgaWNvblxyXG4gICAgICAgKiAgICAgICAgICAgICAgYXBwZWFycyBuZXh0IHRvIHRoZSBjb250cm9sLiBUYXBwaW5nIG9uIHRoZSBpY29uIHdpbGwgZGlzcGxheSB0aGUgbWVzc2FnZS5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBzZXROb3RpZmljYXRpb24obWVzc2FnZTogc3RyaW5nLCB1bmlxdWVJZDogc3RyaW5nKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICghbWVzc2FnZSkgdGhyb3cgbmV3IEVycm9yKGBubyBtZXNzYWdlIHdhcyBwcm92aWRlZC5gKTtcclxuICAgICAgICAgIGlmICghdW5pcXVlSWQpIHRocm93IG5ldyBFcnJvcihgbm8gdW5pcXVlSWQgd2FzIHByb3ZpZGVkLmApO1xyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PlxyXG4gICAgICAgICAgICBjb250cm9sLnNldE5vdGlmaWNhdGlvbihtZXNzYWdlLCB1bmlxdWVJZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTZXRzIHRoZSB2aXNpYmlsaXR5IHN0YXRlLlxyXG4gICAgICAgKiBAcGFyYW0gdmlzaWJsZSB0cnVlIHRvIHNob3csIGZhbHNlIHRvIGhpZGUuXHJcbiAgICAgICAqL1xyXG4gICAgICBwdWJsaWMgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4gY29udHJvbC5zZXRWaXNpYmxlKHZpc2libGUpKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBjb250cm9sIHRvIGVpdGhlciBlbmFibGVkLCBvciBkaXNhYmxlZC5cclxuICAgICAgICogQHBhcmFtIGRpc2FibGVkIHRydWUgdG8gZGlzYWJsZSwgZmFsc2UgdG8gZW5hYmxlLlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIHNldERpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4gY29udHJvbC5zZXREaXNhYmxlZChkaXNhYmxlZCkpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogU2V0cyB0aGUgcmVxdWlyZWQgbGV2ZWwuXHJcbiAgICAgICAqIEBwYXJhbSByZXF1aXJlbWVudExldmVsIFRoZSByZXF1aXJlbWVudCBsZXZlbCwgYXMgZWl0aGVyIFwibm9uZVwiLCBcInJlcXVpcmVkXCIsIG9yIFwicmVjb21tZW5kZWRcIlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIHNldFJlcXVpcmVkTGV2ZWwoXHJcbiAgICAgICAgcmVxdWlyZW1lbnRMZXZlbDogWHJtLkF0dHJpYnV0ZXMuUmVxdWlyZW1lbnRMZXZlbFxyXG4gICAgICApOiB0aGlzIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0UmVxdWlyZWRMZXZlbChyZXF1aXJlbWVudExldmVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNldHMgdGhlIHJlcXVpcmVkIGxldmVsLlxyXG4gICAgICAgKiBAcGFyYW0gcmVxdWlyZWQgVGhlIHJlcXVpcmVtZW50IGxldmVsLCBhcyBlaXRoZXIgZmFsc2UgZm9yIFwibm9uZVwiIG9yIHRydWUgZm9yIFwicmVxdWlyZWRcIlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIHNldFJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuQXR0cmlidXRlLnNldFJlcXVpcmVkTGV2ZWwocmVxdWlyZWQgPyBcInJlcXVpcmVkXCIgOiBcIm5vbmVcIik7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKkZpcmUgYWxsIFwib24gY2hhbmdlXCIgZXZlbnQgaGFuZGxlcnMuICovXHJcbiAgICAgIHB1YmxpYyBmaXJlT25DaGFuZ2UoKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuQXR0cmlidXRlLmZpcmVPbkNoYW5nZSgpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQWRkcyBhIGhhbmRsZXIgb3IgYW4gYXJyYXkgb2YgaGFuZGxlcnMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIGNoYW5nZWQuXHJcbiAgICAgICAqIEBwYXJhbSBoYW5kbGVycyBUaGUgZnVuY3Rpb24gcmVmZXJlbmNlIG9yIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHJlZmVyZW5jZXMuXHJcbiAgICAgICAqL1xyXG4gICAgICBwdWJsaWMgYWRkT25DaGFuZ2UoXHJcbiAgICAgICAgaGFuZGxlcnM6XHJcbiAgICAgICAgICB8IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXJcclxuICAgICAgICAgIHwgWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcltdXHJcbiAgICAgICk6IHRoaXMge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2hhbmRsZXJ9JyBpcyBub3QgYSBmdW5jdGlvbmApO1xyXG4gICAgICAgICAgICAgIHRoaXMuQXR0cmlidXRlLnJlbW92ZU9uQ2hhbmdlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuQXR0cmlidXRlLmFkZE9uQ2hhbmdlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXJzICE9PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtoYW5kbGVyc30nIGlzIG5vdCBhIGZ1bmN0aW9uYCk7XHJcbiAgICAgICAgICAgIHRoaXMuQXR0cmlidXRlLnJlbW92ZU9uQ2hhbmdlKGhhbmRsZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5BdHRyaWJ1dGUuYWRkT25DaGFuZ2UoaGFuZGxlcnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogRGlzcGxheXMgYW4gZXJyb3Igb3IgcmVjb21tZW5kYXRpb24gbm90aWZpY2F0aW9uIGZvciBhIGNvbnRyb2wsIGFuZCBsZXRzIHlvdSBzcGVjaWZ5IGFjdGlvbnMgdG8gZXhlY3V0ZSBiYXNlZCBvbiB0aGUgbm90aWZpY2F0aW9uLlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGFkZE5vdGlmaWNhdGlvbihcclxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICAgICAgbm90aWZpY2F0aW9uTGV2ZWw6IFwiRVJST1JcIiB8IFwiUkVDT01NRU5EQVRJT05cIixcclxuICAgICAgICB1bmlxdWVJZDogc3RyaW5nLFxyXG4gICAgICAgIGFjdGlvbnM/OiBYcm0uQ29udHJvbHMuQ29udHJvbE5vdGlmaWNhdGlvbkFjdGlvbltdXHJcbiAgICAgICk6IHRoaXMge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAoIXVuaXF1ZUlkKSB0aHJvdyBuZXcgRXJyb3IoYG5vIHVuaXF1ZUlkIHdhcyBwcm92aWRlZC5gKTtcclxuICAgICAgICAgIGlmIChhY3Rpb25zICYmICFBcnJheS5pc0FycmF5KGFjdGlvbnMpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYHRoZSBhY3Rpb24gcGFyYW1ldGVyIGlzIG5vdCBhbiBhcnJheSBvZiBDb250cm9sTm90aWZpY2F0aW9uQWN0aW9uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuYWRkTm90aWZpY2F0aW9uKHtcclxuICAgICAgICAgICAgICBtZXNzYWdlczogW21lc3NhZ2VdLFxyXG4gICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkxldmVsOiBub3RpZmljYXRpb25MZXZlbCxcclxuICAgICAgICAgICAgICB1bmlxdWVJZDogdW5pcXVlSWQsXHJcbiAgICAgICAgICAgICAgYWN0aW9uczogYWN0aW9ucyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogQ2xlYXJzIHRoZSBub3RpZmljYXRpb24gaWRlbnRpZmllZCBieSB1bmlxdWVJZC5cclxuICAgICAgICogQHBhcmFtIHVuaXF1ZUlkIChPcHRpb25hbCkgVW5pcXVlIGlkZW50aWZpZXIuXHJcbiAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIGZhbHNlIGlmIGl0IGZhaWxzLlxyXG4gICAgICAgKiBAcmVtYXJrcyBJZiB0aGUgdW5pcXVlSWQgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLCB0aGUgY3VycmVudCBub3RpZmljYXRpb24gc2hvd24gd2lsbCBiZSByZW1vdmVkLlxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlTm90aWZpY2F0aW9uKHVuaXF1ZUlkOiBzdHJpbmcpOiB0aGlzIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuY2xlYXJOb3RpZmljYXRpb24odW5pcXVlSWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGV4cG9ydCBjbGFzcyBUZXh0RmllbGRcclxuICAgICAgZXh0ZW5kcyBGaWVsZFxyXG4gICAgICBpbXBsZW1lbnRzIFhybS5BdHRyaWJ1dGVzLlN0cmluZ0F0dHJpYnV0ZSB7XHJcbiAgICAgIHByb3RlY3RlZCBkZWNsYXJlIF9hdHRyaWJ1dGU6IFhybS5BdHRyaWJ1dGVzLlN0cmluZ0F0dHJpYnV0ZTtcclxuICAgICAgY29uc3RydWN0b3IoYXR0cmlidXRlOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihhdHRyaWJ1dGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldE1heExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRNYXhMZW5ndGgoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRGb3JtYXQoKTogWHJtLkF0dHJpYnV0ZXMuU3RyaW5nQXR0cmlidXRlRm9ybWF0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0Rm9ybWF0KCkgYXMgWHJtLkF0dHJpYnV0ZXMuU3RyaW5nQXR0cmlidXRlRm9ybWF0O1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBBdHRyaWJ1dGUoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hdHRyaWJ1dGUgPz89XHJcbiAgICAgICAgICBGb3JtLmZvcm1Db250ZXh0LmdldEF0dHJpYnV0ZSh0aGlzLk5hbWUpID8/XHJcbiAgICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBGaWVsZCAnJHt0aGlzLk5hbWV9JyBkb2VzIG5vdCBleGlzdGApKTtcclxuICAgICAgfVxyXG4gICAgICBnZXQgY29udHJvbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmNvbnRyb2xzO1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpID8/IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgc2V0IFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGV4cG9ydCBjbGFzcyBOdW1iZXJGaWVsZFxyXG4gICAgICBleHRlbmRzIEZpZWxkXHJcbiAgICAgIGltcGxlbWVudHMgWHJtLkF0dHJpYnV0ZXMuTnVtYmVyQXR0cmlidXRlIHtcclxuICAgICAgcHJvdGVjdGVkIGRlY2xhcmUgX2F0dHJpYnV0ZTogWHJtLkF0dHJpYnV0ZXMuTnVtYmVyQXR0cmlidXRlO1xyXG4gICAgICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKGF0dHJpYnV0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0Rm9ybWF0KCk6IFhybS5BdHRyaWJ1dGVzLkludGVnZXJBdHRyaWJ1dGVGb3JtYXQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRGb3JtYXQoKSBhcyBYcm0uQXR0cmlidXRlcy5JbnRlZ2VyQXR0cmlidXRlRm9ybWF0O1xyXG4gICAgICB9XHJcbiAgICAgIGdldE1heCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRNYXgoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRNaW4oKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0TWluKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0UHJlY2lzaW9uKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFByZWNpc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldFByZWNpc2lvbihwcmVjaXNpb246IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5zZXRQcmVjaXNpb24ocHJlY2lzaW9uKTtcclxuICAgICAgfVxyXG4gICAgICBnZXQgQXR0cmlidXRlKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fYXR0cmlidXRlID8/PVxyXG4gICAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xyXG4gICAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IGNvbnRyb2xzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5jb250cm9scztcclxuICAgICAgfVxyXG4gICAgICBnZXQgVmFsdWUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0VmFsdWUoKSA/PyBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHNldCBWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBleHBvcnQgY2xhc3MgRGF0ZUZpZWxkIGV4dGVuZHMgRmllbGQgaW1wbGVtZW50cyBYcm0uQXR0cmlidXRlcy5EYXRlQXR0cmlidXRlIHtcclxuICAgICAgcHJvdGVjdGVkIGRlY2xhcmUgX2F0dHJpYnV0ZTogWHJtLkF0dHJpYnV0ZXMuRGF0ZUF0dHJpYnV0ZTtcclxuICAgICAgY29uc3RydWN0b3IoYXR0cmlidXRlOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihhdHRyaWJ1dGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldEZvcm1hdCgpOiBYcm0uQXR0cmlidXRlcy5EYXRlQXR0cmlidXRlRm9ybWF0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0Rm9ybWF0KCkgYXMgWHJtLkF0dHJpYnV0ZXMuRGF0ZUF0dHJpYnV0ZUZvcm1hdDtcclxuICAgICAgfVxyXG4gICAgICBnZXQgQXR0cmlidXRlKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fYXR0cmlidXRlID8/PVxyXG4gICAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xyXG4gICAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IGNvbnRyb2xzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5jb250cm9scztcclxuICAgICAgfVxyXG4gICAgICBnZXQgVmFsdWUoKTogRGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFZhbHVlKCkgPz8gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBzZXQgVmFsdWUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGV4cG9ydCBjbGFzcyBCb29sZWFuRmllbGRcclxuICAgICAgZXh0ZW5kcyBGaWVsZFxyXG4gICAgICBpbXBsZW1lbnRzIFhybS5BdHRyaWJ1dGVzLkJvb2xlYW5BdHRyaWJ1dGUge1xyXG4gICAgICBwcm90ZWN0ZWQgZGVjbGFyZSBfYXR0cmlidXRlOiBYcm0uQXR0cmlidXRlcy5Cb29sZWFuQXR0cmlidXRlO1xyXG4gICAgICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKGF0dHJpYnV0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0QXR0cmlidXRlVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0QXR0cmlidXRlVHlwZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldEluaXRpYWxWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0SW5pdGlhbFZhbHVlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IEF0dHJpYnV0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2F0dHJpYnV0ZSA/Pz1cclxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0QXR0cmlidXRlKHRoaXMuTmFtZSkgPz9cclxuICAgICAgICAgIFhybUV4LnRocm93RXJyb3IoYEZpZWxkICcke3RoaXMuTmFtZX0nIGRvZXMgbm90IGV4aXN0YCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBjb250cm9scygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuY29udHJvbHM7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IFZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpID8/IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgc2V0IFZhbHVlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBleHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RPcHRpb25TZXRGaWVsZDxPcHRpb25zIGV4dGVuZHMgT3B0aW9uVmFsdWVzPlxyXG4gICAgICBleHRlbmRzIEZpZWxkXHJcbiAgICAgIGltcGxlbWVudHMgWHJtLkF0dHJpYnV0ZXMuTXVsdGlTZWxlY3RPcHRpb25TZXRBdHRyaWJ1dGUge1xyXG4gICAgICBwcm90ZWN0ZWQgZGVjbGFyZSBfYXR0cmlidXRlOiBYcm0uQXR0cmlidXRlcy5NdWx0aVNlbGVjdE9wdGlvblNldEF0dHJpYnV0ZTtcclxuICAgICAgT3B0aW9uOiBPcHRpb25zO1xyXG4gICAgICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIG9wdGlvbj86IE9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihhdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICB0aGlzLk9wdGlvbiA9IG9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBnZXRGb3JtYXQoKTogWHJtLkF0dHJpYnV0ZXMuT3B0aW9uU2V0QXR0cmlidXRlRm9ybWF0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0Rm9ybWF0KCkgYXMgWHJtLkF0dHJpYnV0ZXMuT3B0aW9uU2V0QXR0cmlidXRlRm9ybWF0O1xyXG4gICAgICB9XHJcbiAgICAgIGdldE9wdGlvbih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogWHJtLk9wdGlvblNldFZhbHVlIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0T3B0aW9uKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldE9wdGlvbih2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGdldE9wdGlvbnMoKTogWHJtLk9wdGlvblNldFZhbHVlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRPcHRpb25zKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0U2VsZWN0ZWRPcHRpb24oKTogWHJtLk9wdGlvblNldFZhbHVlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRTZWxlY3RlZE9wdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFRleHQoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRUZXh0KCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0SW5pdGlhbFZhbHVlKCk6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0SW5pdGlhbFZhbHVlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IEF0dHJpYnV0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX2F0dHJpYnV0ZSA/Pz1cclxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0QXR0cmlidXRlKHRoaXMuTmFtZSkgPz9cclxuICAgICAgICAgIFhybUV4LnRocm93RXJyb3IoYEZpZWxkICcke3RoaXMuTmFtZX0nIGRvZXMgbm90IGV4aXN0YCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBjb250cm9scygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuY29udHJvbHM7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IFZhbHVlKCk6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0VmFsdWUoKTtcclxuICAgICAgfVxyXG4gICAgICBzZXQgVmFsdWUodmFsdWU6IChrZXlvZiBPcHRpb25zKVtdIHwgbnVtYmVyW10pIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpIHZhbHVlcy5wdXNoKHYpO1xyXG4gICAgICAgICAgICBlbHNlIHZhbHVlcy5wdXNoKHRoaXMuT3B0aW9uW3ZdKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodmFsdWVzKTtcclxuICAgICAgICB9IGVsc2UgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgVmFsdWUgJyR7dmFsdWV9JyBpcyBub3QgYW4gQXJyYXlgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZXhwb3J0IGNsYXNzIExvb2t1cEZpZWxkXHJcbiAgICAgIGV4dGVuZHMgRmllbGRcclxuICAgICAgaW1wbGVtZW50cyBYcm0uQXR0cmlidXRlcy5Mb29rdXBBdHRyaWJ1dGUge1xyXG4gICAgICBwcm90ZWN0ZWQgZGVjbGFyZSBfYXR0cmlidXRlOiBYcm0uQXR0cmlidXRlcy5Mb29rdXBBdHRyaWJ1dGU7XHJcbiAgICAgIHByb3RlY3RlZCBfY3VzdG9tRmlsdGVyczogYW55ID0gW107XHJcbiAgICAgIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoYXR0cmlidXRlKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRJc1BhcnR5TGlzdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0SXNQYXJ0eUxpc3QoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXQgQXR0cmlidXRlKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fYXR0cmlidXRlID8/PVxyXG4gICAgICAgICAgRm9ybS5mb3JtQ29udGV4dC5nZXRBdHRyaWJ1dGUodGhpcy5OYW1lKSA/P1xyXG4gICAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgRmllbGQgJyR7dGhpcy5OYW1lfScgZG9lcyBub3QgZXhpc3RgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IGNvbnRyb2xzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5jb250cm9scztcclxuICAgICAgfVxyXG4gICAgICAvKipHZXRzIHRoZSBpZCBvZiB0aGUgZmlyc3QgbG9va3VwIHZhbHVlKi9cclxuICAgICAgZ2V0IElkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlZhbHVlICYmIHRoaXMuVmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyBYcm1FeC5ub3JtYWxpemVHdWlkKHRoaXMuVmFsdWVbMF0uaWQpXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgLyoqR2V0cyB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlyc3QgbG9va3VwIHZhbHVlKi9cclxuICAgICAgZ2V0IEVudGl0eVR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVmFsdWUgJiYgdGhpcy5WYWx1ZS5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuVmFsdWVbMF0uZW50aXR5VHlwZVxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIC8qKkdldHMgdGhlIGZvcm1hdHRlZCB2YWx1ZSBvZiB0aGUgZmlyc3QgbG9va3VwIHZhbHVlKi9cclxuICAgICAgZ2V0IEZvcm1hdHRlZFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlZhbHVlICYmIHRoaXMuVmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuVmFsdWVbMF0ubmFtZSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0IFZhbHVlKCk6IFhybS5Mb29rdXBWYWx1ZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0VmFsdWUoKSA/PyBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHNldCBWYWx1ZSh2YWx1ZTogWHJtLkxvb2t1cFZhbHVlW10pIHtcclxuICAgICAgICB0aGlzLkF0dHJpYnV0ZS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgbG9va3VwXHJcbiAgICAgICAqIEBwYXJhbSBpZCBHdWlkIG9mIHRoZSByZWNvcmRcclxuICAgICAgICogQHBhcmFtIGVudGl0eVR5cGUgbG9naWNhbG5hbWUgb2YgdGhlIGVudGl0eVxyXG4gICAgICAgKiBAcGFyYW0gbmFtZSBmb3JtYXR0ZWQgdmFsdWVcclxuICAgICAgICogQHBhcmFtIGFwcGVuZCBpZiB0cnVlLCBhZGRzIHZhbHVlIHRvIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdFxyXG4gICAgICAgKi9cclxuICAgICAgc2V0TG9va3VwVmFsdWUoXHJcbiAgICAgICAgaWQ6IHN0cmluZyxcclxuICAgICAgICBlbnRpdHlUeXBlOiBhbnksXHJcbiAgICAgICAgbmFtZTogYW55LFxyXG4gICAgICAgIGFwcGVuZCA9IGZhbHNlXHJcbiAgICAgICk6IHRoaXMge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoYG5vIGlkIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQuYCk7XHJcbiAgICAgICAgICBpZiAoIWVudGl0eVR5cGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gZW50aXR5VHlwZSBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkLmApO1xyXG4gICAgICAgICAgaWQgPSBYcm1FeC5ub3JtYWxpemVHdWlkKGlkKTtcclxuICAgICAgICAgIGNvbnN0IGxvb2t1cFZhbHVlID0ge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgZW50aXR5VHlwZSxcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLlZhbHVlID1cclxuICAgICAgICAgICAgYXBwZW5kICYmIHRoaXMuVmFsdWUgPyB0aGlzLlZhbHVlLmNvbmNhdChsb29rdXBWYWx1ZSkgOiBbbG9va3VwVmFsdWVdO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSZXRyaWV2ZXMgYW4gZW50aXR5IHJlY29yZC5cclxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgKE9wdGlvbmFsKSBPRGF0YSBzeXN0ZW0gcXVlcnkgb3B0aW9ucywgJHNlbGVjdCBhbmQgJGV4cGFuZCwgdG8gcmV0cmlldmUgeW91ciBkYXRhLlxyXG4gICAgICAgKiAtIFVzZSB0aGUgJHNlbGVjdCBzeXN0ZW0gcXVlcnkgb3B0aW9uIHRvIGxpbWl0IHRoZSBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGluY2x1ZGluZyBhIGNvbW1hLXNlcGFyYXRlZFxyXG4gICAgICAgKiAgIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBlcmZvcm1hbmNlIGJlc3QgcHJhY3RpY2UuIElmIHByb3BlcnRpZXMgYXJlbuKAmXRcclxuICAgICAgICogICBzcGVjaWZpZWQgdXNpbmcgJHNlbGVjdCwgYWxsIHByb3BlcnRpZXMgd2lsbCBiZSByZXR1cm5lZC5cclxuICAgICAgICogLSBVc2UgdGhlICRleHBhbmQgc3lzdGVtIHF1ZXJ5IG9wdGlvbiB0byBjb250cm9sIHdoYXQgZGF0YSBmcm9tIHJlbGF0ZWQgZW50aXRpZXMgaXMgcmV0dXJuZWQuIElmIHlvdVxyXG4gICAgICAgKiAgIGp1c3QgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSwgeW914oCZbGwgcmVjZWl2ZSBhbGwgdGhlIHByb3BlcnRpZXMgZm9yIHJlbGF0ZWRcclxuICAgICAgICogICByZWNvcmRzLiBZb3UgY2FuIGxpbWl0IHRoZSBwcm9wZXJ0aWVzIHJldHVybmVkIGZvciByZWxhdGVkIHJlY29yZHMgdXNpbmcgdGhlICRzZWxlY3Qgc3lzdGVtIHF1ZXJ5XHJcbiAgICAgICAqICAgb3B0aW9uIGluIHBhcmVudGhlc2VzIGFmdGVyIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IG5hbWUuIFVzZSB0aGlzIGZvciBib3RoIHNpbmdsZS12YWx1ZWQgYW5kXHJcbiAgICAgICAqICAgY29sbGVjdGlvbi12YWx1ZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxyXG4gICAgICAgKiAtIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IG11bHRpcGxlIHF1ZXJ5IG9wdGlvbnMgYnkgdXNpbmcgJiB0byBzZXBhcmF0ZSB0aGUgcXVlcnkgb3B0aW9ucy5cclxuICAgICAgICogQGV4YW1wbGUgPGNhcHRpb24+b3B0aW9ucyBleGFtcGxlOjwvY2FwdGlvbj5cclxuICAgICAgICogb3B0aW9uczogJHNlbGVjdD1uYW1lJiRleHBhbmQ9cHJpbWFyeWNvbnRhY3RpZCgkc2VsZWN0PWNvbnRhY3RpZCxmdWxsbmFtZSlcclxuICAgICAgICogQHJldHVybnMgT24gc3VjY2VzcywgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyBhIEpTT04gb2JqZWN0IHdpdGggdGhlIHJldHJpZXZlZCBhdHRyaWJ1dGVzIGFuZCB0aGVpciB2YWx1ZXMuXHJcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2R5bmFtaWNzMzY1L2N1c3RvbWVyLWVuZ2FnZW1lbnQvZGV2ZWxvcGVyL2NsaWVudGFwaS9yZWZlcmVuY2UveHJtLXdlYmFwaS9yZXRyaWV2ZXJlY29yZCBFeHRlcm5hbCBMaW5rOiByZXRyaWV2ZVJlY29yZCAoQ2xpZW50IEFQSSByZWZlcmVuY2UpfVxyXG4gICAgICAgKi9cclxuICAgICAgYXN5bmMgcmV0cmlldmUob3B0aW9uczogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICghdGhpcy5JZCB8fCAhdGhpcy5FbnRpdHlUeXBlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IFhybS5XZWJBcGkucmV0cmlldmVSZWNvcmQoXHJcbiAgICAgICAgICAgIHRoaXMuRW50aXR5VHlwZSxcclxuICAgICAgICAgICAgdGhpcy5JZCxcclxuICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiByZWNvcmQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBZGRzIGFuIGFkZGl0aW9uYWwgY3VzdG9tIGZpbHRlciB0byB0aGUgbG9va3VwLCB3aXRoIHRoZSBcIkFORFwiIGZpbHRlciBvcGVyYXRvci5cclxuICAgICAgICogQHBhcmFtIGZpbHRlciBTcGVjaWZpZXMgdGhlIGZpbHRlciwgYXMgYSBzZXJpYWxpemVkIEZldGNoWE1MIFwiZmlsdGVyXCIgbm9kZS5cclxuICAgICAgICogQHBhcmFtIGVudGl0eUxvZ2ljYWxOYW1lIChPcHRpb25hbCkgVGhlIGxvZ2ljYWwgbmFtZSBvZiB0aGUgZW50aXR5LlxyXG4gICAgICAgKiBAcmVtYXJrcyAgICAgSWYgZW50aXR5TG9naWNhbE5hbWUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGVudGl0aWVzXHJcbiAgICAgICAqICAgICAgICAgICAgICB2YWxpZCBmb3IgdGhlIExvb2t1cCBjb250cm9sLlxyXG4gICAgICAgKiBAZXhhbXBsZSAgICAgRXhhbXBsZSBmaWx0ZXI6IDxmaWx0ZXIgdHlwZT1cImFuZFwiPlxyXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXR0cmlidXRlPVwiYWRkcmVzczFfY2l0eVwiIG9wZXJhdG9yPVwiZXFcIiB2YWx1ZT1cIlJlZG1vbmRcIiAvPlxyXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgKi9cclxuICAgICAgYWRkUHJlRmlsdGVyVG9Mb29rdXAoZmlsdGVyWG1sOiBzdHJpbmcsIGVudGl0eUxvZ2ljYWxOYW1lPzogc3RyaW5nKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIF9hZGRDdXN0b21GaWx0ZXIuY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzO1xyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuYWRkUHJlU2VhcmNoKF9hZGRDdXN0b21GaWx0ZXIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLl9jdXN0b21GaWx0ZXJzLnB1c2goX2FkZEN1c3RvbUZpbHRlcik7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhybUV4LiR7WHJtRXguZ2V0RnVuY3Rpb25OYW1lKCl9OlxcbiR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9hZGRDdXN0b21GaWx0ZXIoKSB7XHJcbiAgICAgICAgICBfYWRkQ3VzdG9tRmlsdGVyLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgY29udHJvbC5hZGRDdXN0b21GaWx0ZXIoZmlsdGVyWG1sLCBlbnRpdHlMb2dpY2FsTmFtZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEFkZHMgYW4gYWRkaXRpb25hbCBjdXN0b20gZmlsdGVyIHRvIHRoZSBsb29rdXAsIHdpdGggdGhlIFwiQU5EXCIgZmlsdGVyIG9wZXJhdG9yLlxyXG4gICAgICAgKiBAcGFyYW0gZW50aXR5TG9naWNhbE5hbWUgKE9wdGlvbmFsKSBUaGUgbG9naWNhbCBuYW1lIG9mIHRoZSBlbnRpdHkuXHJcbiAgICAgICAqIEBwYXJhbSBwcmltYXJ5QXR0cmlidXRlSWROYW1lIChPcHRpb25hbCkgVGhlIGxvZ2ljYWwgbmFtZSBvZiB0aGUgcHJpbWFyeSBrZXkuXHJcbiAgICAgICAqIEBwYXJhbSBmZXRjaFhtbCBTcGVjaWZpZXMgdGhlIEZldGNoWE1MIHVzZWQgdG8gZmlsdGVyLlxyXG4gICAgICAgKiBAcmVtYXJrcyAgICAgSWYgZW50aXR5TG9naWNhbE5hbWUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGVudGl0aWVzXHJcbiAgICAgICAqICAgICAgICAgICAgICB2YWxpZCBmb3IgdGhlIExvb2t1cCBjb250cm9sLlxyXG4gICAgICAgKiBAZXhhbXBsZSAgICAgRXhhbXBsZSBmZXRjaFhtbDogPGZldGNoPlxyXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRpdHkgbmFtZT1cImNvbnRhY3RcIj5cclxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlcj5cclxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhdHRyaWJ1dGU9XCJhZGRyZXNzMV9jaXR5XCIgb3BlcmF0b3I9XCJlcVwiIHZhbHVlPVwiUmVkbW9uZFwiIC8+XHJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW50aXR5PlxyXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmV0Y2g+XHJcbiAgICAgICAqL1xyXG4gICAgICBhc3luYyBhZGRQcmVGaWx0ZXJUb0xvb2t1cEFkdmFuY2VkKFxyXG4gICAgICAgIGVudGl0eUxvZ2ljYWxOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgcHJpbWFyeUF0dHJpYnV0ZUlkTmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGZldGNoWG1sOiBzdHJpbmdcclxuICAgICAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFhybS5XZWJBcGkub25saW5lLnJldHJpZXZlTXVsdGlwbGVSZWNvcmRzKFxyXG4gICAgICAgICAgICBlbnRpdHlMb2dpY2FsTmFtZSxcclxuICAgICAgICAgICAgXCI/ZmV0Y2hYbWw9XCIgKyBmZXRjaFhtbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuZW50aXRpZXM7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyZWRFbnRpdGllcyA9IFwiXCI7XHJcbiAgICAgICAgICBfYWRkQ3VzdG9tRmlsdGVyLmNvbnRyb2xzID0gdGhpcy5jb250cm9scztcclxuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEVudGl0aWVzICs9IGA8dmFsdWU+JHtpdGVtW3ByaW1hcnlBdHRyaWJ1dGVJZE5hbWVdfTwvdmFsdWU+YDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZmV0Y2hYbWwgPSBmaWx0ZXJlZEVudGl0aWVzXHJcbiAgICAgICAgICAgID8gYDxmaWx0ZXI+PGNvbmRpdGlvbiBhdHRyaWJ1dGU9JyR7cHJpbWFyeUF0dHJpYnV0ZUlkTmFtZX0nIG9wZXJhdG9yPSdpbic+JHtmaWx0ZXJlZEVudGl0aWVzfTwvY29uZGl0aW9uPjwvZmlsdGVyPmBcclxuICAgICAgICAgICAgOiBgPGZpbHRlcj48Y29uZGl0aW9uIGF0dHJpYnV0ZT0nJHtwcmltYXJ5QXR0cmlidXRlSWROYW1lfScgb3BlcmF0b3I9J251bGwnLz48L2ZpbHRlcj5gO1xyXG4gICAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuYWRkUHJlU2VhcmNoKF9hZGRDdXN0b21GaWx0ZXIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLl9jdXN0b21GaWx0ZXJzLnB1c2goX2FkZEN1c3RvbUZpbHRlcik7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIF9hZGRDdXN0b21GaWx0ZXIoKSB7XHJcbiAgICAgICAgICBfYWRkQ3VzdG9tRmlsdGVyLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgY29udHJvbC5hZGRDdXN0b21GaWx0ZXIoZmV0Y2hYbWwsIGVudGl0eUxvZ2ljYWxOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogUmVtb3ZlcyBhbGwgZmlsdGVycyBzZXQgb24gdGhlIGN1cnJlbnQgbG9va3VwIGF0dHJpYnV0ZSBieSB1c2luZyBhZGRQcmVGaWx0ZXJUb0xvb2t1cCBvciBhZGRQcmVGaWx0ZXJUb0xvb2t1cEFkdmFuY2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBjbGVhclByZUZpbHRlckZyb21Mb29rdXAoKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuX2N1c3RvbUZpbHRlcnMuZm9yRWFjaChcclxuICAgICAgICAgICAgKGN1c3RvbUZpbHRlcjogWHJtLkV2ZW50cy5Db250ZXh0U2Vuc2l0aXZlSGFuZGxlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmVQcmVTZWFyY2goY3VzdG9tRmlsdGVyKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdHlwZSBPcHRpb25WYWx1ZXMgPSB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IG51bWJlcjtcclxuICAgIH07XHJcbiAgICBleHBvcnQgY2xhc3MgT3B0aW9uc2V0RmllbGQ8T3B0aW9ucyBleHRlbmRzIE9wdGlvblZhbHVlcz5cclxuICAgICAgZXh0ZW5kcyBGaWVsZFxyXG4gICAgICBpbXBsZW1lbnRzIFhybS5BdHRyaWJ1dGVzLk9wdGlvblNldEF0dHJpYnV0ZSB7XHJcbiAgICAgIHByb3RlY3RlZCBkZWNsYXJlIF9hdHRyaWJ1dGU6IFhybS5BdHRyaWJ1dGVzLk9wdGlvblNldEF0dHJpYnV0ZTtcclxuICAgICAgcHJvdGVjdGVkIF9jb250cm9sITogWHJtLkNvbnRyb2xzLk9wdGlvblNldENvbnRyb2w7XHJcbiAgICAgIE9wdGlvbjogT3B0aW9ucztcclxuICAgICAgY29uc3RydWN0b3IoYXR0cmlidXRlTmFtZTogc3RyaW5nLCBvcHRpb24/OiBPcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoYXR0cmlidXRlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5PcHRpb24gPSBvcHRpb247XHJcbiAgICAgIH1cclxuICAgICAgZ2V0Rm9ybWF0KCk6IFhybS5BdHRyaWJ1dGVzLk9wdGlvblNldEF0dHJpYnV0ZUZvcm1hdCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEZvcm1hdCgpIGFzIFhybS5BdHRyaWJ1dGVzLk9wdGlvblNldEF0dHJpYnV0ZUZvcm1hdDtcclxuICAgICAgfVxyXG4gICAgICBnZXRPcHRpb24odmFsdWU6IG51bWJlciB8IHN0cmluZyk6IFhybS5PcHRpb25TZXRWYWx1ZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldE9wdGlvbih2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRPcHRpb24odmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBnZXRPcHRpb25zKCk6IFhybS5PcHRpb25TZXRWYWx1ZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BdHRyaWJ1dGUuZ2V0T3B0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFNlbGVjdGVkT3B0aW9uKCk6IFhybS5PcHRpb25TZXRWYWx1ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldFNlbGVjdGVkT3B0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRUZXh0KCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0SW5pdGlhbFZhbHVlKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmdldEluaXRpYWxWYWx1ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBBdHRyaWJ1dGUoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hdHRyaWJ1dGUgPz89XHJcbiAgICAgICAgICBGb3JtLmZvcm1Db250ZXh0LmdldEF0dHJpYnV0ZSh0aGlzLk5hbWUpID8/XHJcbiAgICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBGaWVsZCAnJHt0aGlzLk5hbWV9JyBkb2VzIG5vdCBleGlzdGApKTtcclxuICAgICAgfVxyXG4gICAgICBnZXQgY29udHJvbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQXR0cmlidXRlLmNvbnRyb2xzO1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBjb250cm9sKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fY29udHJvbCA/Pz1cclxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0Q29udHJvbCh0aGlzLk5hbWUpID8/XHJcbiAgICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBDb250cm9sICcke3RoaXMuTmFtZX0nIGRvZXMgbm90IGV4aXN0YCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldCBWYWx1ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkF0dHJpYnV0ZS5nZXRWYWx1ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldCBWYWx1ZSh2YWx1ZToga2V5b2YgT3B0aW9ucyB8IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5BdHRyaWJ1dGUuc2V0VmFsdWUodGhpcy5PcHRpb25bdmFsdWVdKTtcclxuICAgICAgfVxyXG4gICAgICAvKipcclxuICAgICAgICogQWRkcyBhbiBvcHRpb24uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBwYXJhbSB2YWx1ZXMgYW4gYXJyYXkgd2l0aCB0aGUgb3B0aW9uIHZhbHVlcyB0byBhZGRcclxuICAgICAgICogQHBhcmFtIGluZGV4IChPcHRpb25hbCkgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgb3B0aW9uLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcmVtYXJrcyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBjaGVjayB0aGF0IHRoZSB2YWx1ZXMgd2l0aGluIHRoZSBvcHRpb25zIHlvdSBhZGQgYXJlIHZhbGlkLlxyXG4gICAgICAgKiAgICAgICAgICBJZiBpbmRleCBpcyBub3QgcHJvdmlkZWQsIHRoZSBuZXcgb3B0aW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cclxuICAgICAgICovXHJcbiAgICAgIGFkZE9wdGlvbih2YWx1ZXM6IG51bWJlcltdLCBpbmRleD86IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB2YWx1ZXMgaXMgbm90IGFuIEFycmF5OlxcbnZhbHVlczogJyR7dmFsdWVzfSdgKTtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvblNldFZhbHVlcyA9IHRoaXMuY29udHJvbC5nZXRBdHRyaWJ1dGUoKS5nZXRPcHRpb25zKCkgPz8gW107XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygb3B0aW9uU2V0VmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZXMuaW5jbHVkZXMoZWxlbWVudC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWRkT3B0aW9uKGVsZW1lbnQsIGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSZW1vdmVzIHRoZSBvcHRpb24gbWF0Y2hpbmcgdGhlIHZhbHVlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLlxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlT3B0aW9uKHZhbHVlczogbnVtYmVyW10pOiB0aGlzIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdmFsdWVzIGlzIG5vdCBhbiBBcnJheTpcXG52YWx1ZXM6ICcke3ZhbHVlc30nYCk7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb25TZXRWYWx1ZXMgPSB0aGlzLmNvbnRyb2wuZ2V0QXR0cmlidXRlKCkuZ2V0T3B0aW9ucygpID8/IFtdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG9wdGlvblNldFZhbHVlcykge1xyXG4gICAgICAgICAgICBpZiAodmFsdWVzLmluY2x1ZGVzKGVsZW1lbnQudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnJlbW92ZU9wdGlvbihlbGVtZW50LnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBYcm1FeC4ke1hybUV4LmdldEZ1bmN0aW9uTmFtZSgpfTpcXG4ke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDbGVhcnMgYWxsIG9wdGlvbnMuXHJcbiAgICAgICAqL1xyXG4gICAgICBjbGVhck9wdGlvbnMoKTogdGhpcyB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbC5jbGVhck9wdGlvbnMoKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWHJtRXguJHtYcm1FeC5nZXRGdW5jdGlvbk5hbWUoKX06XFxuJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZXhwb3J0IGNsYXNzIFNlY3Rpb24gaW1wbGVtZW50cyBYcm0uQ29udHJvbHMuU2VjdGlvbiB7XHJcbiAgICAgIHB1YmxpYyByZWFkb25seSBOYW1lITogc3RyaW5nO1xyXG4gICAgICBwcm90ZWN0ZWQgX3NlY3Rpb24/OiBYcm0uQ29udHJvbHMuU2VjdGlvbjtcclxuICAgICAgcHVibGljIHBhcmVudFRhYj86IFhybS5Db250cm9scy5UYWI7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuTmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgcHVibGljIGdldCBTZWN0aW9uKCk6IFhybS5Db250cm9scy5TZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX3NlY3Rpb24gPz89XHJcbiAgICAgICAgICB0aGlzLnBhcmVudFRhYi5zZWN0aW9ucy5nZXQodGhpcy5OYW1lKSA/P1xyXG4gICAgICAgICAgWHJtRXgudGhyb3dFcnJvcihcclxuICAgICAgICAgICAgYFRoZSBzZWN0aW9uICcke3RoaXMuTmFtZX0nIHdhcyBub3QgZm91bmQgb24gdGhlIGZvcm0uYFxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlNlY3Rpb24uZ2V0TmFtZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFBhcmVudCgpOiBYcm0uQ29udHJvbHMuVGFiIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5TZWN0aW9uLmdldFBhcmVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnRyb2xzOiBYcm0uQ29sbGVjdGlvbi5JdGVtQ29sbGVjdGlvbjxYcm0uQ29udHJvbHMuQ29udHJvbD47XHJcbiAgICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlNlY3Rpb24uc2V0VmlzaWJsZSh2aXNpYmxlKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlNlY3Rpb24uZ2V0VmlzaWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU2VjdGlvbi5nZXRMYWJlbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5TZWN0aW9uLnNldExhYmVsKGxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdHlwZSBUYWJTZWN0aW9ucyA9IHtcclxuICAgICAgW2tleTogc3RyaW5nXTogU2VjdGlvbjtcclxuICAgIH07XHJcbiAgICBleHBvcnQgY2xhc3MgVGFiPFNlY3Rpb25zIGV4dGVuZHMgVGFiU2VjdGlvbnM+IGltcGxlbWVudHMgWHJtLkNvbnRyb2xzLlRhYiB7XHJcbiAgICAgIHB1YmxpYyByZWFkb25seSBOYW1lITogc3RyaW5nO1xyXG4gICAgICBwcm90ZWN0ZWQgX3RhYj86IFhybS5Db250cm9scy5UYWI7XHJcbiAgICAgIFNlY3Rpb246IFNlY3Rpb25zO1xyXG4gICAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHNlY3Rpb24/OiBTZWN0aW9ucykge1xyXG4gICAgICAgIHRoaXMuTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5TZWN0aW9uID0gc2VjdGlvbjtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc2VjdGlvbikge1xyXG4gICAgICAgICAgc2VjdGlvbltrZXldLnBhcmVudFRhYiA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHNlY3Rpb25zOiBYcm0uQ29sbGVjdGlvbi5JdGVtQ29sbGVjdGlvbjxYcm0uQ29udHJvbHMuU2VjdGlvbj47XHJcblxyXG4gICAgICBwdWJsaWMgZ2V0IFRhYigpOiBYcm0uQ29udHJvbHMuVGFiIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX3RhYiA/Pz1cclxuICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQudWkudGFicy5nZXQodGhpcy5OYW1lKSA/P1xyXG4gICAgICAgICAgWHJtRXgudGhyb3dFcnJvcihgVGhlIHRhYiAnJHt0aGlzLk5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBmb3JtLmApKTtcclxuICAgICAgfVxyXG4gICAgICBhZGRUYWJTdGF0ZUNoYW5nZShoYW5kbGVyOiBYcm0uRXZlbnRzLkNvbnRleHRTZW5zaXRpdmVIYW5kbGVyKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVGFiLmFkZFRhYlN0YXRlQ2hhbmdlKGhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldERpc3BsYXlTdGF0ZSgpOiBYcm0uRGlzcGxheVN0YXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5UYWIuZ2V0RGlzcGxheVN0YXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlRhYi5nZXROYW1lKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0UGFyZW50KCk6IFhybS5VaSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVGFiLmdldFBhcmVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlbW92ZVRhYlN0YXRlQ2hhbmdlKGhhbmRsZXI6IFhybS5FdmVudHMuQ29udGV4dFNlbnNpdGl2ZUhhbmRsZXIpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5UYWIucmVtb3ZlVGFiU3RhdGVDaGFuZ2UoaGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgICAgc2V0RGlzcGxheVN0YXRlKGRpc3BsYXlTdGF0ZTogWHJtLkRpc3BsYXlTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlRhYi5zZXREaXNwbGF5U3RhdGUoZGlzcGxheVN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5UYWIuc2V0VmlzaWJsZSh2aXNpYmxlKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlRhYi5nZXRWaXNpYmxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0TGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5UYWIuZ2V0TGFiZWwoKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVGFiLnNldExhYmVsKGxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRGb2N1cygpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5UYWIuc2V0Rm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZXhwb3J0IGNsYXNzIEdyaWRDb250cm9sIGltcGxlbWVudHMgWHJtLkNvbnRyb2xzLkdyaWRDb250cm9sIHtcclxuICAgICAgcHVibGljIHJlYWRvbmx5IE5hbWUhOiBzdHJpbmc7XHJcbiAgICAgIHByb3RlY3RlZCBfZ3JpZENvbnRyb2w/OiBYcm0uQ29udHJvbHMuR3JpZENvbnRyb2w7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuTmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgcHVibGljIGdldCBHcmlkQ29udHJvbCgpOiBYcm0uQ29udHJvbHMuR3JpZENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAodGhpcy5fZ3JpZENvbnRyb2wgPz89XHJcbiAgICAgICAgICAgIEZvcm0uZm9ybUNvbnRleHQuZ2V0Q29udHJvbDxYcm0uQ29udHJvbHMuR3JpZENvbnRyb2w+KHRoaXMuTmFtZSkpID8/XHJcbiAgICAgICAgICBYcm1FeC50aHJvd0Vycm9yKGBUaGUgZ3JpZCAnJHt0aGlzLk5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBmb3JtLmApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBwdWJsaWMgZ2V0IEdyaWQoKTogWHJtLkNvbnRyb2xzLkdyaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmdldEdyaWQoKTtcclxuICAgICAgfVxyXG4gICAgICBhZGRPbkxvYWQoaGFuZGxlcjogWHJtLkV2ZW50cy5HcmlkQ29udHJvbC5Mb2FkRXZlbnRIYW5kbGVyKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wuYWRkT25Mb2FkKGhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldENvbnRleHRUeXBlKCk6IFhybUVudW0uR3JpZENvbnRyb2xDb250ZXh0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRDb250ZXh0VHlwZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldEVudGl0eU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRFbnRpdHlOYW1lKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0RmV0Y2hYbWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRGZXRjaFhtbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldEdyaWQoKTogWHJtLkNvbnRyb2xzLkdyaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmdldEdyaWQoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRSZWxhdGlvbnNoaXAoKTogWHJtLkNvbnRyb2xzLkdyaWRSZWxhdGlvbnNoaXAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmdldFJlbGF0aW9uc2hpcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFVybChjbGllbnQ/OiBYcm1FbnVtLkdyaWRDbGllbnQpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmdldFVybChjbGllbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldFZpZXdTZWxlY3RvcigpOiBYcm0uQ29udHJvbHMuVmlld1NlbGVjdG9yIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRWaWV3U2VsZWN0b3IoKTtcclxuICAgICAgfVxyXG4gICAgICBvcGVuUmVsYXRlZEdyaWQoKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuR3JpZENvbnRyb2wub3BlblJlbGF0ZWRHcmlkKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVmcmVzaFJpYmJvbigpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5yZWZyZXNoUmliYm9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVtb3ZlT25Mb2FkKGhhbmRsZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5yZW1vdmVPbkxvYWQoaGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0Q29udHJvbFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRDb250cm9sVHlwZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXROYW1lKCk7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0UGFyZW50KCk6IFhybS5Db250cm9scy5TZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5nZXRQYXJlbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmdldExhYmVsKCk7XHJcbiAgICAgIH1cclxuICAgICAgc2V0TGFiZWwobGFiZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLnNldExhYmVsKGxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgICBnZXRWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdyaWRDb250cm9sLmdldFZpc2libGUoKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HcmlkQ29udHJvbC5zZXRWaXNpYmxlKHZpc2libGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 27732f4..de6dc43 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"rows\":[{\"kind\":2,\"name\":\"src/XrmEx\",\"url\":\"modules/src_XrmEx.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"XrmEx\",\"url\":\"modules/src_XrmEx.XrmEx.html\",\"classes\":\"\",\"parent\":\"src/XrmEx\"},{\"kind\":64,\"name\":\"throwError\",\"url\":\"functions/src_XrmEx.XrmEx.throwError.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"getFunctionName\",\"url\":\"functions/src_XrmEx.XrmEx.getFunctionName.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"addGlobalNotification\",\"url\":\"functions/src_XrmEx.XrmEx.addGlobalNotification.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"removeGlobalNotification\",\"url\":\"functions/src_XrmEx.XrmEx.removeGlobalNotification.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"getEnvironmentVariableValue\",\"url\":\"functions/src_XrmEx.XrmEx.getEnvironmentVariableValue.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"checkRequestParameterType\",\"url\":\"functions/src_XrmEx.XrmEx.checkRequestParameterType.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"executeAction\",\"url\":\"functions/src_XrmEx.XrmEx.executeAction.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"executeFunction\",\"url\":\"functions/src_XrmEx.XrmEx.executeFunction.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"normalizeGuid\",\"url\":\"functions/src_XrmEx.XrmEx.normalizeGuid.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"openAlertDialog\",\"url\":\"functions/src_XrmEx.XrmEx.openAlertDialog.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":128,\"name\":\"Form\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"_formContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#_formContext\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":1024,\"name\":\"_executionContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#_executionContext\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"formContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#formContext\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"executionContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#executionContext\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"entityReference\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#entityReference\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsCreate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsCreate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsUpdate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsUpdate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsNotCreate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsNotCreate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsNotUpdate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsNotUpdate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addFormNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addFormNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"removeFormNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#removeFormNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnSaveEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnSaveEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnPostSaveEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnPostSaveEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnLoadEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnLoadEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnChangeEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnChangeEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":128,\"name\":\"Field\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#allFields\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getAttributeType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getIsDirty\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getRequiredLevel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getSubmitMode\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getUserPrivilege\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#removeOnChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setSubmitMode\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#getValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setIsValid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setDisabled\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setRequiredLevel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#setRequired\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#fireOnChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#addOnChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#addNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Field.html#removeNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Field\"},{\"kind\":128,\"name\":\"TextField\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getMaxLength\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getMaxLength\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.TextField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.TextField\"},{\"kind\":128,\"name\":\"NumberField\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getMax\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getMax\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getMin\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getMin\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getPrecision\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getPrecision\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setPrecision\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setPrecision\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.NumberField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.NumberField\"},{\"kind\":128,\"name\":\"DateField\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.DateField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.DateField\"},{\"kind\":128,\"name\":\"BooleanField\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getAttributeType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getInitialValue\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getInitialValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.BooleanField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.BooleanField\"},{\"kind\":128,\"name\":\"MultiSelectOptionSetField\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":1024,\"name\":\"Option\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#Option\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getOption\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getOptions\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getOptions\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getSelectedOption\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getSelectedOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getText\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getInitialValue\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getInitialValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.MultiSelectOptionSetField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.MultiSelectOptionSetField\"},{\"kind\":128,\"name\":\"LookupField\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":1024,\"name\":\"_customFilters\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#_customFilters\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getIsPartyList\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getIsPartyList\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":262144,\"name\":\"Id\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#Id\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":262144,\"name\":\"EntityType\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#EntityType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":262144,\"name\":\"FormattedValue\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#FormattedValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setLookupValue\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setLookupValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"retrieve\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#retrieve\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"addPreFilterToLookup\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#addPreFilterToLookup\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"addPreFilterToLookupAdvanced\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#addPreFilterToLookupAdvanced\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"clearPreFilterFromLookup\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#clearPreFilterFromLookup\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.LookupField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.LookupField\"},{\"kind\":128,\"name\":\"OptionsetField\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":1024,\"name\":\"_control\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#_control\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":1024,\"name\":\"Option\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#Option\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getOption\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getOptions\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getOptions\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getSelectedOption\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getSelectedOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getText\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getInitialValue\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getInitialValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":262144,\"name\":\"control\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#control\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"addOption\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#addOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"removeOption\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#removeOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"clearOptions\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#clearOptions\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.OptionsetField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.OptionsetField\"},{\"kind\":128,\"name\":\"Section\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":1024,\"name\":\"_section\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#_section\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":1024,\"name\":\"parentTab\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#parentTab\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":262144,\"name\":\"Section\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#Section\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":1024,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":2048,\"name\":\"getVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#getVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":2048,\"name\":\"getLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#getLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":2048,\"name\":\"setLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Section.html#setLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Section\"},{\"kind\":128,\"name\":\"Tab\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":1024,\"name\":\"_tab\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#_tab\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":1024,\"name\":\"Section\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#Section\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":1024,\"name\":\"sections\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#sections\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":262144,\"name\":\"Tab\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#Tab\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"addTabStateChange\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#addTabStateChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"getDisplayState\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#getDisplayState\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"removeTabStateChange\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#removeTabStateChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"setDisplayState\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#setDisplayState\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"getVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#getVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"getLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#getLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"setLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#setLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":2048,\"name\":\"setFocus\",\"url\":\"classes/src_XrmEx.XrmEx.Tab.html#setFocus\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Tab\"},{\"kind\":128,\"name\":\"GridControl\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":1024,\"name\":\"_gridControl\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#_gridControl\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":262144,\"name\":\"GridControl\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#GridControl\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":262144,\"name\":\"Grid\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#Grid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"addOnLoad\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#addOnLoad\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getContextType\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getContextType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getEntityName\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getEntityName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getFetchXml\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getFetchXml\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getGrid\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getGrid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getRelationship\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getRelationship\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getUrl\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getUrl\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getViewSelector\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getViewSelector\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"openRelatedGrid\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#openRelatedGrid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"refresh\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#refresh\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"refreshRibbon\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#refreshRibbon\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"removeOnLoad\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#removeOnLoad\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getControlType\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getControlType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getLabel\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"setLabel\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#setLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"getVisible\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#getVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.GridControl.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.GridControl\"},{\"kind\":2,\"name\":\"node_modules/@types/xrm\",\"url\":\"modules/node_modules__types_xrm.html\",\"classes\":\"\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,54.806]],[\"comment/0\",[]],[\"name/1\",[1,54.806]],[\"comment/1\",[]],[\"name/2\",[2,54.806]],[\"comment/2\",[]],[\"name/3\",[3,54.806]],[\"comment/3\",[]],[\"name/4\",[4,54.806]],[\"comment/4\",[]],[\"name/5\",[5,54.806]],[\"comment/5\",[]],[\"name/6\",[6,54.806]],[\"comment/6\",[]],[\"name/7\",[7,54.806]],[\"comment/7\",[]],[\"name/8\",[8,54.806]],[\"comment/8\",[]],[\"name/9\",[9,54.806]],[\"comment/9\",[]],[\"name/10\",[10,54.806]],[\"comment/10\",[]],[\"name/11\",[11,54.806]],[\"comment/11\",[]],[\"name/12\",[12,54.806]],[\"comment/12\",[]],[\"name/13\",[13,54.806]],[\"comment/13\",[]],[\"name/14\",[14,54.806]],[\"comment/14\",[]],[\"name/15\",[15,54.806]],[\"comment/15\",[]],[\"name/16\",[16,54.806]],[\"comment/16\",[]],[\"name/17\",[17,54.806]],[\"comment/17\",[]],[\"name/18\",[18,54.806]],[\"comment/18\",[]],[\"name/19\",[19,54.806]],[\"comment/19\",[]],[\"name/20\",[20,54.806]],[\"comment/20\",[]],[\"name/21\",[21,54.806]],[\"comment/21\",[]],[\"name/22\",[22,54.806]],[\"comment/22\",[]],[\"name/23\",[23,54.806]],[\"comment/23\",[]],[\"name/24\",[24,54.806]],[\"comment/24\",[]],[\"name/25\",[25,54.806]],[\"comment/25\",[]],[\"name/26\",[26,54.806]],[\"comment/26\",[]],[\"name/27\",[27,54.806]],[\"comment/27\",[]],[\"name/28\",[28,33.604]],[\"comment/28\",[]],[\"name/29\",[29,54.806]],[\"comment/29\",[]],[\"name/30\",[30,37.46]],[\"comment/30\",[]],[\"name/31\",[28,33.604]],[\"comment/31\",[]],[\"name/32\",[31,34.438]],[\"comment/32\",[]],[\"name/33\",[32,37.46]],[\"comment/33\",[]],[\"name/34\",[33,37.46]],[\"comment/34\",[]],[\"name/35\",[34,37.46]],[\"comment/35\",[]],[\"name/36\",[35,37.46]],[\"comment/36\",[]],[\"name/37\",[36,37.46]],[\"comment/37\",[]],[\"name/38\",[37,34.438]],[\"comment/38\",[]],[\"name/39\",[38,34.438]],[\"comment/39\",[]],[\"name/40\",[39,37.46]],[\"comment/40\",[]],[\"name/41\",[40,37.46]],[\"comment/41\",[]],[\"name/42\",[41,37.46]],[\"comment/42\",[]],[\"name/43\",[42,37.46]],[\"comment/43\",[]],[\"name/44\",[43,37.46]],[\"comment/44\",[]],[\"name/45\",[44,37.46]],[\"comment/45\",[]],[\"name/46\",[45,37.46]],[\"comment/46\",[]],[\"name/47\",[46,37.46]],[\"comment/47\",[]],[\"name/48\",[47,36.348]],[\"comment/48\",[]],[\"name/49\",[48,37.46]],[\"comment/49\",[]],[\"name/50\",[49,37.46]],[\"comment/50\",[]],[\"name/51\",[50,34.438]],[\"comment/51\",[]],[\"name/52\",[51,37.46]],[\"comment/52\",[]],[\"name/53\",[52,37.46]],[\"comment/53\",[]],[\"name/54\",[53,37.46]],[\"comment/54\",[]],[\"name/55\",[54,37.46]],[\"comment/55\",[]],[\"name/56\",[55,37.46]],[\"comment/56\",[]],[\"name/57\",[56,37.46]],[\"comment/57\",[]],[\"name/58\",[57,37.46]],[\"comment/58\",[]],[\"name/59\",[58,54.806]],[\"comment/59\",[]],[\"name/60\",[30,37.46]],[\"comment/60\",[]],[\"name/61\",[28,33.604]],[\"comment/61\",[]],[\"name/62\",[32,37.46]],[\"comment/62\",[]],[\"name/63\",[59,54.806]],[\"comment/63\",[]],[\"name/64\",[35,37.46]],[\"comment/64\",[]],[\"name/65\",[46,37.46]],[\"comment/65\",[]],[\"name/66\",[47,36.348]],[\"comment/66\",[]],[\"name/67\",[48,37.46]],[\"comment/67\",[]],[\"name/68\",[31,34.438]],[\"comment/68\",[]],[\"name/69\",[33,37.46]],[\"comment/69\",[]],[\"name/70\",[34,37.46]],[\"comment/70\",[]],[\"name/71\",[36,37.46]],[\"comment/71\",[]],[\"name/72\",[37,34.438]],[\"comment/72\",[]],[\"name/73\",[38,34.438]],[\"comment/73\",[]],[\"name/74\",[39,37.46]],[\"comment/74\",[]],[\"name/75\",[40,37.46]],[\"comment/75\",[]],[\"name/76\",[41,37.46]],[\"comment/76\",[]],[\"name/77\",[42,37.46]],[\"comment/77\",[]],[\"name/78\",[43,37.46]],[\"comment/78\",[]],[\"name/79\",[44,37.46]],[\"comment/79\",[]],[\"name/80\",[45,37.46]],[\"comment/80\",[]],[\"name/81\",[49,37.46]],[\"comment/81\",[]],[\"name/82\",[50,34.438]],[\"comment/82\",[]],[\"name/83\",[51,37.46]],[\"comment/83\",[]],[\"name/84\",[52,37.46]],[\"comment/84\",[]],[\"name/85\",[53,37.46]],[\"comment/85\",[]],[\"name/86\",[54,37.46]],[\"comment/86\",[]],[\"name/87\",[55,37.46]],[\"comment/87\",[]],[\"name/88\",[56,37.46]],[\"comment/88\",[]],[\"name/89\",[57,37.46]],[\"comment/89\",[]],[\"name/90\",[60,54.806]],[\"comment/90\",[]],[\"name/91\",[30,37.46]],[\"comment/91\",[]],[\"name/92\",[28,33.604]],[\"comment/92\",[]],[\"name/93\",[32,37.46]],[\"comment/93\",[]],[\"name/94\",[35,37.46]],[\"comment/94\",[]],[\"name/95\",[61,54.806]],[\"comment/95\",[]],[\"name/96\",[62,54.806]],[\"comment/96\",[]],[\"name/97\",[63,54.806]],[\"comment/97\",[]],[\"name/98\",[64,54.806]],[\"comment/98\",[]],[\"name/99\",[46,37.46]],[\"comment/99\",[]],[\"name/100\",[47,36.348]],[\"comment/100\",[]],[\"name/101\",[48,37.46]],[\"comment/101\",[]],[\"name/102\",[31,34.438]],[\"comment/102\",[]],[\"name/103\",[33,37.46]],[\"comment/103\",[]],[\"name/104\",[34,37.46]],[\"comment/104\",[]],[\"name/105\",[36,37.46]],[\"comment/105\",[]],[\"name/106\",[37,34.438]],[\"comment/106\",[]],[\"name/107\",[38,34.438]],[\"comment/107\",[]],[\"name/108\",[39,37.46]],[\"comment/108\",[]],[\"name/109\",[40,37.46]],[\"comment/109\",[]],[\"name/110\",[41,37.46]],[\"comment/110\",[]],[\"name/111\",[42,37.46]],[\"comment/111\",[]],[\"name/112\",[43,37.46]],[\"comment/112\",[]],[\"name/113\",[44,37.46]],[\"comment/113\",[]],[\"name/114\",[45,37.46]],[\"comment/114\",[]],[\"name/115\",[49,37.46]],[\"comment/115\",[]],[\"name/116\",[50,34.438]],[\"comment/116\",[]],[\"name/117\",[51,37.46]],[\"comment/117\",[]],[\"name/118\",[52,37.46]],[\"comment/118\",[]],[\"name/119\",[53,37.46]],[\"comment/119\",[]],[\"name/120\",[54,37.46]],[\"comment/120\",[]],[\"name/121\",[55,37.46]],[\"comment/121\",[]],[\"name/122\",[56,37.46]],[\"comment/122\",[]],[\"name/123\",[57,37.46]],[\"comment/123\",[]],[\"name/124\",[65,54.806]],[\"comment/124\",[]],[\"name/125\",[30,37.46]],[\"comment/125\",[]],[\"name/126\",[28,33.604]],[\"comment/126\",[]],[\"name/127\",[32,37.46]],[\"comment/127\",[]],[\"name/128\",[35,37.46]],[\"comment/128\",[]],[\"name/129\",[46,37.46]],[\"comment/129\",[]],[\"name/130\",[47,36.348]],[\"comment/130\",[]],[\"name/131\",[48,37.46]],[\"comment/131\",[]],[\"name/132\",[31,34.438]],[\"comment/132\",[]],[\"name/133\",[33,37.46]],[\"comment/133\",[]],[\"name/134\",[34,37.46]],[\"comment/134\",[]],[\"name/135\",[36,37.46]],[\"comment/135\",[]],[\"name/136\",[37,34.438]],[\"comment/136\",[]],[\"name/137\",[38,34.438]],[\"comment/137\",[]],[\"name/138\",[39,37.46]],[\"comment/138\",[]],[\"name/139\",[40,37.46]],[\"comment/139\",[]],[\"name/140\",[41,37.46]],[\"comment/140\",[]],[\"name/141\",[42,37.46]],[\"comment/141\",[]],[\"name/142\",[43,37.46]],[\"comment/142\",[]],[\"name/143\",[44,37.46]],[\"comment/143\",[]],[\"name/144\",[45,37.46]],[\"comment/144\",[]],[\"name/145\",[49,37.46]],[\"comment/145\",[]],[\"name/146\",[50,34.438]],[\"comment/146\",[]],[\"name/147\",[51,37.46]],[\"comment/147\",[]],[\"name/148\",[52,37.46]],[\"comment/148\",[]],[\"name/149\",[53,37.46]],[\"comment/149\",[]],[\"name/150\",[54,37.46]],[\"comment/150\",[]],[\"name/151\",[55,37.46]],[\"comment/151\",[]],[\"name/152\",[56,37.46]],[\"comment/152\",[]],[\"name/153\",[57,37.46]],[\"comment/153\",[]],[\"name/154\",[66,54.806]],[\"comment/154\",[]],[\"name/155\",[30,37.46]],[\"comment/155\",[]],[\"name/156\",[28,33.604]],[\"comment/156\",[]],[\"name/157\",[32,37.46]],[\"comment/157\",[]],[\"name/158\",[34,37.46]],[\"comment/158\",[]],[\"name/159\",[67,46.333]],[\"comment/159\",[]],[\"name/160\",[46,37.46]],[\"comment/160\",[]],[\"name/161\",[47,36.348]],[\"comment/161\",[]],[\"name/162\",[48,37.46]],[\"comment/162\",[]],[\"name/163\",[31,34.438]],[\"comment/163\",[]],[\"name/164\",[33,37.46]],[\"comment/164\",[]],[\"name/165\",[35,37.46]],[\"comment/165\",[]],[\"name/166\",[36,37.46]],[\"comment/166\",[]],[\"name/167\",[37,34.438]],[\"comment/167\",[]],[\"name/168\",[38,34.438]],[\"comment/168\",[]],[\"name/169\",[39,37.46]],[\"comment/169\",[]],[\"name/170\",[40,37.46]],[\"comment/170\",[]],[\"name/171\",[41,37.46]],[\"comment/171\",[]],[\"name/172\",[42,37.46]],[\"comment/172\",[]],[\"name/173\",[43,37.46]],[\"comment/173\",[]],[\"name/174\",[44,37.46]],[\"comment/174\",[]],[\"name/175\",[45,37.46]],[\"comment/175\",[]],[\"name/176\",[49,37.46]],[\"comment/176\",[]],[\"name/177\",[50,34.438]],[\"comment/177\",[]],[\"name/178\",[51,37.46]],[\"comment/178\",[]],[\"name/179\",[52,37.46]],[\"comment/179\",[]],[\"name/180\",[53,37.46]],[\"comment/180\",[]],[\"name/181\",[54,37.46]],[\"comment/181\",[]],[\"name/182\",[55,37.46]],[\"comment/182\",[]],[\"name/183\",[56,37.46]],[\"comment/183\",[]],[\"name/184\",[57,37.46]],[\"comment/184\",[]],[\"name/185\",[68,54.806]],[\"comment/185\",[]],[\"name/186\",[30,37.46]],[\"comment/186\",[]],[\"name/187\",[28,33.604]],[\"comment/187\",[]],[\"name/188\",[32,37.46]],[\"comment/188\",[]],[\"name/189\",[69,49.698]],[\"comment/189\",[]],[\"name/190\",[35,37.46]],[\"comment/190\",[]],[\"name/191\",[70,49.698]],[\"comment/191\",[]],[\"name/192\",[71,49.698]],[\"comment/192\",[]],[\"name/193\",[72,49.698]],[\"comment/193\",[]],[\"name/194\",[73,49.698]],[\"comment/194\",[]],[\"name/195\",[67,46.333]],[\"comment/195\",[]],[\"name/196\",[46,37.46]],[\"comment/196\",[]],[\"name/197\",[47,36.348]],[\"comment/197\",[]],[\"name/198\",[48,37.46]],[\"comment/198\",[]],[\"name/199\",[31,34.438]],[\"comment/199\",[]],[\"name/200\",[33,37.46]],[\"comment/200\",[]],[\"name/201\",[34,37.46]],[\"comment/201\",[]],[\"name/202\",[36,37.46]],[\"comment/202\",[]],[\"name/203\",[37,34.438]],[\"comment/203\",[]],[\"name/204\",[38,34.438]],[\"comment/204\",[]],[\"name/205\",[39,37.46]],[\"comment/205\",[]],[\"name/206\",[40,37.46]],[\"comment/206\",[]],[\"name/207\",[41,37.46]],[\"comment/207\",[]],[\"name/208\",[42,37.46]],[\"comment/208\",[]],[\"name/209\",[43,37.46]],[\"comment/209\",[]],[\"name/210\",[44,37.46]],[\"comment/210\",[]],[\"name/211\",[45,37.46]],[\"comment/211\",[]],[\"name/212\",[49,37.46]],[\"comment/212\",[]],[\"name/213\",[50,34.438]],[\"comment/213\",[]],[\"name/214\",[51,37.46]],[\"comment/214\",[]],[\"name/215\",[52,37.46]],[\"comment/215\",[]],[\"name/216\",[53,37.46]],[\"comment/216\",[]],[\"name/217\",[54,37.46]],[\"comment/217\",[]],[\"name/218\",[55,37.46]],[\"comment/218\",[]],[\"name/219\",[56,37.46]],[\"comment/219\",[]],[\"name/220\",[57,37.46]],[\"comment/220\",[]],[\"name/221\",[74,54.806]],[\"comment/221\",[]],[\"name/222\",[30,37.46]],[\"comment/222\",[]],[\"name/223\",[28,33.604]],[\"comment/223\",[]],[\"name/224\",[32,37.46]],[\"comment/224\",[]],[\"name/225\",[75,54.806]],[\"comment/225\",[]],[\"name/226\",[76,54.806]],[\"comment/226\",[]],[\"name/227\",[46,37.46]],[\"comment/227\",[]],[\"name/228\",[47,36.348]],[\"comment/228\",[]],[\"name/229\",[77,54.806]],[\"comment/229\",[]],[\"name/230\",[78,54.806]],[\"comment/230\",[]],[\"name/231\",[79,54.806]],[\"comment/231\",[]],[\"name/232\",[48,37.46]],[\"comment/232\",[]],[\"name/233\",[80,54.806]],[\"comment/233\",[]],[\"name/234\",[81,54.806]],[\"comment/234\",[]],[\"name/235\",[82,54.806]],[\"comment/235\",[]],[\"name/236\",[83,54.806]],[\"comment/236\",[]],[\"name/237\",[84,54.806]],[\"comment/237\",[]],[\"name/238\",[31,34.438]],[\"comment/238\",[]],[\"name/239\",[33,37.46]],[\"comment/239\",[]],[\"name/240\",[34,37.46]],[\"comment/240\",[]],[\"name/241\",[35,37.46]],[\"comment/241\",[]],[\"name/242\",[36,37.46]],[\"comment/242\",[]],[\"name/243\",[37,34.438]],[\"comment/243\",[]],[\"name/244\",[38,34.438]],[\"comment/244\",[]],[\"name/245\",[39,37.46]],[\"comment/245\",[]],[\"name/246\",[40,37.46]],[\"comment/246\",[]],[\"name/247\",[41,37.46]],[\"comment/247\",[]],[\"name/248\",[42,37.46]],[\"comment/248\",[]],[\"name/249\",[43,37.46]],[\"comment/249\",[]],[\"name/250\",[44,37.46]],[\"comment/250\",[]],[\"name/251\",[45,37.46]],[\"comment/251\",[]],[\"name/252\",[49,37.46]],[\"comment/252\",[]],[\"name/253\",[50,34.438]],[\"comment/253\",[]],[\"name/254\",[51,37.46]],[\"comment/254\",[]],[\"name/255\",[52,37.46]],[\"comment/255\",[]],[\"name/256\",[53,37.46]],[\"comment/256\",[]],[\"name/257\",[54,37.46]],[\"comment/257\",[]],[\"name/258\",[55,37.46]],[\"comment/258\",[]],[\"name/259\",[56,37.46]],[\"comment/259\",[]],[\"name/260\",[57,37.46]],[\"comment/260\",[]],[\"name/261\",[85,54.806]],[\"comment/261\",[]],[\"name/262\",[30,37.46]],[\"comment/262\",[]],[\"name/263\",[28,33.604]],[\"comment/263\",[]],[\"name/264\",[32,37.46]],[\"comment/264\",[]],[\"name/265\",[86,54.806]],[\"comment/265\",[]],[\"name/266\",[69,49.698]],[\"comment/266\",[]],[\"name/267\",[35,37.46]],[\"comment/267\",[]],[\"name/268\",[70,49.698]],[\"comment/268\",[]],[\"name/269\",[71,49.698]],[\"comment/269\",[]],[\"name/270\",[72,49.698]],[\"comment/270\",[]],[\"name/271\",[73,49.698]],[\"comment/271\",[]],[\"name/272\",[67,46.333]],[\"comment/272\",[]],[\"name/273\",[46,37.46]],[\"comment/273\",[]],[\"name/274\",[47,36.348]],[\"comment/274\",[]],[\"name/275\",[87,54.806]],[\"comment/275\",[]],[\"name/276\",[48,37.46]],[\"comment/276\",[]],[\"name/277\",[88,54.806]],[\"comment/277\",[]],[\"name/278\",[89,54.806]],[\"comment/278\",[]],[\"name/279\",[90,54.806]],[\"comment/279\",[]],[\"name/280\",[31,34.438]],[\"comment/280\",[]],[\"name/281\",[33,37.46]],[\"comment/281\",[]],[\"name/282\",[34,37.46]],[\"comment/282\",[]],[\"name/283\",[36,37.46]],[\"comment/283\",[]],[\"name/284\",[37,34.438]],[\"comment/284\",[]],[\"name/285\",[38,34.438]],[\"comment/285\",[]],[\"name/286\",[39,37.46]],[\"comment/286\",[]],[\"name/287\",[40,37.46]],[\"comment/287\",[]],[\"name/288\",[41,37.46]],[\"comment/288\",[]],[\"name/289\",[42,37.46]],[\"comment/289\",[]],[\"name/290\",[43,37.46]],[\"comment/290\",[]],[\"name/291\",[44,37.46]],[\"comment/291\",[]],[\"name/292\",[45,37.46]],[\"comment/292\",[]],[\"name/293\",[49,37.46]],[\"comment/293\",[]],[\"name/294\",[50,34.438]],[\"comment/294\",[]],[\"name/295\",[51,37.46]],[\"comment/295\",[]],[\"name/296\",[52,37.46]],[\"comment/296\",[]],[\"name/297\",[53,37.46]],[\"comment/297\",[]],[\"name/298\",[54,37.46]],[\"comment/298\",[]],[\"name/299\",[55,37.46]],[\"comment/299\",[]],[\"name/300\",[56,37.46]],[\"comment/300\",[]],[\"name/301\",[57,37.46]],[\"comment/301\",[]],[\"name/302\",[91,46.333]],[\"comment/302\",[]],[\"name/303\",[28,33.604]],[\"comment/303\",[]],[\"name/304\",[31,34.438]],[\"comment/304\",[]],[\"name/305\",[92,54.806]],[\"comment/305\",[]],[\"name/306\",[93,54.806]],[\"comment/306\",[]],[\"name/307\",[91,46.333]],[\"comment/307\",[]],[\"name/308\",[37,34.438]],[\"comment/308\",[]],[\"name/309\",[38,34.438]],[\"comment/309\",[]],[\"name/310\",[47,36.348]],[\"comment/310\",[]],[\"name/311\",[50,34.438]],[\"comment/311\",[]],[\"name/312\",[94,46.333]],[\"comment/312\",[]],[\"name/313\",[95,46.333]],[\"comment/313\",[]],[\"name/314\",[96,46.333]],[\"comment/314\",[]],[\"name/315\",[97,49.698]],[\"comment/315\",[]],[\"name/316\",[28,33.604]],[\"comment/316\",[]],[\"name/317\",[31,34.438]],[\"comment/317\",[]],[\"name/318\",[98,54.806]],[\"comment/318\",[]],[\"name/319\",[91,46.333]],[\"comment/319\",[]],[\"name/320\",[99,54.806]],[\"comment/320\",[]],[\"name/321\",[97,49.698]],[\"comment/321\",[]],[\"name/322\",[100,54.806]],[\"comment/322\",[]],[\"name/323\",[101,54.806]],[\"comment/323\",[]],[\"name/324\",[37,34.438]],[\"comment/324\",[]],[\"name/325\",[38,34.438]],[\"comment/325\",[]],[\"name/326\",[102,54.806]],[\"comment/326\",[]],[\"name/327\",[103,54.806]],[\"comment/327\",[]],[\"name/328\",[50,34.438]],[\"comment/328\",[]],[\"name/329\",[94,46.333]],[\"comment/329\",[]],[\"name/330\",[95,46.333]],[\"comment/330\",[]],[\"name/331\",[96,46.333]],[\"comment/331\",[]],[\"name/332\",[104,54.806]],[\"comment/332\",[]],[\"name/333\",[105,49.698]],[\"comment/333\",[]],[\"name/334\",[28,33.604]],[\"comment/334\",[]],[\"name/335\",[31,34.438]],[\"comment/335\",[]],[\"name/336\",[106,54.806]],[\"comment/336\",[]],[\"name/337\",[105,49.698]],[\"comment/337\",[]],[\"name/338\",[107,54.806]],[\"comment/338\",[]],[\"name/339\",[108,54.806]],[\"comment/339\",[]],[\"name/340\",[109,54.806]],[\"comment/340\",[]],[\"name/341\",[110,54.806]],[\"comment/341\",[]],[\"name/342\",[111,54.806]],[\"comment/342\",[]],[\"name/343\",[112,54.806]],[\"comment/343\",[]],[\"name/344\",[113,54.806]],[\"comment/344\",[]],[\"name/345\",[114,54.806]],[\"comment/345\",[]],[\"name/346\",[115,54.806]],[\"comment/346\",[]],[\"name/347\",[116,54.806]],[\"comment/347\",[]],[\"name/348\",[117,54.806]],[\"comment/348\",[]],[\"name/349\",[118,54.806]],[\"comment/349\",[]],[\"name/350\",[119,54.806]],[\"comment/350\",[]],[\"name/351\",[120,54.806]],[\"comment/351\",[]],[\"name/352\",[37,34.438]],[\"comment/352\",[]],[\"name/353\",[38,34.438]],[\"comment/353\",[]],[\"name/354\",[95,46.333]],[\"comment/354\",[]],[\"name/355\",[96,46.333]],[\"comment/355\",[]],[\"name/356\",[94,46.333]],[\"comment/356\",[]],[\"name/357\",[50,34.438]],[\"comment/357\",[]],[\"name/358\",[121,54.806]],[\"comment/358\",[]]],\"invertedIndex\":[[\"_attribute\",{\"_index\":32,\"name\":{\"33\":{},\"62\":{},\"93\":{},\"127\":{},\"157\":{},\"188\":{},\"224\":{},\"264\":{}},\"comment\":{}}],[\"_control\",{\"_index\":86,\"name\":{\"265\":{}},\"comment\":{}}],[\"_customfilters\",{\"_index\":75,\"name\":{\"225\":{}},\"comment\":{}}],[\"_executioncontext\",{\"_index\":14,\"name\":{\"14\":{}},\"comment\":{}}],[\"_formcontext\",{\"_index\":13,\"name\":{\"13\":{}},\"comment\":{}}],[\"_gridcontrol\",{\"_index\":106,\"name\":{\"336\":{}},\"comment\":{}}],[\"_section\",{\"_index\":92,\"name\":{\"305\":{}},\"comment\":{}}],[\"_tab\",{\"_index\":98,\"name\":{\"318\":{}},\"comment\":{}}],[\"addformnotification\",{\"_index\":22,\"name\":{\"22\":{}},\"comment\":{}}],[\"addglobalnotification\",{\"_index\":4,\"name\":{\"4\":{}},\"comment\":{}}],[\"addnotification\",{\"_index\":56,\"name\":{\"57\":{},\"88\":{},\"122\":{},\"152\":{},\"183\":{},\"219\":{},\"259\":{},\"300\":{}},\"comment\":{}}],[\"addonchange\",{\"_index\":55,\"name\":{\"56\":{},\"87\":{},\"121\":{},\"151\":{},\"182\":{},\"218\":{},\"258\":{},\"299\":{}},\"comment\":{}}],[\"addonchangeeventhandler\",{\"_index\":27,\"name\":{\"27\":{}},\"comment\":{}}],[\"addonload\",{\"_index\":108,\"name\":{\"339\":{}},\"comment\":{}}],[\"addonloadeventhandler\",{\"_index\":26,\"name\":{\"26\":{}},\"comment\":{}}],[\"addonpostsaveeventhandler\",{\"_index\":25,\"name\":{\"25\":{}},\"comment\":{}}],[\"addonsaveeventhandler\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"addoption\",{\"_index\":88,\"name\":{\"277\":{}},\"comment\":{}}],[\"addprefiltertolookup\",{\"_index\":82,\"name\":{\"235\":{}},\"comment\":{}}],[\"addprefiltertolookupadvanced\",{\"_index\":83,\"name\":{\"236\":{}},\"comment\":{}}],[\"addtabstatechange\",{\"_index\":100,\"name\":{\"322\":{}},\"comment\":{}}],[\"allfields\",{\"_index\":30,\"name\":{\"30\":{},\"60\":{},\"91\":{},\"125\":{},\"155\":{},\"186\":{},\"222\":{},\"262\":{}},\"comment\":{}}],[\"attribute\",{\"_index\":46,\"name\":{\"47\":{},\"65\":{},\"99\":{},\"129\":{},\"160\":{},\"196\":{},\"227\":{},\"273\":{}},\"comment\":{}}],[\"booleanfield\",{\"_index\":66,\"name\":{\"154\":{}},\"comment\":{}}],[\"checkrequestparametertype\",{\"_index\":7,\"name\":{\"7\":{}},\"comment\":{}}],[\"clearoptions\",{\"_index\":90,\"name\":{\"279\":{}},\"comment\":{}}],[\"clearprefilterfromlookup\",{\"_index\":84,\"name\":{\"237\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":28,\"name\":{\"28\":{},\"31\":{},\"61\":{},\"92\":{},\"126\":{},\"156\":{},\"187\":{},\"223\":{},\"263\":{},\"303\":{},\"316\":{},\"334\":{}},\"comment\":{}}],[\"control\",{\"_index\":87,\"name\":{\"275\":{}},\"comment\":{}}],[\"controls\",{\"_index\":47,\"name\":{\"48\":{},\"66\":{},\"100\":{},\"130\":{},\"161\":{},\"197\":{},\"228\":{},\"274\":{},\"310\":{}},\"comment\":{}}],[\"datefield\",{\"_index\":65,\"name\":{\"124\":{}},\"comment\":{}}],[\"entityreference\",{\"_index\":17,\"name\":{\"17\":{}},\"comment\":{}}],[\"entitytype\",{\"_index\":78,\"name\":{\"230\":{}},\"comment\":{}}],[\"executeaction\",{\"_index\":8,\"name\":{\"8\":{}},\"comment\":{}}],[\"executefunction\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"executioncontext\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"field\",{\"_index\":29,\"name\":{\"29\":{}},\"comment\":{}}],[\"fireonchange\",{\"_index\":54,\"name\":{\"55\":{},\"86\":{},\"120\":{},\"150\":{},\"181\":{},\"217\":{},\"257\":{},\"298\":{}},\"comment\":{}}],[\"form\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"formattedvalue\",{\"_index\":79,\"name\":{\"231\":{}},\"comment\":{}}],[\"formcontext\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"getattributetype\",{\"_index\":34,\"name\":{\"35\":{},\"70\":{},\"104\":{},\"134\":{},\"158\":{},\"201\":{},\"240\":{},\"282\":{}},\"comment\":{}}],[\"getcontexttype\",{\"_index\":109,\"name\":{\"340\":{}},\"comment\":{}}],[\"getcontroltype\",{\"_index\":120,\"name\":{\"351\":{}},\"comment\":{}}],[\"getdisplaystate\",{\"_index\":101,\"name\":{\"323\":{}},\"comment\":{}}],[\"getentityname\",{\"_index\":110,\"name\":{\"341\":{}},\"comment\":{}}],[\"getenvironmentvariablevalue\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"getfetchxml\",{\"_index\":111,\"name\":{\"342\":{}},\"comment\":{}}],[\"getformat\",{\"_index\":35,\"name\":{\"36\":{},\"64\":{},\"94\":{},\"128\":{},\"165\":{},\"190\":{},\"241\":{},\"267\":{}},\"comment\":{}}],[\"getfunctionname\",{\"_index\":3,\"name\":{\"3\":{}},\"comment\":{}}],[\"getgrid\",{\"_index\":112,\"name\":{\"343\":{}},\"comment\":{}}],[\"getinitialvalue\",{\"_index\":67,\"name\":{\"159\":{},\"195\":{},\"272\":{}},\"comment\":{}}],[\"getisdirty\",{\"_index\":36,\"name\":{\"37\":{},\"71\":{},\"105\":{},\"135\":{},\"166\":{},\"202\":{},\"242\":{},\"283\":{}},\"comment\":{}}],[\"getispartylist\",{\"_index\":76,\"name\":{\"226\":{}},\"comment\":{}}],[\"getlabel\",{\"_index\":95,\"name\":{\"313\":{},\"330\":{},\"354\":{}},\"comment\":{}}],[\"getmax\",{\"_index\":61,\"name\":{\"95\":{}},\"comment\":{}}],[\"getmaxlength\",{\"_index\":59,\"name\":{\"63\":{}},\"comment\":{}}],[\"getmin\",{\"_index\":62,\"name\":{\"96\":{}},\"comment\":{}}],[\"getname\",{\"_index\":37,\"name\":{\"38\":{},\"72\":{},\"106\":{},\"136\":{},\"167\":{},\"203\":{},\"243\":{},\"284\":{},\"308\":{},\"324\":{},\"352\":{}},\"comment\":{}}],[\"getoption\",{\"_index\":70,\"name\":{\"191\":{},\"268\":{}},\"comment\":{}}],[\"getoptions\",{\"_index\":71,\"name\":{\"192\":{},\"269\":{}},\"comment\":{}}],[\"getparent\",{\"_index\":38,\"name\":{\"39\":{},\"73\":{},\"107\":{},\"137\":{},\"168\":{},\"204\":{},\"244\":{},\"285\":{},\"309\":{},\"325\":{},\"353\":{}},\"comment\":{}}],[\"getprecision\",{\"_index\":63,\"name\":{\"97\":{}},\"comment\":{}}],[\"getrelationship\",{\"_index\":113,\"name\":{\"344\":{}},\"comment\":{}}],[\"getrequiredlevel\",{\"_index\":39,\"name\":{\"40\":{},\"74\":{},\"108\":{},\"138\":{},\"169\":{},\"205\":{},\"245\":{},\"286\":{}},\"comment\":{}}],[\"getselectedoption\",{\"_index\":72,\"name\":{\"193\":{},\"270\":{}},\"comment\":{}}],[\"getsubmitmode\",{\"_index\":40,\"name\":{\"41\":{},\"75\":{},\"109\":{},\"139\":{},\"170\":{},\"206\":{},\"246\":{},\"287\":{}},\"comment\":{}}],[\"gettext\",{\"_index\":73,\"name\":{\"194\":{},\"271\":{}},\"comment\":{}}],[\"geturl\",{\"_index\":114,\"name\":{\"345\":{}},\"comment\":{}}],[\"getuserprivilege\",{\"_index\":41,\"name\":{\"42\":{},\"76\":{},\"110\":{},\"140\":{},\"171\":{},\"207\":{},\"247\":{},\"288\":{}},\"comment\":{}}],[\"getvalue\",{\"_index\":44,\"name\":{\"45\":{},\"79\":{},\"113\":{},\"143\":{},\"174\":{},\"210\":{},\"250\":{},\"291\":{}},\"comment\":{}}],[\"getviewselector\",{\"_index\":115,\"name\":{\"346\":{}},\"comment\":{}}],[\"getvisible\",{\"_index\":94,\"name\":{\"312\":{},\"329\":{},\"356\":{}},\"comment\":{}}],[\"grid\",{\"_index\":107,\"name\":{\"338\":{}},\"comment\":{}}],[\"gridcontrol\",{\"_index\":105,\"name\":{\"333\":{},\"337\":{}},\"comment\":{}}],[\"id\",{\"_index\":77,\"name\":{\"229\":{}},\"comment\":{}}],[\"iscreate\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"isnotcreate\",{\"_index\":20,\"name\":{\"20\":{}},\"comment\":{}}],[\"isnotupdate\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"isupdate\",{\"_index\":19,\"name\":{\"19\":{}},\"comment\":{}}],[\"lookupfield\",{\"_index\":74,\"name\":{\"221\":{}},\"comment\":{}}],[\"multiselectoptionsetfield\",{\"_index\":68,\"name\":{\"185\":{}},\"comment\":{}}],[\"name\",{\"_index\":31,\"name\":{\"32\":{},\"68\":{},\"102\":{},\"132\":{},\"163\":{},\"199\":{},\"238\":{},\"280\":{},\"304\":{},\"317\":{},\"335\":{}},\"comment\":{}}],[\"node_modules/@types/xrm\",{\"_index\":121,\"name\":{\"358\":{}},\"comment\":{}}],[\"normalizeguid\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"numberfield\",{\"_index\":60,\"name\":{\"90\":{}},\"comment\":{}}],[\"openalertdialog\",{\"_index\":11,\"name\":{\"11\":{}},\"comment\":{}}],[\"openrelatedgrid\",{\"_index\":116,\"name\":{\"347\":{}},\"comment\":{}}],[\"option\",{\"_index\":69,\"name\":{\"189\":{},\"266\":{}},\"comment\":{}}],[\"optionsetfield\",{\"_index\":85,\"name\":{\"261\":{}},\"comment\":{}}],[\"parenttab\",{\"_index\":93,\"name\":{\"306\":{}},\"comment\":{}}],[\"refresh\",{\"_index\":117,\"name\":{\"348\":{}},\"comment\":{}}],[\"refreshribbon\",{\"_index\":118,\"name\":{\"349\":{}},\"comment\":{}}],[\"removeformnotification\",{\"_index\":23,\"name\":{\"23\":{}},\"comment\":{}}],[\"removeglobalnotification\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"removenotification\",{\"_index\":57,\"name\":{\"58\":{},\"89\":{},\"123\":{},\"153\":{},\"184\":{},\"220\":{},\"260\":{},\"301\":{}},\"comment\":{}}],[\"removeonchange\",{\"_index\":42,\"name\":{\"43\":{},\"77\":{},\"111\":{},\"141\":{},\"172\":{},\"208\":{},\"248\":{},\"289\":{}},\"comment\":{}}],[\"removeonload\",{\"_index\":119,\"name\":{\"350\":{}},\"comment\":{}}],[\"removeoption\",{\"_index\":89,\"name\":{\"278\":{}},\"comment\":{}}],[\"removetabstatechange\",{\"_index\":102,\"name\":{\"326\":{}},\"comment\":{}}],[\"retrieve\",{\"_index\":81,\"name\":{\"234\":{}},\"comment\":{}}],[\"section\",{\"_index\":91,\"name\":{\"302\":{},\"307\":{},\"319\":{}},\"comment\":{}}],[\"sections\",{\"_index\":99,\"name\":{\"320\":{}},\"comment\":{}}],[\"setdisabled\",{\"_index\":51,\"name\":{\"52\":{},\"83\":{},\"117\":{},\"147\":{},\"178\":{},\"214\":{},\"254\":{},\"295\":{}},\"comment\":{}}],[\"setdisplaystate\",{\"_index\":103,\"name\":{\"327\":{}},\"comment\":{}}],[\"setfocus\",{\"_index\":104,\"name\":{\"332\":{}},\"comment\":{}}],[\"setisvalid\",{\"_index\":45,\"name\":{\"46\":{},\"80\":{},\"114\":{},\"144\":{},\"175\":{},\"211\":{},\"251\":{},\"292\":{}},\"comment\":{}}],[\"setlabel\",{\"_index\":96,\"name\":{\"314\":{},\"331\":{},\"355\":{}},\"comment\":{}}],[\"setlookupvalue\",{\"_index\":80,\"name\":{\"233\":{}},\"comment\":{}}],[\"setnotification\",{\"_index\":49,\"name\":{\"50\":{},\"81\":{},\"115\":{},\"145\":{},\"176\":{},\"212\":{},\"252\":{},\"293\":{}},\"comment\":{}}],[\"setprecision\",{\"_index\":64,\"name\":{\"98\":{}},\"comment\":{}}],[\"setrequired\",{\"_index\":53,\"name\":{\"54\":{},\"85\":{},\"119\":{},\"149\":{},\"180\":{},\"216\":{},\"256\":{},\"297\":{}},\"comment\":{}}],[\"setrequiredlevel\",{\"_index\":52,\"name\":{\"53\":{},\"84\":{},\"118\":{},\"148\":{},\"179\":{},\"215\":{},\"255\":{},\"296\":{}},\"comment\":{}}],[\"setsubmitmode\",{\"_index\":43,\"name\":{\"44\":{},\"78\":{},\"112\":{},\"142\":{},\"173\":{},\"209\":{},\"249\":{},\"290\":{}},\"comment\":{}}],[\"setvalue\",{\"_index\":33,\"name\":{\"34\":{},\"69\":{},\"103\":{},\"133\":{},\"164\":{},\"200\":{},\"239\":{},\"281\":{}},\"comment\":{}}],[\"setvisible\",{\"_index\":50,\"name\":{\"51\":{},\"82\":{},\"116\":{},\"146\":{},\"177\":{},\"213\":{},\"253\":{},\"294\":{},\"311\":{},\"328\":{},\"357\":{}},\"comment\":{}}],[\"src/xrmex\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"tab\",{\"_index\":97,\"name\":{\"315\":{},\"321\":{}},\"comment\":{}}],[\"textfield\",{\"_index\":58,\"name\":{\"59\":{}},\"comment\":{}}],[\"throwerror\",{\"_index\":2,\"name\":{\"2\":{}},\"comment\":{}}],[\"value\",{\"_index\":48,\"name\":{\"49\":{},\"67\":{},\"101\":{},\"131\":{},\"162\":{},\"198\":{},\"232\":{},\"276\":{}},\"comment\":{}}],[\"xrmex\",{\"_index\":1,\"name\":{\"1\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = JSON.parse("{\"rows\":[{\"kind\":2,\"name\":\"src/XrmEx\",\"url\":\"modules/src_XrmEx.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"XrmEx\",\"url\":\"modules/src_XrmEx.XrmEx.html\",\"classes\":\"\",\"parent\":\"src/XrmEx\"},{\"kind\":64,\"name\":\"throwError\",\"url\":\"functions/src_XrmEx.XrmEx.throwError.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"getFunctionName\",\"url\":\"functions/src_XrmEx.XrmEx.getFunctionName.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"addGlobalNotification\",\"url\":\"functions/src_XrmEx.XrmEx.addGlobalNotification.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"removeGlobalNotification\",\"url\":\"functions/src_XrmEx.XrmEx.removeGlobalNotification.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"getEnvironmentVariableValue\",\"url\":\"functions/src_XrmEx.XrmEx.getEnvironmentVariableValue.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"checkRequestParameterType\",\"url\":\"functions/src_XrmEx.XrmEx.checkRequestParameterType.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"executeAction\",\"url\":\"functions/src_XrmEx.XrmEx.executeAction.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"executeFunction\",\"url\":\"functions/src_XrmEx.XrmEx.executeFunction.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"normalizeGuid\",\"url\":\"functions/src_XrmEx.XrmEx.normalizeGuid.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":64,\"name\":\"openAlertDialog\",\"url\":\"functions/src_XrmEx.XrmEx.openAlertDialog.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":128,\"name\":\"Form\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":1024,\"name\":\"_formContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#_formContext\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":1024,\"name\":\"_executionContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#_executionContext\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"formContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#formContext\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"executionContext\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#executionContext\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"entityReference\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#entityReference\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsCreate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsCreate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsUpdate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsUpdate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsNotCreate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsNotCreate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":262144,\"name\":\"IsNotUpdate\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#IsNotUpdate\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addFormNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addFormNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"removeFormNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#removeFormNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnSaveEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnSaveEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnPostSaveEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnPostSaveEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnLoadEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnLoadEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":2048,\"name\":\"addOnChangeEventHandler\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#addOnChangeEventHandler\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Form.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Form\"},{\"kind\":4,\"name\":\"Class\",\"url\":\"modules/src_XrmEx.XrmEx.Class.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx\"},{\"kind\":128,\"name\":\"Field\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#allFields\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getAttributeType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getIsDirty\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getRequiredLevel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getSubmitMode\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getUserPrivilege\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#removeOnChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setSubmitMode\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#getValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setIsValid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setDisabled\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setRequiredLevel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#setRequired\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#fireOnChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#addOnChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#addNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Field.html#removeNotification\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Field\"},{\"kind\":128,\"name\":\"TextField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getMaxLength\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getMaxLength\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.TextField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.TextField\"},{\"kind\":128,\"name\":\"NumberField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getMax\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getMax\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getMin\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getMin\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getPrecision\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getPrecision\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setPrecision\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setPrecision\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.NumberField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.NumberField\"},{\"kind\":128,\"name\":\"DateField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.DateField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.DateField\"},{\"kind\":128,\"name\":\"BooleanField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getAttributeType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getInitialValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getInitialValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.BooleanField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.BooleanField\"},{\"kind\":128,\"name\":\"MultiSelectOptionSetField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":1024,\"name\":\"Option\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#Option\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getOption\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getOptions\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getOptions\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getSelectedOption\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getSelectedOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getText\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getInitialValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getInitialValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.MultiSelectOptionSetField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.MultiSelectOptionSetField\"},{\"kind\":128,\"name\":\"LookupField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":1024,\"name\":\"_customFilters\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#_customFilters\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getIsPartyList\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getIsPartyList\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":262144,\"name\":\"Id\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#Id\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":262144,\"name\":\"EntityType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#EntityType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":262144,\"name\":\"FormattedValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#FormattedValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setLookupValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setLookupValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"retrieve\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#retrieve\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"addPreFilterToLookup\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#addPreFilterToLookup\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"addPreFilterToLookupAdvanced\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#addPreFilterToLookupAdvanced\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"clearPreFilterFromLookup\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#clearPreFilterFromLookup\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getFormat\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.LookupField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.LookupField\"},{\"kind\":128,\"name\":\"OptionsetField\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":1024,\"name\":\"allFields\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#allFields\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":1024,\"name\":\"_attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#_attribute\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":1024,\"name\":\"_control\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#_control\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":1024,\"name\":\"Option\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#Option\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getFormat\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getFormat\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getOption\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getOptions\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getOptions\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getSelectedOption\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getSelectedOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getText\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getInitialValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getInitialValue\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":262144,\"name\":\"Attribute\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#Attribute\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":262144,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":262144,\"name\":\"control\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#control\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":262144,\"name\":\"Value\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#Value\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"addOption\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#addOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"removeOption\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#removeOption\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"clearOptions\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#clearOptions\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#Name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getAttributeType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getAttributeType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getIsDirty\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getIsDirty\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getName\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getParent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getUserPrivilege\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getUserPrivilege\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"removeOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#removeOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setSubmitMode\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setSubmitMode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"getValue\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#getValue\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setIsValid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setIsValid\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setVisible\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setDisabled\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setDisabled\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setRequiredLevel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setRequiredLevel\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"setRequired\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#setRequired\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"fireOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#fireOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"addOnChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#addOnChange\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"addNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#addNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":2048,\"name\":\"removeNotification\",\"url\":\"classes/src_XrmEx.XrmEx.Class.OptionsetField.html#removeNotification\",\"classes\":\"tsd-is-inherited\",\"parent\":\"src/XrmEx.XrmEx.Class.OptionsetField\"},{\"kind\":128,\"name\":\"Section\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":1024,\"name\":\"_section\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#_section\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":1024,\"name\":\"parentTab\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#parentTab\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":262144,\"name\":\"Section\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#Section\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":1024,\"name\":\"controls\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#controls\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":2048,\"name\":\"getVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#getVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":2048,\"name\":\"getLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#getLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":2048,\"name\":\"setLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Section.html#setLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Section\"},{\"kind\":128,\"name\":\"Tab\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":1024,\"name\":\"_tab\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#_tab\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":1024,\"name\":\"Section\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#Section\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":1024,\"name\":\"sections\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#sections\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":262144,\"name\":\"Tab\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#Tab\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"addTabStateChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#addTabStateChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"getDisplayState\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#getDisplayState\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"removeTabStateChange\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#removeTabStateChange\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"setDisplayState\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#setDisplayState\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"getVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#getVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"getLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#getLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"setLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#setLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":2048,\"name\":\"setFocus\",\"url\":\"classes/src_XrmEx.XrmEx.Class.Tab.html#setFocus\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.Tab\"},{\"kind\":128,\"name\":\"GridControl\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#constructor\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":1024,\"name\":\"Name\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#Name\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":1024,\"name\":\"_gridControl\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#_gridControl\",\"classes\":\"tsd-is-protected\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":262144,\"name\":\"GridControl\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#GridControl\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":262144,\"name\":\"Grid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#Grid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"addOnLoad\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#addOnLoad\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getContextType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getContextType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getEntityName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getEntityName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getFetchXml\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getFetchXml\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getGrid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getGrid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getRelationship\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getRelationship\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getUrl\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getUrl\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getViewSelector\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getViewSelector\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"openRelatedGrid\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#openRelatedGrid\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"refresh\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#refresh\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"refreshRibbon\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#refreshRibbon\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"removeOnLoad\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#removeOnLoad\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getControlType\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getControlType\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getName\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getName\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getParent\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getParent\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"setLabel\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#setLabel\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"getVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#getVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2048,\"name\":\"setVisible\",\"url\":\"classes/src_XrmEx.XrmEx.Class.GridControl.html#setVisible\",\"classes\":\"\",\"parent\":\"src/XrmEx.XrmEx.Class.GridControl\"},{\"kind\":2,\"name\":\"node_modules/@types/xrm\",\"url\":\"modules/node_modules__types_xrm.html\",\"classes\":\"\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,54.834]],[\"comment/0\",[]],[\"name/1\",[1,54.834]],[\"comment/1\",[]],[\"name/2\",[2,54.834]],[\"comment/2\",[]],[\"name/3\",[3,54.834]],[\"comment/3\",[]],[\"name/4\",[4,54.834]],[\"comment/4\",[]],[\"name/5\",[5,54.834]],[\"comment/5\",[]],[\"name/6\",[6,54.834]],[\"comment/6\",[]],[\"name/7\",[7,54.834]],[\"comment/7\",[]],[\"name/8\",[8,54.834]],[\"comment/8\",[]],[\"name/9\",[9,54.834]],[\"comment/9\",[]],[\"name/10\",[10,54.834]],[\"comment/10\",[]],[\"name/11\",[11,54.834]],[\"comment/11\",[]],[\"name/12\",[12,54.834]],[\"comment/12\",[]],[\"name/13\",[13,54.834]],[\"comment/13\",[]],[\"name/14\",[14,54.834]],[\"comment/14\",[]],[\"name/15\",[15,54.834]],[\"comment/15\",[]],[\"name/16\",[16,54.834]],[\"comment/16\",[]],[\"name/17\",[17,54.834]],[\"comment/17\",[]],[\"name/18\",[18,54.834]],[\"comment/18\",[]],[\"name/19\",[19,54.834]],[\"comment/19\",[]],[\"name/20\",[20,54.834]],[\"comment/20\",[]],[\"name/21\",[21,54.834]],[\"comment/21\",[]],[\"name/22\",[22,54.834]],[\"comment/22\",[]],[\"name/23\",[23,54.834]],[\"comment/23\",[]],[\"name/24\",[24,54.834]],[\"comment/24\",[]],[\"name/25\",[25,54.834]],[\"comment/25\",[]],[\"name/26\",[26,54.834]],[\"comment/26\",[]],[\"name/27\",[27,54.834]],[\"comment/27\",[]],[\"name/28\",[28,33.631]],[\"comment/28\",[]],[\"name/29\",[29,54.834]],[\"comment/29\",[]],[\"name/30\",[30,54.834]],[\"comment/30\",[]],[\"name/31\",[31,37.488]],[\"comment/31\",[]],[\"name/32\",[28,33.631]],[\"comment/32\",[]],[\"name/33\",[32,34.465]],[\"comment/33\",[]],[\"name/34\",[33,37.488]],[\"comment/34\",[]],[\"name/35\",[34,37.488]],[\"comment/35\",[]],[\"name/36\",[35,37.488]],[\"comment/36\",[]],[\"name/37\",[36,37.488]],[\"comment/37\",[]],[\"name/38\",[37,37.488]],[\"comment/38\",[]],[\"name/39\",[38,34.465]],[\"comment/39\",[]],[\"name/40\",[39,34.465]],[\"comment/40\",[]],[\"name/41\",[40,37.488]],[\"comment/41\",[]],[\"name/42\",[41,37.488]],[\"comment/42\",[]],[\"name/43\",[42,37.488]],[\"comment/43\",[]],[\"name/44\",[43,37.488]],[\"comment/44\",[]],[\"name/45\",[44,37.488]],[\"comment/45\",[]],[\"name/46\",[45,37.488]],[\"comment/46\",[]],[\"name/47\",[46,37.488]],[\"comment/47\",[]],[\"name/48\",[47,37.488]],[\"comment/48\",[]],[\"name/49\",[48,36.376]],[\"comment/49\",[]],[\"name/50\",[49,37.488]],[\"comment/50\",[]],[\"name/51\",[50,37.488]],[\"comment/51\",[]],[\"name/52\",[51,34.465]],[\"comment/52\",[]],[\"name/53\",[52,37.488]],[\"comment/53\",[]],[\"name/54\",[53,37.488]],[\"comment/54\",[]],[\"name/55\",[54,37.488]],[\"comment/55\",[]],[\"name/56\",[55,37.488]],[\"comment/56\",[]],[\"name/57\",[56,37.488]],[\"comment/57\",[]],[\"name/58\",[57,37.488]],[\"comment/58\",[]],[\"name/59\",[58,37.488]],[\"comment/59\",[]],[\"name/60\",[59,54.834]],[\"comment/60\",[]],[\"name/61\",[31,37.488]],[\"comment/61\",[]],[\"name/62\",[28,33.631]],[\"comment/62\",[]],[\"name/63\",[33,37.488]],[\"comment/63\",[]],[\"name/64\",[60,54.834]],[\"comment/64\",[]],[\"name/65\",[36,37.488]],[\"comment/65\",[]],[\"name/66\",[47,37.488]],[\"comment/66\",[]],[\"name/67\",[48,36.376]],[\"comment/67\",[]],[\"name/68\",[49,37.488]],[\"comment/68\",[]],[\"name/69\",[32,34.465]],[\"comment/69\",[]],[\"name/70\",[34,37.488]],[\"comment/70\",[]],[\"name/71\",[35,37.488]],[\"comment/71\",[]],[\"name/72\",[37,37.488]],[\"comment/72\",[]],[\"name/73\",[38,34.465]],[\"comment/73\",[]],[\"name/74\",[39,34.465]],[\"comment/74\",[]],[\"name/75\",[40,37.488]],[\"comment/75\",[]],[\"name/76\",[41,37.488]],[\"comment/76\",[]],[\"name/77\",[42,37.488]],[\"comment/77\",[]],[\"name/78\",[43,37.488]],[\"comment/78\",[]],[\"name/79\",[44,37.488]],[\"comment/79\",[]],[\"name/80\",[45,37.488]],[\"comment/80\",[]],[\"name/81\",[46,37.488]],[\"comment/81\",[]],[\"name/82\",[50,37.488]],[\"comment/82\",[]],[\"name/83\",[51,34.465]],[\"comment/83\",[]],[\"name/84\",[52,37.488]],[\"comment/84\",[]],[\"name/85\",[53,37.488]],[\"comment/85\",[]],[\"name/86\",[54,37.488]],[\"comment/86\",[]],[\"name/87\",[55,37.488]],[\"comment/87\",[]],[\"name/88\",[56,37.488]],[\"comment/88\",[]],[\"name/89\",[57,37.488]],[\"comment/89\",[]],[\"name/90\",[58,37.488]],[\"comment/90\",[]],[\"name/91\",[61,54.834]],[\"comment/91\",[]],[\"name/92\",[31,37.488]],[\"comment/92\",[]],[\"name/93\",[28,33.631]],[\"comment/93\",[]],[\"name/94\",[33,37.488]],[\"comment/94\",[]],[\"name/95\",[36,37.488]],[\"comment/95\",[]],[\"name/96\",[62,54.834]],[\"comment/96\",[]],[\"name/97\",[63,54.834]],[\"comment/97\",[]],[\"name/98\",[64,54.834]],[\"comment/98\",[]],[\"name/99\",[65,54.834]],[\"comment/99\",[]],[\"name/100\",[47,37.488]],[\"comment/100\",[]],[\"name/101\",[48,36.376]],[\"comment/101\",[]],[\"name/102\",[49,37.488]],[\"comment/102\",[]],[\"name/103\",[32,34.465]],[\"comment/103\",[]],[\"name/104\",[34,37.488]],[\"comment/104\",[]],[\"name/105\",[35,37.488]],[\"comment/105\",[]],[\"name/106\",[37,37.488]],[\"comment/106\",[]],[\"name/107\",[38,34.465]],[\"comment/107\",[]],[\"name/108\",[39,34.465]],[\"comment/108\",[]],[\"name/109\",[40,37.488]],[\"comment/109\",[]],[\"name/110\",[41,37.488]],[\"comment/110\",[]],[\"name/111\",[42,37.488]],[\"comment/111\",[]],[\"name/112\",[43,37.488]],[\"comment/112\",[]],[\"name/113\",[44,37.488]],[\"comment/113\",[]],[\"name/114\",[45,37.488]],[\"comment/114\",[]],[\"name/115\",[46,37.488]],[\"comment/115\",[]],[\"name/116\",[50,37.488]],[\"comment/116\",[]],[\"name/117\",[51,34.465]],[\"comment/117\",[]],[\"name/118\",[52,37.488]],[\"comment/118\",[]],[\"name/119\",[53,37.488]],[\"comment/119\",[]],[\"name/120\",[54,37.488]],[\"comment/120\",[]],[\"name/121\",[55,37.488]],[\"comment/121\",[]],[\"name/122\",[56,37.488]],[\"comment/122\",[]],[\"name/123\",[57,37.488]],[\"comment/123\",[]],[\"name/124\",[58,37.488]],[\"comment/124\",[]],[\"name/125\",[66,54.834]],[\"comment/125\",[]],[\"name/126\",[31,37.488]],[\"comment/126\",[]],[\"name/127\",[28,33.631]],[\"comment/127\",[]],[\"name/128\",[33,37.488]],[\"comment/128\",[]],[\"name/129\",[36,37.488]],[\"comment/129\",[]],[\"name/130\",[47,37.488]],[\"comment/130\",[]],[\"name/131\",[48,36.376]],[\"comment/131\",[]],[\"name/132\",[49,37.488]],[\"comment/132\",[]],[\"name/133\",[32,34.465]],[\"comment/133\",[]],[\"name/134\",[34,37.488]],[\"comment/134\",[]],[\"name/135\",[35,37.488]],[\"comment/135\",[]],[\"name/136\",[37,37.488]],[\"comment/136\",[]],[\"name/137\",[38,34.465]],[\"comment/137\",[]],[\"name/138\",[39,34.465]],[\"comment/138\",[]],[\"name/139\",[40,37.488]],[\"comment/139\",[]],[\"name/140\",[41,37.488]],[\"comment/140\",[]],[\"name/141\",[42,37.488]],[\"comment/141\",[]],[\"name/142\",[43,37.488]],[\"comment/142\",[]],[\"name/143\",[44,37.488]],[\"comment/143\",[]],[\"name/144\",[45,37.488]],[\"comment/144\",[]],[\"name/145\",[46,37.488]],[\"comment/145\",[]],[\"name/146\",[50,37.488]],[\"comment/146\",[]],[\"name/147\",[51,34.465]],[\"comment/147\",[]],[\"name/148\",[52,37.488]],[\"comment/148\",[]],[\"name/149\",[53,37.488]],[\"comment/149\",[]],[\"name/150\",[54,37.488]],[\"comment/150\",[]],[\"name/151\",[55,37.488]],[\"comment/151\",[]],[\"name/152\",[56,37.488]],[\"comment/152\",[]],[\"name/153\",[57,37.488]],[\"comment/153\",[]],[\"name/154\",[58,37.488]],[\"comment/154\",[]],[\"name/155\",[67,54.834]],[\"comment/155\",[]],[\"name/156\",[31,37.488]],[\"comment/156\",[]],[\"name/157\",[28,33.631]],[\"comment/157\",[]],[\"name/158\",[33,37.488]],[\"comment/158\",[]],[\"name/159\",[35,37.488]],[\"comment/159\",[]],[\"name/160\",[68,46.361]],[\"comment/160\",[]],[\"name/161\",[47,37.488]],[\"comment/161\",[]],[\"name/162\",[48,36.376]],[\"comment/162\",[]],[\"name/163\",[49,37.488]],[\"comment/163\",[]],[\"name/164\",[32,34.465]],[\"comment/164\",[]],[\"name/165\",[34,37.488]],[\"comment/165\",[]],[\"name/166\",[36,37.488]],[\"comment/166\",[]],[\"name/167\",[37,37.488]],[\"comment/167\",[]],[\"name/168\",[38,34.465]],[\"comment/168\",[]],[\"name/169\",[39,34.465]],[\"comment/169\",[]],[\"name/170\",[40,37.488]],[\"comment/170\",[]],[\"name/171\",[41,37.488]],[\"comment/171\",[]],[\"name/172\",[42,37.488]],[\"comment/172\",[]],[\"name/173\",[43,37.488]],[\"comment/173\",[]],[\"name/174\",[44,37.488]],[\"comment/174\",[]],[\"name/175\",[45,37.488]],[\"comment/175\",[]],[\"name/176\",[46,37.488]],[\"comment/176\",[]],[\"name/177\",[50,37.488]],[\"comment/177\",[]],[\"name/178\",[51,34.465]],[\"comment/178\",[]],[\"name/179\",[52,37.488]],[\"comment/179\",[]],[\"name/180\",[53,37.488]],[\"comment/180\",[]],[\"name/181\",[54,37.488]],[\"comment/181\",[]],[\"name/182\",[55,37.488]],[\"comment/182\",[]],[\"name/183\",[56,37.488]],[\"comment/183\",[]],[\"name/184\",[57,37.488]],[\"comment/184\",[]],[\"name/185\",[58,37.488]],[\"comment/185\",[]],[\"name/186\",[69,54.834]],[\"comment/186\",[]],[\"name/187\",[31,37.488]],[\"comment/187\",[]],[\"name/188\",[28,33.631]],[\"comment/188\",[]],[\"name/189\",[33,37.488]],[\"comment/189\",[]],[\"name/190\",[70,49.726]],[\"comment/190\",[]],[\"name/191\",[36,37.488]],[\"comment/191\",[]],[\"name/192\",[71,49.726]],[\"comment/192\",[]],[\"name/193\",[72,49.726]],[\"comment/193\",[]],[\"name/194\",[73,49.726]],[\"comment/194\",[]],[\"name/195\",[74,49.726]],[\"comment/195\",[]],[\"name/196\",[68,46.361]],[\"comment/196\",[]],[\"name/197\",[47,37.488]],[\"comment/197\",[]],[\"name/198\",[48,36.376]],[\"comment/198\",[]],[\"name/199\",[49,37.488]],[\"comment/199\",[]],[\"name/200\",[32,34.465]],[\"comment/200\",[]],[\"name/201\",[34,37.488]],[\"comment/201\",[]],[\"name/202\",[35,37.488]],[\"comment/202\",[]],[\"name/203\",[37,37.488]],[\"comment/203\",[]],[\"name/204\",[38,34.465]],[\"comment/204\",[]],[\"name/205\",[39,34.465]],[\"comment/205\",[]],[\"name/206\",[40,37.488]],[\"comment/206\",[]],[\"name/207\",[41,37.488]],[\"comment/207\",[]],[\"name/208\",[42,37.488]],[\"comment/208\",[]],[\"name/209\",[43,37.488]],[\"comment/209\",[]],[\"name/210\",[44,37.488]],[\"comment/210\",[]],[\"name/211\",[45,37.488]],[\"comment/211\",[]],[\"name/212\",[46,37.488]],[\"comment/212\",[]],[\"name/213\",[50,37.488]],[\"comment/213\",[]],[\"name/214\",[51,34.465]],[\"comment/214\",[]],[\"name/215\",[52,37.488]],[\"comment/215\",[]],[\"name/216\",[53,37.488]],[\"comment/216\",[]],[\"name/217\",[54,37.488]],[\"comment/217\",[]],[\"name/218\",[55,37.488]],[\"comment/218\",[]],[\"name/219\",[56,37.488]],[\"comment/219\",[]],[\"name/220\",[57,37.488]],[\"comment/220\",[]],[\"name/221\",[58,37.488]],[\"comment/221\",[]],[\"name/222\",[75,54.834]],[\"comment/222\",[]],[\"name/223\",[31,37.488]],[\"comment/223\",[]],[\"name/224\",[28,33.631]],[\"comment/224\",[]],[\"name/225\",[33,37.488]],[\"comment/225\",[]],[\"name/226\",[76,54.834]],[\"comment/226\",[]],[\"name/227\",[77,54.834]],[\"comment/227\",[]],[\"name/228\",[47,37.488]],[\"comment/228\",[]],[\"name/229\",[48,36.376]],[\"comment/229\",[]],[\"name/230\",[78,54.834]],[\"comment/230\",[]],[\"name/231\",[79,54.834]],[\"comment/231\",[]],[\"name/232\",[80,54.834]],[\"comment/232\",[]],[\"name/233\",[49,37.488]],[\"comment/233\",[]],[\"name/234\",[81,54.834]],[\"comment/234\",[]],[\"name/235\",[82,54.834]],[\"comment/235\",[]],[\"name/236\",[83,54.834]],[\"comment/236\",[]],[\"name/237\",[84,54.834]],[\"comment/237\",[]],[\"name/238\",[85,54.834]],[\"comment/238\",[]],[\"name/239\",[32,34.465]],[\"comment/239\",[]],[\"name/240\",[34,37.488]],[\"comment/240\",[]],[\"name/241\",[35,37.488]],[\"comment/241\",[]],[\"name/242\",[36,37.488]],[\"comment/242\",[]],[\"name/243\",[37,37.488]],[\"comment/243\",[]],[\"name/244\",[38,34.465]],[\"comment/244\",[]],[\"name/245\",[39,34.465]],[\"comment/245\",[]],[\"name/246\",[40,37.488]],[\"comment/246\",[]],[\"name/247\",[41,37.488]],[\"comment/247\",[]],[\"name/248\",[42,37.488]],[\"comment/248\",[]],[\"name/249\",[43,37.488]],[\"comment/249\",[]],[\"name/250\",[44,37.488]],[\"comment/250\",[]],[\"name/251\",[45,37.488]],[\"comment/251\",[]],[\"name/252\",[46,37.488]],[\"comment/252\",[]],[\"name/253\",[50,37.488]],[\"comment/253\",[]],[\"name/254\",[51,34.465]],[\"comment/254\",[]],[\"name/255\",[52,37.488]],[\"comment/255\",[]],[\"name/256\",[53,37.488]],[\"comment/256\",[]],[\"name/257\",[54,37.488]],[\"comment/257\",[]],[\"name/258\",[55,37.488]],[\"comment/258\",[]],[\"name/259\",[56,37.488]],[\"comment/259\",[]],[\"name/260\",[57,37.488]],[\"comment/260\",[]],[\"name/261\",[58,37.488]],[\"comment/261\",[]],[\"name/262\",[86,54.834]],[\"comment/262\",[]],[\"name/263\",[31,37.488]],[\"comment/263\",[]],[\"name/264\",[28,33.631]],[\"comment/264\",[]],[\"name/265\",[33,37.488]],[\"comment/265\",[]],[\"name/266\",[87,54.834]],[\"comment/266\",[]],[\"name/267\",[70,49.726]],[\"comment/267\",[]],[\"name/268\",[36,37.488]],[\"comment/268\",[]],[\"name/269\",[71,49.726]],[\"comment/269\",[]],[\"name/270\",[72,49.726]],[\"comment/270\",[]],[\"name/271\",[73,49.726]],[\"comment/271\",[]],[\"name/272\",[74,49.726]],[\"comment/272\",[]],[\"name/273\",[68,46.361]],[\"comment/273\",[]],[\"name/274\",[47,37.488]],[\"comment/274\",[]],[\"name/275\",[48,36.376]],[\"comment/275\",[]],[\"name/276\",[88,54.834]],[\"comment/276\",[]],[\"name/277\",[49,37.488]],[\"comment/277\",[]],[\"name/278\",[89,54.834]],[\"comment/278\",[]],[\"name/279\",[90,54.834]],[\"comment/279\",[]],[\"name/280\",[91,54.834]],[\"comment/280\",[]],[\"name/281\",[32,34.465]],[\"comment/281\",[]],[\"name/282\",[34,37.488]],[\"comment/282\",[]],[\"name/283\",[35,37.488]],[\"comment/283\",[]],[\"name/284\",[37,37.488]],[\"comment/284\",[]],[\"name/285\",[38,34.465]],[\"comment/285\",[]],[\"name/286\",[39,34.465]],[\"comment/286\",[]],[\"name/287\",[40,37.488]],[\"comment/287\",[]],[\"name/288\",[41,37.488]],[\"comment/288\",[]],[\"name/289\",[42,37.488]],[\"comment/289\",[]],[\"name/290\",[43,37.488]],[\"comment/290\",[]],[\"name/291\",[44,37.488]],[\"comment/291\",[]],[\"name/292\",[45,37.488]],[\"comment/292\",[]],[\"name/293\",[46,37.488]],[\"comment/293\",[]],[\"name/294\",[50,37.488]],[\"comment/294\",[]],[\"name/295\",[51,34.465]],[\"comment/295\",[]],[\"name/296\",[52,37.488]],[\"comment/296\",[]],[\"name/297\",[53,37.488]],[\"comment/297\",[]],[\"name/298\",[54,37.488]],[\"comment/298\",[]],[\"name/299\",[55,37.488]],[\"comment/299\",[]],[\"name/300\",[56,37.488]],[\"comment/300\",[]],[\"name/301\",[57,37.488]],[\"comment/301\",[]],[\"name/302\",[58,37.488]],[\"comment/302\",[]],[\"name/303\",[92,46.361]],[\"comment/303\",[]],[\"name/304\",[28,33.631]],[\"comment/304\",[]],[\"name/305\",[32,34.465]],[\"comment/305\",[]],[\"name/306\",[93,54.834]],[\"comment/306\",[]],[\"name/307\",[94,54.834]],[\"comment/307\",[]],[\"name/308\",[92,46.361]],[\"comment/308\",[]],[\"name/309\",[38,34.465]],[\"comment/309\",[]],[\"name/310\",[39,34.465]],[\"comment/310\",[]],[\"name/311\",[48,36.376]],[\"comment/311\",[]],[\"name/312\",[51,34.465]],[\"comment/312\",[]],[\"name/313\",[95,46.361]],[\"comment/313\",[]],[\"name/314\",[96,46.361]],[\"comment/314\",[]],[\"name/315\",[97,46.361]],[\"comment/315\",[]],[\"name/316\",[98,49.726]],[\"comment/316\",[]],[\"name/317\",[28,33.631]],[\"comment/317\",[]],[\"name/318\",[32,34.465]],[\"comment/318\",[]],[\"name/319\",[99,54.834]],[\"comment/319\",[]],[\"name/320\",[92,46.361]],[\"comment/320\",[]],[\"name/321\",[100,54.834]],[\"comment/321\",[]],[\"name/322\",[98,49.726]],[\"comment/322\",[]],[\"name/323\",[101,54.834]],[\"comment/323\",[]],[\"name/324\",[102,54.834]],[\"comment/324\",[]],[\"name/325\",[38,34.465]],[\"comment/325\",[]],[\"name/326\",[39,34.465]],[\"comment/326\",[]],[\"name/327\",[103,54.834]],[\"comment/327\",[]],[\"name/328\",[104,54.834]],[\"comment/328\",[]],[\"name/329\",[51,34.465]],[\"comment/329\",[]],[\"name/330\",[95,46.361]],[\"comment/330\",[]],[\"name/331\",[96,46.361]],[\"comment/331\",[]],[\"name/332\",[97,46.361]],[\"comment/332\",[]],[\"name/333\",[105,54.834]],[\"comment/333\",[]],[\"name/334\",[106,49.726]],[\"comment/334\",[]],[\"name/335\",[28,33.631]],[\"comment/335\",[]],[\"name/336\",[32,34.465]],[\"comment/336\",[]],[\"name/337\",[107,54.834]],[\"comment/337\",[]],[\"name/338\",[106,49.726]],[\"comment/338\",[]],[\"name/339\",[108,54.834]],[\"comment/339\",[]],[\"name/340\",[109,54.834]],[\"comment/340\",[]],[\"name/341\",[110,54.834]],[\"comment/341\",[]],[\"name/342\",[111,54.834]],[\"comment/342\",[]],[\"name/343\",[112,54.834]],[\"comment/343\",[]],[\"name/344\",[113,54.834]],[\"comment/344\",[]],[\"name/345\",[114,54.834]],[\"comment/345\",[]],[\"name/346\",[115,54.834]],[\"comment/346\",[]],[\"name/347\",[116,54.834]],[\"comment/347\",[]],[\"name/348\",[117,54.834]],[\"comment/348\",[]],[\"name/349\",[118,54.834]],[\"comment/349\",[]],[\"name/350\",[119,54.834]],[\"comment/350\",[]],[\"name/351\",[120,54.834]],[\"comment/351\",[]],[\"name/352\",[121,54.834]],[\"comment/352\",[]],[\"name/353\",[38,34.465]],[\"comment/353\",[]],[\"name/354\",[39,34.465]],[\"comment/354\",[]],[\"name/355\",[96,46.361]],[\"comment/355\",[]],[\"name/356\",[97,46.361]],[\"comment/356\",[]],[\"name/357\",[95,46.361]],[\"comment/357\",[]],[\"name/358\",[51,34.465]],[\"comment/358\",[]],[\"name/359\",[122,54.834]],[\"comment/359\",[]]],\"invertedIndex\":[[\"_attribute\",{\"_index\":33,\"name\":{\"34\":{},\"63\":{},\"94\":{},\"128\":{},\"158\":{},\"189\":{},\"225\":{},\"265\":{}},\"comment\":{}}],[\"_control\",{\"_index\":87,\"name\":{\"266\":{}},\"comment\":{}}],[\"_customfilters\",{\"_index\":76,\"name\":{\"226\":{}},\"comment\":{}}],[\"_executioncontext\",{\"_index\":14,\"name\":{\"14\":{}},\"comment\":{}}],[\"_formcontext\",{\"_index\":13,\"name\":{\"13\":{}},\"comment\":{}}],[\"_gridcontrol\",{\"_index\":107,\"name\":{\"337\":{}},\"comment\":{}}],[\"_section\",{\"_index\":93,\"name\":{\"306\":{}},\"comment\":{}}],[\"_tab\",{\"_index\":99,\"name\":{\"319\":{}},\"comment\":{}}],[\"addformnotification\",{\"_index\":22,\"name\":{\"22\":{}},\"comment\":{}}],[\"addglobalnotification\",{\"_index\":4,\"name\":{\"4\":{}},\"comment\":{}}],[\"addnotification\",{\"_index\":57,\"name\":{\"58\":{},\"89\":{},\"123\":{},\"153\":{},\"184\":{},\"220\":{},\"260\":{},\"301\":{}},\"comment\":{}}],[\"addonchange\",{\"_index\":56,\"name\":{\"57\":{},\"88\":{},\"122\":{},\"152\":{},\"183\":{},\"219\":{},\"259\":{},\"300\":{}},\"comment\":{}}],[\"addonchangeeventhandler\",{\"_index\":27,\"name\":{\"27\":{}},\"comment\":{}}],[\"addonload\",{\"_index\":109,\"name\":{\"340\":{}},\"comment\":{}}],[\"addonloadeventhandler\",{\"_index\":26,\"name\":{\"26\":{}},\"comment\":{}}],[\"addonpostsaveeventhandler\",{\"_index\":25,\"name\":{\"25\":{}},\"comment\":{}}],[\"addonsaveeventhandler\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"addoption\",{\"_index\":89,\"name\":{\"278\":{}},\"comment\":{}}],[\"addprefiltertolookup\",{\"_index\":83,\"name\":{\"236\":{}},\"comment\":{}}],[\"addprefiltertolookupadvanced\",{\"_index\":84,\"name\":{\"237\":{}},\"comment\":{}}],[\"addtabstatechange\",{\"_index\":101,\"name\":{\"323\":{}},\"comment\":{}}],[\"allfields\",{\"_index\":31,\"name\":{\"31\":{},\"61\":{},\"92\":{},\"126\":{},\"156\":{},\"187\":{},\"223\":{},\"263\":{}},\"comment\":{}}],[\"attribute\",{\"_index\":47,\"name\":{\"48\":{},\"66\":{},\"100\":{},\"130\":{},\"161\":{},\"197\":{},\"228\":{},\"274\":{}},\"comment\":{}}],[\"booleanfield\",{\"_index\":67,\"name\":{\"155\":{}},\"comment\":{}}],[\"checkrequestparametertype\",{\"_index\":7,\"name\":{\"7\":{}},\"comment\":{}}],[\"class\",{\"_index\":29,\"name\":{\"29\":{}},\"comment\":{}}],[\"clearoptions\",{\"_index\":91,\"name\":{\"280\":{}},\"comment\":{}}],[\"clearprefilterfromlookup\",{\"_index\":85,\"name\":{\"238\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":28,\"name\":{\"28\":{},\"32\":{},\"62\":{},\"93\":{},\"127\":{},\"157\":{},\"188\":{},\"224\":{},\"264\":{},\"304\":{},\"317\":{},\"335\":{}},\"comment\":{}}],[\"control\",{\"_index\":88,\"name\":{\"276\":{}},\"comment\":{}}],[\"controls\",{\"_index\":48,\"name\":{\"49\":{},\"67\":{},\"101\":{},\"131\":{},\"162\":{},\"198\":{},\"229\":{},\"275\":{},\"311\":{}},\"comment\":{}}],[\"datefield\",{\"_index\":66,\"name\":{\"125\":{}},\"comment\":{}}],[\"entityreference\",{\"_index\":17,\"name\":{\"17\":{}},\"comment\":{}}],[\"entitytype\",{\"_index\":79,\"name\":{\"231\":{}},\"comment\":{}}],[\"executeaction\",{\"_index\":8,\"name\":{\"8\":{}},\"comment\":{}}],[\"executefunction\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"executioncontext\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"field\",{\"_index\":30,\"name\":{\"30\":{}},\"comment\":{}}],[\"fireonchange\",{\"_index\":55,\"name\":{\"56\":{},\"87\":{},\"121\":{},\"151\":{},\"182\":{},\"218\":{},\"258\":{},\"299\":{}},\"comment\":{}}],[\"form\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"formattedvalue\",{\"_index\":80,\"name\":{\"232\":{}},\"comment\":{}}],[\"formcontext\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"getattributetype\",{\"_index\":35,\"name\":{\"36\":{},\"71\":{},\"105\":{},\"135\":{},\"159\":{},\"202\":{},\"241\":{},\"283\":{}},\"comment\":{}}],[\"getcontexttype\",{\"_index\":110,\"name\":{\"341\":{}},\"comment\":{}}],[\"getcontroltype\",{\"_index\":121,\"name\":{\"352\":{}},\"comment\":{}}],[\"getdisplaystate\",{\"_index\":102,\"name\":{\"324\":{}},\"comment\":{}}],[\"getentityname\",{\"_index\":111,\"name\":{\"342\":{}},\"comment\":{}}],[\"getenvironmentvariablevalue\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"getfetchxml\",{\"_index\":112,\"name\":{\"343\":{}},\"comment\":{}}],[\"getformat\",{\"_index\":36,\"name\":{\"37\":{},\"65\":{},\"95\":{},\"129\":{},\"166\":{},\"191\":{},\"242\":{},\"268\":{}},\"comment\":{}}],[\"getfunctionname\",{\"_index\":3,\"name\":{\"3\":{}},\"comment\":{}}],[\"getgrid\",{\"_index\":113,\"name\":{\"344\":{}},\"comment\":{}}],[\"getinitialvalue\",{\"_index\":68,\"name\":{\"160\":{},\"196\":{},\"273\":{}},\"comment\":{}}],[\"getisdirty\",{\"_index\":37,\"name\":{\"38\":{},\"72\":{},\"106\":{},\"136\":{},\"167\":{},\"203\":{},\"243\":{},\"284\":{}},\"comment\":{}}],[\"getispartylist\",{\"_index\":77,\"name\":{\"227\":{}},\"comment\":{}}],[\"getlabel\",{\"_index\":96,\"name\":{\"314\":{},\"331\":{},\"355\":{}},\"comment\":{}}],[\"getmax\",{\"_index\":62,\"name\":{\"96\":{}},\"comment\":{}}],[\"getmaxlength\",{\"_index\":60,\"name\":{\"64\":{}},\"comment\":{}}],[\"getmin\",{\"_index\":63,\"name\":{\"97\":{}},\"comment\":{}}],[\"getname\",{\"_index\":38,\"name\":{\"39\":{},\"73\":{},\"107\":{},\"137\":{},\"168\":{},\"204\":{},\"244\":{},\"285\":{},\"309\":{},\"325\":{},\"353\":{}},\"comment\":{}}],[\"getoption\",{\"_index\":71,\"name\":{\"192\":{},\"269\":{}},\"comment\":{}}],[\"getoptions\",{\"_index\":72,\"name\":{\"193\":{},\"270\":{}},\"comment\":{}}],[\"getparent\",{\"_index\":39,\"name\":{\"40\":{},\"74\":{},\"108\":{},\"138\":{},\"169\":{},\"205\":{},\"245\":{},\"286\":{},\"310\":{},\"326\":{},\"354\":{}},\"comment\":{}}],[\"getprecision\",{\"_index\":64,\"name\":{\"98\":{}},\"comment\":{}}],[\"getrelationship\",{\"_index\":114,\"name\":{\"345\":{}},\"comment\":{}}],[\"getrequiredlevel\",{\"_index\":40,\"name\":{\"41\":{},\"75\":{},\"109\":{},\"139\":{},\"170\":{},\"206\":{},\"246\":{},\"287\":{}},\"comment\":{}}],[\"getselectedoption\",{\"_index\":73,\"name\":{\"194\":{},\"271\":{}},\"comment\":{}}],[\"getsubmitmode\",{\"_index\":41,\"name\":{\"42\":{},\"76\":{},\"110\":{},\"140\":{},\"171\":{},\"207\":{},\"247\":{},\"288\":{}},\"comment\":{}}],[\"gettext\",{\"_index\":74,\"name\":{\"195\":{},\"272\":{}},\"comment\":{}}],[\"geturl\",{\"_index\":115,\"name\":{\"346\":{}},\"comment\":{}}],[\"getuserprivilege\",{\"_index\":42,\"name\":{\"43\":{},\"77\":{},\"111\":{},\"141\":{},\"172\":{},\"208\":{},\"248\":{},\"289\":{}},\"comment\":{}}],[\"getvalue\",{\"_index\":45,\"name\":{\"46\":{},\"80\":{},\"114\":{},\"144\":{},\"175\":{},\"211\":{},\"251\":{},\"292\":{}},\"comment\":{}}],[\"getviewselector\",{\"_index\":116,\"name\":{\"347\":{}},\"comment\":{}}],[\"getvisible\",{\"_index\":95,\"name\":{\"313\":{},\"330\":{},\"357\":{}},\"comment\":{}}],[\"grid\",{\"_index\":108,\"name\":{\"339\":{}},\"comment\":{}}],[\"gridcontrol\",{\"_index\":106,\"name\":{\"334\":{},\"338\":{}},\"comment\":{}}],[\"id\",{\"_index\":78,\"name\":{\"230\":{}},\"comment\":{}}],[\"iscreate\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"isnotcreate\",{\"_index\":20,\"name\":{\"20\":{}},\"comment\":{}}],[\"isnotupdate\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"isupdate\",{\"_index\":19,\"name\":{\"19\":{}},\"comment\":{}}],[\"lookupfield\",{\"_index\":75,\"name\":{\"222\":{}},\"comment\":{}}],[\"multiselectoptionsetfield\",{\"_index\":69,\"name\":{\"186\":{}},\"comment\":{}}],[\"name\",{\"_index\":32,\"name\":{\"33\":{},\"69\":{},\"103\":{},\"133\":{},\"164\":{},\"200\":{},\"239\":{},\"281\":{},\"305\":{},\"318\":{},\"336\":{}},\"comment\":{}}],[\"node_modules/@types/xrm\",{\"_index\":122,\"name\":{\"359\":{}},\"comment\":{}}],[\"normalizeguid\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"numberfield\",{\"_index\":61,\"name\":{\"91\":{}},\"comment\":{}}],[\"openalertdialog\",{\"_index\":11,\"name\":{\"11\":{}},\"comment\":{}}],[\"openrelatedgrid\",{\"_index\":117,\"name\":{\"348\":{}},\"comment\":{}}],[\"option\",{\"_index\":70,\"name\":{\"190\":{},\"267\":{}},\"comment\":{}}],[\"optionsetfield\",{\"_index\":86,\"name\":{\"262\":{}},\"comment\":{}}],[\"parenttab\",{\"_index\":94,\"name\":{\"307\":{}},\"comment\":{}}],[\"refresh\",{\"_index\":118,\"name\":{\"349\":{}},\"comment\":{}}],[\"refreshribbon\",{\"_index\":119,\"name\":{\"350\":{}},\"comment\":{}}],[\"removeformnotification\",{\"_index\":23,\"name\":{\"23\":{}},\"comment\":{}}],[\"removeglobalnotification\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"removenotification\",{\"_index\":58,\"name\":{\"59\":{},\"90\":{},\"124\":{},\"154\":{},\"185\":{},\"221\":{},\"261\":{},\"302\":{}},\"comment\":{}}],[\"removeonchange\",{\"_index\":43,\"name\":{\"44\":{},\"78\":{},\"112\":{},\"142\":{},\"173\":{},\"209\":{},\"249\":{},\"290\":{}},\"comment\":{}}],[\"removeonload\",{\"_index\":120,\"name\":{\"351\":{}},\"comment\":{}}],[\"removeoption\",{\"_index\":90,\"name\":{\"279\":{}},\"comment\":{}}],[\"removetabstatechange\",{\"_index\":103,\"name\":{\"327\":{}},\"comment\":{}}],[\"retrieve\",{\"_index\":82,\"name\":{\"235\":{}},\"comment\":{}}],[\"section\",{\"_index\":92,\"name\":{\"303\":{},\"308\":{},\"320\":{}},\"comment\":{}}],[\"sections\",{\"_index\":100,\"name\":{\"321\":{}},\"comment\":{}}],[\"setdisabled\",{\"_index\":52,\"name\":{\"53\":{},\"84\":{},\"118\":{},\"148\":{},\"179\":{},\"215\":{},\"255\":{},\"296\":{}},\"comment\":{}}],[\"setdisplaystate\",{\"_index\":104,\"name\":{\"328\":{}},\"comment\":{}}],[\"setfocus\",{\"_index\":105,\"name\":{\"333\":{}},\"comment\":{}}],[\"setisvalid\",{\"_index\":46,\"name\":{\"47\":{},\"81\":{},\"115\":{},\"145\":{},\"176\":{},\"212\":{},\"252\":{},\"293\":{}},\"comment\":{}}],[\"setlabel\",{\"_index\":97,\"name\":{\"315\":{},\"332\":{},\"356\":{}},\"comment\":{}}],[\"setlookupvalue\",{\"_index\":81,\"name\":{\"234\":{}},\"comment\":{}}],[\"setnotification\",{\"_index\":50,\"name\":{\"51\":{},\"82\":{},\"116\":{},\"146\":{},\"177\":{},\"213\":{},\"253\":{},\"294\":{}},\"comment\":{}}],[\"setprecision\",{\"_index\":65,\"name\":{\"99\":{}},\"comment\":{}}],[\"setrequired\",{\"_index\":54,\"name\":{\"55\":{},\"86\":{},\"120\":{},\"150\":{},\"181\":{},\"217\":{},\"257\":{},\"298\":{}},\"comment\":{}}],[\"setrequiredlevel\",{\"_index\":53,\"name\":{\"54\":{},\"85\":{},\"119\":{},\"149\":{},\"180\":{},\"216\":{},\"256\":{},\"297\":{}},\"comment\":{}}],[\"setsubmitmode\",{\"_index\":44,\"name\":{\"45\":{},\"79\":{},\"113\":{},\"143\":{},\"174\":{},\"210\":{},\"250\":{},\"291\":{}},\"comment\":{}}],[\"setvalue\",{\"_index\":34,\"name\":{\"35\":{},\"70\":{},\"104\":{},\"134\":{},\"165\":{},\"201\":{},\"240\":{},\"282\":{}},\"comment\":{}}],[\"setvisible\",{\"_index\":51,\"name\":{\"52\":{},\"83\":{},\"117\":{},\"147\":{},\"178\":{},\"214\":{},\"254\":{},\"295\":{},\"312\":{},\"329\":{},\"358\":{}},\"comment\":{}}],[\"src/xrmex\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"tab\",{\"_index\":98,\"name\":{\"316\":{},\"322\":{}},\"comment\":{}}],[\"textfield\",{\"_index\":59,\"name\":{\"60\":{}},\"comment\":{}}],[\"throwerror\",{\"_index\":2,\"name\":{\"2\":{}},\"comment\":{}}],[\"value\",{\"_index\":49,\"name\":{\"50\":{},\"68\":{},\"102\":{},\"132\":{},\"163\":{},\"199\":{},\"233\":{},\"277\":{}},\"comment\":{}}],[\"xrmex\",{\"_index\":1,\"name\":{\"1\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/classes/src_XrmEx.XrmEx.BooleanField.html b/docs/classes/src_XrmEx.XrmEx.Class.BooleanField.html similarity index 76% rename from docs/classes/src_XrmEx.XrmEx.BooleanField.html rename to docs/classes/src_XrmEx.XrmEx.Class.BooleanField.html index 494ec1d..cfe4095 100644 --- a/docs/classes/src_XrmEx.XrmEx.BooleanField.html +++ b/docs/classes/src_XrmEx.XrmEx.Class.BooleanField.html @@ -15,7 +15,8 @@
  • xrm-ex
  • src/XrmEx
  • XrmEx
  • -
  • BooleanField
  • +
  • Class
  • +
  • BooleanField
  • Class BooleanField

    Interface for a Boolean attribute.

    @@ -26,7 +27,7 @@

    See

    Hierarchy

    @@ -34,7 +35,7 @@

    Implements

    +
  • Defined in src/XrmEx.ts:944
  • @@ -42,82 +43,82 @@

    Constructors

    +
  • Defined in src/XrmEx.ts:949
  • Properties

    Name: string
    +
  • Defined in src/XrmEx.ts:597
  • +
  • Defined in src/XrmEx.ts:948
  • -
    allFields: Field[] = []
    +
  • Defined in src/XrmEx.ts:595
  • Accessors

    @@ -128,7 +129,7 @@
    +
  • Defined in src/XrmEx.ts:958
  • set Value(value): void
  • @@ -152,7 +153,7 @@
    value: Returns void
  • +
  • Defined in src/XrmEx.ts:969
  • +
  • Defined in src/XrmEx.ts:963
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -188,15 +189,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns BooleanField

    +

    Returns BooleanField

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns BooleanField

    +

    Returns BooleanField

    +
  • Defined in src/XrmEx.ts:775
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:952
  • +
  • Defined in src/XrmEx.ts:616
  • +
  • Defined in src/XrmEx.ts:955
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -404,14 +405,14 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns BooleanField

    true if it succeeds, false if it fails.

    +

    Returns BooleanField

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -448,11 +449,11 @@
      disabled:

      true to disable, false to enable.

    -

    Returns BooleanField

    +

    Returns BooleanField

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets a control-local notification message.

      @@ -501,19 +502,19 @@
      uniqueId:

      Unique identifier.

    -

    Returns BooleanField

    true if it succeeds, false if it fails.

    +

    Returns BooleanField

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
    • - +
    • Sets the required level.

      @@ -525,15 +526,15 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns BooleanField

    +

    Returns BooleanField

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns BooleanField

    +

    Returns BooleanField

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -615,11 +616,11 @@
      visible:

      true to show, false to hide.

    -

    Returns BooleanField

    +

    Returns BooleanField

    +
  • Defined in src/XrmEx.ts:701
  • +
  • Defined in src/XrmEx.ts:937
  • set Value(value): void
  • @@ -151,7 +152,7 @@
    value: Returns void
  • +
  • Defined in src/XrmEx.ts:940
  • +
  • Defined in src/XrmEx.ts:934
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -187,15 +188,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns DateField

    +

    Returns DateField

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns DateField

    +

    Returns DateField

    +
  • Defined in src/XrmEx.ts:775
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:926
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -383,14 +384,14 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns DateField

    true if it succeeds, false if it fails.

    +

    Returns DateField

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -427,11 +428,11 @@
      disabled:

      true to disable, false to enable.

    -

    Returns DateField

    +

    Returns DateField

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets a control-local notification message.

      @@ -480,19 +481,19 @@
      uniqueId:

      Unique identifier.

    -

    Returns DateField

    true if it succeeds, false if it fails.

    +

    Returns DateField

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
    • - +
    • Sets the required level.

      @@ -504,15 +505,15 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns DateField

    +

    Returns DateField

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns DateField

    +

    Returns DateField

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -594,11 +595,11 @@
      visible:

      true to show, false to hide.

    -

    Returns DateField

    +

    Returns DateField

    +
  • Defined in src/XrmEx.ts:701
  • +
  • Defined in src/XrmEx.ts:666
  • set Value(value): void
  • @@ -148,7 +149,7 @@

    Parameters

    value: any
  • Returns void

    +
  • Defined in src/XrmEx.ts:670
  • +
  • Defined in src/XrmEx.ts:658
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -183,14 +184,14 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns Field

    +

    Returns Field

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns Field

    +

    Returns Field

    +
  • Defined in src/XrmEx.ts:775
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:616
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -383,13 +384,13 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns Field

    true if it succeeds, false if it fails.

    +

    Returns Field

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -425,10 +426,10 @@
      disabled:

      true to disable, false to enable.

    -

    Returns Field

    +

    Returns Field

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets a control-local notification message.

      @@ -476,18 +477,18 @@
      uniqueId:

      Unique identifier.

    -

    Returns Field

    true if it succeeds, false if it fails.

    +

    Returns Field

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
    • - +
    • Sets the required level.

      @@ -499,14 +500,14 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns Field

    +

    Returns Field

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns Field

    +

    Returns Field

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -585,10 +586,10 @@
      visible:

      true to show, false to hide.

    -

    Returns Field

    +

    Returns Field

    +
  • Defined in src/XrmEx.ts:701
  • +
  • Defined in src/XrmEx.ts:1464
    • @@ -153,7 +154,7 @@

      Returns

    +
  • Defined in src/XrmEx.ts:1467
  • +
  • Defined in src/XrmEx.ts:1500
  • +
  • Defined in src/XrmEx.ts:1470
  • +
  • Defined in src/XrmEx.ts:1473
  • +
  • Defined in src/XrmEx.ts:1476
  • +
  • Defined in src/XrmEx.ts:1509
  • +
  • Defined in src/XrmEx.ts:1503
  • +
  • Defined in src/XrmEx.ts:1506
  • +
  • Defined in src/XrmEx.ts:1479
  • +
  • Defined in src/XrmEx.ts:1482
  • +
  • Defined in src/XrmEx.ts:1485
  • +
  • Defined in src/XrmEx.ts:1515
  • +
  • Defined in src/XrmEx.ts:1488
  • +
  • Defined in src/XrmEx.ts:1491
  • +
  • Defined in src/XrmEx.ts:1494
  • +
  • Defined in src/XrmEx.ts:1497
  • +
  • Defined in src/XrmEx.ts:1512
  • +
  • Defined in src/XrmEx.ts:1518
  • +
  • Defined in src/XrmEx.ts:1063
  • set Value(value): void
  • +
  • Defined in src/XrmEx.ts:1066
  • +
  • Defined in src/XrmEx.ts:1044
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -235,15 +236,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:775
    • - +
    • Adds an additional custom filter to the lookup, with the "AND" filter operator.

      @@ -278,7 +279,7 @@
      Optional

      (Optional) The logical name of the entity.

    -

    Returns LookupField

    +

    Returns LookupField

    Remarks

    If entityLogicalName is not specified, the filter will be applied to all entities valid for the Lookup control.

    @@ -287,7 +288,7 @@

    Example

    Example
     
    +
  • Defined in src/XrmEx.ts:1145
  • +
  • Defined in src/XrmEx.ts:1183
  • +
  • Defined in src/XrmEx.ts:1220
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:616
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:1036
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -533,14 +534,14 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns LookupField

    true if it succeeds, false if it fails.

    +

    Returns LookupField

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
  • +
  • Defined in src/XrmEx.ts:1120
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -614,11 +615,11 @@
      disabled:

      true to disable, false to enable.

    -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets the value of a lookup

      @@ -677,14 +678,14 @@
      append:

      if true, adds value to the array instead of replacing it

    -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:1076
    • - +
    • Sets a control-local notification message.

      @@ -701,19 +702,19 @@
      uniqueId:

      Unique identifier.

    -

    Returns LookupField

    true if it succeeds, false if it fails.

    +

    Returns LookupField

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
    • - +
    • Sets the required level.

      @@ -725,15 +726,15 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -815,11 +816,11 @@
      visible:

      true to show, false to hide.

    -

    Returns LookupField

    +

    Returns LookupField

    +
  • Defined in src/XrmEx.ts:701
  • -

    Returns MultiSelectOptionSetField<Options>

    Properties

    Name: string
    +
  • Defined in src/XrmEx.ts:597
  • Option: Options
    +
  • Defined in src/XrmEx.ts:978
  • +
  • Defined in src/XrmEx.ts:977
  • -
    allFields: Field[] = []
    +
  • Defined in src/XrmEx.ts:595
  • Accessors

    @@ -150,7 +151,7 @@
    +
  • Defined in src/XrmEx.ts:1005
    • @@ -163,7 +164,7 @@

      Returns number

    +
  • Defined in src/XrmEx.ts:1013
  • set Value(value): void
  • @@ -174,7 +175,7 @@
    value: Returns void
  • +
  • Defined in src/XrmEx.ts:1016
  • +
  • Defined in src/XrmEx.ts:1010
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -210,15 +211,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns MultiSelectOptionSetField<Options>

    +

    Returns MultiSelectOptionSetField<Options>

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns MultiSelectOptionSetField<Options>

    +

    Returns MultiSelectOptionSetField<Options>

    +
  • Defined in src/XrmEx.ts:775
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:983
  • +
  • Defined in src/XrmEx.ts:1002
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:986
  • +
  • Defined in src/XrmEx.ts:993
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:996
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:999
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
  • -

    Returns MultiSelectOptionSetField<Options>

    true if it succeeds, false if it fails.

    +

    Returns MultiSelectOptionSetField<Options>

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
  • -

    Returns MultiSelectOptionSetField<Options>

    +

    Returns MultiSelectOptionSetField<Options>

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
  • -

    Returns MultiSelectOptionSetField<Options>

    true if it succeeds, false if it fails.

    +

    Returns MultiSelectOptionSetField<Options>

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
  • -

    Returns MultiSelectOptionSetField<Options>

    +

    Returns MultiSelectOptionSetField<Options>

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns MultiSelectOptionSetField<Options>

    +

    Returns MultiSelectOptionSetField<Options>

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
  • -

    Returns MultiSelectOptionSetField<Options>

    +

    Returns MultiSelectOptionSetField<Options>

    +
  • Defined in src/XrmEx.ts:701
  • +
  • Defined in src/XrmEx.ts:911
  • set Value(value): void
  • @@ -155,7 +156,7 @@
    value: Returns void
  • +
  • Defined in src/XrmEx.ts:914
  • +
  • Defined in src/XrmEx.ts:908
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -191,15 +192,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns NumberField

    +

    Returns NumberField

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns NumberField

    +

    Returns NumberField

    +
  • Defined in src/XrmEx.ts:775
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:888
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:891
  • +
  • Defined in src/XrmEx.ts:894
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:897
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -426,14 +427,14 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns NumberField

    true if it succeeds, false if it fails.

    +

    Returns NumberField

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -470,11 +471,11 @@
      disabled:

      true to disable, false to enable.

    -

    Returns NumberField

    +

    Returns NumberField

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets a control-local notification message.

      @@ -523,15 +524,15 @@
      uniqueId:

      Unique identifier.

    -

    Returns NumberField

    true if it succeeds, false if it fails.

    +

    Returns NumberField

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
  • +
  • Defined in src/XrmEx.ts:900
    • - +
    • Sets the required level.

      @@ -569,15 +570,15 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns NumberField

    +

    Returns NumberField

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns NumberField

    +

    Returns NumberField

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -659,11 +660,11 @@
      visible:

      true to show, false to hide.

    -

    Returns NumberField

    +

    Returns NumberField

    +
  • Defined in src/XrmEx.ts:701
  • -

    Returns OptionsetField<Options>

    Properties

    Name: string
    +
  • Defined in src/XrmEx.ts:597
  • Option: Options
    +
  • Defined in src/XrmEx.ts:1246
  • _attribute: Xrm.Attributes.OptionSetAttribute<number>
    +
  • Defined in src/XrmEx.ts:1244
  • +
  • Defined in src/XrmEx.ts:1245
  • -
    allFields: Field[] = []
    +
  • Defined in src/XrmEx.ts:595
  • Accessors

    @@ -160,7 +161,7 @@
    +
  • Defined in src/XrmEx.ts:1273
    • @@ -173,7 +174,7 @@

      Returns number

    +
  • Defined in src/XrmEx.ts:1286
  • set Value(value): void
  • @@ -184,7 +185,7 @@
    value: Returns void
  • +
  • Defined in src/XrmEx.ts:1289
  • +
  • Defined in src/XrmEx.ts:1281
  • +
  • Defined in src/XrmEx.ts:1278
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -228,15 +229,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    +
  • Defined in src/XrmEx.ts:775
    • - +
    • Adds an option.

      @@ -274,37 +275,37 @@
      Optional

      (Optional) zero-based index of the option.

    -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    Remarks

    This method does not check that the values within the options you add are valid. If index is not provided, the new option will be added to the end of the list.

    +
  • Defined in src/XrmEx.ts:1302
  • +
  • Defined in src/XrmEx.ts:1346
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:1251
  • +
  • Defined in src/XrmEx.ts:1270
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:1254
  • +
  • Defined in src/XrmEx.ts:1261
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:1264
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:1267
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -539,14 +540,14 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns OptionsetField<Options>

    true if it succeeds, false if it fails.

    +

    Returns OptionsetField<Options>

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
  • +
  • Defined in src/XrmEx.ts:1325
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -599,11 +600,11 @@
      disabled:

      true to disable, false to enable.

    -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets a control-local notification message.

      @@ -652,19 +653,19 @@
      uniqueId:

      Unique identifier.

    -

    Returns OptionsetField<Options>

    true if it succeeds, false if it fails.

    +

    Returns OptionsetField<Options>

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
    • - +
    • Sets the required level.

      @@ -676,15 +677,15 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -769,11 +770,11 @@
      visible:

      true to show, false to hide.

    -

    Returns OptionsetField<Options>

    +

    Returns OptionsetField<Options>

    +
  • Defined in src/XrmEx.ts:701
  • +
  • Defined in src/XrmEx.ts:1384
    • @@ -142,7 +143,7 @@

      Returns string

    +
  • Defined in src/XrmEx.ts:1371
  • +
  • Defined in src/XrmEx.ts:1374
  • +
  • Defined in src/XrmEx.ts:1381
  • +
  • Defined in src/XrmEx.ts:1387
  • +
  • Defined in src/XrmEx.ts:1378
  • -

    Returns XrmEx.Tab<Sections>

    Properties

    Name: string
    +
  • Defined in src/XrmEx.ts:1395
  • Section: Sections
    +
  • Defined in src/XrmEx.ts:1397
  • +
  • Defined in src/XrmEx.ts:1396
  • @@ -124,7 +125,7 @@

    See

    Implementation of Tab.sections

    +
  • Defined in src/XrmEx.ts:1405
  • Accessors

    @@ -134,7 +135,7 @@
    +
  • Defined in src/XrmEx.ts:1407
  • Methods

    @@ -156,7 +157,7 @@

    Returns void

    +
  • Defined in src/XrmEx.ts:1414
  • +
  • Defined in src/XrmEx.ts:1417
  • +
  • Defined in src/XrmEx.ts:1438
  • +
  • Defined in src/XrmEx.ts:1420
  • +
  • Defined in src/XrmEx.ts:1423
  • +
  • Defined in src/XrmEx.ts:1435
  • +
  • Defined in src/XrmEx.ts:1426
  • +
  • Defined in src/XrmEx.ts:1429
  • +
  • Defined in src/XrmEx.ts:1444
  • +
  • Defined in src/XrmEx.ts:1441
  • +
  • Defined in src/XrmEx.ts:1432
  • +
  • Defined in src/XrmEx.ts:873
  • set Value(value): void
  • @@ -152,7 +153,7 @@
    value: Returns void
  • +
  • Defined in src/XrmEx.ts:876
  • +
  • Defined in src/XrmEx.ts:870
  • Methods

      - +
    • Displays an error or recommendation notification for a control, and lets you specify actions to execute based on the notification.

      @@ -188,15 +189,15 @@
      notificationLevel: uniqueId: string
    • Optional actions: Xrm.Controls.ControlNotificationAction[]
    -

    Returns TextField

    +

    Returns TextField

    +
  • Defined in src/XrmEx.ts:805
  • -

    Returns TextField

    +

    Returns TextField

    +
  • Defined in src/XrmEx.ts:775
  • +
  • Defined in src/XrmEx.ts:760
  • +
  • Defined in src/XrmEx.ts:613
  • +
  • Defined in src/XrmEx.ts:862
  • +
  • Defined in src/XrmEx.ts:619
  • +
  • Defined in src/XrmEx.ts:859
  • +
  • Defined in src/XrmEx.ts:622
  • +
  • Defined in src/XrmEx.ts:625
  • +
  • Defined in src/XrmEx.ts:628
  • +
  • Defined in src/XrmEx.ts:631
  • +
  • Defined in src/XrmEx.ts:634
  • +
  • Defined in src/XrmEx.ts:643
    • - +
    • Clears the notification identified by uniqueId.

      @@ -399,14 +400,14 @@
      uniqueId:

      (Optional) Unique identifier.

    -

    Returns TextField

    true if it succeeds, false if it fails.

    +

    Returns TextField

    true if it succeeds, false if it fails.

    Remarks

    If the uniqueId parameter is not used, the current notification shown will be removed.

    +
  • Defined in src/XrmEx.ts:838
  • +
  • Defined in src/XrmEx.ts:637
    • - +
    • Sets the state of the control to either enabled, or disabled.

      @@ -443,11 +444,11 @@
      disabled:

      true to disable, false to enable.

    -

    Returns TextField

    +

    Returns TextField

    +
  • Defined in src/XrmEx.ts:716
  • +
  • Defined in src/XrmEx.ts:646
    • - +
    • Sets a control-local notification message.

      @@ -496,19 +497,19 @@
      uniqueId:

      Unique identifier.

    -

    Returns TextField

    true if it succeeds, false if it fails.

    +

    Returns TextField

    true if it succeeds, false if it fails.

    Remarks

    When this method is used on Microsoft Dynamics CRM for tablets a red "X" icon appears next to the control. Tapping on the icon will display the message.

    +
  • Defined in src/XrmEx.ts:682
    • - +
    • Sets the required level.

      @@ -520,15 +521,15 @@
      required:

      The requirement level, as either false for "none" or true for "required"

    -

    Returns TextField

    +

    Returns TextField

    +
  • Defined in src/XrmEx.ts:748
  • -

    Returns TextField

    +

    Returns TextField

    +
  • Defined in src/XrmEx.ts:731
  • +
  • Defined in src/XrmEx.ts:640
  • +
  • Defined in src/XrmEx.ts:610
    • - +
    • Sets the visibility state.

      @@ -612,11 +613,11 @@
      visible:

      true to show, false to hide.

    -

    Returns TextField

    +

    Returns TextField

    +
  • Defined in src/XrmEx.ts:701
  • +
  • Defined in src/XrmEx.ts:479