@cute-dw/core
Version:
This TypeScript library is the main part of a more powerfull package designed for the fast WEB software development. The cornerstone of the library is the **DataStore** class, which might be useful when you need a full control of the data, but do not need
323 lines • 30.4 kB
JavaScript
export class CuteEvent {
constructor(
/** Event identifier */
type,
/** Any useful data */
tag) {
this.type = type;
this.tag = tag;
this._defaultPrevented = false;
this._cancelable = true;
this.timeStamp = Date.now();
}
/** A boolean value indicating whether the event is cancelable. */
get cancelable() { return this._cancelable; }
/** Indicates whether an event has already been canceled */
get defaultPrevented() { return this._defaultPrevented; }
/** Stops all related default actions that are usually performed after the event dispatch has been completed*/
preventDefault() { if (this.cancelable) {
this._defaultPrevented = true;
} }
}
export class DwEvent extends CuteEvent {
constructor() { super(); }
}
/*
export class DwSignalEvent extends DwEvent {
constructor() { super() }
}
*/
export class DwButtonClickedEvent extends DwEvent {
constructor(
/** The number of the row the user clicked. */
row,
/** A reference to the control within the DataWindow under the pointer when the user clicked. */
dwo,
/** Mutable. The value returned by the action performed by the button. Default is 0 (UserDefined). */
actionCode = 0) {
super();
this.row = row;
this.dwo = dwo;
this.actionCode = actionCode;
}
}
export class DwClickedEvent extends DwEvent {
constructor(
/** DataWindow clicked row number */
row,
/** DataWindow current control */
dwo,
/** Source event object */
$event) {
super();
this.row = row;
this.dwo = dwo;
this.$event = $event;
}
}
/**
* Occurs when a database error occurs in the DataWindow or DataStore.
*/
export class DwDbmsErrorEvent extends DwEvent {
constructor(
/** A database-specific error code. */
errCode,
/** A database-specific error message. */
errText,
/** The buffer containing the row involved in the database activity that caused the error. */
dwBuffer,
/** The number of the row involved in the database activity that caused the error */
row,
/** An error object returned on the Observable response stream */
reason) {
super();
this.errCode = errCode;
this.errText = errText;
this.dwBuffer = dwBuffer;
this.row = row;
this.reason = reason;
}
}
export class DwDeleteRowEvent extends DwEvent {
constructor(
/** DataWindow row number to delete */
row,
/** Drop only flag (mutable) */
dropOnly = false) {
super();
this.row = row;
this.dropOnly = dropOnly;
}
}
export class DwDoubleClickedEvent extends DwEvent {
constructor(
/** DataWindow clicked row number */
row,
/** DataWindow current control */
dwo,
/** Source event object */
$event) {
super();
this.row = row;
this.dwo = dwo;
this.$event = $event;
}
}
/**
* Occurs for each keystroke the user types in an edit control in the DataWindow.
*/
export class DwEditChangedEvent extends DwEvent {
constructor(
/** The number of the row containing the item whose value is being changed. */
row,
/** The name of the column containing the item. */
name,
/** The new data the user has specified for the item. */
data) {
super();
this.row = row;
this.name = name;
this.data = data;
}
}
export class DwInsertRowEvent extends DwEvent {
constructor(
/** Number of new row */
newRow) {
super();
this.newRow = newRow;
}
}
/**
* Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses Enter, the Tab key, or
* an arrow key or clicks the mouse on another field within the DataWindow).
*/
export class DwItemChangedEvent extends DwEvent {
constructor(
/** The number of the row containing the item whose value is being changed. */
row,
/** The name of the column containing the item. */
name,
/** The new data the user has specified for the item. */
data) {
super();
this.row = row;
this.name = name;
this.data = data;
}
}
/**
* Occurs when a field has been modified, the field loses focus (for example, the user presses Enter, Tab, or an arrow key or
* clicks the mouse on another field in the DataWindow), and the data in the field does not pass the validation rules for its column.
*/
export class DwItemErrorEvent extends DwEvent {
constructor(
/** The number of the row containing the item whose new value has failed validation */
row,
/** The name of the column containing the item. */
name,
/** The new data the user has specified for the item. */
data,
/**
* Mutable. The return code to affect the outcome of the event:
** 0 - (Default) Reject the data value and show an error message box
** 1 - Reject the data value with no message box
** 2 - Accept the data value
** 3 - Reject the data value but allow focus to change
*/
actionCode = 0) {
super();
this.row = row;
this.name = name;
this.data = data;
this.actionCode = actionCode;
}
}
/**
* Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses Enter, the Tab key, or
* an arrow key or clicks the mouse on another field within the DataWindow). It occurs before the change is applied to the item.
* DwItemChangingEvent can also occur when the AcceptText or Update method is called for a DataWindow control or DataStore object.
*/
export class DwItemChangingEvent extends DwEvent {
constructor(
/** The number of the row containing the item whose value is being changed. */
row,
/** The name of the column containing the item. */
name,
/** The new data the user has specified for the item. */
data,
/** Allow focus to change when resultCode property has a prevented code (mutable) */
changeFocusOnReject = false) {
super();
this.row = row;
this.name = name;
this.data = data;
this.changeFocusOnReject = changeFocusOnReject;
}
}
/**
* Occurs when the current item in the control changes.
*/
export class DwItemFocusChangedEvent extends DwEvent {
constructor(
/** DataWindow current/active row number */
row,
/** The name of the column containing the item. */
name) {
super();
this.row = row;
this.name = name;
}
}
/**
* Occurs when the user presses Enter or double-clicks the mouse within DataWindow
*/
export class DwProcessEnterEvent extends DwEvent {
constructor(
/** DataWindow current/active row number */
row,
/** DataWindow current control */
dwo,
/** Source event object */
$event) {
super();
this.row = row;
this.dwo = dwo;
this.$event = $event;
}
}
/**
* Occurs when the retrieval for the DataWindow or DataStore is complete
*/
export class DwRetrieveEndEvent extends DwEvent {
constructor(
/** The number of rows that were retrieved. */
rowCount) {
super();
this.rowCount = rowCount;
}
}
/**
* Occurs when the retrieval for the DataWindow or DataStore is about to begin.
*/
export class DwRetrieveStartEvent extends DwEvent {
constructor(
/** Modified. Do not reset the rows and buffers before retrieving data */
clearBuffers = true) {
super();
this.clearBuffers = clearBuffers;
}
}
/**
* Occurs when something changed in the row object
*/
export class DwRowChangedEvent extends DwEvent {
constructor(
/** Changed row number */
row) {
super();
this.row = row;
}
}
/**
* Occurs when the current row changes in the DataWindow.
* @see {@link DwRowFocusChangingEvent}
*/
export class DwRowFocusChangedEvent extends DwEvent {
constructor(
/** The number of the row that has just become current. */
newRow) {
super();
this.newRow = newRow;
}
}
/**
* Occurs when the current row is about to change in the DataWindow.
* @see {@link DwRowFocusChangedEvent}
*/
export class DwRowFocusChangingEvent extends DwEvent {
constructor(
/** The number of the row that is current (before the row is deleted or its number changes). If the DataWindow object is empty, CurrentRow is -1 to indicate there is no current row. */
currentRow,
/**The number of the row that is about to become current. If the new row is going to be an inserted row, NewRow is -1 to indicate that it does not yet exist. */
newRow) {
super();
this.currentRow = currentRow;
this.newRow = newRow;
}
}
/**
* Occurs after a script calls the Update method and just before changes in the DataWindow or DataStore are sent to the database.
*/
export class DwUpdateStartEvent extends DwEvent {
constructor() { super(); }
}
/**
* Occurs when all the updates to the database from the DataWindow (or DataStore) are complete.
*/
export class DwUpdateEndEvent extends DwEvent {
constructor(
/** The number of rows inserted. */
rowsInserted,
/** The number of rows updated. */
rowsUpdated,
/** The number of rows deleted. */
rowsDeleted) {
super();
this.rowsInserted = rowsInserted;
this.rowsUpdated = rowsUpdated;
this.rowsDeleted = rowsDeleted;
}
}
/**
* Occurs when visible columns list has been changed
*/
export class DwColumnsChangeEvent extends DwEvent {
constructor(
/** The array of new visible columns */
columnNames) {
super();
this.columnNames = columnNames;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3V0ZS1jb3JlL3NyYy9saWIvZGF0YXN0b3JlL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sU0FBUztJQUlwQjtJQUNFLHVCQUF1QjtJQUNQLElBQWE7SUFDN0Isc0JBQXNCO0lBQ2YsR0FBUztRQUZBLFNBQUksR0FBSixJQUFJLENBQVM7UUFFdEIsUUFBRyxHQUFILEdBQUcsQ0FBTTtRQVBSLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUN0QixjQUFTLEdBQVcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBTzNDLENBQUM7SUFFTCxrRUFBa0U7SUFDbEUsSUFBSSxVQUFVLEtBQWEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUEsQ0FBQztJQUVuRCwyREFBMkQ7SUFDM0QsSUFBSSxnQkFBZ0IsS0FBYSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBLENBQUM7SUFFaEUsOEdBQThHO0lBQzlHLGNBQWMsS0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0tBQUMsQ0FBQyxDQUFDO0NBRWpGO0FBRUQsTUFBTSxPQUFPLE9BQVEsU0FBUSxTQUFTO0lBQ3BDLGdCQUFnQixLQUFLLEVBQUUsQ0FBQSxDQUFDLENBQUM7Q0FDMUI7QUFDRDs7OztFQUlFO0FBQ0YsTUFBTSxPQUFPLG9CQUFxQixTQUFRLE9BQU87SUFDL0M7SUFFRSwrQ0FBK0M7SUFDL0IsR0FBVztJQUMzQixpR0FBaUc7SUFDakYsR0FBYTtJQUM3QixxR0FBcUc7SUFDOUYsYUFBcUIsQ0FBQztRQUUzQixLQUFLLEVBQUUsQ0FBQTtRQU5PLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFFWCxRQUFHLEdBQUgsR0FBRyxDQUFV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QVcsQ0FBUTtRQUVuQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUV6QixDQUFDO0NBQ2Q7QUFDRDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxPQUFPO0lBQy9DO0lBRUUsdUNBQXVDO0lBQ3ZCLFdBQXFCO1FBRW5DLEtBQUssRUFBRSxDQUFBO1FBRk8sZ0JBQVcsR0FBWCxXQUFXLENBQVU7SUFFM0IsQ0FBQztDQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgQnVmZmVyVHlwZSwgRHdPYmplY3QgfSBmcm9tIFwiLi9EYXRhU3RvcmVPcHRpb25zXCI7XHJcbmltcG9ydCB7IEpzb25ScGNFcnJvclJlc3BvbnNlIH0gZnJvbSBcIi4uL3V0aWwvbmV0L0pzb25ScGNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXRlRXZlbnQge1xyXG4gIHByaXZhdGUgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBfY2FuY2VsYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHJlYWRvbmx5IHRpbWVTdGFtcDogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8qKiBFdmVudCBpZGVudGlmaWVyICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZT86IHN0cmluZyxcclxuICAgIC8qKiBBbnkgdXNlZnVsIGRhdGEgKi9cclxuICAgIHB1YmxpYyB0YWc/OiBhbnlcclxuXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV2ZW50IGlzIGNhbmNlbGFibGUuICovXHJcbiAgZ2V0IGNhbmNlbGFibGUoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuX2NhbmNlbGFibGV9XHJcblxyXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBldmVudCBoYXMgYWxyZWFkeSBiZWVuIGNhbmNlbGVkICovXHJcbiAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ7fVxyXG5cclxuICAvKiogU3RvcHMgYWxsIHJlbGF0ZWQgZGVmYXVsdCBhY3Rpb25zIHRoYXQgYXJlIHVzdWFsbHkgcGVyZm9ybWVkIGFmdGVyIHRoZSBldmVudCBkaXNwYXRjaCBoYXMgYmVlbiBjb21wbGV0ZWQqL1xyXG4gIHByZXZlbnREZWZhdWx0KCk6IHZvaWQgeyBpZiAodGhpcy5jYW5jZWxhYmxlKSB7dGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7fSB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRHdFdmVudCBleHRlbmRzIEN1dGVFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qXHJcbmV4cG9ydCBjbGFzcyBEd1NpZ25hbEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfVxyXG59XHJcbiovXHJcbmV4cG9ydCBjbGFzcyBEd0J1dHRvbkNsaWNrZWRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSByb3cgdGhlIHVzZXIgY2xpY2tlZC4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgd2l0aGluIHRoZSBEYXRhV2luZG93IHVuZGVyIHRoZSBwb2ludGVyIHdoZW4gdGhlIHVzZXIgY2xpY2tlZC4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZHdvOiBEd09iamVjdCxcclxuICAgIC8qKiBNdXRhYmxlLiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFjdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGJ1dHRvbi4gRGVmYXVsdCBpcyAwIChVc2VyRGVmaW5lZCkuICovXHJcbiAgICBwdWJsaWMgYWN0aW9uQ29kZTogbnVtYmVyID0gMCxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRHdDbGlja2VkRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjbGlja2VkIHJvdyBudW1iZXIgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSByb3c6IG51bWJlcixcclxuICAgIC8qKiBEYXRhV2luZG93IGN1cnJlbnQgY29udHJvbCAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGR3bzogRHdPYmplY3QsXHJcbiAgICAvKiogU291cmNlIGV2ZW50IG9iamVjdCAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5ICRldmVudDogTW91c2VFdmVudFxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzIGluIHRoZSBEYXRhV2luZG93IG9yIERhdGFTdG9yZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd0RibXNFcnJvckV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIEEgZGF0YWJhc2Utc3BlY2lmaWMgZXJyb3IgY29kZS4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBlcnJDb2RlOiBudW1iZXIsXHJcbiAgICAvKiogQSBkYXRhYmFzZS1zcGVjaWZpYyBlcnJvciBtZXNzYWdlLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGVyclRleHQ6IHN0cmluZyxcclxuICAgIC8qKiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJvdyBpbnZvbHZlZCBpbiB0aGUgZGF0YWJhc2UgYWN0aXZpdHkgdGhhdCBjYXVzZWQgdGhlIGVycm9yLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGR3QnVmZmVyPzogQnVmZmVyVHlwZSxcclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSByb3cgaW52b2x2ZWQgaW4gdGhlIGRhdGFiYXNlIGFjdGl2aXR5IHRoYXQgY2F1c2VkIHRoZSBlcnJvciAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdz86IG51bWJlcixcclxuICAgIC8qKiBBbiBlcnJvciBvYmplY3QgcmV0dXJuZWQgb24gdGhlIE9ic2VydmFibGUgcmVzcG9uc2Ugc3RyZWFtICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVhc29uPzogSHR0cEVycm9yUmVzcG9uc2UgfCBKc29uUnBjRXJyb3JSZXNwb25zZVxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEd0RlbGV0ZVJvd0V2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIERhdGFXaW5kb3cgcm93IG51bWJlciB0byBkZWxldGUgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSByb3c6IG51bWJlcixcclxuICAgIC8qKiBEcm9wIG9ubHkgZmxhZyAobXV0YWJsZSkgKi9cclxuICAgIHB1YmxpYyBkcm9wT25seTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gICkgeyBzdXBlcigpIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIER3RG91YmxlQ2xpY2tlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIERhdGFXaW5kb3cgY2xpY2tlZCByb3cgbnVtYmVyICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjdXJyZW50IGNvbnRyb2wgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBkd286IER3T2JqZWN0IHwgbnVsbCxcclxuICAgIC8qKiBTb3VyY2UgZXZlbnQgb2JqZWN0ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgJGV2ZW50OiBNb3VzZUV2ZW50XHJcblxyXG4gICkgeyBzdXBlcigpIH1cclxufVxyXG4vKipcclxuICogT2NjdXJzIGZvciBlYWNoIGtleXN0cm9rZSB0aGUgdXNlciB0eXBlcyBpbiBhbiBlZGl0IGNvbnRyb2wgaW4gdGhlIERhdGFXaW5kb3cuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdFZGl0Q2hhbmdlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIHJvdyBjb250YWluaW5nIHRoZSBpdGVtIHdob3NlIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBpdGVtLiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXHJcbiAgICAvKiogVGhlIG5ldyBkYXRhIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgZm9yIHRoZSBpdGVtLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG4gIH1cclxuXHJcbmV4cG9ydCBjbGFzcyBEd0luc2VydFJvd0V2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIE51bWJlciBvZiBuZXcgcm93ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV3Um93OiBudW1iZXJcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgd2hlbiBhIGZpZWxkIGluIGEgRGF0YVdpbmRvdyBjb250cm9sIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBsb3NlcyBmb2N1cyAoZm9yIGV4YW1wbGUsIHRoZSB1c2VyIHByZXNzZXMgRW50ZXIsIHRoZSBUYWIga2V5LCBvclxyXG4gKiBhbiBhcnJvdyBrZXkgb3IgY2xpY2tzIHRoZSBtb3VzZSBvbiBhbm90aGVyIGZpZWxkIHdpdGhpbiB0aGUgRGF0YVdpbmRvdykuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdJdGVtQ2hhbmdlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIHJvdyBjb250YWluaW5nIHRoZSBpdGVtIHdob3NlIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBpdGVtLiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXHJcbiAgICAvKiogVGhlIG5ldyBkYXRhIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgZm9yIHRoZSBpdGVtLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSxcclxuXHJcbiAgKSB7c3VwZXIoKX1cclxufVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gYSBmaWVsZCBoYXMgYmVlbiBtb2RpZmllZCwgdGhlIGZpZWxkIGxvc2VzIGZvY3VzIChmb3IgZXhhbXBsZSwgdGhlIHVzZXIgcHJlc3NlcyBFbnRlciwgVGFiLCBvciBhbiBhcnJvdyBrZXkgb3JcclxuICogY2xpY2tzIHRoZSBtb3VzZSBvbiBhbm90aGVyIGZpZWxkIGluIHRoZSBEYXRhV2luZG93KSwgYW5kIHRoZSBkYXRhIGluIHRoZSBmaWVsZCBkb2VzIG5vdCBwYXNzIHRoZSB2YWxpZGF0aW9uIHJ1bGVzIGZvciBpdHMgY29sdW1uLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIER3SXRlbUVycm9yRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiB0aGUgcm93IGNvbnRhaW5pbmcgdGhlIGl0ZW0gd2hvc2UgbmV3IHZhbHVlIGhhcyBmYWlsZWQgdmFsaWRhdGlvbiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdzogbnVtYmVyLFxyXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgaXRlbS4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxyXG4gICAgLyoqIFRoZSBuZXcgZGF0YSB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGZvciB0aGUgaXRlbS4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBhbnksXHJcbiAgICAvKipcclxuICAgICAqIE11dGFibGUuIFRoZSByZXR1cm4gY29kZSB0byBhZmZlY3QgdGhlIG91dGNvbWUgb2YgdGhlIGV2ZW50OlxyXG4gICAgICoqIDAgLSAoRGVmYXVsdCkgUmVqZWN0IHRoZSBkYXRhIHZhbHVlIGFuZCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgYm94XHJcbiAgICAgKiogMSAtIFJlamVjdCB0aGUgZGF0YSB2YWx1ZSB3aXRoIG5vIG1lc3NhZ2UgYm94XHJcbiAgICAgKiogMiAtIEFjY2VwdCB0aGUgZGF0YSB2YWx1ZVxyXG4gICAgICoqIDMgLSBSZWplY3QgdGhlIGRhdGEgdmFsdWUgYnV0IGFsbG93IGZvY3VzIHRvIGNoYW5nZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWN0aW9uQ29kZTogMHwxfDJ8MyA9IDAsXHJcblxyXG4gICkge3N1cGVyKCl9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIGEgZmllbGQgaW4gYSBEYXRhV2luZG93IGNvbnRyb2wgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGxvc2VzIGZvY3VzIChmb3IgZXhhbXBsZSwgdGhlIHVzZXIgcHJlc3NlcyBFbnRlciwgdGhlIFRhYiBrZXksIG9yXHJcbiAqIGFuIGFycm93IGtleSBvciBjbGlja3MgdGhlIG1vdXNlIG9uIGFub3RoZXIgZmllbGQgd2l0aGluIHRoZSBEYXRhV2luZG93KS4gSXQgb2NjdXJzIGJlZm9yZSB0aGUgY2hhbmdlIGlzIGFwcGxpZWQgdG8gdGhlIGl0ZW0uXHJcbiAqIER3SXRlbUNoYW5naW5nRXZlbnQgY2FuIGFsc28gb2NjdXIgd2hlbiB0aGUgQWNjZXB0VGV4dCBvciBVcGRhdGUgbWV0aG9kIGlzIGNhbGxlZCBmb3IgYSBEYXRhV2luZG93IGNvbnRyb2wgb3IgRGF0YVN0b3JlIG9iamVjdC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd0l0ZW1DaGFuZ2luZ0V2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIHJvdyBjb250YWluaW5nIHRoZSBpdGVtIHdob3NlIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBpdGVtLiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXHJcbiAgICAvKiogVGhlIG5ldyBkYXRhIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgZm9yIHRoZSBpdGVtLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSxcclxuICAgIC8qKiBBbGxvdyBmb2N1cyB0byBjaGFuZ2Ugd2hlbiByZXN1bHRDb2RlIHByb3BlcnR5IGhhcyBhIHByZXZlbnRlZCBjb2RlIChtdXRhYmxlKSAqL1xyXG4gICAgcHVibGljIGNoYW5nZUZvY3VzT25SZWplY3Q6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHJcbiAgKSB7c3VwZXIoKX1cclxufVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgY29udHJvbCBjaGFuZ2VzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIER3SXRlbUZvY3VzQ2hhbmdlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIERhdGFXaW5kb3cgY3VycmVudC9hY3RpdmUgcm93IG51bWJlciAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdzogbnVtYmVyLFxyXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgaXRlbS4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxyXG5cclxuICAgICkge3N1cGVyKCl9XHJcbiAgfVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBFbnRlciBvciBkb3VibGUtY2xpY2tzIHRoZSBtb3VzZSB3aXRoaW4gRGF0YVdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIER3UHJvY2Vzc0VudGVyRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjdXJyZW50L2FjdGl2ZSByb3cgbnVtYmVyICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjdXJyZW50IGNvbnRyb2wgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBkd286IER3T2JqZWN0IHwgbnVsbCxcclxuICAgIC8qKiBTb3VyY2UgZXZlbnQgb2JqZWN0ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgJGV2ZW50PzogS2V5Ym9hcmRFdmVudCxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgd2hlbiB0aGUgcmV0cmlldmFsIGZvciB0aGUgRGF0YVdpbmRvdyBvciBEYXRhU3RvcmUgaXMgY29tcGxldGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1JldHJpZXZlRW5kRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSByZXRyaWV2ZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlclxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIHRoZSByZXRyaWV2YWwgZm9yIHRoZSBEYXRhV2luZG93IG9yIERhdGFTdG9yZSBpcyBhYm91dCB0byBiZWdpbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1JldHJpZXZlU3RhcnRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBNb2RpZmllZC4gRG8gbm90IHJlc2V0IHRoZSByb3dzIGFuZCBidWZmZXJzIGJlZm9yZSByZXRyaWV2aW5nIGRhdGEgKi9cclxuICAgIHB1YmxpYyBjbGVhckJ1ZmZlcnM6IGJvb2xlYW4gPSB0cnVlXHJcblxyXG4gICkgeyBzdXBlcigpIH1cclxufVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gc29tZXRoaW5nIGNoYW5nZWQgaW4gdGhlIHJvdyBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1Jvd0NoYW5nZWRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIENoYW5nZWQgcm93IG51bWJlciAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdzogbnVtYmVyXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgd2hlbiB0aGUgY3VycmVudCByb3cgY2hhbmdlcyBpbiB0aGUgRGF0YVdpbmRvdy5cclxuICogQHNlZSB7QGxpbmsgRHdSb3dGb2N1c0NoYW5naW5nRXZlbnR9XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdSb3dGb2N1c0NoYW5nZWRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSByb3cgdGhhdCBoYXMganVzdCBiZWNvbWUgY3VycmVudC4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuZXdSb3c6IG51bWJlclxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIHRoZSBjdXJyZW50IHJvdyBpcyBhYm91dCB0byBjaGFuZ2UgaW4gdGhlIERhdGFXaW5kb3cuXHJcbiAqIEBzZWUge0BsaW5rIER3Um93Rm9jdXNDaGFuZ2VkRXZlbnR9XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdSb3dGb2N1c0NoYW5naW5nRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiB0aGUgcm93IHRoYXQgaXMgY3VycmVudCAoYmVmb3JlIHRoZSByb3cgaXMgZGVsZXRlZCBvciBpdHMgbnVtYmVyIGNoYW5nZXMpLiBJZiB0aGUgRGF0YVdpbmRvdyBvYmplY3QgaXMgZW1wdHksIEN1cnJlbnRSb3cgaXMgLTEgdG8gaW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVudCByb3cuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJvdzogbnVtYmVyLFxyXG4gICAgLyoqVGhlIG51bWJlciBvZiB0aGUgcm93IHRoYXQgaXMgYWJvdXQgdG8gYmVjb21lIGN1cnJlbnQuIElmIHRoZSBuZXcgcm93IGlzIGdvaW5nIHRvIGJlIGFuIGluc2VydGVkIHJvdywgTmV3Um93IGlzIC0xIHRvIGluZGljYXRlIHRoYXQgaXQgZG9lcyBub3QgeWV0IGV4aXN0LiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuZXdSb3c6IG51bWJlcixcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgYWZ0ZXIgYSBzY3JpcHQgY2FsbHMgdGhlIFVwZGF0ZSBtZXRob2QgYW5kIGp1c3QgYmVmb3JlIGNoYW5nZXMgaW4gdGhlIERhdGFXaW5kb3cgb3IgRGF0YVN0b3JlIGFyZSBzZW50IHRvIHRoZSBkYXRhYmFzZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1VwZGF0ZVN0YXJ0RXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIGFsbCB0aGUgdXBkYXRlcyB0byB0aGUgZGF0YWJhc2UgZnJvbSB0aGUgRGF0YVdpbmRvdyAob3IgRGF0YVN0b3JlKSBhcmUgY29tcGxldGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdVcGRhdGVFbmRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93c0luc2VydGVkOiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiByb3dzIHVwZGF0ZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93c1VwZGF0ZWQ6IG51bWJlcixcclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHJvd3MgZGVsZXRlZC4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSByb3dzRGVsZXRlZDogbnVtYmVyLFxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIHZpc2libGUgY29sdW1ucyBsaXN0IGhhcyBiZWVuIGNoYW5nZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd0NvbHVtbnNDaGFuZ2VFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgYXJyYXkgb2YgbmV3IHZpc2libGUgY29sdW1ucyAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbk5hbWVzOiBzdHJpbmdbXSxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbiJdfQ==