igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
188 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Pipe } from '@angular/core';
import { GridBaseAPIService } from '../api.service';
import { GridSummaryPosition, GridSummaryCalculationMode } from '../grid-base.component';
/**
* @hidden
*/
var IgxGridSummaryPipe = /** @class */ (function () {
function IgxGridSummaryPipe(gridAPI) {
this.gridAPI = (/** @type {?} */ (gridAPI));
}
/**
* @param {?} flatData
* @param {?} hasSummary
* @param {?} summaryCalculationMode
* @param {?} summaryPosition
* @param {?} id
* @param {?} pipeTrigger
* @param {?} summaryPipeTrigger
* @return {?}
*/
IgxGridSummaryPipe.prototype.transform = /**
* @param {?} flatData
* @param {?} hasSummary
* @param {?} summaryCalculationMode
* @param {?} summaryPosition
* @param {?} id
* @param {?} pipeTrigger
* @param {?} summaryPipeTrigger
* @return {?}
*/
function (flatData, hasSummary, summaryCalculationMode, summaryPosition, id, pipeTrigger, summaryPipeTrigger) {
if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {
return flatData;
}
return this.addSummaryRows(id, flatData, summaryPosition);
};
/**
* @private
* @param {?} gridId
* @param {?} collection
* @param {?} summaryPosition
* @return {?}
*/
IgxGridSummaryPipe.prototype.addSummaryRows = /**
* @private
* @param {?} gridId
* @param {?} collection
* @param {?} summaryPosition
* @return {?}
*/
function (gridId, collection, summaryPosition) {
/** @type {?} */
var recordsWithSummary = [];
/** @type {?} */
var lastChildMap = new Map();
/** @type {?} */
var grid = this.gridAPI.grid;
/** @type {?} */
var maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();
for (var i = 0; i < collection.length; i++) {
/** @type {?} */
var record = collection[i];
recordsWithSummary.push(record);
/** @type {?} */
var recordId = void 0;
/** @type {?} */
var groupByRecord = null;
if (grid.isGroupByRecord(record)) {
groupByRecord = (/** @type {?} */ (record));
recordId = this.gridAPI.get_groupBy_record_id(groupByRecord);
}
else {
recordId = this.gridAPI.get_row_id(record);
}
if (summaryPosition === GridSummaryPosition.bottom && lastChildMap.has(recordId)) {
/** @type {?} */
var groupRecords = lastChildMap.get(recordId);
for (var j = 0; j < groupRecords.length; j++) {
/** @type {?} */
var groupRecord = groupRecords[j];
/** @type {?} */
var groupRecordId = this.gridAPI.get_groupBy_record_id(groupRecord);
/** @type {?} */
var records = this.removeDeletedRecord(grid, groupRecord.records.slice());
/** @type {?} */
var summaries = grid.summaryService.calculateSummaries(groupRecordId, records);
/** @type {?} */
var summaryRecord = {
summaries: summaries,
max: maxSummaryHeight
};
recordsWithSummary.push(summaryRecord);
}
}
if (groupByRecord === null || !grid.isExpandedGroup(groupByRecord)) {
continue;
}
if (summaryPosition === GridSummaryPosition.top) {
/** @type {?} */
var records = this.removeDeletedRecord(grid, groupByRecord.records.slice());
/** @type {?} */
var summaries = grid.summaryService.calculateSummaries(recordId, records);
/** @type {?} */
var summaryRecord = {
summaries: summaries,
max: maxSummaryHeight
};
recordsWithSummary.push(summaryRecord);
}
else if (summaryPosition === GridSummaryPosition.bottom) {
/** @type {?} */
var lastChild = groupByRecord;
while (lastChild.groups && lastChild.groups.length > 0 && grid.isExpandedGroup(lastChild)) {
lastChild = lastChild.groups[lastChild.groups.length - 1];
}
/** @type {?} */
var lastChildId = void 0;
if (grid.isExpandedGroup(lastChild)) {
lastChildId = this.gridAPI.get_row_id(lastChild.records[lastChild.records.length - 1]);
}
else {
lastChildId = this.gridAPI.get_groupBy_record_id(lastChild);
}
/** @type {?} */
var groupRecords = lastChildMap.get(lastChildId);
if (!groupRecords) {
groupRecords = [];
lastChildMap.set(lastChildId, groupRecords);
}
groupRecords.unshift(groupByRecord);
}
}
return recordsWithSummary;
};
/**
* @private
* @param {?} grid
* @param {?} data
* @return {?}
*/
IgxGridSummaryPipe.prototype.removeDeletedRecord = /**
* @private
* @param {?} grid
* @param {?} data
* @return {?}
*/
function (grid, data) {
if (!grid.transactions.enabled) {
return data;
}
/** @type {?} */
var deletedRows = grid.transactions.getTransactionLog().filter(function (t) { return t.type === 'delete'; }).map(function (t) { return t.id; });
deletedRows.forEach(function (rowID) {
/** @type {?} */
var tempData = grid.primaryKey ? data.map(function (rec) { return rec[grid.primaryKey]; }) : data;
/** @type {?} */
var index = tempData.indexOf(rowID);
if (index !== -1) {
data.splice(index, 1);
}
});
return data;
};
IgxGridSummaryPipe.decorators = [
{ type: Pipe, args: [{
name: 'gridSummary',
pure: true
},] }
];
/** @nocollapse */
IgxGridSummaryPipe.ctorParameters = function () { return [
{ type: GridBaseAPIService }
]; };
return IgxGridSummaryPipe;
}());
export { IgxGridSummaryPipe };
if (false) {
/**
* @type {?}
* @private
*/
IgxGridSummaryPipe.prototype.gridAPI;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zdW1tYXJ5LnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2dyaWQvZ3JpZC5zdW1tYXJ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBd0IsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFNbEk7SUFPSSw0QkFBWSxPQUFxRTtRQUM3RSxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixPQUFPLEVBQUEsQ0FBQztJQUM5QyxDQUFDOzs7Ozs7Ozs7OztJQUVNLHNDQUFTOzs7Ozs7Ozs7O0lBQWhCLFVBQWlCLFFBQWUsRUFDNUIsVUFBbUIsRUFDbkIsc0JBQWtELEVBQ2xELGVBQW9DLEVBQ3BDLEVBQVUsRUFBRSxXQUFtQixFQUFFLGtCQUEwQjtRQUUzRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxJQUFJLHNCQUFzQixLQUFLLDBCQUEwQixDQUFDLGFBQWEsRUFBRTtZQUNqRyxPQUFPLFFBQVEsQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7Ozs7Ozs7O0lBRU8sMkNBQWM7Ozs7Ozs7SUFBdEIsVUFBdUIsTUFBYyxFQUFFLFVBQWlCLEVBQUUsZUFBb0M7O1lBQ3BGLGtCQUFrQixHQUFHLEVBQUU7O1lBQ3ZCLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUI7O1lBQy9DLElBQUksR0FBcUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJOztZQUMxQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFO1FB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S0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztnQkEvR0osSUFBSSxTQUFDO29CQUNGLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUUsSUFBSTtpQkFDYjs7OztnQkFWUSxrQkFBa0I7O0lBdUgzQix5QkFBQztDQUFBLEFBaEhELElBZ0hDO1NBNUdZLGtCQUFrQjs7Ozs7O0lBQzNCLHFDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlQ29tcG9uZW50LCBHcmlkU3VtbWFyeVBvc2l0aW9uLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgSUdyaWREYXRhQmluZGFibGUgfSBmcm9tICcuLi9ncmlkLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElTdW1tYXJ5UmVjb3JkIH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdncmlkU3VtbWFyeScsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3VtbWFyeVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIGdyaWRBUEk6IElneEdyaWRBUElTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlQ29tcG9uZW50ICYgSUdyaWREYXRhQmluZGFibGU+KSB7XG4gICAgICAgIHRoaXMuZ3JpZEFQSSA9IDxJZ3hHcmlkQVBJU2VydmljZT5ncmlkQVBJO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oZmxhdERhdGE6IGFueVtdLFxuICAgICAgICBoYXNTdW1tYXJ5OiBib29sZWFuLFxuICAgICAgICBzdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlOiBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSxcbiAgICAgICAgc3VtbWFyeVBvc2l0aW9uOiBHcmlkU3VtbWFyeVBvc2l0aW9uLFxuICAgICAgICBpZDogc3RyaW5nLCBwaXBlVHJpZ2dlcjogbnVtYmVyLCBzdW1tYXJ5UGlwZVRyaWdnZXI6IG51bWJlcik6IGFueVtdIHtcblxuICAgICAgICBpZiAoIWZsYXREYXRhIHx8ICFoYXNTdW1tYXJ5IHx8IHN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgPT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFN1bW1hcnlSb3dzKGlkLCBmbGF0RGF0YSwgc3VtbWFyeVBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFN1bW1hcnlSb3dzKGdyaWRJZDogc3RyaW5nLCBjb2xsZWN0aW9uOiBhbnlbXSwgc3VtbWFyeVBvc2l0aW9uOiBHcmlkU3VtbWFyeVBvc2l0aW9uKTogYW55W10ge1xuICAgICAgICBjb25zdCByZWNvcmRzV2l0aFN1bW1hcnkgPSBbXTtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTWFwID0gbmV3IE1hcDxhbnksIElHcm91cEJ5UmVjb3JkW10+KCk7XG4gICAgICAgIGNvbnN0IGdyaWQ6IElneEdyaWRDb21wb25lbnQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgY29uc3QgbWF4U3VtbWFyeUhlaWdodCA9IGdyaWQuc3VtbWFyeVNlcnZpY2UuY2FsY01heFN1bW1hcnlIZWlnaHQoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGNvbGxlY3Rpb25baV07XG4gICAgICAgICAgICByZWNvcmRzV2l0aFN1bW1hcnkucHVzaChyZWNvcmQpO1xuXG4gICAgICAgICAgICBsZXQgcmVjb3JkSWQ7XG4gICAgICAgICAgICBsZXQgZ3JvdXBCeVJlY29yZDogSUdyb3VwQnlSZWNvcmQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjb3JkKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwQnlSZWNvcmQgPSByZWNvcmQgYXMgSUdyb3VwQnlSZWNvcmQ7XG4gICAgICAgICAgICAgICAgcmVjb3JkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X2dyb3VwQnlfcmVjb3JkX2lkKGdyb3VwQnlSZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWNvcmRJZCA9IHRoaXMuZ3JpZEFQSS5nZXRfcm93X2lkKHJlY29yZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIGxhc3RDaGlsZE1hcC5oYXMocmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWNvcmRzID0gbGFzdENoaWxkTWFwLmdldChyZWNvcmRJZCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwUmVjb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY29yZCA9IGdyb3VwUmVjb3Jkc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWNvcmRJZCA9IHRoaXMuZ3JpZEFQSS5nZXRfZ3JvdXBCeV9yZWNvcmRfaWQoZ3JvdXBSZWNvcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy5yZW1vdmVEZWxldGVkUmVjb3JkKGdyaWQsIGdyb3VwUmVjb3JkLnJlY29yZHMuc2xpY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IGdyaWQuc3VtbWFyeVNlcnZpY2UuY2FsY3VsYXRlU3VtbWFyaWVzKGdyb3VwUmVjb3JkSWQsIHJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVjb3JkOiBJU3VtbWFyeVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcmllczogc3VtbWFyaWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBtYXhTdW1tYXJ5SGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZHNXaXRoU3VtbWFyeS5wdXNoKHN1bW1hcnlSZWNvcmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdyb3VwQnlSZWNvcmQgPT09IG51bGwgfHwgIWdyaWQuaXNFeHBhbmRlZEdyb3VwKGdyb3VwQnlSZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24udG9wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMucmVtb3ZlRGVsZXRlZFJlY29yZChncmlkLCBncm91cEJ5UmVjb3JkLnJlY29yZHMuc2xpY2UoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gZ3JpZC5zdW1tYXJ5U2VydmljZS5jYWxjdWxhdGVTdW1tYXJpZXMocmVjb3JkSWQsIHJlY29yZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlSZWNvcmQ6IElTdW1tYXJ5UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJpZXM6IHN1bW1hcmllcyxcbiAgICAgICAgICAgICAgICAgICAgbWF4OiAgbWF4U3VtbWFyeUhlaWdodFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1dpdGhTdW1tYXJ5LnB1c2goc3VtbWFyeVJlY29yZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENoaWxkID0gZ3JvdXBCeVJlY29yZDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0Q2hpbGQuZ3JvdXBzICYmIGxhc3RDaGlsZC5ncm91cHMubGVuZ3RoID4gMCAmJiBncmlkLmlzRXhwYW5kZWRHcm91cChsYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IGxhc3RDaGlsZC5ncm91cHNbbGFzdENoaWxkLmdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgbGFzdENoaWxkSWQ7XG4gICAgICAgICAgICAgICAgaWYgKGdyaWQuaXNFeHBhbmRlZEdyb3VwKGxhc3RDaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X3Jvd19pZChsYXN0Q2hpbGQucmVjb3Jkc1tsYXN0Q2hpbGQucmVjb3Jkcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X2dyb3VwQnlfcmVjb3JkX2lkKGxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwUmVjb3JkcyA9IGxhc3RDaGlsZE1hcC5nZXQobGFzdENoaWxkSWQpO1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGRNYXAuc2V0KGxhc3RDaGlsZElkLCBncm91cFJlY29yZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cFJlY29yZHMudW5zaGlmdChncm91cEJ5UmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlY29yZHNXaXRoU3VtbWFyeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZURlbGV0ZWRSZWNvcmQoZ3JpZCwgZGF0YSkge1xuICAgICAgICBpZiAoIWdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRSb3dzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0VHJhbnNhY3Rpb25Mb2coKS5maWx0ZXIodCA9PiB0LnR5cGUgPT09ICdkZWxldGUnKS5tYXAodCA9PiB0LmlkKTtcbiAgICAgICAgZGVsZXRlZFJvd3MuZm9yRWFjaChyb3dJRCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wRGF0YSA9IGdyaWQucHJpbWFyeUtleSA/IGRhdGEubWFwKHJlYyA9PiByZWNbZ3JpZC5wcmltYXJ5S2V5XSkgOiBkYXRhO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0ZW1wRGF0YS5pbmRleE9mKHJvd0lEKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG4iXX0=