UNPKG

ftable

Version:
227 lines 29.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { firstBy } from 'thenby'; import { FTableResult } from '../ftable.model'; import { empty } from 'rxjs'; import { of } from 'rxjs'; var FTableLocalService = /** @class */ (function () { function FTableLocalService(http) { this.http = http; this.data = []; } /** * @param {?} data * @return {?} */ FTableLocalService.prototype.setLocalTableData = /** * @param {?} data * @return {?} */ function (data) { this.mode = ''; this.data = data; }; /** * @param {?} id * @return {?} */ FTableLocalService.prototype.get = /** * @param {?} id * @return {?} */ function (id) { // console.log('get'); return this.getRowByColumnNameAndValue('id', id); }; /** * @param {?} name * @param {?} value * @return {?} */ FTableLocalService.prototype.getRowByColumnNameAndValue = /** * @param {?} name * @param {?} value * @return {?} */ function (name, value) { // console.log('getRowByColumnNameAndValue'+' '+name+' '+value); // console.log('getRowByColumnNameAndValue'+' '+name+' '+value); /** @type {?} */ var result = this.data.filter(function (x) { return x[name] == value; }); // console.log('getRowByColumnNameAndValue'+' '+name+' '+value); if (result.length > 0) { return of(result[0]); } return empty(); }; /* * */ /* * */ /** * @param {?} id * @param {?} propertyToChange * @param {?} fn * @return {?} */ FTableLocalService.prototype.setData = /* * */ /** * @param {?} id * @param {?} propertyToChange * @param {?} fn * @return {?} */ function (id, propertyToChange, fn) { /** @type {?} */ var row = this.data.find(function (d) { return d['id'] === id; }); row[propertyToChange] = fn(row[propertyToChange]); return of(row); }; /** * @param {?} id * @return {?} */ FTableLocalService.prototype.delete = /** * @param {?} id * @return {?} */ function (id) { // cant modify JSON files frontend /** @type {?} */ var row = this.data.find(function (d) { return d['id'] === id; }); return of(row); }; /** * @param {?} table * @return {?} */ FTableLocalService.prototype.getData = /** * @param {?} table * @return {?} */ function (table) { /** @type {?} */ var data = this.data; var _loop_1 = function (i) { if (table.columns[i].type === 'checkbox') { table.columns[i].filterData = Array.from(new Set(data.map(function (x) { return x[table.columns[i].name]; }))); } }; for (var i = 0; i < table.columns.length; i++) { _loop_1(i); } /** @type {?} */ var totalRows = data.length; // Generic Search if (table.dataModifier.search.value) { table.dataModifier.currentPage = 1; if (table.columns.length > 0) { /** @type {?} */ var temp = []; var _loop_2 = function (i) { if (table.columns[i].name.length > 0) { temp = temp.concat(data.filter(function (x) { return String(x[table.columns[i].name]).indexOf(table.dataModifier.search.value) !== -1; })); data = data.filter(function (x) { return String(x[table.columns[i].name]).indexOf(table.dataModifier.search.value) === -1; }); } }; for (var i = 0; i < table.columns.length; i++) { _loop_2(i); } data = temp; } } if (table.dataModifier.filters.length > 0) { for (var i = 0; i < table.dataModifier.filters.length; i++) { if (table.dataModifier.filters[i].apply) data = table.dataModifier.filters[i].apply(data); } } // Column Priority Sorting if (table.dataModifier.orders.length > 0) { /** @type {?} */ var sortBy = void 0; var _loop_3 = function (i) { /** @type {?} */ var order = (table.dataModifier.orders[i].direction === 'Desc') ? -1 : 1; if (i === 0) { if (typeof data[0][table.dataModifier.orders[i].columnName] === 'string') { // console.log('String firstBy:' + table.columns[table.orders[i].columnIndex].name); sortBy = firstBy(table.dataModifier.orders[i].columnName, { ignoreCase: true, direction: order }); } else if (typeof data[0][table.dataModifier.orders[i].columnName] === 'number') { sortBy = firstBy(function (v1, v2) { return v1[table.dataModifier.orders[i].columnName] - v2[table.dataModifier.orders[i].columnName]; }, order); } else { // console.log('otherType sort:' + typeof data[0][table.columns[table.dataModifier.orders[i].columnIndex].name]); } } else { if (typeof data[0][table.dataModifier.orders[i].columnName] === 'string') { sortBy = sortBy.thenBy(table.dataModifier.orders[i].columnName, { ignoreCase: true, direction: order }); } else if (typeof data[0][table.dataModifier.orders[i].columnName] === 'number') { sortBy = sortBy.thenBy(function (v1, v2) { return v1[table.dataModifier.orders[i].columnName] - v2[table.dataModifier.orders[i].columnName]; }, order); } else { console.log('otherType sort'); } } }; for (var i = 0; i < table.dataModifier.orders.length; i++) { _loop_3(i); } data.sort(sortBy); } // console.log('SIZE:' + table.dataModifier.currentPage + ' ' + table.pageSizes[table.pageSizeIndex]); // this.page = this.data.slice(( this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize); /** @type {?} */ var totalRowsAfterModifications = data.length; /** @type {?} */ var page = data.slice((table.dataModifier.currentPage - 1) * table.pageSizes[table.pageSizeIndex], (table.dataModifier.currentPage * (table.pageSizes[table.pageSizeIndex]))); /** @type {?} */ var result = new FTableResult(page, totalRows, totalRowsAfterModifications, null); return of(result); }; FTableLocalService.decorators = [ { type: Injectable } ]; /** @nocollapse */ FTableLocalService.ctorParameters = function () { return [ { type: HttpClient } ]; }; return FTableLocalService; }()); export { FTableLocalService }; if (false) { /** @type {?} */ FTableLocalService.prototype.data; /** * @type {?} * @private */ FTableLocalService.prototype.mode; /** * @type {?} * @private */ FTableLocalService.prototype.http; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnRhYmxlbG9jYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Z0YWJsZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlL2Z0YWJsZWxvY2FsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS2xELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFxQyxZQUFZLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFFdkcsT0FBTyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBSXpCO0lBR0ksNEJBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFHN0IsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQUZqQixDQUFDOzs7OztJQUtELDhDQUFpQjs7OztJQUFqQixVQUFrQixJQUFXO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFHRCxnQ0FBRzs7OztJQUFILFVBQUksRUFBTTtRQUNOLHVCQUF1QjtRQUN0QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7Ozs7O0lBRUQsdURBQTBCOzs7OztJQUExQixVQUEyQixJQUFZLEVBQUMsS0FBUztRQUM3QyxnRUFBZ0U7OztZQUUxRCxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUcsS0FBSyxFQUFmLENBQWUsQ0FBQztRQUNyRCxnRUFBZ0U7UUFFaEUsSUFBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOztNQUVFOzs7Ozs7Ozs7O0lBQ0Ysb0NBQU87Ozs7Ozs7OztJQUFQLFVBQVEsRUFBTSxFQUFDLGdCQUF1QixFQUFDLEVBQWdCOztZQUNoRCxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUUsT0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFkLENBQWMsQ0FBQztRQUMzQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDOzs7OztJQUVELG1DQUFNOzs7O0lBQU4sVUFBTyxFQUFNOzs7WUFFSixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUUsT0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFkLENBQWMsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOzs7OztJQUVBLG9DQUFPOzs7O0lBQVAsVUFBUSxLQUFhOztZQUVoQixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUk7Z0NBR1gsQ0FBQztZQUNSLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO2dCQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBeEIsQ0FBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUM3Rjs7UUFISCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO29CQUFwQyxDQUFDO1NBSVQ7O1lBSUcsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNO1FBQzNCLGlCQUFpQjtRQUNqQixJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNuQyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O29CQUN4QixJQUFJLEdBQUcsRUFBRTt3Q0FDRixDQUFDO29CQUNOLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBaEYsQ0FBZ0YsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZILElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFoRixDQUFnRixDQUFDLENBQUM7cUJBQzdHOztnQkFKTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFOzRCQUFwQyxDQUFDO2lCQUtUO2dCQUVELElBQUksR0FBRyxJQUFJLENBQUM7YUFDZjtTQUNGO1FBR0osSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hELElBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztvQkFDbkMsSUFBSSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RDtTQUNIO1FBSUksMEJBQTBCO1FBQzFCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7Z0JBQ2xDLE1BQU0sU0FBQTtvQ0FDRCxDQUFDOztvQkFDQSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQ3hFLHFGQUFxRjt3QkFDbkYsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQ3RELFVBQVUsRUFBRSxJQUFJOzRCQUNoQixTQUFTLEVBQUUsS0FBSzt5QkFDbkIsQ0FBQyxDQUFDO3FCQUNOO3lCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssUUFBUSxFQUFFO3dCQUM3RSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVMsRUFBRSxFQUFFLEVBQUU7NEJBQzVCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDckcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNiO3lCQUFNO3dCQUNMLG1IQUFtSDtxQkFDcEg7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQ3RFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTs0QkFDNUQsVUFBVSxFQUFFLElBQUk7NEJBQ2hCLFNBQVMsRUFBRSxLQUFLO3lCQUNuQixDQUFDLENBQUM7cUJBQ047eUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQzdFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVMsRUFBRSxFQUFFLEVBQUU7NEJBQ2xDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDckcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNiO3lCQUFNO3dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztxQkFDakM7aUJBQ0o7O1lBN0JMLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO3dCQUFoRCxDQUFDO2FBOEJUO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQjs7OztZQUtHLDJCQUEyQixHQUFHLElBQUksQ0FBQyxNQUFNOztZQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBQ3ZLLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLDJCQUEyQixFQUFDLElBQUksQ0FBQztRQUM5RSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDOztnQkFuSUYsVUFBVTs7OztnQkFiRixVQUFVOztJQXdRbkIseUJBQUM7Q0FBQSxBQTNQRCxJQTJQQztTQTFQWSxrQkFBa0I7OztJQUszQixrQ0FBaUI7Ozs7O0lBQ2pCLGtDQUFxQjs7Ozs7SUFKVCxrQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuLy8gaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcy9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Zmlyc3RCeX0gZnJvbSAndGhlbmJ5JztcbmltcG9ydCB7ICBGVGFibGUsIEZDb2x1bW4sIEZTZWFyY2gsIEZPcmRlciwgRlRhYmxlUmVzdWx0LCBGVGFibGVEYXRhTW9kaWZpZXIgIH0gZnJvbSAnLi4vZnRhYmxlLm1vZGVsJztcbmltcG9ydCB7IEZUYWJsZUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9mdGFibGViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZW1wdHkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcydcblxuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGVGFibGVMb2NhbFNlcnZpY2UgaW1wbGVtZW50cyBGVGFibGVCYXNlU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGF0YSA9IFtdO1xuICAgIHByaXZhdGUgbW9kZTogc3RyaW5nO1xuXG4gICAgc2V0TG9jYWxUYWJsZURhdGEoZGF0YTogYW55W10pe1xuICAgICAgICB0aGlzLm1vZGUgPSAnJztcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG5cblxuICAgIGdldChpZDphbnkpOiBPYnNlcnZhYmxlPGFueT57XG4gICAgICAgIC8vICBjb25zb2xlLmxvZygnZ2V0Jyk7XG4gICAgICAgICByZXR1cm4gdGhpcy5nZXRSb3dCeUNvbHVtbk5hbWVBbmRWYWx1ZSgnaWQnLGlkKTtcbiAgICB9XG4gXG4gICAgZ2V0Um93QnlDb2x1bW5OYW1lQW5kVmFsdWUobmFtZTogc3RyaW5nLHZhbHVlOmFueSk6IE9ic2VydmFibGU8YW55PntcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFJvd0J5Q29sdW1uTmFtZUFuZFZhbHVlJysnICcrbmFtZSsnICcrdmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZGF0YS5maWx0ZXIoeCA9PiB4W25hbWVdPT0gdmFsdWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0Um93QnlDb2x1bW5OYW1lQW5kVmFsdWUnKycgJytuYW1lKycgJyt2YWx1ZSk7XG5cbiAgICAgICAgaWYocmVzdWx0Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICByZXR1cm4gb2YocmVzdWx0WzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1wdHkoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICpcbiAgICAqL1xuICAgIHNldERhdGEoaWQ6YW55LHByb3BlcnR5VG9DaGFuZ2U6c3RyaW5nLGZuOiAobjphbnkpPT5hbnkpOk9ic2VydmFibGU8YW55PntcbiAgICAgICB2YXIgcm93ID0gdGhpcy5kYXRhLmZpbmQoZD0+ZFsnaWQnXSA9PT0gaWQpO1xuICAgICAgIHJvd1twcm9wZXJ0eVRvQ2hhbmdlXSA9IGZuKHJvd1twcm9wZXJ0eVRvQ2hhbmdlXSk7XG4gICAgICAgcmV0dXJuIG9mKHJvdyk7XG4gICAgfVxuXG4gICAgZGVsZXRlKGlkOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICAgICAgICAvLyBjYW50IG1vZGlmeSBKU09OIGZpbGVzIGZyb250ZW5kXG4gICAgICAgICB2YXIgcm93ID0gdGhpcy5kYXRhLmZpbmQoZD0+ZFsnaWQnXSA9PT0gaWQpO1xuICAgICAgICByZXR1cm4gb2Yocm93KTtcbiAgICB9XG5cbiAgICAgZ2V0RGF0YSh0YWJsZTogRlRhYmxlKTogT2JzZXJ2YWJsZTxGVGFibGVSZXN1bHQ+ICB7XG5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICBcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0YWJsZS5jb2x1bW5zW2ldLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHRhYmxlLmNvbHVtbnNbaV0uZmlsdGVyRGF0YSA9IEFycmF5LmZyb20obmV3IFNldChkYXRhLm1hcCh4ID0+IHhbdGFibGUuY29sdW1uc1tpXS5uYW1lXSkpKVxuICAgICAgICB9XG4gICAgICB9XG5cblxuXG4gICAgICB2YXIgdG90YWxSb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgICAvLyBHZW5lcmljIFNlYXJjaFxuICAgICAgaWYgKHRhYmxlLmRhdGFNb2RpZmllci5zZWFyY2gudmFsdWUpIHtcbiAgICAgICAgdGFibGUuZGF0YU1vZGlmaWVyLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgIGlmICh0YWJsZS5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IHRlbXAgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKHRhYmxlLmNvbHVtbnNbaV0ubmFtZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcC5jb25jYXQoZGF0YS5maWx0ZXIoeCA9PiBTdHJpbmcoeFt0YWJsZS5jb2x1bW5zW2ldLm5hbWVdKS5pbmRleE9mKHRhYmxlLmRhdGFNb2RpZmllci5zZWFyY2gudmFsdWUpICE9PSAtMSkpO1xuICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKHggPT4gU3RyaW5nKHhbdGFibGUuY29sdW1uc1tpXS5uYW1lXSkuaW5kZXhPZih0YWJsZS5kYXRhTW9kaWZpZXIuc2VhcmNoLnZhbHVlKSA9PT0gLTEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YSA9IHRlbXA7XG4gICAgICB9XG4gICAgfVxuXG5cbiBpZiAodGFibGUuZGF0YU1vZGlmaWVyLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUuZGF0YU1vZGlmaWVyLmZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYodGFibGUuZGF0YU1vZGlmaWVyLmZpbHRlcnNbaV0uYXBwbHkpXG4gICAgICAgICAgIGRhdGEgPSB0YWJsZS5kYXRhTW9kaWZpZXIuZmlsdGVyc1tpXS5hcHBseShkYXRhKTtcbiAgICB9XG4gfVxuXG4gXG5cbiAgICAgIC8vIENvbHVtbiBQcmlvcml0eSBTb3J0aW5nXG4gICAgICBpZiAodGFibGUuZGF0YU1vZGlmaWVyLm9yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IHNvcnRCeTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLmRhdGFNb2RpZmllci5vcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JkZXIgPSAodGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5kaXJlY3Rpb24gPT09ICdEZXNjJykgPyAtMSA6IDE7XG4gICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbMF1bdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdTdHJpbmcgZmlyc3RCeTonICsgdGFibGUuY29sdW1uc1t0YWJsZS5vcmRlcnNbaV0uY29sdW1uSW5kZXhdLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeSA9IGZpcnN0QnkodGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogb3JkZXJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFbMF1bdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzb3J0QnkgPSBmaXJzdEJ5KGZ1bmN0aW9uKHYxLCB2Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjFbdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lXSAtIHYyW3RhYmxlLmRhdGFNb2RpZmllci5vcmRlcnNbaV0uY29sdW1uTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgfSwgb3JkZXIpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnb3RoZXJUeXBlIHNvcnQ6JyArIHR5cGVvZiBkYXRhWzBdW3RhYmxlLmNvbHVtbnNbdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5JbmRleF0ubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdW3RhYmxlLmRhdGFNb2RpZmllci5vcmRlcnNbaV0uY29sdW1uTmFtZV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gc29ydEJ5LnRoZW5CeSh0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBvcmRlclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXVt0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWVdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeSA9IHNvcnRCeS50aGVuQnkoZnVuY3Rpb24odjEsIHYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2MVt0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWVdIC0gdjJbdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICB9LCBvcmRlcik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvdGhlclR5cGUgc29ydCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEuc29ydChzb3J0QnkpO1xuICAgICAgfVxuXG4vLyBjb25zb2xlLmxvZygnU0laRTonICsgdGFibGUuZGF0YU1vZGlmaWVyLmN1cnJlbnRQYWdlICsgJyAnICsgdGFibGUucGFnZVNpemVzW3RhYmxlLnBhZ2VTaXplSW5kZXhdKTtcbi8vIHRoaXMucGFnZSA9IHRoaXMuZGF0YS5zbGljZSgoIHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUsICB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSk7XG5cbiAgICAgIHZhciB0b3RhbFJvd3NBZnRlck1vZGlmaWNhdGlvbnMgPSBkYXRhLmxlbmd0aDtcbiAgICAgIHZhciBwYWdlID0gZGF0YS5zbGljZSgodGFibGUuZGF0YU1vZGlmaWVyLmN1cnJlbnRQYWdlLTEpICogdGFibGUucGFnZVNpemVzW3RhYmxlLnBhZ2VTaXplSW5kZXhdLCAodGFibGUuZGF0YU1vZGlmaWVyLmN1cnJlbnRQYWdlICogKHRhYmxlLnBhZ2VTaXplc1t0YWJsZS5wYWdlU2l6ZUluZGV4XSkpKTtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgRlRhYmxlUmVzdWx0KHBhZ2UsdG90YWxSb3dzLHRvdGFsUm93c0FmdGVyTW9kaWZpY2F0aW9ucyxudWxsKTtcbiAgICAgIHJldHVybiBvZihyZXN1bHQpO1xuICB9XG5cblxuXG5cblxuXG5cblxuXG4gIFxuLy8gICAgIGdldERhdGExKHVybDogc3RyaW5nLFxuLy8gICAgICAgICAgICAgcHJvcGVydHlOYW1lczogc3RyaW5nW10sXG4vLyAgICAgICAgICAgICBwcm9wZXJ0eVR5cGVzOiBzdHJpbmdbXSxcbi8vICAgICAgICAgICAgIHNvcnRTdGF0ZXM6IHsgJ3Byb3BlcnR5TmFtZSc6IHN0cmluZyAsICdvcmRlcic6IHN0cmluZ31bXSxcbi8vICAgICAgICAgICAgIGZpbHRlcnM6YW55W10sXG4vLyAgICAgICAgICAgICBzZWFyY2hTdHJpbmc6IHN0cmluZykge1xuXG4vLyAgICAgICAgIGNvbnNvbGUubG9nKHVybCk7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5TmFtZXMpO1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eVR5cGVzKTtcbi8vICAgICAgICAgY29uc29sZS5sb2coc29ydFN0YXRlcyk7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKGZpbHRlcnMpO1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhzZWFyY2hTdHJpbmcpO1xuIFxuLy8gICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcblxuLy8gICAgIC8vIEdlbmVyaWMgU2VhcmNoXG4vLyAgICAgLy8gVE9ETzogQ2F0ZXIgZm9yIEZvcm1hdHRlZCBEYXRhdHlwZXNcbi8vICAgICBsZXQgdGVtcCA9IFtdO1xuLy8gICAgIGlmIChwcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApICB7XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4vLyAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWVzW2ldLmxlbmd0aCA+IDApIHtcbi8vICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLmNvbmNhdChkYXRhLmZpbHRlcih4ID0+IFN0cmluZyh4W3Byb3BlcnR5TmFtZXNbaV1dKS5pbmRleE9mKHNlYXJjaFN0cmluZykgIT09IC0xKSk7XG4vLyAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoeCA9PiBTdHJpbmcoeFtwcm9wZXJ0eU5hbWVzW2ldXSkuaW5kZXhPZihzZWFyY2hTdHJpbmcpID09PSAtMSk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG5cbi8vICAgICBkYXRhID0gdGVtcDtcbi8vICAgfVxuXG4vLyAgIGNvbnNvbGUubG9nKGZpbHRlcnMubGVuZ3RoKTtcbi8vICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSAge1xuLy8gICAgICAgdGVtcCA9IFtdO1xuXG4vLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgLy8gSWYgc3RyaW5nXG4vLyAgICAgICAgIGlmKHByb3BlcnR5VHlwZXNbZmlsdGVyc1tpXS5pbmRleF0gPT0gJ3N0cmluZycpIHtcbi8vICAgICAgICAgICAgIHRlbXAgPSBkYXRhLmZpbHRlcih4ID0+XG4vLyAgICAgICAgICAgICAgICAgIFN0cmluZyh4W3Byb3BlcnR5TmFtZXNbZmlsdGVyc1tpXS5pbmRleF1dKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyc1tpXS5kYXRhLnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XG4vLyAgICAgICAgIC8vIElmIG51bWJlclxuLy8gICAgICAgICB9IGVsc2UgaWYocHJvcGVydHlUeXBlc1tmaWx0ZXJzW2ldLmluZGV4XSA9PSAnbnVtYmVyJykge1xuLy8gICAgICAgICAgIC8vIGlmIGJvdGggbWluIGFuZCBtYXggc3BlY2lmaWVkXG4vLyAgICAgICAgICAgaWYoZmlsdGVyc1tpXS5kYXRhLm1heCAmJiBmaWx0ZXJzW2ldLmRhdGEubWluKXtcbi8vICAgICAgICAgICAgIHRlbXAgPSBkYXRhLmZpbHRlcih4ID0+XG4vLyAgICAgICAgICAgICAgICAgKChOdW1iZXIoeFtwcm9wZXJ0eU5hbWVzW2ZpbHRlcnNbaV0uaW5kZXhdXSkgPj0gZmlsdGVyc1tpXS5kYXRhLm1pbikgJiZcbi8vICAgICAgICAgICAgICAgICAgKE51bWJlcih4W3Byb3BlcnR5TmFtZXNbZmlsdGVyc1tpXS5pbmRleF1dKSA8PSBmaWx0ZXJzW2ldLmRhdGEubWF4KSkpO1xuLy8gICAgICAgICAgIC8vIGlmIG1heCBvbmx5IHNwZWNpZmllZFxuLy8gICAgICAgICAgIH0gZWxzZSBpZihmaWx0ZXJzW2ldLmRhdGEubWF4KSB7XG4vLyAgICAgICAgICAgICAgdGVtcCA9IGRhdGEuZmlsdGVyKHggPT5cbi8vICAgICAgICAgICAgICAgICBOdW1iZXIoeFtwcm9wZXJ0eU5hbWVzW2ZpbHRlcnNbaV0uaW5kZXhdXSkgPD0gZmlsdGVyc1tpXS5kYXRhLm1heCk7XG4vLyAgICAgICAgICAgLy8gaWYgb25seSBtaW4gc3BlY2lmaWVkXG4vLyAgICAgICAgICAgfSBlbHNlIGlmKGZpbHRlcnNbaV0uZGF0YS5taW4pIHtcbi8vICAgICAgICAgICAgICB0ZW1wID0gZGF0YS5maWx0ZXIoeCA9PlxuLy8gICAgICAgICAgICAgICAgIE51bWJlcih4W3Byb3BlcnR5TmFtZXNbZmlsdGVyc1tpXS5pbmRleF1dKSA+PSBmaWx0ZXJzW2ldLmRhdGEubWluKTtcbi8vICAgICAgICAgICAvLyBpZiBub3RoaW5nIGlzIHNwZWNpZmllZFxuLy8gICAgICAgICAgIH0gZWxzZSAge1xuLy8gICAgICAgICAgICAgdGVtcCA9IGRhdGE7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICB9XG4vLyAgICAgICAgICAgICBkYXRhID0gdGVtcDtcbi8vICAgICAgIH1cbi8vICAgICAgIGRhdGEgPSB0ZW1wO1xuLy8gICAgIH1cblxuXG4vLyAgICAgLy8gQ29sdW1uIFByaW9yaXR5IFNvcnRpbmdcbi8vICAgICAvLyBUT0RPOiBDYXRlciBmb3IgRm9ybWF0dGVkIERhdGF0eXBlc1xuLy8gICAgIGlmIChzb3J0U3RhdGVzLmxlbmd0aCA+IDApIHtcbi8vICAgICAgICAgbGV0IHNvcnRCeTtcbi8vICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0U3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4vLyAgICAgICAgICAgICBjb25zdCBvcmRlciA9IChzb3J0U3RhdGVzW2ldLm9yZGVyID09PSAnRGVzYycpID8gLTEgOiAxO1xuLy8gICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbi8vICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbMF1bc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWVdID09PSAnc3RyaW5nJykge1xuLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyaW5nIGZpcnN0Qnk6JyArIHNvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lKTtcbi8vICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gZmlyc3RCeShzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZSwge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogb3JkZXJcbi8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0gPT09ICdudW1iZXInKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHNvcnRCeSA9IGZpcnN0QnkoZnVuY3Rpb24odjEsIHYyKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjFbc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWVdIC0gdjJbc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWVdO1xuLy8gICAgICAgICAgICAgICAgICAgICB9LCBvcmRlcik7XG4vLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ290aGVyVHlwZSBzb3J0OicgKyB0eXBlb2YgZGF0YVswXVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0pO1xuLy8gICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoZW5CeTonICsgc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWUpO1xuLy8gICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVswXVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0gPT09ICdzdHJpbmcnKSB7XG5cbi8vICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gc29ydEJ5LnRoZW5CeShzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZSwge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogb3JkZXJcbi8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0gPT09ICdudW1iZXInKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHNvcnRCeSA9IHNvcnRCeS50aGVuQnkoZnVuY3Rpb24odjEsIHYyKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjFbc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWVdIC0gdjJbc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWVdO1xuLy8gICAgICAgICAgICAgICAgICAgICB9LCBvcmRlcik7XG4vLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ290aGVyVHlwZSBzb3J0Jyk7XG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICB9XG4vLyAgICAgICAgIGRhdGEuc29ydChzb3J0QnkpO1xuLy8gICAgIH1cblxuXG4vLyAgIHJldHVybiBkYXRhO1xuLy8gICB9XG5cbn0iXX0=