@circe/table
Version:
Circe Components for Angular :: Table Component
113 lines • 17.4 kB
JavaScript
import { BehaviorSubject } from 'rxjs';
export class NpaTableConfiguration {
constructor(rows$, configModel) {
this.tableHeight$ = new BehaviorSubject('');
this._defaultConfiguration = {
keyColumnParam: 'id',
defaultActionColumnId: 'id',
columns: [],
minColumnWidth: 50,
showHeader: true,
sortTable: true,
hoverRows: false,
truncateTexts: false,
emitOnScroll: false
};
this._rows$ = rows$;
this._processConfiguration(typeof configModel === 'object' ? Object.assign(Object.assign({}, this._defaultConfiguration), configModel) : this._defaultConfiguration);
}
_processConfiguration(config) {
if ('keyColumnParam' in config) {
this.keyColumnParam = config.keyColumnParam;
}
else {
throw new Error('You must provide keyColumnParam config in order to get the id from every row.');
}
if ('defaultActionColumnId' in config) {
this.defaultActionColumnId = config.defaultActionColumnId;
}
if ('showHeader' in config) {
this.showHeader = config.showHeader;
}
if ('sortTable' in config) {
this.sortTable = config.sortTable;
}
if ('hoverRows' in config) {
this.hoverRows = config.hoverRows;
}
if ('tableHeight' in config) {
this.tableHeight$.next(config.tableHeight + 'px');
}
if ('minColumnWidth' in config) {
this.minColumnWidth = config.minColumnWidth;
}
if ('truncateTexts' in config) {
this.truncateTexts = config.truncateTexts;
}
if ('actionsConfig' in config) {
this.actionsConfigurationModel = config.actionsConfig;
}
if ('emitOnScroll' in config) {
this.emitOnScroll = config.emitOnScroll;
}
if ('columns' in config) {
this.columns = this._processColumnsConfig(config.columns);
}
const _columnsLength = this.columns.length;
this.minRowWidth = (this.minColumnWidth * _columnsLength) + 24 * _columnsLength;
}
_processColumnsConfig(columns) {
const _auxColumns = [];
for (const column of columns) {
_auxColumns.push(Object.assign(Object.assign({}, column), { sortable: 'sortable' in column ? column.sortable : true }));
// this.checkboxColumnsModel[column.id] = {
// checkAll: false,
// checkNone: true,
// model: false
// };
}
const _columnsWidths = _auxColumns.map((c) => c.columnWidth);
this._calculateColumnsWidth(_columnsWidths);
// for (const _column of _auxColumns) {
// if (_column.type === 'checkbox') {
// const _checkboxColumnsModel: NpaTableCheckboxSelection = this.checkboxColumnsModel[_column.id];
// this.checkColumnCheckboxes(_column.id);
// _checkboxColumnsModel.model = _checkboxColumnsModel.checkAll || !_checkboxColumnsModel.checkNone;
// }
// }
return _auxColumns;
}
_calculateColumnsWidth(columnsWidths) {
const _showActionsColumn = this.actionsConfigurationModel && !this.actionsConfigurationModel.hideColumn;
const _columnsWidths = _showActionsColumn ?
[...columnsWidths, this.actionsConfigurationModel.columnWidth] : columnsWidths;
const totalPercentage = 100;
let gridColumnsWidth = [];
let auxPercentage = totalPercentage;
let columnWidthsCount = 0;
let columnsWithoutWidthCount = 0;
for (const _columnWidth of _columnsWidths) {
if (_columnWidth && (auxPercentage - _columnWidth) >= 0) {
auxPercentage -= _columnWidth;
columnWidthsCount++;
}
else {
columnsWithoutWidthCount++;
}
}
if (auxPercentage === totalPercentage) {
gridColumnsWidth = new Array(_columnsWidths.length).fill(`${totalPercentage / _columnsWidths.length}%`, 0, _columnsWidths.length);
}
else if (auxPercentage >= 0) {
gridColumnsWidth = _columnsWidths.map((columnWidth) => `${columnWidth !== null && columnWidth !== void 0 ? columnWidth : (auxPercentage / columnsWithoutWidthCount)}%`);
}
if (this.minColumnWidth) {
gridColumnsWidth = gridColumnsWidth.map((width, i) => {
const _minWidth = _showActionsColumn && i === gridColumnsWidth.length - 1 ? 16 : this.minColumnWidth;
return `minmax(${_minWidth}px, ${width})`;
});
}
this.columnsWidth = gridColumnsWidth.join(' ');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYmxlL3NyYy9saWIvY29uZmlndXJhdGlvbnMvdGFibGUuY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3ZDLE1BQU0sT0FBTyxxQkFBcUI7SUE2QmhDLFlBQVksS0FBNkMsRUFBRSxXQUFvQztRQW5CeEYsaUJBQVksR0FBNEIsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFPdkUsMEJBQXFCLEdBQTJCO1lBQ3RELGNBQWMsRUFBRSxJQUFJO1lBQ3BCLHFCQUFxQixFQUFFLElBQUk7WUFDM0IsT0FBTyxFQUFFLEVBQUU7WUFDWCxjQUFjLEVBQUUsRUFBRTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7UUFHQSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsaUNBQ3JELElBQUksQ0FBQyxxQkFBcUIsR0FBSyxXQUFXLEVBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUE4QjtRQUMxRCxJQUFJLGdCQUFnQixJQUFJLE1BQU0sRUFBRTtZQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7U0FDN0M7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztTQUNsRztRQUVELElBQUksdUJBQXVCLElBQUksTUFB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QkFDN0csT0FBTyxVQUFVLFNBQVMsT0FBTyxLQUFLLEdBQUcsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOcGFJZCB9IGZyb20gJ0BjaXJjZS9jb3JlJztcbmltcG9ydCB7XG4gIE5wYVRhYmxlQWN0aW9uc0NvbmZpZ3VyYXRpb25Nb2RlbCwgTnBhVGFibGVDaGVja2JveFNlbGVjdGlvbiwgTnBhVGFibGVDb2x1bW4sIE5wYVRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbk1vZGVsLFxuICBOcGFUYWJsZUNvbmZpZ01vZGVsLCBOcGFUYWJsZVNvcnRTb3VyY2Vcbn0gZnJvbSAnLi4vdGFibGUudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTnBhVGFibGVDb25maWd1cmF0aW9uPFQ+IHtcbiAgcHVibGljIGtleUNvbHVtblBhcmFtOiBzdHJpbmc7XG4gIHB1YmxpYyBkZWZhdWx0QWN0aW9uQ29sdW1uSWQ6IHN0cmluZztcbiAgcHVibGljIGNvbHVtbnM6IE5wYVRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbk1vZGVsPFQ+W107XG4gIHB1YmxpYyBhY3Rpb25zQ29uZmlndXJhdGlvbk1vZGVsOiBOcGFUYWJsZUFjdGlvbnNDb25maWd1cmF0aW9uTW9kZWw8VD47XG4gIHB1YmxpYyBtaW5Sb3dXaWR0aDogbnVtYmVyO1xuICBwdWJsaWMgaG92ZXJSb3dzOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd0hlYWRlcjogYm9vbGVhbjtcbiAgcHVibGljIHNvcnRUYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHRydW5jYXRlVGV4dHM6IGJvb2xlYW47XG4gIHB1YmxpYyB0YWJsZUhlaWdodCQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHVibGljIGNvbHVtbnNXaWR0aDogc3RyaW5nO1xuICBwdWJsaWMgbWluQ29sdW1uV2lkdGg6IG51bWJlcjtcbiAgcHVibGljIHNvcnRTb3VyY2U6IE5wYVRhYmxlU29ydFNvdXJjZTxUPjtcbiAgcHVibGljIGVtaXRPblNjcm9sbDogYm9vbGVhbjtcblxuICBwcml2YXRlIF9yb3dzJDogQmVoYXZpb3JTdWJqZWN0PE5wYVRhYmxlQ29sdW1uPFQ+W11bXT47XG4gIHByaXZhdGUgX2RlZmF1bHRDb25maWd1cmF0aW9uOiBOcGFUYWJsZUNvbmZpZ01vZGVsPFQ+ID0ge1xuICAgIGtleUNvbHVtblBhcmFtOiAnaWQnLFxuICAgIGRlZmF1bHRBY3Rpb25Db2x1bW5JZDogJ2lkJyxcbiAgICBjb2x1bW5zOiBbXSxcbiAgICBtaW5Db2x1bW5XaWR0aDogNTAsXG4gICAgc2hvd0hlYWRlcjogdHJ1ZSxcbiAgICBzb3J0VGFibGU6IHRydWUsXG4gICAgaG92ZXJSb3dzOiBmYWxzZSxcbiAgICB0cnVuY2F0ZVRleHRzOiBmYWxzZSxcbiAgICBlbWl0T25TY3JvbGw6IGZhbHNlXG4gIH07XG5cbiAgY29uc3RydWN0b3Iocm93cyQ6IEJlaGF2aW9yU3ViamVjdDxOcGFUYWJsZUNvbHVtbjxUPltdW10+LCBjb25maWdNb2RlbD86IE5wYVRhYmxlQ29uZmlnTW9kZWw8VD4pIHtcbiAgICB0aGlzLl9yb3dzJCA9IHJvd3MkO1xuICAgIHRoaXMuX3Byb2Nlc3NDb25maWd1cmF0aW9uKHR5cGVvZiBjb25maWdNb2RlbCA9PT0gJ29iamVjdCcgP1xuICAgICAgeyAuLi50aGlzLl9kZWZhdWx0Q29uZmlndXJhdGlvbiwgLi4uY29uZmlnTW9kZWwgfSA6IHRoaXMuX2RlZmF1bHRDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb2Nlc3NDb25maWd1cmF0aW9uKGNvbmZpZzogTnBhVGFibGVDb25maWdNb2RlbDxUPik6IHZvaWQge1xuICAgIGlmICgna2V5Q29sdW1uUGFyYW0nIGluIGNvbmZpZykge1xuICAgICAgdGhpcy5rZXlDb2x1bW5QYXJhbSA9IGNvbmZpZy5rZXlDb2x1bW5QYXJhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBwcm92aWRlIGtleUNvbHVtblBhcmFtIGNvbmZpZyBpbiBvcmRlciB0byBnZXQgdGhlIGlkIGZyb20gZXZlcnkgcm93LicpO1xuICAgIH1cblxuICAgIGlmICgnZGVmYXVsdEFjdGlvbkNvbHVtbklkJyBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbkNvbHVtbklkID0gY29uZmlnLmRlZmF1bHRBY3Rpb25Db2x1bW5JZDtcbiAgICB9XG5cbiAgICBpZiAoJ3Nob3dIZWFkZXInIGluIGNvbmZpZykge1xuICAgICAgdGhpcy5zaG93SGVhZGVyID0gY29uZmlnLnNob3dIZWFkZXI7XG4gICAgfVxuXG4gICAgaWYgKCdzb3J0VGFibGUnIGluIGNvbmZpZykge1xuICAgICAgdGhpcy5zb3J0VGFibGUgPSBjb25maWcuc29ydFRhYmxlO1xuICAgIH1cblxuICAgIGlmICgnaG92ZXJSb3dzJyBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMuaG92ZXJSb3dzID0gY29uZmlnLmhvdmVyUm93cztcbiAgICB9XG5cbiAgICBpZiAoJ3RhYmxlSGVpZ2h0JyBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMudGFibGVIZWlnaHQkLm5leHQoY29uZmlnLnRhYmxlSGVpZ2h0ICsgJ3B4Jyk7XG4gICAgfVxuXG4gICAgaWYgKCdtaW5Db2x1bW5XaWR0aCcgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLm1pbkNvbHVtbldpZHRoID0gY29uZmlnLm1pbkNvbHVtbldpZHRoO1xuICAgIH1cblxuICAgIGlmICgndHJ1bmNhdGVUZXh0cycgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLnRydW5jYXRlVGV4dHMgPSBjb25maWcudHJ1bmNhdGVUZXh0cztcbiAgICB9XG5cbiAgICBpZiAoJ2FjdGlvbnNDb25maWcnIGluIGNvbmZpZykge1xuICAgICAgdGhpcy5hY3Rpb25zQ29uZmlndXJhdGlvbk1vZGVsID0gY29uZmlnLmFjdGlvbnNDb25maWc7XG4gICAgfVxuXG4gICAgaWYgKCdlbWl0T25TY3JvbGwnIGluIGNvbmZpZykge1xuICAgICAgdGhpcy5lbWl0T25TY3JvbGwgPSBjb25maWcuZW1pdE9uU2Nyb2xsO1xuICAgIH1cblxuICAgIGlmICgnY29sdW1ucycgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLl9wcm9jZXNzQ29sdW1uc0NvbmZpZyhjb25maWcuY29sdW1ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgX2NvbHVtbnNMZW5ndGg6IG51bWJlciA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgdGhpcy5taW5Sb3dXaWR0aCA9ICh0aGlzLm1pbkNvbHVtbldpZHRoICogX2NvbHVtbnNMZW5ndGgpICsgMjQgKiBfY29sdW1uc0xlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb2Nlc3NDb2x1bW5zQ29uZmlnKGNvbHVtbnM6IE5wYVRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbk1vZGVsPFQ+W10pOiBOcGFUYWJsZUNvbHVtbkNvbmZpZ3VyYXRpb25Nb2RlbDxUPltdIHtcbiAgICBjb25zdCBfYXV4Q29sdW1uczogTnBhVGFibGVDb2x1bW5Db25maWd1cmF0aW9uTW9kZWw8VD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIF9hdXhDb2x1bW5zLnB1c2goe1xuICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgIHNvcnRhYmxlOiAnc29ydGFibGUnIGluIGNvbHVtbiA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLmNoZWNrYm94Q29sdW1uc01vZGVsW2NvbHVtbi5pZF0gPSB7XG4gICAgICAvLyAgIGNoZWNrQWxsOiBmYWxzZSxcbiAgICAgIC8vICAgY2hlY2tOb25lOiB0cnVlLFxuICAgICAgLy8gICBtb2RlbDogZmFsc2VcbiAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgY29uc3QgX2NvbHVtbnNXaWR0aHM6IG51bWJlcltdID0gX2F1eENvbHVtbnMubWFwKChjOiBOcGFUYWJsZUNvbHVtbkNvbmZpZ3VyYXRpb25Nb2RlbDxUPikgPT4gYy5jb2x1bW5XaWR0aCk7XG4gICAgdGhpcy5fY2FsY3VsYXRlQ29sdW1uc1dpZHRoKF9jb2x1bW5zV2lkdGhzKTtcblxuICAgIC8vIGZvciAoY29uc3QgX2NvbHVtbiBvZiBfYXV4Q29sdW1ucykge1xuICAgIC8vICAgaWYgKF9jb2x1bW4udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgIC8vICAgICBjb25zdCBfY2hlY2tib3hDb2x1bW5zTW9kZWw6IE5wYVRhYmxlQ2hlY2tib3hTZWxlY3Rpb24gPSB0aGlzLmNoZWNrYm94Q29sdW1uc01vZGVsW19jb2x1bW4uaWRdO1xuICAgIC8vICAgICB0aGlzLmNoZWNrQ29sdW1uQ2hlY2tib3hlcyhfY29sdW1uLmlkKTtcbiAgICAvLyAgICAgX2NoZWNrYm94Q29sdW1uc01vZGVsLm1vZGVsID0gX2NoZWNrYm94Q29sdW1uc01vZGVsLmNoZWNrQWxsIHx8ICFfY2hlY2tib3hDb2x1bW5zTW9kZWwuY2hlY2tOb25lO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIHJldHVybiBfYXV4Q29sdW1ucztcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aChjb2x1bW5zV2lkdGhzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IF9zaG93QWN0aW9uc0NvbHVtbjogYm9vbGVhbiA9IHRoaXMuYWN0aW9uc0NvbmZpZ3VyYXRpb25Nb2RlbCAmJiAhdGhpcy5hY3Rpb25zQ29uZmlndXJhdGlvbk1vZGVsLmhpZGVDb2x1bW47XG4gICAgY29uc3QgX2NvbHVtbnNXaWR0aHM6IG51bWJlcltdID0gX3Nob3dBY3Rpb25zQ29sdW1uID9cbiAgICAgIFsuLi5jb2x1bW5zV2lkdGhzLCB0aGlzLmFjdGlvbnNDb25maWd1cmF0aW9uTW9kZWwuY29sdW1uV2lkdGhdIDogY29sdW1uc1dpZHRocztcbiAgICBjb25zdCB0b3RhbFBlcmNlbnRhZ2U6IG51bWJlciA9IDEwMDtcbiAgICBsZXQgZ3JpZENvbHVtbnNXaWR0aDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgYXV4UGVyY2VudGFnZTogbnVtYmVyID0gdG90YWxQZXJjZW50YWdlO1xuICAgIGxldCBjb2x1bW5XaWR0aHNDb3VudDogbnVtYmVyID0gMDtcbiAgICBsZXQgY29sdW1uc1dpdGhvdXRXaWR0aENvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgZm9yIChjb25zdCBfY29sdW1uV2lkdGggb2YgX2NvbHVtbnNXaWR0aHMpIHtcbiAgICAgIGlmIChfY29sdW1uV2lkdGggJiYgKGF1eFBlcmNlbnRhZ2UgLSBfY29sdW1uV2lkdGgpID49IDApIHtcbiAgICAgICAgYXV4UGVyY2VudGFnZSAtPSBfY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbHVtbldpZHRoc0NvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5zV2l0aG91dFdpZHRoQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXV4UGVyY2VudGFnZSA9PT0gdG90YWxQZXJjZW50YWdlKSB7XG4gICAgICBncmlkQ29sdW1uc1dpZHRoID0gbmV3IEFycmF5KF9jb2x1bW5zV2lkdGhzLmxlbmd0aCkuZmlsbChgJHt0b3RhbFBlcmNlbnRhZ2UgLyBfY29sdW1uc1dpZHRocy5sZW5ndGh9JWAsIDAsIF9jb2x1bW5zV2lkdGhzLmxlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChhdXhQZXJjZW50YWdlID49IDApIHtcbiAgICAgIGdyaWRDb2x1bW5zV2lkdGggPSBfY29sdW1uc1dpZHRocy5tYXAoKGNvbHVtbldpZHRoOiBudW1iZXIpID0+IGAke2NvbHVtbldpZHRoID8/IChhdXhQZXJjZW50YWdlIC8gY29sdW1uc1dpdGhvdXRXaWR0aENvdW50KX0lYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWluQ29sdW1uV2lkdGgpIHtcbiAgICAgIGdyaWRDb2x1bW5zV2lkdGggPSBncmlkQ29sdW1uc1dpZHRoLm1hcCgod2lkdGg6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IF9taW5XaWR0aDogbnVtYmVyID0gX3Nob3dBY3Rpb25zQ29sdW1uICYmIGkgPT09IGdyaWRDb2x1bW5zV2lkdGgubGVuZ3RoIC0gMSA/IDE2IDogdGhpcy5taW5Db2x1bW5XaWR0aDtcbiAgICAgICAgcmV0dXJuIGBtaW5tYXgoJHtfbWluV2lkdGh9cHgsICR7d2lkdGh9KWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnNXaWR0aCA9IGdyaWRDb2x1bW5zV2lkdGguam9pbignICcpO1xuICB9XG59XG4iXX0=