igniteui-angular 12.2.5 → 12.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/igniteui-angular.umd.js +364 -495
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/igniteui-angular.js +106 -107
- package/esm2015/lib/action-strip/grid-actions/grid-editing-actions.component.js +2 -2
- package/esm2015/lib/banner/banner.component.js +1 -1
- package/esm2015/lib/combo/combo-item.component.js +2 -2
- package/esm2015/lib/core/utils.js +24 -2
- package/esm2015/lib/data-operations/data-clone-strategy.js +7 -0
- package/esm2015/lib/data-operations/data-util.js +7 -6
- package/esm2015/lib/directives/radio/radio-group.directive.js +5 -13
- package/esm2015/lib/drop-down/drop-down-item.base.js +1 -5
- package/esm2015/lib/grids/api.service.js +2 -2
- package/esm2015/lib/grids/cell.component.js +1 -17
- package/esm2015/lib/grids/column-actions/column-actions.component.js +3 -7
- package/esm2015/lib/grids/common/crud.service.js +4 -3
- package/esm2015/lib/grids/common/grid.interface.js +1 -1
- package/esm2015/lib/grids/common/pipes.js +2 -2
- package/esm2015/lib/grids/common/row.interface.js +1 -1
- package/esm2015/lib/grids/grid/grid.component.js +3 -7
- package/esm2015/lib/grids/grid-base.directive.js +79 -118
- package/esm2015/lib/grids/grid-public-row.js +18 -16
- package/esm2015/lib/grids/headers/grid-header-row.component.js +2 -2
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +3 -7
- package/esm2015/lib/grids/row.directive.js +2 -3
- package/esm2015/lib/grids/summaries/grid-summary.service.js +2 -2
- package/esm2015/lib/grids/tree-grid/tree-grid.component.js +3 -7
- package/esm2015/lib/grids/tree-grid/tree-grid.pipes.js +3 -3
- package/esm2015/lib/icon/icon.component.js +1 -6
- package/esm2015/lib/services/overlay/overlay.js +2 -1
- package/esm2015/lib/services/overlay/utilities.js +1 -1
- package/esm2015/lib/services/transaction/base-transaction.js +17 -4
- package/esm2015/lib/services/transaction/igx-hierarchical-transaction.js +3 -4
- package/esm2015/lib/services/transaction/igx-transaction.js +3 -3
- package/esm2015/lib/services/transaction/transaction-factory.service.js +1 -2
- package/esm2015/lib/services/transaction/transaction.js +1 -1
- package/esm2015/lib/toast/toast.component.js +3 -6
- package/esm2015/public_api.js +2 -1
- package/fesm2015/igniteui-angular.js +171 -299
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.d.ts +105 -106
- package/igniteui-angular.metadata.json +1 -1
- package/lib/banner/banner.component.d.ts +1 -2
- package/lib/core/utils.d.ts +12 -0
- package/lib/data-operations/data-clone-strategy.d.ts +6 -0
- package/lib/data-operations/data-util.d.ts +3 -2
- package/lib/directives/radio/radio-group.directive.d.ts +4 -4
- package/lib/grids/cell.component.d.ts +0 -9
- package/lib/grids/column-actions/column-actions.component.d.ts +2 -1
- package/lib/grids/common/grid.interface.d.ts +2 -0
- package/lib/grids/common/row.interface.d.ts +1 -0
- package/lib/grids/grid/grid.component.d.ts +2 -1
- package/lib/grids/grid-base.directive.d.ts +66 -37
- package/lib/grids/grid-public-row.d.ts +10 -3
- package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
- package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -1
- package/lib/icon/icon.component.d.ts +2 -2
- package/lib/services/overlay/utilities.d.ts +2 -1
- package/lib/services/transaction/base-transaction.d.ts +7 -0
- package/lib/services/transaction/transaction.d.ts +5 -0
- package/lib/toast/toast.component.d.ts +2 -0
- package/migrations/common/filterSourceDirs.d.ts +2 -2
- package/migrations/common/filterSourceDirs.js +2 -2
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/esm2015/lib/core/deprecateDecorators.js +0 -101
- package/lib/core/deprecateDecorators.d.ts +0 -20
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DeprecateProperty } from '../core/deprecateDecorators';
|
|
3
|
-
import { IgxEditRow } from './common/crud.service';
|
|
1
|
+
import { IgxAddRow, IgxEditRow } from './common/crud.service';
|
|
4
2
|
import { GridInstanceType, GridSummaryCalculationMode, GridSummaryPosition } from './common/enums';
|
|
5
3
|
import { IgxGridCell } from './grid-public-cell';
|
|
6
4
|
import mergeWith from 'lodash.mergewith';
|
|
7
|
-
import { cloneValue } from '../core/utils';
|
|
8
5
|
class BaseRow {
|
|
9
6
|
/**
|
|
10
7
|
* Returns the view index calculated per the grid page.
|
|
@@ -29,6 +26,18 @@ class BaseRow {
|
|
|
29
26
|
const primaryKey = this.grid.primaryKey;
|
|
30
27
|
return primaryKey ? data[primaryKey] : data;
|
|
31
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets if this represents add row UI
|
|
31
|
+
*
|
|
32
|
+
* ```typescript
|
|
33
|
+
* let isAddRow = row.addRowUI;
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
get addRowUI() {
|
|
37
|
+
return !!this.grid.crudService.row &&
|
|
38
|
+
this.grid.crudService.row.getClassName() === IgxAddRow.name &&
|
|
39
|
+
this.grid.crudService.row.id === this.key;
|
|
40
|
+
}
|
|
32
41
|
/**
|
|
33
42
|
* The data record that populates the row.
|
|
34
43
|
*
|
|
@@ -39,7 +48,7 @@ class BaseRow {
|
|
|
39
48
|
get data() {
|
|
40
49
|
var _a, _b;
|
|
41
50
|
if (this.inEditMode) {
|
|
42
|
-
return mergeWith(
|
|
51
|
+
return mergeWith(this.grid.dataCloneStrategy.clone((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {
|
|
43
52
|
if (Array.isArray(srcValue)) {
|
|
44
53
|
return objValue = srcValue;
|
|
45
54
|
}
|
|
@@ -48,7 +57,7 @@ class BaseRow {
|
|
|
48
57
|
return (_b = this._data) !== null && _b !== void 0 ? _b : this.grid.dataView[this.index];
|
|
49
58
|
}
|
|
50
59
|
/**
|
|
51
|
-
* @deprecated Use 'data' instead
|
|
60
|
+
* @deprecated Use 'data' instead
|
|
52
61
|
*
|
|
53
62
|
* The data record that populates the row
|
|
54
63
|
*/
|
|
@@ -56,8 +65,7 @@ class BaseRow {
|
|
|
56
65
|
return this.data;
|
|
57
66
|
}
|
|
58
67
|
/**
|
|
59
|
-
* @deprecated Use 'key' instead
|
|
60
|
-
*
|
|
68
|
+
* @deprecated Use 'key' instead
|
|
61
69
|
*/
|
|
62
70
|
get rowID() {
|
|
63
71
|
return this.key;
|
|
@@ -226,12 +234,6 @@ class BaseRow {
|
|
|
226
234
|
this.grid.deleteRowById(this.key);
|
|
227
235
|
}
|
|
228
236
|
}
|
|
229
|
-
__decorate([
|
|
230
|
-
DeprecateProperty(`'rowData' property is deprecated. Use 'data' instead.`)
|
|
231
|
-
], BaseRow.prototype, "rowData", null);
|
|
232
|
-
__decorate([
|
|
233
|
-
DeprecateProperty(`'rowID' property is deprecated. Use 'key' instead.`)
|
|
234
|
-
], BaseRow.prototype, "rowID", null);
|
|
235
237
|
export class IgxGridRow extends BaseRow {
|
|
236
238
|
/**
|
|
237
239
|
* @hidden
|
|
@@ -342,7 +344,7 @@ export class IgxTreeGridRow extends BaseRow {
|
|
|
342
344
|
get data() {
|
|
343
345
|
var _a;
|
|
344
346
|
if (this.inEditMode) {
|
|
345
|
-
return mergeWith(
|
|
347
|
+
return mergeWith(this.grid.dataCloneStrategy.clone((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {
|
|
346
348
|
if (Array.isArray(srcValue)) {
|
|
347
349
|
return objValue = srcValue;
|
|
348
350
|
}
|
|
@@ -700,4 +702,4 @@ export class IgxSummaryRow {
|
|
|
700
702
|
return row;
|
|
701
703
|
}
|
|
702
704
|
}
|
|
703
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9qRCxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQWUsT0FBTztJQVFsQjs7T0FFRztJQUNILElBQVcsU0FBUzs7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLElBQUksS0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsMENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQVcsR0FBRzs7UUFDVixNQUFNLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFB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QUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzVEO2FBQ0o7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlcHJlY2F0ZVByb3BlcnR5IH0gZnJvbSAnLi4vY29yZS9kZXByZWNhdGVEZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ2VsbFR5cGUgfSBmcm9tICcuL2NvbW1vbi9jZWxsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElneEVkaXRSb3cgfSBmcm9tICcuL2NvbW1vbi9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSW5zdGFuY2VUeXBlLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcclxuaW1wb3J0IHsgUm93VHlwZSB9IGZyb20gJy4vY29tbW9uL3Jvdy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbCB9IGZyb20gJy4vZ3JpZC1wdWJsaWMtY2VsbCc7XHJcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkL2dyaWQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XHJcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQvdHJlZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcclxuaW1wb3J0IG1lcmdlV2l0aCBmcm9tICdsb2Rhc2gubWVyZ2V3aXRoJztcclxuaW1wb3J0IHsgY2xvbmVWYWx1ZSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xyXG5cclxuYWJzdHJhY3QgY2xhc3MgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQgfCBJZ3hUcmVlR3JpZENvbXBvbmVudCB8IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGE/OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyAoKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBhZ2UgfHwgMCkgKiAodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGVyUGFnZSB8fCAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByb3cga2V5LlxyXG4gICAgICogQSByb3cgaW4gdGhlIGdyaWQgaXMgaWRlbnRpZmllZCBlaXRoZXIgYnk6XHJcbiAgICAgKiAtIHByaW1hcnlLZXkgZGF0YSB2YWx1ZSxcclxuICAgICAqIC0gdGhlIHdob2xlIHJvd0RhdGEsIGlmIHRoZSBwcmltYXJ5S2V5IGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IHJvd0tleSA9IHJvdy5rZXk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBrZXkoKTogYW55IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xyXG4gICAgICAgIHJldHVybiBwcmltYXJ5S2V5ID8gZGF0YVtwcmltYXJ5S2V5XSA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGF0YSByZWNvcmQgdGhhdCBwb3B1bGF0ZXMgdGhlIHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93RGF0YSA9IHJvdy5kYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aChjbG9uZVZhbHVlKHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMua2V5LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RhdGEnIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRhdGEgcmVjb3JkIHRoYXQgcG9wdWxhdGVzIHRoZSByb3dcclxuICAgICAqL1xyXG4gICAgQERlcHJlY2F0ZVByb3BlcnR5KGAncm93RGF0YScgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlICdkYXRhJyBpbnN0ZWFkLmApXHJcbiAgICBwdWJsaWMgZ2V0IHJvd0RhdGEoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlICdrZXknIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBARGVwcmVjYXRlUHJvcGVydHkoYCdyb3dJRCcgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlICdrZXknIGluc3RlYWQuYClcclxuICAgIHB1YmxpYyBnZXQgcm93SUQoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IGluIGVkaXQgbW9kZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZWRpdFJvd1N0YXRlID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdztcclxuICAgICAgICAgICAgcmV0dXJuIChlZGl0Um93U3RhdGUgJiYgZWRpdFJvd1N0YXRlLmlkID09PSB0aGlzLmtleSkgfHwgZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cucGlubmVkID0gIXJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBwaW5uZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByb3cgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGlzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgaW4gZGVsZXRlIHN0YXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRlbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaWYgdGhlIHJvdyBoYXMgY2hpbGQgcm93cy4gQWx3YXlzIHJldHVybiBmYWxzZSBmb3IgSWd4R3JpZFJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzR2hvc3RSZWNvcmQodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlbmRlcmVkIGNlbGxzIGluIHRoZSByb3cgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlczogQ2VsbFR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbDogQ2VsbFR5cGUgPSBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCB0aGlzLmluZGV4LCBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICByZXMucHVzaChjZWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlucyB0aGUgc3BlY2lmaWVkIHJvdy5cclxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd1Bpbm5pbmdgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpblJvdyh0aGlzLmtleSwgdGhpcy5pbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyB1bnBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0udW5waW4oKTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5waW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC51bnBpblJvdyh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBzcGVjaWZpZWQgcm93IG9iamVjdCBhbmQgdGhlIGRhdGEgc291cmNlIHJlY29yZCB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdXBkYXRlIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93J3MgdmFsdWVcclxuICAgICAqIGxldCBuZXdWYWx1ZSA9IFwiQXBwbGVcIjtcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMV0udXBkYXRlKG5ld1ZhbHVlKTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjcnVkU2VydmljZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZTtcclxuICAgICAgICBpZiAoY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUgJiYgY3J1ZFNlcnZpY2UuY2VsbC5pZC5yb3dJRCA9PT0gdGhpcy5rZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEVkaXRSb3codGhpcy5rZXksIHRoaXMuaW5kZXgsIHRoaXMuZGF0YSwgdGhpcy5ncmlkKTtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfcm93KHJvdywgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcm93IGZyb20gdGhlIGdyaWQncyBkYXRhIHNvdXJjZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd0RlbGV0ZWRgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIGRlbGV0ZSB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMl0uZGVsZXRlKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQuZGVsZXRlUm93QnlJZCh0aGlzLmtleSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2luYXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdywgaWYgZ3JpZCBpcyBncm91cGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBSb3dUeXBlIHtcclxuICAgICAgICBsZXQgcGFyZW50OiBJZ3hHcm91cEJ5Um93O1xyXG4gICAgICAgIGlmICghdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaW5kZXggLSAxO1xyXG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgIXBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbaV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHJlYykpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IG5ldyBJZ3hHcm91cEJ5Um93KHRoaXMuZ3JpZCwgaSwgcmVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgcHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnksIHByaXZhdGUgX3RyZWVSb3c/OiBJVHJlZUdyaWRSZWNvcmQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhICYmIGRhdGEuYWRkUm93ICYmIGRhdGEucmVjb3JkUmVmID8gZGF0YS5yZWNvcmRSZWYgOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMgJiYgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApID4gMCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAvLyBmaXJzdFJvd0luZGV4IGlzIGJhc2VkIG9uIGRhdGEgcmVzdWx0IGFmdGVyIGFsbCBwaXBlcyB0cmlnZ2VyZWQsIGV4Y2x1ZGluZyBzdW1tYXJ5IHBpcGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gdGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpICsgMTtcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgc3VtbWFyeSByb3cgZm9yIGVhY2ggcm9vdCByZWNvcmQsIHNvIHdlIGNhbGN1bGF0ZSBob3cgbWFueSByb290IHJlY29yZHMgYXJlIHJlbmRlcmVkIGJlZm9yZSB0aGUgY3VycmVudCByb3dcclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJvd0luZGV4ICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dEYXRhID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5yb3dEYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aChjbG9uZVZhbHVlKHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMua2V5LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEgPyB0aGlzLl9kYXRhIDogdGhpcy5ncmlkLmlzVHJlZVJvdyhyZWMpID8gcmVjLmRhdGEgOiByZWM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IFJvd1R5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneFRyZWVHcmlkUm93W10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmVlUm93LmV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5mb3JFYWNoKChyZWMsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hUcmVlR3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChyb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmdldFJvd0J5S2V5KHRoaXMudHJlZVJvdy5wYXJlbnQ/LnJvd0lEKTtcclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGNoaWxkIHJvd3MgZXhpc3QuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZVJvdy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmVlUm93LmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBgSVRyZWVHcmlkUmVjb3JkYCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSByb3cgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRyZWUgZ3JpZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCByb3dQYXJlbnQgPSB0aGlzLnRyZWVHcmlkLmdldFJvd0J5S2V5KDEpLnRyZWVSb3cucGFyZW50O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdHJlZVJvdygpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmVlUm93ID8/IHRoaXMuZ3JpZC5yZWNvcmRzLmdldCh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGVzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy50cmVlUm93KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gVE9ETyBjZWxsXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSkgPyB0aGlzLnRyZWVSb3cuaXNGaWx0ZXJlZE91dFBhcmVudCA9PT0gdW5kZWZpbmVkIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICB3aGlsZSAocm93LnBhcmVudCkge1xyXG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcm93IGlzbGFuZHMgZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmNoaWxkTGF5b3V0S2V5cy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5pbmRleE9mKHRoaXMuZ3JpZC5kYXRhVmlld1swXSk7XHJcbiAgICAgICAgY29uc3QgZXhwYW5kZWRSb3dzID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maWx0ZXIoKHJlYywgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaXJzdFJvd0luZCArIGV4cGFuZGVkUm93cy5sZW5ndGggKyB0aGlzLmluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2VsbHMoKTogQ2VsbFR5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBDZWxsVHlwZVtdID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsOiBDZWxsVHlwZSA9IG5ldyBJZ3hHcmlkQ2VsbCh0aGlzLmdyaWQsIHRoaXMuaW5kZXgsIGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGNlbGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcm91cEJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHJvdyBpbmRleC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0dyb3VwQnlSb3c6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUdyb3VwQnlSZWNvcmQgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIGdyb3VwIHJlY29yZCwgaWYgdGhlIHJvdyBpcyBhIEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZ3JvdXBSb3coKTogSUdyb3VwQnlSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cFJvdyA/IHRoaXMuX2dyb3VwUm93IDogdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGQgcm93cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBSb3dUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBJZ3hHcmlkUm93W10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyb3VwUm93LnJlY29yZHMuZm9yRWFjaCgocmVjLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZCwgdGhpcy5pbmRleCArIDEgKyBpLCByZWMpO1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBwcml2YXRlIF9ncm91cFJvdz86IElHcm91cEJ5UmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQnlSb3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZXZlcnkocm93ID0+IHJvdy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFtyb3cua2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3Jvdy5rZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogY29uc3QgZ3JvdXBSb3dFeHBhbmRlZCA9IGdyb3VwUm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFQSS5zZXRfZ3JvdXByb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZ3JvdXBSb3csIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPyB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLnJvdyA9PT0gdGhpcy5pbmRleCA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGdyb3VwUm93LnRvZ2dsZSgpXHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgZ3JpZEFQSSgpOiBJZ3hHcmlkQVBJU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJIGFzIElneEdyaWRBUElTZXJ2aWNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByb3cgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWx3YXlzIHRydWUsIGJlY2F1c2UgdGhpcyBpcyBpbiBpbnN0YW5jZSBvZiBhbiBJZ3hHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTdW1tYXJ5Um93OiBib29sZWFuO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cmVudCBncmlkIHR5cGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBncmlkVHlwZTogR3JpZEluc3RhbmNlVHlwZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBJR3JvdXBCeVJlY29yZCBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgcmVjb3JkLCBpZiB0aGUgcm93IGlzIGEgR3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdW1tYXJpZXMoKTogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1bW1hcmllcyA/IHRoaXMuX3N1bW1hcmllcyA6IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XS5zdW1tYXJpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucyAmJiB0aGlzLmdyaWQucGFnZSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRUeXBlID09PSBHcmlkSW5zdGFuY2VUeXBlLlRyZWVHcmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4VHJlZUdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSB0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Um93SW5kZXggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIGluZGV4OiBudW1iZXIsIHByaXZhdGUgX3N1bW1hcmllcz86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIHR5cGU/OiBHcmlkSW5zdGFuY2VUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc1N1bW1hcnlSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ3JpZFR5cGUgPSB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um9vdFBhcmVudChyb3c6IElUcmVlR3JpZFJlY29yZCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvdztcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9qRCxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUV6QyxNQUFlLE9BQU87SUFRbEI7O09BRUc7SUFDSCxJQUFXLFNBQVM7O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUFXLEdBQUc7O1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFX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Q0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pGLE9BQU8sYUFBYSxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzVEO2FBQ0o7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENlbGxUeXBlIH0gZnJvbSAnLi9jb21tb24vY2VsbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hBZGRSb3csIElneEVkaXRSb3cgfSBmcm9tICcuL2NvbW1vbi9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkSW5zdGFuY2VUeXBlLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vY29tbW9uL2VudW1zJztcclxuaW1wb3J0IHsgUm93VHlwZSB9IGZyb20gJy4vY29tbW9uL3Jvdy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbCB9IGZyb20gJy4vZ3JpZC1wdWJsaWMtY2VsbCc7XHJcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkL2dyaWQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XHJcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQvdHJlZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcclxuaW1wb3J0IG1lcmdlV2l0aCBmcm9tICdsb2Rhc2gubWVyZ2V3aXRoJztcclxuXHJcbmFic3RyYWN0IGNsYXNzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xyXG4gICAgcHJvdGVjdGVkIF9kYXRhPzogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGtleS5cclxuICAgICAqIEEgcm93IGluIHRoZSBncmlkIGlzIGlkZW50aWZpZWQgZWl0aGVyIGJ5OlxyXG4gICAgICogLSBwcmltYXJ5S2V5IGRhdGEgdmFsdWUsXHJcbiAgICAgKiAtIHRoZSB3aG9sZSByb3dEYXRhLCBpZiB0aGUgcHJpbWFyeUtleSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCByb3dLZXkgPSByb3cua2V5O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQga2V5KCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcclxuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IGRhdGFbcHJpbWFyeUtleV0gOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpZiB0aGlzIHJlcHJlc2VudHMgYWRkIHJvdyBVSVxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCBpc0FkZFJvdyA9IHJvdy5hZGRSb3dVSTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFkZFJvd1VJKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgJiZcclxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSA9PT0gSWd4QWRkUm93Lm5hbWUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pZCA9PT0gdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGF0YSByZWNvcmQgdGhhdCBwb3B1bGF0ZXMgdGhlIHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93RGF0YSA9IHJvdy5kYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aCh0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kuY2xvbmUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5rZXksIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAnZGF0YScgaW5zdGVhZFxyXG4gICAgICpcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcm93RGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2tleScgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHJvd0lEKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGN1cnJlbnRseSBpbiBlZGl0IG1vZGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaW5FZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XHJcbiAgICAgICAgICAgIHJldHVybiAoZWRpdFJvd1N0YXRlICYmIGVkaXRSb3dTdGF0ZS5pZCA9PT0gdGhpcy5rZXkpIHx8IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc1Bpbm5lZCA9IHJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwaW5uZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGluIGRlbGV0ZSBzdGF0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkZWxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5yb3dfZGVsZXRlZF90cmFuc2FjdGlvbih0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaGFzIGNoaWxkIHJvd3MuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjZWxscygpOiBDZWxsVHlwZVtdIHtcclxuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGw6IENlbGxUeXBlID0gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgdGhpcy5pbmRleCwgY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBwaW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnBpbigpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5Sb3codGhpcy5rZXksIHRoaXMuaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5waW5zIHRoZSBzcGVjaWZpZWQgcm93LlxyXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYG9uUm93UGlubmluZ2AgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdW5waW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnVucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVucGluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudW5waW5Sb3codGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgc3BlY2lmaWVkIHJvdyBvYmplY3QgYW5kIHRoZSBkYXRhIHNvdXJjZSByZWNvcmQgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHVwZGF0ZSB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvdydzIHZhbHVlXHJcbiAgICAgKiBsZXQgbmV3VmFsdWUgPSBcIkFwcGxlXCI7XHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLnVwZGF0ZShuZXdWYWx1ZSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3J1ZFNlcnZpY2UgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2U7XHJcbiAgICAgICAgaWYgKGNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmIGNydWRTZXJ2aWNlLmNlbGwuaWQucm93SUQgPT09IHRoaXMua2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hFZGl0Um93KHRoaXMua2V5LCB0aGlzLmluZGV4LCB0aGlzLmRhdGEsIHRoaXMuZ3JpZCk7XHJcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyhyb3csIHZhbHVlKTtcclxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJvdyBmcm9tIHRoZSBncmlkJ3MgZGF0YSBzb3VyY2UuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dEZWxldGVkYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBkZWxldGUgdGhlIHRoaXJkIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmRlbGV0ZSgpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmRlbGV0ZVJvd0J5SWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdpbmF0b3IpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXHJcbiAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHBhcmVudCByb3csIGlmIGdyaWQgaXMgZ3JvdXBlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDogSWd4R3JvdXBCeVJvdztcclxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmluZGV4IC0gMTtcclxuICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFwYXJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBuZXcgSWd4R3JvdXBCeVJvdyh0aGlzLmdyaWQsIGksIHJlYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRSb3cgZXh0ZW5kcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55LCBwcml2YXRlIF90cmVlUm93PzogSVRyZWVHcmlkUmVjb3JkKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSA+IDApKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgLy8gZmlyc3RSb3dJbmRleCBpcyBiYXNlZCBvbiBkYXRhIHJlc3VsdCBhZnRlciBhbGwgcGlwZXMgdHJpZ2dlcmVkLCBleGNsdWRpbmcgc3VtbWFyeSBwaXBlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tID9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm9vdFJlY29yZHMuaW5kZXhPZih0aGlzLmdldFJvb3RQYXJlbnQodGhpcy5ncmlkLmRhdGFWaWV3WzBdKSkgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHN1bW1hcnkgcm93IGZvciBlYWNoIHJvb3QgcmVjb3JkLCBzbyB3ZSBjYWxjdWxhdGUgaG93IG1hbnkgcm9vdCByZWNvcmRzIGFyZSByZW5kZXJlZCBiZWZvcmUgdGhlIGN1cnJlbnQgcm93XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmRleCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IHNlbGVjdGVkUm93RGF0YSA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucm93RGF0YTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5pbkVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgodGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5LmNsb25lKHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMua2V5LCBmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEgPyB0aGlzLl9kYXRhIDogdGhpcy5ncmlkLmlzVHJlZVJvdyhyZWMpID8gcmVjLmRhdGEgOiByZWM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IFJvd1R5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneFRyZWVHcmlkUm93W10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmVlUm93LmV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5mb3JFYWNoKChyZWMsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hUcmVlR3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChyb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmdldFJvd0J5S2V5KHRoaXMudHJlZVJvdy5wYXJlbnQ/LnJvd0lEKTtcclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGNoaWxkIHJvd3MgZXhpc3QuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZVJvdy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmVlUm93LmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBgSVRyZWVHcmlkUmVjb3JkYCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSByb3cgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRyZWUgZ3JpZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCByb3dQYXJlbnQgPSB0aGlzLnRyZWVHcmlkLmdldFJvd0J5S2V5KDEpLnRyZWVSb3cucGFyZW50O1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdHJlZVJvdygpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmVlUm93ID8/IHRoaXMuZ3JpZC5yZWNvcmRzLmdldCh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IGVzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy50cmVlUm93KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gVE9ETyBjZWxsXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSkgPyB0aGlzLnRyZWVSb3cuaXNGaWx0ZXJlZE91dFBhcmVudCA9PT0gdW5kZWZpbmVkIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICB3aGlsZSAocm93LnBhcmVudCkge1xyXG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcm93IGlzbGFuZHMgZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmNoaWxkTGF5b3V0S2V5cy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5pbmRleE9mKHRoaXMuZ3JpZC5kYXRhVmlld1swXSk7XHJcbiAgICAgICAgY29uc3QgZXhwYW5kZWRSb3dzID0gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5maWx0ZXIoKHJlYywgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaXJzdFJvd0luZCArIGV4cGFuZGVkUm93cy5sZW5ndGggKyB0aGlzLmluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2VsbHMoKTogQ2VsbFR5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBDZWxsVHlwZVtdID0gW107XHJcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsOiBDZWxsVHlwZSA9IG5ldyBJZ3hHcmlkQ2VsbCh0aGlzLmdyaWQsIHRoaXMuaW5kZXgsIGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIHJlcy5wdXNoKGNlbGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcm91cEJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHJvdyBpbmRleC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0dyb3VwQnlSb3c6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUdyb3VwQnlSZWNvcmQgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIGdyb3VwIHJlY29yZCwgaWYgdGhlIHJvdyBpcyBhIEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZ3JvdXBSb3coKTogSUdyb3VwQnlSZWNvcmQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cFJvdyA/IHRoaXMuX2dyb3VwUm93IDogdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGQgcm93cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBSb3dUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBJZ3hHcmlkUm93W10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyb3VwUm93LnJlY29yZHMuZm9yRWFjaCgocmVjLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZCwgdGhpcy5pbmRleCArIDEgKyBpLCByZWMpO1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBwcml2YXRlIF9ncm91cFJvdz86IElHcm91cEJ5UmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQnlSb3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZXZlcnkocm93ID0+IHJvdy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFtyb3cua2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3Jvdy5rZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogY29uc3QgZ3JvdXBSb3dFeHBhbmRlZCA9IGdyb3VwUm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFQSS5zZXRfZ3JvdXByb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZ3JvdXBSb3csIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPyB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLnJvdyA9PT0gdGhpcy5pbmRleCA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGdyb3VwUm93LnRvZ2dsZSgpXHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgZ3JpZEFQSSgpOiBJZ3hHcmlkQVBJU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJIGFzIElneEdyaWRBUElTZXJ2aWNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByb3cgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWx3YXlzIHRydWUsIGJlY2F1c2UgdGhpcyBpcyBpbiBpbnN0YW5jZSBvZiBhbiBJZ3hHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTdW1tYXJ5Um93OiBib29sZWFuO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cmVudCBncmlkIHR5cGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBncmlkVHlwZTogR3JpZEluc3RhbmNlVHlwZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBJR3JvdXBCeVJlY29yZCBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgcmVjb3JkLCBpZiB0aGUgcm93IGlzIGEgR3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdW1tYXJpZXMoKTogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1bW1hcmllcyA/IHRoaXMuX3N1bW1hcmllcyA6IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XS5zdW1tYXJpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucyAmJiB0aGlzLmdyaWQucGFnZSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRUeXBlID09PSBHcmlkSW5zdGFuY2VUeXBlLlRyZWVHcmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4VHJlZUdyaWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSB0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Um93SW5kZXggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIGluZGV4OiBudW1iZXIsIHByaXZhdGUgX3N1bW1hcmllcz86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIHR5cGU/OiBHcmlkSW5zdGFuY2VUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5pc1N1bW1hcnlSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ3JpZFR5cGUgPSB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um9vdFBhcmVudChyb3c6IElUcmVlR3JpZFJlY29yZCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvdztcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -109,7 +109,7 @@ IgxGridHeaderRowComponent.decorators = [
|
|
|
109
109
|
{ type: Component, args: [{
|
|
110
110
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
111
111
|
selector: 'igx-grid-header-row',
|
|
112
|
-
template: "<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n [
|
|
112
|
+
template: "<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n <!-- Column headers area -->\n <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n\n <!-- Left column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length <= 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length > 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n\n <!-- Row dragging area -->\n <ng-container *ngIf=\"grid.rowDraggable\">\n <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n <div style=\"visibility: hidden;\">\n <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Row selectors area -->\n <ng-container *ngIf=\"grid.showRowSelectors\">\n <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n (click)=\"headerRowSelection($event)\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container #headSelector\n *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- Hierarchical grids expand all area -->\n <ng-container *ngIf=\"isHierarchicalGrid\">\n <div #headerHierarchyExpander\n (click)=\"grid.toggleAll()\"\n (pointerdown)=\"$event.preventDefault()\"\n [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n [ngClass]=\"{\n 'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n 'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n 'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n }\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n </div>\n </ng-container>\n\n\n <!-- Grouping icon toggle area -->\n <ng-container *ngIf=\"grid?.groupingExpressions?.length\">\n <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n (click)=\"grid.toggleAllGroupRows()\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Pinned columns collection from the start -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n\n <!-- Unpinned columns collection -->\n <ng-template igxGridFor #headerVirtualContainer let-column\n [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForScrollOrientation]=\"'horizontal'\"\n >\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-template>\n\n <!-- Pinned columns collection at the end -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && !grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.left]=\"column.rightPinnedOffset\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Filter row area -->\n <ng-container *ngIf=\"grid.filteringService.isFilterRowVisible\">\n <igx-grid-filtering-row #filteringRow\n [column]=\"grid.filteringService.filteredColumn\"\n [style.width.px]=\"width\">\n </igx-grid-filtering-row>\n </ng-container>\n\n <!-- Right column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag\">\n <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"context.selectedCount > 0 && context.totalCount === context.selectedCount\"\n [disableRipple]=\"true\"\n [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n [indeterminate]=\"context.selectedCount > 0 && context.selectedCount !== context.totalCount\"\n [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n #headerCheckbox>\n </igx-checkbox>\n </div>\n</ng-template>\n"
|
|
113
113
|
},] }
|
|
114
114
|
];
|
|
115
115
|
IgxGridHeaderRowComponent.ctorParameters = () => [
|
|
@@ -135,4 +135,4 @@ IgxGridHeaderRowComponent.propDecorators = {
|
|
|
135
135
|
filterRow: [{ type: ViewChild, args: [IgxGridFilteringRowComponent,] }],
|
|
136
136
|
headerHierarchyExpander: [{ type: ViewChild, args: ['headerHierarchyExpander',] }]
|
|
137
137
|
};
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9oZWFkZXJzL2dyaWQtaGVhZGVyLXJvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBVzVFOzs7Ozs7O0dBT0c7QUFNSCxNQUFNLE9BQU8seUJBQXlCO0lBOElsQyxZQUNZLEdBQTRCLEVBQzVCLEdBQXNCO1FBRHRCLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBMUlsQyxrQ0FBa0M7UUFFM0IsMkJBQXNCLEdBQXlCLEVBQUUsQ0FBQztRQUV6RCxvQ0FBb0M7UUFFN0IsNkJBQXdCLEdBQXlCLEVBQUUsQ0FBQztJQXFJdkQsQ0FBQztJQXZITDs7O09BR0c7SUFDSCxJQUNXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQWVEOzs7O09BSUc7SUFDSCxJQUFXLE1BQU07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QUUsSUFBSSxFQUFFO2tDQUdqRixTQUFTLFNBQUMscUJBQXFCO3NDQUcvQixTQUFTLFNBQUMseUJBQXlCO21DQUduQyxTQUFTLFNBQUMsc0JBQXNCO3VDQUdoQyxTQUFTLFNBQUMsMEJBQTBCO3dCQUdwQyxTQUFTLFNBQUMsNEJBQTRCO3NDQVN0QyxTQUFTLFNBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEZpbHRlcmluZ1Jvd0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlcmluZy9iYXNlL2dyaWQtZmlsdGVyaW5nLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2dyaWQtaGVhZGVyLWdyb3VwLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4R3JpZFJvd1NlbGVjdG9yc1RlbXBsYXRlQ29udGV4dCB7XG4gICAgJGltcGxpY2l0OiB7XG4gICAgICAgIHNlbGVjdGVkQ291bnQ6IG51bWJlcjtcbiAgICAgICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgICAgICBzZWxlY3RBbGw/OiAoKSA9PiB2b2lkO1xuICAgICAgICBkZXNlbGVjdEFsbD86ICgpID0+IHZvaWQ7XG4gICAgfTtcbn1cblxuLyoqXG4gKlxuICogRm9yIGFsbCBpbnRlbnRzICYgcHVycG9zZXMgdHJlYXQgdGhpcyBjb21wb25lbnQgYXMgd2hhdCBhIDx0aGVhZD4gdXN1YWxseSBpcyBpbiB0aGUgZGVmYXVsdCA8dGFibGU+IGVsZW1lbnQuXG4gKlxuICogVGhpcyBjb250YWluZXIgaG9sZHMgdGhlIGdyaWQgaGVhZGVyIGVsZW1lbnRzIGFuZCB0aGVpciBiZWhhdmlvci9pbnRlcmFjdGlvbnMuXG4gKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC1oZWFkZXItcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItcm93LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkSGVhZGVyUm93Q29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG5cbiAgICAvKiogVGhlIGdyaWQgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhpcyBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyaWQ6IGFueTsgLy9HcmlkVHlwZTtcblxuICAgIC8qKiBQaW5uZWQgY29sdW1ucyBvZiB0aGUgZ3JpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwaW5uZWRDb2x1bW5Db2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgLyoqIFVucGlubmVkIGNvbHVtbnMgb2YgdGhlIGdyaWQuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdW5waW5uZWRDb2x1bW5Db2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWN0aXZlRGVzY2VuZGFudDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGFzTVJMOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGhlYWQtLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgY29zeVN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZW5zaXR5ID09PSAnY29zeSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGhlYWQtLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY29tcGFjdFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZW5zaXR5ID09PSAnY29tcGFjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVhZGVyIGdyb3VwcyBpbnNpZGUgdGhlIGhlYWRlciByb3cuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrXG4gICAgICogTm90ZTogVGhlc2UgYXJlIG9ubHkgdGhlIHRvcCBsZXZlbCBoZWFkZXIgZ3JvdXBzIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpLWNvbHVtbiBoZWFkZXJzXG4gICAgICogb3IgYSBzcGVjaWZpYyBjb2x1bW4gbGF5b3V0LiBJZiB5b3Ugd2FudCB0byBnZXQgdGhlIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHVzZSB0aGUgYGdyb3Vwc2BcbiAgICAgKiBwcm9wZXJ0eSBiZWxvdy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogKi9cbiAgICBAVmlld0NoaWxkcmVuKElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudClcbiAgICBwdWJsaWMgX2dyb3VwczogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhdHRlbmVkIGhlYWRlciBncm91cHMgY29sbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cHMoKTogSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gZmxhdHRlbih0aGlzLl9ncm91cHM/LnRvQXJyYXkoKSA/PyBbXSk7XG4gICAgfVxuXG4gICAgLyoqIEhlYWRlciBjb21wb25lbnRzIGluIHRoZSBoZWFkZXIgcm93LiAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBzLm1hcChncm91cCA9PiBncm91cC5oZWFkZXIpO1xuICAgIH1cblxuICAgIC8qKiBGaWx0ZXJpbmcgY2VsbCBjb21wb25lbnRzIGluIHRoZSBoZWFkZXIgcm93LiAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBzLm1hcChncm91cCA9PiBncm91cC5maWx0ZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdmlydHVhbGl6ZWQgcGFydCBvZiB0aGUgaGVhZGVyIHJvdyBjb250YWluaW5nIHRoZSB1bnBpbm5lZCBoZWFkZXIgZ3JvdXBzLiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlclZpcnR1YWxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhlYWRlckNvbnRhaW5lcjogSWd4R3JpZEZvck9mRGlyZWN0aXZlPElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCdoZWFkZXJEcmFnQ29udGFpbmVyJylcbiAgICBwdWJsaWMgaGVhZGVyRHJhZ0NvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdoZWFkZXJTZWxlY3RvckNvbnRhaW5lcicpXG4gICAgcHVibGljIGhlYWRlclNlbGVjdG9yQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckdyb3VwQ29udGFpbmVyJylcbiAgICBwdWJsaWMgaGVhZGVyR3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZFNlbGVjdG9yQmFzZVRlbXBsYXRlJylcbiAgICBwdWJsaWMgaGVhZFNlbGVjdG9yQmFzZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hHcmlkUm93U2VsZWN0b3JzVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4R3JpZEZpbHRlcmluZ1Jvd0NvbXBvbmVudClcbiAgICBwdWJsaWMgZmlsdGVyUm93OiBJZ3hHcmlkRmlsdGVyaW5nUm93Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogRXhwYW5kL2NvbGxhcHNlIGFsbCBjaGlsZCBncmlkcyBhcmVhIGluIGEgaGllcmFyY2hpY2FsIGdyaWQuXG4gICAgICogYHVuZGVmaW5lZGAgaW4gdGhlIGJhc2UgYW5kIHRyZWUgZ3JpZHMuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWwgQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckhpZXJhcmNoeUV4cGFuZGVyJylcbiAgICBwdWJsaWMgaGVhZGVySGllcmFyY2h5RXhwYW5kZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgcHVibGljIGdldCBuYXZpZ2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdmlnYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgZ3JpZCBpbnN0YW5jZSBpcyBhIGhpZXJhcmNoaWNhbCBncmlkLlxuICAgICAqIGFzIG9ubHkgaGllcmFyY2hpY2FsIGdyaWRzIGhhdmUgdGhlIGBpc0hpZXJhcmNoaWNhbFJlY29yZGAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzSGllcmFyY2hpY2FsR3JpZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmlzSGllcmFyY2hpY2FsUmVjb3JkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5kZW50YXRpb25DU1NDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gYGlneC1ncmlkX19oZWFkZXItaW5kZW50YXRpb24gaWd4LWdyaWRfX3Jvdy1pbmRlbnRhdGlvbi0tbGV2ZWwtJHt0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGh9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd1NlbGVjdG9yc0NvbnRleHQoKTogSWd4R3JpZFJvd1NlbGVjdG9yc1RlbXBsYXRlQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQ6IHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmZpbHRlcmVkU2VsZWN0ZWRSb3dJZHMubGVuZ3RoIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50OiB0aGlzLmdyaWQudG90YWxSb3dzQ291bnRBZnRlckZpbHRlciBhcyBudW1iZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJZ3hHcmlkUm93U2VsZWN0b3JzVGVtcGxhdGVDb250ZXh0O1xuXG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgY3R4LiRpbXBsaWNpdC5zZWxlY3RBbGwgPSAoKSA9PiB0aGlzLmdyaWQuc2VsZWN0QWxsUm93cygpO1xuICAgICAgICAgICAgY3R4LiRpbXBsaWNpdC5kZXNlbGVjdEFsbCA9ICgpID0+IHRoaXMuZ3JpZC5kZXNlbGVjdEFsbFJvd3MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7IH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaG9vayBleGlzdHMgYXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgdW5mb3J0dW5hdGUgZmFjdFxuICAgICAqIHRoYXQgd2hlbiB3ZSBoYXZlIHBpbm5lZCBjb2x1bW5zIGluIHRoZSBncmlkLCB0aGUgdW5waW5uZWQgY29sdW1ucyBoZWFkZXJzXG4gICAgICogYXJlIGFmZmVjdGVkIGJ5IGEgZGVsYXllZCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIGFmdGVyIGEgaG9yaXpvbnRhbCBzY3JvbGwgOihcbiAgICAgKiBUaHVzLCB3ZSB0ZWxsIHRoZSBwYXJlbnQgZ3JpZCBjaGFuZ2UgZGV0ZWN0b3IgdG8gY2hlY2sgdXMgYXQgZWFjaCBjeWNsZS5cbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhlYWRlclJvd1NlbGVjdGlvbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmFyZUFsbFJvd1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyUm93U2VsZWN0aW9uKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEFsbFJvd3MoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9oZWFkZXJzL2dyaWQtaGVhZGVyLXJvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBVzVFOzs7Ozs7O0dBT0c7QUFNSCxNQUFNLE9BQU8seUJBQXlCO0lBOElsQyxZQUNZLEdBQTRCLEVBQzVCLEdBQXNCO1FBRHRCLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBMUlsQyxrQ0FBa0M7UUFFM0IsMkJBQXNCLEdBQXlCLEVBQUUsQ0FBQztRQUV6RCxvQ0FBb0M7UUFFN0IsNkJBQXdCLEdBQXlCLEVBQUUsQ0FBQztJQXFJdkQsQ0FBQztJQXZITDs7O09BR0c7SUFDSCxJQUNXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQWVEOzs7O09BSUc7SUFDSCxJQUFXLE1BQU07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QUUsSUFBSSxFQUFFO2tDQUdqRixTQUFTLFNBQUMscUJBQXFCO3NDQUcvQixTQUFTLFNBQUMseUJBQXlCO21DQUduQyxTQUFTLFNBQUMsc0JBQXNCO3VDQUdoQyxTQUFTLFNBQUMsMEJBQTBCO3dCQUdwQyxTQUFTLFNBQUMsNEJBQTRCO3NDQVN0QyxTQUFTLFNBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEZpbHRlcmluZ1Jvd0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlcmluZy9iYXNlL2dyaWQtZmlsdGVyaW5nLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2dyaWQtaGVhZGVyLWdyb3VwLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4R3JpZFJvd1NlbGVjdG9yc1RlbXBsYXRlQ29udGV4dCB7XG4gICAgJGltcGxpY2l0OiB7XG4gICAgICAgIHNlbGVjdGVkQ291bnQ6IG51bWJlcjtcbiAgICAgICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgICAgICBzZWxlY3RBbGw/OiAoKSA9PiB2b2lkO1xuICAgICAgICBkZXNlbGVjdEFsbD86ICgpID0+IHZvaWQ7XG4gICAgfTtcbn1cblxuLyoqXG4gKlxuICogRm9yIGFsbCBpbnRlbnRzICYgcHVycG9zZXMgdHJlYXQgdGhpcyBjb21wb25lbnQgYXMgd2hhdCBhIDx0aGVhZD4gdXN1YWxseSBpcyBpbiB0aGUgZGVmYXVsdCA8dGFibGU+IGVsZW1lbnQuXG4gKlxuICogVGhpcyBjb250YWluZXIgaG9sZHMgdGhlIGdyaWQgaGVhZGVyIGVsZW1lbnRzIGFuZCB0aGVpciBiZWhhdmlvci9pbnRlcmFjdGlvbnMuXG4gKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC1oZWFkZXItcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItcm93LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkSGVhZGVyUm93Q29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG5cbiAgICAvKiogVGhlIGdyaWQgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhpcyBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyaWQ6IGFueTsgLy9HcmlkVHlwZTtcblxuICAgIC8qKiBQaW5uZWQgY29sdW1ucyBvZiB0aGUgZ3JpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwaW5uZWRDb2x1bW5Db2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgLyoqIFVucGlubmVkIGNvbHVtbnMgb2YgdGhlIGdyaWQuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdW5waW5uZWRDb2x1bW5Db2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWN0aXZlRGVzY2VuZGFudDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGFzTVJMOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlbnNpdHk6IERpc3BsYXlEZW5zaXR5O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGhlYWQtLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgY29zeVN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZW5zaXR5ID09PSAnY29zeSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWQtdGhlYWQtLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY29tcGFjdFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZW5zaXR5ID09PSAnY29tcGFjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVhZGVyIGdyb3VwcyBpbnNpZGUgdGhlIGhlYWRlciByb3cuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrXG4gICAgICogTm90ZTogVGhlc2UgYXJlIG9ubHkgdGhlIHRvcCBsZXZlbCBoZWFkZXIgZ3JvdXBzIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpLWNvbHVtbiBoZWFkZXJzXG4gICAgICogb3IgYSBzcGVjaWZpYyBjb2x1bW4gbGF5b3V0LiBJZiB5b3Ugd2FudCB0byBnZXQgdGhlIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHVzZSB0aGUgYGdyb3Vwc2BcbiAgICAgKiBwcm9wZXJ0eSBiZWxvdy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogKi9cbiAgICBAVmlld0NoaWxkcmVuKElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudClcbiAgICBwdWJsaWMgX2dyb3VwczogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhdHRlbmVkIGhlYWRlciBncm91cHMgY29sbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cHMoKTogSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gZmxhdHRlbih0aGlzLl9ncm91cHM/LnRvQXJyYXkoKSA/PyBbXSk7XG4gICAgfVxuXG4gICAgLyoqIEhlYWRlciBjb21wb25lbnRzIGluIHRoZSBoZWFkZXIgcm93LiAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBzLm1hcChncm91cCA9PiBncm91cC5oZWFkZXIpO1xuICAgIH1cblxuICAgIC8qKiBGaWx0ZXJpbmcgY2VsbCBjb21wb25lbnRzIGluIHRoZSBoZWFkZXIgcm93LiAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBzLm1hcChncm91cCA9PiBncm91cC5maWx0ZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdmlydHVhbGl6ZWQgcGFydCBvZiB0aGUgaGVhZGVyIHJvdyBjb250YWluaW5nIHRoZSB1bnBpbm5lZCBoZWFkZXIgZ3JvdXBzLiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlclZpcnR1YWxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhlYWRlckNvbnRhaW5lcjogSWd4R3JpZEZvck9mRGlyZWN0aXZlPElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCdoZWFkZXJEcmFnQ29udGFpbmVyJylcbiAgICBwdWJsaWMgaGVhZGVyRHJhZ0NvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdoZWFkZXJTZWxlY3RvckNvbnRhaW5lcicpXG4gICAgcHVibGljIGhlYWRlclNlbGVjdG9yQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckdyb3VwQ29udGFpbmVyJylcbiAgICBwdWJsaWMgaGVhZGVyR3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZFNlbGVjdG9yQmFzZVRlbXBsYXRlJylcbiAgICBwdWJsaWMgaGVhZFNlbGVjdG9yQmFzZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hHcmlkUm93U2VsZWN0b3JzVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4R3JpZEZpbHRlcmluZ1Jvd0NvbXBvbmVudClcbiAgICBwdWJsaWMgZmlsdGVyUm93OiBJZ3hHcmlkRmlsdGVyaW5nUm93Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogRXhwYW5kL2NvbGxhcHNlIGFsbCBjaGlsZCBncmlkcyBhcmVhIGluIGEgaGllcmFyY2hpY2FsIGdyaWQuXG4gICAgICogYHVuZGVmaW5lZGAgaW4gdGhlIGJhc2UgYW5kIHRyZWUgZ3JpZHMuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWwgQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckhpZXJhcmNoeUV4cGFuZGVyJylcbiAgICBwdWJsaWMgaGVhZGVySGllcmFyY2h5RXhwYW5kZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgcHVibGljIGdldCBuYXZpZ2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdmlnYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgZ3JpZCBpbnN0YW5jZSBpcyBhIGhpZXJhcmNoaWNhbCBncmlkLlxuICAgICAqIGFzIG9ubHkgaGllcmFyY2hpY2FsIGdyaWRzIGhhdmUgdGhlIGBpc0hpZXJhcmNoaWNhbFJlY29yZGAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzSGllcmFyY2hpY2FsR3JpZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ncmlkLmlzSGllcmFyY2hpY2FsUmVjb3JkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5kZW50YXRpb25DU1NDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gYGlneC1ncmlkX19oZWFkZXItaW5kZW50YXRpb24gaWd4LWdyaWRfX3Jvdy1pbmRlbnRhdGlvbi0tbGV2ZWwtJHt0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGh9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd1NlbGVjdG9yc0NvbnRleHQoKTogSWd4R3JpZFJvd1NlbGVjdG9yc1RlbXBsYXRlQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQ6IHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmZpbHRlcmVkU2VsZWN0ZWRSb3dJZHMubGVuZ3RoIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50OiB0aGlzLmdyaWQudG90YWxSb3dzQ291bnRBZnRlckZpbHRlciBhcyBudW1iZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJZ3hHcmlkUm93U2VsZWN0b3JzVGVtcGxhdGVDb250ZXh0O1xuXG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgY3R4LiRpbXBsaWNpdC5zZWxlY3RBbGwgPSAoKSA9PiB0aGlzLmdyaWQuc2VsZWN0QWxsUm93cygpO1xuICAgICAgICAgICAgY3R4LiRpbXBsaWNpdC5kZXNlbGVjdEFsbCA9ICgpID0+IHRoaXMuZ3JpZC5kZXNlbGVjdEFsbFJvd3MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7IH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaG9vayBleGlzdHMgYXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgdW5mb3J0dW5hdGUgZmFjdFxuICAgICAqIHRoYXQgd2hlbiB3ZSBoYXZlIHBpbm5lZCBjb2x1bW5zIGluIHRoZSBncmlkLCB0aGUgdW5waW5uZWQgY29sdW1ucyBoZWFkZXJzXG4gICAgICogYXJlIGFmZmVjdGVkIGJ5IGEgZGVsYXllZCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIGFmdGVyIGEgaG9yaXpvbnRhbCBzY3JvbGwgOihcbiAgICAgKiBUaHVzLCB3ZSB0ZWxsIHRoZSBwYXJlbnQgZ3JpZCBjaGFuZ2UgZGV0ZWN0b3IgdG8gY2hlY2sgdXMgYXQgZWFjaCBjeWNsZS5cbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhlYWRlclJvd1NlbGVjdGlvbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmFyZUFsbFJvd1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyUm93U2VsZWN0aW9uKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEFsbFJvd3MoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|