{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent, columnsChanged){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(){\r\n\t\treturn this.table.modules.layout.layout();\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\treturn this.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\treturn this.table.eventBus.dispatch(...arguments);\r\n\t}\r\n\r\n\tchain(){\r\n\t\treturn this.table.eventBus.chain(...arguments);\r\n\t}\r\n\r\n\tconfirm(){\r\n\t\treturn this.table.eventBus.confirm(...arguments);\r\n\t}\r\n\r\n\tdispatchExternal(){\r\n\t\treturn this.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\treturn this.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Options /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\toptions(key){\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\tsetOption(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Modules /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tmodule(key){\r\n\t\treturn this.table.module(key);\r\n\t}\r\n}","import Column from './Column.js';\r\n\r\n//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetTitleDownload() {\r\n\t\treturn this._column.getTitleDownload();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tthis._column.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"maxInitialWidth\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n}","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate, force){\r\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tif(this.column.definition.cellEdited){\r\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate, force){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value !== value || force){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\r\n\t\tthis.dispatch(\"cell-height\", this, \"\");\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\r\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleDownload = null;\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitions();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.maxInitialWidth = null;\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition)\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif (def.maxInitialWidth) {\r\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.maxWidth){\r\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(contents instanceof Node){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}else{\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tel.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\r\n\t\tthis.dispatch(\"column-height\", this, \"\");\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tgetTitleDownload() {\r\n\t\treturn this.titleDownload;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-rendered\", this);\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\t// maxInitialWidth ignored here as width specified\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width-fit-before\", this);\r\n\r\n\t\tthis.fitToData(force);\r\n\r\n\t\tthis.dispatch(\"column-width-fit-after\", this);\r\n\t}\r\n\r\n\t//set column width to maximum cell width for non group columns\r\n\tfitToData(force){\r\n\t\tif(this.isGroup){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tvar setTo = maxWidth + 1;\r\n\t\t\t\tif (this.maxInitialWidth && !force) {\r\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setWidthActual(setTo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\tvar definition;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this.delete()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj, clone, list = []){\r\n\t\tvar objectProto = {}.__proto__,\r\n\t\tarrayProto = [].__proto__;\r\n\r\n\t\tif (!clone){\r\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\t\t}\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tlet subject = obj[i],\r\n\t\t\tmatch, copy;\r\n\r\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\r\n\t\t\t\tmatch = list.findIndex((item) => {\r\n\t\t\t\t\treturn item.subject === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(match > -1){\r\n\t\t\t\t\tclone[i] = list[match].copy;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\r\n\r\n\t\t\t\t\tlist.unshift({subject, copy});\r\n\r\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clone;\r\n\t}\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType, defaults = {}){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = Object.assign({}, defaults)\r\n\t}\r\n\r\n\tregister(option, value){\r\n\t\tthis.registeredDefaults[option] = value;\r\n\t}\r\n\r\n\tgenerate(defaultOptions, userOptions = {}){\r\n\t\tvar output = Object.assign({}, this.registeredDefaults);\r\n\r\n\t\tObject.assign(output, defaultOptions);\r\n\r\n\t\tif(userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions){\r\n\t\t\tfor (var key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determin how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the contianer without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determine weather the row is nearest the top or bottom of the table, retur true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tthis.scrollToRow(row);\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"top\":\r\n\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\t\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t\t\r\n\t\tthis.fitDataColAvg = 0;\r\n\t\t\r\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\r\n\t\t\r\n\t\tthis.visibleRows = null;\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.isFitData = false;\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.compatibilityCheck();\r\n\t\tthis.layoutCheck();\r\n\t\tthis.vertScrollListen();\r\n\t}\r\n\t\r\n\tcompatibilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\t\t\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// if(!ok){\r\n\t\t// \toptions.virtualDomHoz = false;\r\n\t\t// }\r\n\t\t\r\n\t\treturn ok;\r\n\t}\r\n\t\r\n\tlayoutCheck(){\r\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\r\n\t}\r\n\r\n\tvertScrollListen(){\r\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\r\n\t}\r\n\r\n\tclearVisRowCache(){\r\n\t\tthis.visibleRows = null;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\t\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t\t\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\r\n\t\t}\r\n\t}\r\n\t\r\n\tcalcWindowBuffer(){\r\n\t\tvar buffer = this.elementVertical.clientWidth;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(width > buffer){\r\n\t\t\t\t\tbuffer = width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.windowBuffer = buffer * 2;\r\n\t}\r\n\t\r\n\trerenderColumns(update, blockRedraw){\t\t\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t},\r\n\t\tcolPos = 0;\r\n\t\t\r\n\t\t\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.clear();\r\n\t\t\r\n\t\tthis.calcWindowBuffer();\r\n\t\t\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\t\t\t\t\r\n\t\t\t\tconfig.width = width;\r\n\t\t\t\t\r\n\t\t\t\tif (this.isFitData) {\r\n\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t\t\t\t\t//column is visible\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol == -1){\r\n\t\t\t\t\t\tthis.leftCol = this.columns.length;\r\n\t\t\t\t\t\tthis.vDomPadLeft = colPos;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol = this.columns.length;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// column is hidden\r\n\t\t\t\t\tif(this.leftCol !== -1){\r\n\t\t\t\t\t\tthis.vDomPadRight += width;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.vdomHoz = config;\r\n\t\t\t\t\r\n\t\t\t\tcolPos += width;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.reinitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\t\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\t\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\t\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\t\t\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\t\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\t\t\r\n\t\tif(this.isFitData){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar row = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\r\n\t\t\t\t\t})[0];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trow.generateCells();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t// if(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// for(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t// \tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\t\t\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn !match;\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar rows = this.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetVisibleRows(){\r\n\t\tif (!this.visibleRows){\r\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\r\n\t\t}\r\n\r\n\t\treturn this.visibleRows;\t\r\n\t}\r\n\t\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColRight(){\r\n\t\tvar changes = false;\r\n\t\t\r\n\t\twhile(true){\r\n\t\t\t\r\n\t\t\tlet column = this.columns[this.rightCol + 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t\t\t}\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColLeft(){\r\n\t\tvar changes = false;\r\n\t\t\r\n\t\twhile(true){\r\n\t\t\tlet column = this.columns[this.leftCol - 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\r\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(diff){\r\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\r\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColRight(){\r\n\t\tvar changes = false;\r\n\t\t\r\n\t\twhile(true){\r\n\t\t\tlet column = this.columns[this.rightCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\t\t\tthis.rightCol --;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColLeft(){\r\n\t\tvar changes = false;\r\n\t\t\r\n\t\twhile(true){\r\n\t\t\tlet column = this.columns[this.leftCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\t\t\tthis.leftCol ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\tfitDataColActualWidthCheck(column){\r\n\t\tvar newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column.modules.vdomHoz.fitDataCheck){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t\r\n\t\t\tnewWidth = column.getWidth();\r\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\r\n\t\t\t\r\n\t\t\tif(widthDiff){\r\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\r\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\r\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn widthDiff;\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\t\t\t\t\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\t\t\t\t\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nimport defaultColumnOptions from './column/defaults/options.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderHorizontal;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderHorizontal);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\r\n\t\tthis.renderer.rerenderColumns(false, true);\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\t\t\tvar topColumn = nextToColumn.getTopColumn()\r\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\r\n\t\t\tvar nextEl = topColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcolumn.columnRendered();\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\tverticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibleColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tthis.renderer.rerenderColumns(true);\r\n\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tthis.renderer.rerenderColumns();\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.verticalAlignHeaders();\r\n\t\t}\r\n\r\n\t\tif(force){\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\t\t\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //hold elements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.created = false;\r\n\t\t\r\n\t\tthis.setData(data);\r\n\t}\r\n\t\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\t\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\t\t\r\n\t\tthis.element = el;\r\n\t}\r\n\t\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\t\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\t\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\t\t\r\n\t\tif(!this.initialized || force){\r\n\t\t\t\r\n\t\t\tthis.deleteCells();\r\n\t\t\t\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\t\t\t\r\n\t\t\tthis.generateCells();\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t\t\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\t\t\t\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t\t\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tdeinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t}\r\n\t\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\t\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\t\t\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\t\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight;\r\n\t\t\r\n\t\tif(this.table.options.rowHeight){\r\n\t\t\tthis.height = this.table.options.rowHeight;\r\n\t\t}else{\r\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\t\t\t\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tvar height = cell.getHeight();\r\n\t\t\t\tif(height > maxHeight){\r\n\t\t\t\t\tmaxHeight = height;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t\t}else{\r\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\t\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\t\t\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\t\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\t\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\t\tif(force && !this.table.options.rowHeight){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\t\t\r\n\t\tthis.calcHeight(force);\r\n\t\t\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\t\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\t\t\t\r\n\t\t\tthis.manualHeight = true;\r\n\t\t\t\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\t\t\t\r\n\t\t\tthis.setCellHeight();\r\n\t\t\t\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\t\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\t\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\r\n\t\t\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\t\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\t\t\t\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\t\t\t\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\t\t\t\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\t\t\t\t\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\t\t\t\t\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\t\t\t\r\n\t\t\t//this.reinitialize();\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\t\t\t\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.data;\r\n\t}\r\n\t\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\t\t\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\t\t\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\t\t\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\t\t\r\n\t\treturn match;\r\n\t}\r\n\t\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\t\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetCells(){\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\t\t\r\n\t\treturn this.cells;\r\n\t}\r\n\t\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\t\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\t\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\t\t\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\t\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\tthis.dispatch(\"row-delete\", this);\r\n\t\t\r\n\t\tthis.deleteActual();\r\n\t\t\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\t\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\t\t\r\n\t\tthis.detatchModules();\r\n\t\t\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\t\t\r\n\t\tthis.deleteCells();\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\t\t\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\t\r\n\tdetatchModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\t\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\t\t\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\t\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\t\t\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\t\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\t\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\t\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.component;\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.clearRows();\r\n\t\tthis.renderRows();\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\r\n\r\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\treturn this.rows();\r\n\t}\r\n\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\t// element.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.elementVertical.scrollTop = 0;\r\n\t\tthis.elementVertical.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t\tthis.vDomScrollPosTop = 0;\r\n\t\tthis.vDomScrollPosBottom = 0;\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tthis._virtualRenderFill();\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\tvar scrollTop = this.elementVertical.scrollTop;\r\n\t\tvar topRow = false;\r\n\t\tvar topOffset = false;\r\n\r\n\t\tvar left = this.table.rowManager.scrollLeft;\r\n\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\tif(rows[i]){\r\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\ttopRow = i;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\trow.deinitializeHeight();\r\n\t\t});\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\t\tthis.placeholder = null; //placeholder element\r\n\t\tthis.placeholderContents = null; //placeholder element\r\n\t\t\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\t\t\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\t\t\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\t\t\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\t\t\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t\t\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\t\t\r\n\t\tthis.renderer = null;\r\n\t}\r\n\t\r\n\t//////////////// Setup Functions /////////////////\r\n\t\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-tableholder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitializePlaceholder(){\r\n\t\t//configure placeholder element\r\n\t\tif(typeof this.table.options.placeholder == \"string\"){\r\n\t\t\tlet el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\t\t\t\r\n\t\t\tlet contents = document.createElement(\"div\");\r\n\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\r\n\t\t\tcontents.innerHTML = this.table.options.placeholder;\r\n\t\t\t\r\n\t\t\tel.appendChild(contents);\r\n\t\t\t\r\n\t\t\tthis.placeholderContents = contents;\r\n\t\t\tthis.placeholder = el;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\t\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializePlaceholder()\r\n\t\tthis.initializeRenderer();\r\n\t\t\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\t\t\r\n\t\tthis.firstRender = true;\r\n\t\t\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft,\r\n\t\t\tleftDir = this.scrollLeft > left,\r\n\t\t\ttop = this.element.scrollTop,\r\n\t\t\ttopDir = this.scrollTop > top;\r\n\t\t\t\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\r\n\r\n\t\t\t\tthis._positionPlaceholder();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//handle vertical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\t\t\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\t\t\r\n\t\treturn match || false;\r\n\t}\r\n\t\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\t\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\t\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\t\t\t\t\r\n\t\t\t\tthis._setDataActual(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\t\t\r\n\t\tthis._wipeElements();\r\n\t\t\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\t\t\t\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\t\t\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\t\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\t\t\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\t\t\t\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\tthis.regenerateRowNumbers();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\r\n\t\t}\r\n\t}\r\n\t\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\t\t\t\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlength = data.length - 1;\r\n\t\t\t\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t\r\n\t\t\tthis.regenerateRowNumbers();\r\n\t\t\t\r\n\t\t\tif(rows.length){\r\n\t\t\t\tthis._clearPlaceholder();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\t\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\t\t\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\t\t\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn pos;\r\n\t}\r\n\t\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, chainResult;\r\n\t\t\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\t\t\t\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\t\t\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\t\t\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\t\t\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\t\t\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\t\t\t\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\t\t\t\t\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(top){\r\n\t\t\t\t\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\t\t\r\n\t\tthis.moveRowActual(from, to, after);\r\n\t\t\r\n\t\tthis.regenerateRowNumbers();\r\n\t\t\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\t\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis.moveRowInArray(this.rows, from, to, after);\r\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\r\n\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\t\t\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\t\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\t\t\r\n\t\tif(from !== to){\r\n\t\t\t\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\t\t\t\r\n\t\t\tif (fromIndex > -1) {\r\n\t\t\t\t\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\t\t\t\t\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\t\t\t\t\r\n\t\t\t\tif (toIndex > -1) {\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\t\t\t\t\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\t\t\t\t\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\t\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\t\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\t\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\t\t\r\n\t\t\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\t\t\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\t\t\r\n\t\treturn nextRow;\r\n\t}\r\n\t\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\t\t\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\t\t\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\t\t\r\n\t\treturn prevRow;\r\n\t}\r\n\t\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\t\t\r\n\t\trow = this.findRow(row);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\t\t\t\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\t\t\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\t\t\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\t\t\r\n\t\treturn rows.length;\r\n\t}\r\n\t\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\t\t\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\t\r\n\tregisterDataPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.dataPipeline.push({handler, priority})\r\n\t\t\tthis.dataPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\t\r\n\tregisterDisplayPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.displayPipeline.push({handler, priority})\r\n\t\t\tthis.displayPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set active data set\r\n\trefreshActiveData(handler, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tstage = \"\",\r\n\t\tindex = 0,\r\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"],\r\n\t\tdisplayIndex;\r\n\t\t\r\n\t\t\r\n\t\tif(typeof handler === \"function\"){\r\n\t\t\tindex = this.dataPipeline.findIndex((item) => {\r\n\t\t\t\treturn item.handler === handler;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tstage = \"dataPipeline\";\r\n\t\t\t\t\r\n\t\t\t\tif(skipStage){\r\n\t\t\t\t\tif(index == this.dataPipeline.length - 1){\r\n\t\t\t\t\t\tstage = \"display\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\r\n\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"displayPipeline\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(skipStage){\r\n\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\r\n\t\t\t\t\t\t\tstage = \"end\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tstage = handler || \"all\";\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\thandler: handler,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t\tstage:stage,\r\n\t\t\t\t\tindex:index,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn;\r\n\t\t}else{\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!handler){\r\n\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.renderTable();\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"data-refreshed\");\r\n\t\t}\r\n\t}\r\n\t\r\n\trefreshPipelines(handler, stage, index, renderInPosition){\r\n\t\tthis.dispatch(\"data-refreshing\");\r\n\t\t\r\n\t\tif(!handler){\r\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\r\n\t\t}\r\n\t\t\r\n\t\t//cascade through data refresh stages\r\n\t\tswitch(stage){\r\n\t\t\tcase \"all\":\r\n\t\t\t//handle case where alldata needs refreshing\r\n\t\t\t\r\n\t\t\tcase \"dataPipeline\":\r\n\t\t\t\r\n\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\r\n\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\r\n\t\t\t\t\r\n\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\t\t\t\r\n\t\t\tthis.regenerateRowNumbers();\r\n\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\tindex = 0;\r\n\t\t\tthis.resetDisplayRows();\r\n\t\t\t\r\n\t\t\tcase \"displayPipeline\":\r\n\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\t\t\t\t\r\n\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcase \"end\":\r\n\t\t\t//case to handle scenario when trying to skip past end stage\r\n\t\t}\r\n\t}\r\n\t\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\t\t\t\t\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\t\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\t\t\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\t\t\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\t\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\t\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\t\t\r\n\t\tvar output = true;\r\n\t\t\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\t\t\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetVisibleRows(chain, viewable){\r\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\r\n\t\t\r\n\t\tif(chain){\r\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\t\t\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\t\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(type){\r\n\t\tvar rows;\r\n\t\t\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(false, true);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}else{\r\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"renderStarted\");\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\t\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\t\t\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomVertical,\r\n\t\t\t\"basic\": RendererBasicVertical,\r\n\t\t};\r\n\t\t\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\t\t\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t\t\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\t\r\n\trenderTable(){\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\t\t\r\n\t\tthis.element.scrollTop = 0;\r\n\t\t\r\n\t\tthis._clearTable();\r\n\t\t\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.renderer.renderRows();\r\n\t\t\t\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"table-layout\");\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\t\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\t\r\n\t_clearTable(){\r\n\t\tvar element = this.tableElement;\r\n\t\t\r\n\t\tthis._clearPlaceholder();\r\n\t\t\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.renderer.clearRows();\r\n\t}\r\n\t\r\n\t_showPlaceholder(){\r\n\t\tif(this.placeholder){\r\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\t\t\t\r\n\t\t\tthis.getElement().appendChild(this.placeholder);\r\n\t\t\tthis._positionPlaceholder();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_clearPlaceholder(){\r\n\t\tif(this.placeholder && this.placeholder.parentNode){\r\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_positionPlaceholder(){\r\n\t\tif(this.placeholder && this.placeholder.parentNode){\r\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\r\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\t\t\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\t\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\t\t\r\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\r\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\t\t\t\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.renderer.resize();\r\n\t\t\t\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tif(this.subscribed(\"table-resize\")){\r\n\t\t\t\t\tthis.dispatch(\"table-resize\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._positionPlaceholder();\r\n\t}\r\n\t\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\t\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\t\t\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\t\t\t\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRenderInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.redrawBlockRenderInPosition = false;\r\n\t}\r\n\t\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\t\t\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\t\t\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\t\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\t\t\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\n\r\nexport default class FooterManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.containerElement = this.createContainerElement(); //containing element\r\n\t\tthis.external = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeElement();\r\n\t}\r\n\r\n\tcreateElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t\r\n\tcreateContainerElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer-contents\");\r\n\r\n\t\tthis.element.appendChild(el);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeElement(){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element){\r\n\t\tthis.activate();\r\n\r\n\t\tthis.containerElement.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element){\r\n\t\tthis.activate();\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.dispatch(\"footer-redraw\")\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\nimport Row from '../row/Row.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\t\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.el = null;\r\n\t\t\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\t\t\r\n\t\tthis.previousTargets = {};\r\n\t\t\r\n\t\tthis.listeners = [\r\n\t\t\t\"click\",\r\n\t\t\t\"dblclick\",\r\n\t\t\t\"contextmenu\",\r\n\t\t\t\"mouseenter\",\r\n\t\t\t\"mouseleave\",\r\n\t\t\t\"mouseover\",\r\n\t\t\t\"mouseout\",\r\n\t\t\t\"mousemove\",\r\n\t\t\t\"touchstart\",\r\n\t\t\t\"touchend\",\r\n\t\t];\r\n\t\t\r\n\t\tthis.componentMap = {\r\n\t\t\t\"tabulator-cell\":\"cell\",\r\n\t\t\t\"tabulator-row\":\"row\",\r\n\t\t\t\"tabulator-group\":\"group\",\r\n\t\t\t\"tabulator-col\":\"column\",\r\n\t\t};\r\n\t\t\r\n\t\tthis.pseudoTrackers = {\r\n\t\t\t\"row\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"cell\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"group\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"column\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t}\r\n\t\t\r\n\t\tthis.pseudoTracking = false;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.el = this.table.element;\r\n\t\t\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\t\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\t\t\r\n\t\tthis.listeners.forEach((listener) => {\r\n\t\t\tlistenerMap[listener] = {\r\n\t\t\t\thandler:null,\r\n\t\t\t\tcomponents:[],\r\n\t\t\t}\r\n\t\t})\r\n\t\t\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\t\r\n\tbindPseudoEvents(){\r\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\r\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\r\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\r\n\t\t});\r\n\t\t\r\n\t\tthis.pseudoTracking = true;\r\n\t}\r\n\t\r\n\tpseudoMouseEnter(key, e, target){\r\n\t\tif(this.pseudoTrackers[key].target !== target){\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.pseudoMouseLeave(key, e);\r\n\t\t\t\r\n\t\t\tthis.pseudoTrackers[key].target = target;\r\n\t\t\t\r\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\r\n\t\t}\r\n\t}\r\n\t\r\n\tpseudoMouseLeave(key, e){\r\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\r\n\t\tlinkedKeys = {\r\n\t\t\t\"row\":[\"cell\"],\r\n\t\t\t\"cell\":[\"row\"],\r\n\t\t};\r\n\t\t\r\n\t\tleaveList = leaveList.filter((item) => {\r\n\t\t\tvar links = linkedKeys[key];\r\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\tleaveList.forEach((key) => {\r\n\t\t\tvar target = this.pseudoTrackers[key].target;\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\r\n\t\t\t\t\r\n\t\t\t\tthis.pseudoTrackers[key].target = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t\r\n\tbindSubscriptionWatchers(){\r\n\t\tvar listeners = Object.keys(this.listeners),\r\n\t\tcomponents = Object.values(this.componentMap);\r\n\t\t\r\n\t\tfor(let comp of components){\r\n\t\t\tfor(let listener of listeners){\r\n\t\t\t\tlet key = comp + \"-\" + listener;\r\n\t\t\t\t\r\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this))\r\n\t}\r\n\t\r\n\tsubscriptionChanged(component, key, added){\r\n\t\tvar listener = this.listeners[key].components,\r\n\t\tindex = listener.indexOf(component),\r\n\t\tchanged = false;\r\n\t\t\r\n\t\tif(added){\r\n\t\t\tif(index === -1){\r\n\t\t\t\tlistener.push(component);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tlistener.splice(index, 1);\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\r\n\t\t\tthis.bindPseudoEvents();\r\n\t\t}\r\n\t\t\r\n\t\tif(changed){\r\n\t\t\tthis.updateEventListeners();\r\n\t\t}\r\n\t}\r\n\t\r\n\tupdateEventListeners(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\t\r\n\t\t\tif(listener.components.length){\r\n\t\t\t\tif(!listener.handler){\r\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\r\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler)\r\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(listener.handler){\r\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler)\r\n\t\t\t\t\tlistener.handler = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrack(type, e){\r\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\r\n\t\t\r\n\t\tvar targets = this.findTargets(path);\r\n\t\ttargets = this.bindComponents(type, targets);\r\n\t\t\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\t\t\r\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\r\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\t\t\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\t\t\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\t\t\t\r\n\t\t\tlet abort = classList.filter((item) => {\r\n\t\t\t\treturn this.abortClasses.includes(item);\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlet elTargets = classList.filter((item) => {\r\n\t\t\t\treturn componentMap.includes(item);\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\ttargets[this.componentMap[target]] = el;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(targets.group && targets.group === targets.row){\r\n\t\t\tdelete targets.row;\r\n\t\t}\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\r\n\tbindComponents(type, targets){\r\n\t\t//ensure row component is looked up before cell\r\n\t\tvar keys = Object.keys(targets).reverse(),\r\n\t\tlistener = this.listeners[type],\r\n\t\ttargetMatches = {};\r\n\t\t\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component;\r\n\t\t\tlet target = targets[key];\r\n\t\t\tlet previousTarget = this.previousTargets[key];\r\n\t\t\t\r\n\t\t\tif(previousTarget && previousTarget.target === target){\r\n\t\t\t\tcomponent = previousTarget.component;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(key){\r\n\t\t\t\t\tcase \"row\":\r\n\t\t\t\t\tcase \"group\":\r\n\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\r\n\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\r\n\t\t\t\t\t\t\ttargets[key] = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tif(targets[\"row\"] instanceof Row){\r\n\t\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t\t}else{\t\r\n\t\t\t\t\t\t\tif(targets[\"row\"]){\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\")\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.previousTargets = targetMatches;\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\t\t\r\n\t\tfor(let key in targets){\r\n\t\t\tif(targets[key] && listener.components.includes(key)){\r\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearWatchers(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\t\r\n\t\t\tif(listener.handler){\r\n\t\t\t\tthis.el.removeEventListener(key, listener.handler)\r\n\t\t\t\tlistener.handler = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFunctionBinder{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.bindings = {};\r\n\t}\r\n\r\n\tbind(type, funcName, handler){\r\n\t\tif(!this.bindings[type]){\r\n\t\t\tthis.bindings[type] = {};\r\n\t\t}\r\n\r\n\t\tif(this.bindings[type][funcName]){\r\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler)\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\r\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\")\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){}\r\n\r\n\tload(data, params, config, replace, silent, columnsChanged){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.alertLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\r\n\r\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\r\n\r\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\r\n\t\t\t\r\n\t\t\treturn result.then((response) => {\r\n\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\r\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\r\n\r\n\t\t\t\tif(requestNo == this.requestOrder){\r\n\t\t\t\t\tthis.clearAlert();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.alertError();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.clearAlert();\r\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\r\n\t\t\tif(!data){\r\n\t\t\t\tdata = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\talertLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\r\n\t\t}\r\n\t}\r\n\r\n\talertError(){\r\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\tthis.table.alertManager.clear();\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(table, optionsList, debug){\r\n\t\tthis.table = table;\r\n\t\tthis.events = {};\r\n\t\tthis.optionsList = optionsList || {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this.table, args);\r\n\r\n\t\t\t\tif(!i){\r\n\t\t\t\t\tresult = callResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"ExternalEvent:\" + args[0];\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments)\r\n\t}\r\n}","export default class InternalEventBus {\r\n\r\n\tconstructor(debug){\r\n\t\tthis.events = {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\r\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tlet callResult = subscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class Popup extends CoreFeature{\r\n constructor(table, element, parent){\r\n super(table);\r\n \r\n this.element = element;\r\n this.container = this._lookupContainer();\r\n \r\n this.parent = parent;\r\n \r\n this.reversedX = false;\r\n this.childPopup = null;\r\n this.blurable = false;\r\n this.blurCallback = null;\r\n this.renderedCallback = null;\r\n \r\n this.visible = false;\r\n \r\n this.element.classList.add(\"tabulator-popup-container\");\r\n \r\n this.blurEvent = this.hide.bind(this, false);\r\n this.escEvent = this._escapeCheck.bind(this);\r\n }\r\n \r\n _lookupContainer(){\r\n var container = this.table.options.popupContainer;\r\n \r\n if(typeof container === \"string\"){\r\n container = document.querySelector(container);\r\n \r\n if(!container){\r\n console.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\r\n }\r\n }else if (container === true){\r\n container = this.table.element;\r\n }\r\n \r\n if(container && !this._checkContainerIsParent(container)){\r\n container = false;\r\n console.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\r\n }\r\n \r\n if(!container){\r\n container = document.body;\r\n }\r\n \r\n return container;\r\n }\r\n \r\n _checkContainerIsParent(container, element = this.table.element){\r\n if(container === element){\r\n return true;\r\n }else{\r\n return element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\r\n }\r\n }\r\n \r\n renderCallback(callback){\r\n this.renderedCallback = callback;\r\n }\r\n \r\n containerEventCoords(e){\r\n var touch = !(e instanceof MouseEvent);\r\n \r\n var x = touch ? e.touches[0].pageX : e.pageX;\r\n var y = touch ? e.touches[0].pageY : e.pageY;\r\n \r\n if(this.container !== document.body){\r\n let parentOffset = Helpers.elOffset(this.container);\r\n \r\n x -= parentOffset.left;\r\n y -= parentOffset.top;\r\n }\r\n \r\n return {x, y};\r\n }\r\n \r\n elementPositionCoords(element, position = \"right\"){\r\n var offset = Helpers.elOffset(element),\r\n containerOffset, x, y;\r\n \r\n if(this.container !== document.body){\r\n containerOffset = Helpers.elOffset(this.container);\r\n \r\n offset.left -= containerOffset.left;\r\n offset.top -= containerOffset.top;\r\n }\r\n \r\n switch(position){\r\n case \"right\":\r\n x = offset.left + element.offsetWidth;\r\n y = offset.top - 1;\r\n break;\r\n \r\n case \"bottom\":\r\n x = offset.left;\r\n y = offset.top + element.offsetHeight;\r\n break;\r\n }\r\n \r\n return {x, y, offset};\r\n }\r\n \r\n show(origin, position){\r\n var x, y, parentEl, parentOffset, containerOffset, coords;\r\n \r\n if(origin instanceof HTMLElement){\r\n parentEl = origin;\r\n coords = this.elementPositionCoords(origin, position);\r\n \r\n parentOffset = coords.offset;\r\n x = coords.x;\r\n y = coords.y;\r\n \r\n }else if(typeof origin === \"number\"){\r\n parentOffset = {top:0, left:0};\r\n x = origin;\r\n y = position;\r\n }else{\r\n coords = this.containerEventCoords(origin);\r\n \r\n x = coords.x;\r\n y = coords.y;\r\n \r\n this.reversedX = false;\r\n }\r\n \r\n this.element.style.top = y + \"px\";\r\n this.element.style.left = x + \"px\";\r\n \r\n this.container.appendChild(this.element);\r\n \r\n if(typeof this.renderedCallback === \"function\"){\r\n this.renderedCallback();\r\n }\r\n \r\n this._fitToScreen(x, y, parentEl, parentOffset, position);\r\n \r\n this.visible = true;\r\n \r\n return this;\r\n }\r\n \r\n _fitToScreen(x, y, parentEl, parentOffset, position){\r\n var scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\r\n\r\n //move menu to start on right edge if it is too close to the edge of the screen\r\n if((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\r\n this.element.style.left = \"\";\r\n \r\n if(parentEl){\r\n this.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\r\n }else{\r\n this.element.style.right = (this.container.offsetWidth - x) + \"px\";\r\n }\r\n \r\n this.reversedX = true;\r\n }\r\n\r\n //move menu to start on bottom edge if it is too close to the edge of the screen\r\n if((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\r\n if(parentEl){\r\n switch(position){\r\n case \"bottom\":\r\n this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\r\n break;\r\n\r\n default:\r\n this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\r\n }\r\n \r\n }else{\r\n this.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\r\n }\r\n }\r\n }\r\n \r\n isVisible(){\r\n return this.visible;\r\n }\r\n \r\n hideOnBlur(callback){\r\n this.blurable = true;\r\n \r\n if(this.visible){\r\n setTimeout(() => {\r\n this.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n this.subscribe(\"cell-editing\", this.blurEvent);\r\n document.body.addEventListener(\"click\", this.blurEvent);\r\n document.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n window.addEventListener(\"resize\", this.blurEvent);\r\n document.body.addEventListener(\"keydown\", this.escEvent);\r\n }, 100);\r\n \r\n this.blurCallback = callback;\r\n }\r\n \r\n return this;\r\n }\r\n \r\n _escapeCheck(e){\r\n if(e.keyCode == 27){\r\n this.hide();\r\n }\r\n }\r\n \r\n hide(silent = false){\r\n if(this.visible){\r\n if(this.blurable){\r\n document.body.removeEventListener(\"keydown\", this.escEvent);\r\n document.body.removeEventListener(\"click\", this.blurEvent);\r\n document.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n window.removeEventListener(\"resize\", this.blurEvent);\r\n this.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n this.unsubscribe(\"cell-editing\", this.blurEvent);\r\n }\r\n \r\n if(this.childPopup){\r\n this.childPopup.hide();\r\n }\r\n \r\n if(this.parent){\r\n this.parent.childPopup = null;\r\n }\r\n \r\n if(this.element.parentNode){\r\n this.element.parentNode.removeChild(this.element);\r\n }\r\n\r\n this.visible = false;\r\n\r\n if(this.blurCallback && !silent){\r\n this.blurCallback();\r\n }\r\n }\r\n \r\n return this;\r\n }\r\n \r\n child(element){\r\n if(this.childPopup){\r\n this.childPopup.hide();\r\n }\r\n \r\n this.childPopup = new Popup(this.table, element, this);\r\n \r\n return this.childPopup;\r\n }\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Popup from './tools/Popup.js';\r\n\r\nclass Module extends CoreFeature{\r\n\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\r\n\t\tthis._handler = null;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overriden in module\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/// Public Function Registration ///\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = (...args) => {\r\n\t\t\t\tthis.table.initGuard(name);\r\n\r\n\t\t\t\treturn func(...args);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name)\r\n\t\t}\r\n\t}\r\n\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\r\n\tregisterDataHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\tregisterDisplayHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\r\n\t\tif(handler){\r\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Footer Management ////////\r\n\t///////////////////////////////////\r\n\r\n\tfooterAppend(element){\r\n\t\treturn this.table.footerManager.append(element)\r\n\t}\r\n\r\n\tfooterPrepend(element){\r\n\t\treturn this.table.footerManager.prepend(element)\r\n\t}\r\n\r\n\tfooterRemove(element){\r\n\t\treturn this.table.footerManager.remove(element)\r\n\t} \r\n\r\n\t///////////////////////////////////\r\n\t//////// Popups Management ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tpopup(menuEl, menuContainer){\r\n\t\treturn new Popup(this.table, menuEl, menuContainer);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Alert Management ////////\r\n\t///////////////////////////////////\r\n\r\n\talert(content, type){\r\n\t\treturn this.table.alertManager.alert(content, type);\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\treturn this.table.alertManager.clear();\r\n\t}\r\n\t\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tthis.dispatch(\"layout-refreshing\")\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tthis.dispatch(\"layout-refreshed\")\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t\t\"counter\":{\r\n\t\t\t\t\"showing\": \"Showing\",\r\n\t\t\t\t\"of\": \"of\",\r\n\t\t\t\t\"rows\": \"rows\",\r\n\t\t\t\t\"pages\": \"pages\",\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/tools/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\r\n\t}\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = TableRegistry.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from '../modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\t\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\t\t\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\t\r\n\tbindStaticFuctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\t\t\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\r\n\t\t\t\t\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\t\t\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\t\t\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tvar orderedStartMods = [],\r\n\t\t\torderedEndMods = [],\r\n\t\t\tunOrderedMods = [];\r\n\t\t\t\r\n\t\t\tthis.modules = {};\r\n\t\t\t\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\t\t\t\tlet module = new mod(this);\r\n\t\t\t\t\r\n\t\t\t\tthis.modules[name] = module;\r\n\t\t\t\t\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore.push(module);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(mod.moduleInitOrder){\r\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\r\n\t\t\t\t\t\t\torderedStartMods.push(module);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\torderedEndMods.push(module);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tunOrderedMods.push(module);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\t\t\t\r\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\r\n\t\t}\r\n\t}\r\n\t\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\t\t\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class Alert extends CoreFeature{\r\n constructor(table){\r\n super(table);\r\n \r\n this.element = this._createAlertElement();\r\n this.msgElement = this._createMsgElement();\r\n this.type = null;\r\n \r\n this.element.appendChild(this.msgElement);\r\n }\r\n \r\n _createAlertElement(){\r\n var el = document.createElement(\"div\");\r\n el.classList.add(\"tabulator-alert\");\r\n return el;\r\n }\r\n \r\n _createMsgElement(){\r\n var el = document.createElement(\"div\");\r\n el.classList.add(\"tabulator-alert-msg\");\r\n el.setAttribute(\"role\", \"alert\");\r\n return el;\r\n }\r\n \r\n _typeClass(){\r\n return \"tabulator-alert-state-\" + this.type;\r\n }\r\n \r\n alert(content, type = \"msg\"){\r\n if(content){\r\n this.clear();\r\n \r\n this.type = type;\r\n \r\n while(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n \r\n this.msgElement.classList.add(this._typeClass());\r\n \r\n if(typeof content === \"function\"){\r\n content = content();\r\n }\r\n \r\n if(content instanceof HTMLElement){\r\n this.msgElement.appendChild(content);\r\n }else{\r\n this.msgElement.innerHTML = content;\r\n }\r\n \r\n this.table.element.appendChild(this.element);\r\n }\r\n }\r\n \r\n clear(){\r\n if(this.element.parentNode){\r\n this.element.parentNode.removeChild(this.element);\r\n }\r\n \r\n this.msgElement.classList.remove(this._typeClass());\r\n }\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\r\nimport DataLoader from './tools/DataLoader.js';\r\n\r\nimport ExternalEventBus from './tools/ExternalEventBus.js';\r\nimport InternalEventBus from './tools/InternalEventBus.js';\r\n\r\nimport TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport Alert from './tools/Alert.js';\r\n\r\nclass Tabulator {\r\n\t\r\n\tconstructor(element, options){\r\n\t\t\r\n\t\tthis.options = {};\r\n\t\t\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.alertManager = null; //hold Alert Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\r\n\t\t\r\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\t\t\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\r\n\t\t\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\t\r\n\t\tif(this.initializeElement(element)){\r\n\t\t\t\r\n\t\t\tthis.initializeCoreSystems(options);\r\n\t\t\t\r\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._create();\r\n\t\t\t})\r\n\t\t}\r\n\t\t\r\n\t\tTableRegistry.register(this); //register table for inter-device communication\r\n\t}\r\n\t\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\t\t\t\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeCoreSystems(options){\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\t\tthis.dataLoader = new DataLoader(this);\r\n\t\tthis.alertManager = new Alert(this);\r\n\t\t\r\n\t\tthis.bindModules();\r\n\t\t\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options)\r\n\t\t\r\n\t\tthis._clearObjectPointers();\r\n\t\t\r\n\t\tthis._mapDeprecatedFunctionality();\r\n\t\t\r\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\t\t\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\t\t\r\n\t\tthis.dataLoader.initialize();\r\n\t\t// this.columnManager.initialize();\r\n\t\t// this.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\t\r\n\t//convert deprecated functionality to new functions\r\n\t_mapDeprecatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\t\r\n\t_clearSelection(){\r\n\t\t\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\tif (window.getSelection) {\r\n\t\t\tif (window.getSelection().empty) { // Chrome\r\n\t\t\t\twindow.getSelection().empty();\r\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t}\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\t\r\n\t//create table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\t\t\r\n\t\tthis._rtlCheck();\r\n\t\t\r\n\t\tthis._buildElement();\r\n\t\t\r\n\t\tthis._initializeTable();\r\n\t\t\r\n\t\tthis._loadInitialData();\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\t\r\n\t_rtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\t\t\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\t\t\r\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options,\r\n\t\tnewElement;\r\n\t\t\r\n\t\tif(element.tagName === \"TABLE\"){\r\n\t\t\tthis.originalElement = this.element;\r\n\t\t\tnewElement = document.createElement(\"div\");\r\n\t\t\t\r\n\t\t\t//transfer attributes to new element\r\n\t\t\tvar attributes = element.attributes;\r\n\t\t\t\r\n\t\t\t// loop through attributes and apply them on div\r\n\t\t\tfor(var i in attributes){\r\n\t\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// replace table with div element\r\n\t\t\telement.parentNode.replaceChild(newElement, element);\r\n\t\t\t\r\n\t\t\tthis.element = element = newElement;\r\n\t\t}\r\n\t\t\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\t\t\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\t\t\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\t\t\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//initialize core systems and modules\r\n\t_initializeTable(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\t\t\r\n\t\tthis.interactionMonitor.initialize();\r\n\t\t\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\t\r\n\t\tthis._detectBrowser();\r\n\t\t\r\n\t\t//initialize core modules\r\n\t\tthis.modulesCore.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t})\r\n\t\t\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\t\t\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\t\t\r\n\t\tif(options.autoColumns && options.data){\r\n\t\t\t\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\t\t\r\n\t\t//initialize regular modules\r\n\t\tthis.modulesRegular.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t});\r\n\t\t\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\t\t\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t}\r\n\t\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\t\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\t\t\r\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\r\n\t\t\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\t\t\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\t\t\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\t\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\t\t\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\t\t\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.slice(0,4));\r\n\t}\r\n\t\r\n\tinitGuard(func, msg){\r\n\t\tvar stack, line;\r\n\t\t\r\n\t\tif(this.options.debugInitialization && !this.initialized){\r\n\t\t\tif(!func){\r\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\r\n\t\t\t\t\r\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\r\n\t\t\t\t\r\n\t\t\t\tif(line[0] == \" \"){\r\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\r\n\t\t}\r\n\t\t\r\n\t\treturn this.initialized;\r\n\t}\r\n\t\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\t\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\t\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\r\n\t\t\r\n\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t}\r\n\t\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\t\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\t\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\t\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t}\r\n\t\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\taddData(data, pos, index){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\t\t\t\t\t\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tresponses++;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\tvar foundRows = [];\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(!Array.isArray(index)){\r\n\t\t\tindex = [index];\r\n\t\t}\r\n\t\t\r\n\t\t//find matching rows\r\n\t\tfor(let item of index){\r\n\t\t\tlet row = this.rowManager.findRow(item, true);\r\n\t\t\t\r\n\t\t\tif(row){\r\n\t\t\t\tfoundRows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\")\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\tfoundRows.sort((a, b) => {\r\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t});\r\n\t\t\r\n\t\t//delete rows\r\n\t\tfoundRows.forEach((row) =>{\r\n\t\t\trow.delete()\r\n\t\t});\r\n\t\t\r\n\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\t\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t.then((rows)=>{\r\n\t\t\treturn rows[0].getComponent();\r\n\t\t});\r\n\t}\r\n\t\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn row.getComponent();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\t\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn Promise.resolve(row.getComponent());\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\t\r\n\t}\r\n\t\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\r\n\t\t\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\t\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\t\r\n\tgetColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\t\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field); \r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t.then((column) => {\r\n\t\t\treturn column.getComponent();\r\n\t\t});\r\n\t}\r\n\t\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from),\r\n\t\ttoColumn = this.columnManager.findColumn(to);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\t\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\t\r\n\t//////////////////// Event Bus ///////////////////\r\n\t\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\t\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\t\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\t\t\r\n\t\tthis.externalEvents.dispatch(...arguments)\r\n\t}\r\n\r\n\t//////////////////// Alerts ///////////////////\r\n\r\n\talert(contents, type){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.alertManager.alert(contents, type);\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.alertManager.clear();\r\n\t}\r\n\t\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\t\t\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\t\t\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;\r\n","export default {\r\n\r\n\tdebugEventsExternal:false, //flag to console log events\r\n\tdebugEventsInternal:false, //flag to console log events\r\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\r\n\tdebugInitialization:true, //allow toggling of invalid option warnings\r\n\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tpopupContainer:false,\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:{}, //store column default props\r\n\r\n\tdata:false, //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\tnestedFieldSeparator:\".\", //separator for nested data\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\trowHeight:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\tdataLoaderErrorTimeout:3000,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n}\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nexport default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\r\n\t\t\tvar output = generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.config = {}; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\t\t\r\n\t\tthis.loaderPromise = false;\r\n\t\t\r\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\r\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\r\n\t\t\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\t\t\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\t\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\t\t\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\r\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\t\r\n\trequestParams(data, config, silent, params){\r\n\t\tvar ajaxParams = this.table.options.ajaxParams;\r\n\t\t\r\n\t\tif(ajaxParams){\r\n\t\t\tif(typeof ajaxParams === \"function\"){\r\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tparams = Object.assign(params, ajaxParams);\r\n\t\t}\t\t\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\t\r\n\trequestData(url, params, config, silent, previousData){\r\n\t\tvar ajaxConfig;\r\n\t\t\r\n\t\tif(!previousData && this.requestDataCheck(url)){\r\n\t\t\tif(url){\r\n\t\t\t\tthis.setUrl(url);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tajaxConfig = this.generateConfig(config);\r\n\t\t\t\r\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetDefaultConfig(config = {}){\r\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(this.config, config);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//load config object\r\n\tgenerateConfig(config = {}){\r\n\t\tvar ajaxConfig = Object.assign({}, this.config)\r\n\t\t\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tajaxConfig.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(ajaxConfig, config);\r\n\t\t}\r\n\t\t\r\n\t\treturn ajaxConfig;\r\n\t}\r\n\t\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\t\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\t\r\n\t//send ajax request\r\n\tsendRequest(url, params, config){\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\r\n\t\t\treturn this.loaderPromise(url, config, params)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n \r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRICATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\r\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tuserRecalc(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tvisibleRows(viewable, rows){\r\n\t\tif(this.topRow){\r\n\t\t\trows.unshift(this.topRow);\r\n\t\t}\r\n\r\n\t\tif(this.botRow){\r\n\t\t\trows.push(this.botRow);\r\n\t\t}\r\n\t\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(this);\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRowsRefresh(){\r\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\r\n\t\t\tthis.recalcAll();\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRows(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\r\n\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.footerRemove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.footerPrepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(row);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\r\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\r\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\r\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\r\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\r\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\r\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\r\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\r\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\r\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\r\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\r\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\r\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//seleccting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tvar dummyEl = null,\r\n\t\t\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\r\n\t\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\r\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedrawing(force){\r\n\t\tvar rows;\r\n\r\n\t\tif(force){\r\n\t\t\trows = this.table.rowManager.getRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.reinitializeRowChildren(row);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElementField(){\r\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\r\n\r\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\t}\r\n\t\r\n\tgetRowChildren(row){\r\n\t\treturn this.getTreeChildren(row, true);\r\n\t}\r\n\r\n\tcolumnMoving(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowDataChanged(row, visible, updatedData){\r\n\t\tif(this.redrawNeeded(updatedData)){\r\n\t\t\tthis.initializeRow(row);\r\n\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tvar field = cell.column.getField();\r\n\r\n\t\tif(field === this.elementField){\r\n\t\t\tthis.layoutRow(cell.row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\treinitializeRowChildren(row){\r\n\t\tvar children = this.getTreeChildren(row, false, true);\r\n\r\n\t\tchildren.forEach(function(child){\r\n\t\t\tchild.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowExpanded(row){\r\n\t\treturn row.modules.dataTree.open;\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetTreeParentRoot(row){\r\n\t\treturn row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\nimport jsonLines from './downloaders/jsonLines.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tjsonLines:jsonLines,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function (list, options, setFileContents) {\r\n\tconst fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tconst item = {};\r\n\r\n\t\tswitch (row.type) {\r\n\t\t\tcase \"header\":\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\t\tif (col) {\r\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(JSON.stringify(item));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.didDrawPage = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\r\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadReady\", function(data, blob){return blob;}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady(data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\tsuccess = false;\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = true;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import maskInput from './inputMask.js';\r\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\r\n\r\nexport default class Edit{\r\n constructor(editor, cell, onRendered, success, cancel, editorParams){\r\n this.edit = editor;\r\n this.table = editor.table;\r\n this.cell = cell;\r\n this.params = this._initializeParams(editorParams);\r\n \r\n this.data = [];\r\n this.displayItems = [];\r\n this.currentItems = [];\r\n this.focusedItem = null;\r\n \r\n this.input = this._createInputElement();\r\n this.listEl = this._createListElement();\r\n \r\n this.initialValues = null; \r\n \r\n this.isFilter = !cell._getSelf;\r\n \r\n this.filterTimeout = null;\r\n this.filtered = false;\r\n this.typing = false;\r\n \r\n this.values = []; \r\n this.popup = null; \r\n \r\n this.listIteration = 0;\r\n \r\n this.blurable = true;\r\n \r\n this.actions = {\r\n success:success,\r\n cancel:cancel\r\n }\r\n \r\n this._deprecationCheck();\r\n this._initializeValue();\r\n \r\n onRendered(this._onRendered.bind(this));\r\n }\r\n \r\n _deprecationCheck(){\r\n if(this.params.listItemFormatter){\r\n console.warn(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n }\r\n \r\n if(this.params.sortValuesList){\r\n console.warn(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n }\r\n \r\n if(this.params.searchFunc){\r\n console.warn(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n }\r\n \r\n if(this.params.searchingPlaceholder){\r\n console.warn(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n }\r\n }\r\n \r\n _initializeValue(){\r\n var initialValue = this.cell.getValue();\r\n \r\n if(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\r\n initialValue = this.params.defaultValue;\r\n }\r\n \r\n this.initialValues = this.params.multiselect ? initialValue : [initialValue];\r\n \r\n if(this.isFilter){\r\n this.input.value = this.initialValues.join(\",\");\r\n this.headerFilterInitialListGen(); \r\n }\r\n }\r\n \r\n _onRendered(){\r\n var cellEl = this.cell.getElement();\r\n \r\n function clickStop(e){\r\n e.stopPropagation();\r\n }\r\n \r\n this.input.style.height = \"100%\";\r\n this.input.focus({preventScroll: true});\r\n \r\n \r\n cellEl.addEventListener(\"click\", clickStop);\r\n \r\n setTimeout(() => {\r\n cellEl.removeEventListener(\"click\", clickStop);\r\n }, 1000)\r\n }\r\n \r\n _createListElement(){\r\n var listEl = document.createElement(\"div\");\r\n listEl.classList.add(\"tabulator-edit-list\");\r\n \r\n listEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\r\n listEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this))\r\n \r\n return listEl;\r\n }\r\n \r\n _setListWidth(){\r\n var element = this.isFilter ? this.input : this.cell.getElement();\r\n \r\n this.listEl.style.minWidth = element.offsetWidth + \"px\";\r\n \r\n if(this.params.maxWidth){\r\n if(this.params.maxWidth === true){\r\n this.listEl.style.maxWidth = element.offsetWidth + \"px\";\r\n }else if(typeof this.params.maxWidth === \"number\"){\r\n this.listEl.style.maxWidth = this.params.maxWidth + \"px\";\r\n }else{\r\n this.listEl.style.maxWidth = this.params.maxWidth;\r\n }\r\n }\r\n \r\n }\r\n \r\n _createInputElement(){\r\n var attribs = this.params.elementAttributes;\r\n var input = document.createElement(\"input\");\r\n \r\n input.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\r\n \r\n input.style.padding = \"4px\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n \r\n if(!this.params.autocomplete){\r\n input.style.cursor = \"default\";\r\n input.style.caretColor = \"transparent\";\r\n // input.readOnly = (this.edit.currentCell != false);\r\n }\r\n \r\n if(attribs && typeof attribs == \"object\"){\r\n for (let key in attribs){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, attribs[key]);\r\n }\r\n }\r\n }\r\n \r\n if(this.params.mask){\r\n maskInput(input, this.params);\r\n }\r\n \r\n this._bindInputEvents(input);\r\n \r\n return input;\r\n }\r\n \r\n _initializeParams(params){\r\n var valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\r\n valueCheck;\r\n\r\n params = Object.assign({}, params);\r\n \r\n params.verticalNavigation = params.verticalNavigation || \"editor\";\r\n params.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\r\n params.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\r\n params.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\r\n \r\n params.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\r\n\r\n valueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\r\n\r\n if(!valueCheck){\r\n console.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\")\r\n }else if(valueCheck > 1){\r\n console.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\")\r\n }\r\n \r\n if(params.autocomplete){\r\n if(params.multiselect){\r\n params.multiselect = false;\r\n console.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\")\r\n }\r\n }else{\r\n if(params.freetext){\r\n params.freetext = false;\r\n console.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\r\n }\r\n \r\n if(params.filterFunc){\r\n params.filterFunc = false;\r\n console.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\r\n }\r\n \r\n if(params.filterRemote){\r\n params.filterRemote = false;\r\n console.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\r\n }\r\n \r\n if(params.mask){\r\n params.mask = false;\r\n console.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\r\n }\r\n \r\n if(params.allowEmpty){\r\n params.allowEmpty = false;\r\n console.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\r\n }\r\n \r\n if(params.listOnEmpty){\r\n params.listOnEmpty = false;\r\n console.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\r\n }\r\n }\r\n \r\n if(params.filterRemote && !(typeof params.valuesLookup === \"function\" || typeof params.valuesURL)){\r\n params.filterRemote = false;\r\n console.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\r\n }\r\n return params;\r\n }\r\n //////////////////////////////////////\r\n ////////// Event Handling ////////////\r\n //////////////////////////////////////\r\n \r\n _bindInputEvents(input){\r\n input.addEventListener(\"focus\", this._inputFocus.bind(this))\r\n input.addEventListener(\"click\", this._inputClick.bind(this))\r\n input.addEventListener(\"blur\", this._inputBlur.bind(this))\r\n input.addEventListener(\"keydown\", this._inputKeyDown.bind(this))\r\n input.addEventListener(\"search\", this._inputSearch.bind(this))\r\n \r\n if(this.params.autocomplete){\r\n input.addEventListener(\"keyup\", this._inputKeyUp.bind(this))\r\n }\r\n }\r\n \r\n \r\n _inputFocus(e){\r\n this.rebuildOptionsList();\r\n }\r\n \r\n _filter(){\r\n if(this.params.filterRemote){\r\n clearTimeout(this.filterTimeout);\r\n \r\n this.filterTimeout = setTimeout(() => {\r\n this.rebuildOptionsList();\r\n }, this.params.filterDelay);\r\n }else{\r\n this._filterList();\r\n }\r\n }\r\n \r\n _inputClick(e){\r\n e.stopPropagation();\r\n }\r\n \r\n _inputBlur(e){\r\n if(this.blurable && this.popup){\r\n this.popup.hide();\r\n }\r\n }\r\n \r\n _inputSearch(){\r\n this._clearChoices();\r\n }\r\n \r\n _inputKeyDown(e){\r\n switch(e.keyCode){\r\n \r\n case 38: //up arrow\r\n this._keyUp(e);\r\n break\r\n \r\n case 40: //down arrow\r\n this._keyDown(e);\r\n break;\r\n \r\n case 37: //left arrow\r\n case 39: //right arrow\r\n this._keySide(e);\r\n break;\r\n \r\n case 13: //enter\r\n this._keyEnter();\r\n break;\r\n \r\n case 27: //escape\r\n this._keyEsc();\r\n break;\r\n \r\n case 36: //home\r\n case 35: //end\r\n this._keyHomeEnd(e);\r\n break;\r\n \r\n case 9: //tab\r\n break;\r\n \r\n default:\r\n this._keySelectLetter(e);\r\n }\r\n }\r\n \r\n _inputKeyUp(e){\r\n switch(e.keyCode){\r\n case 38: //up arrow\r\n case 37: //left arrow\r\n case 39: //up arrow\r\n case 40: //right arrow\r\n case 13: //enter\r\n case 27: //escape\r\n break;\r\n \r\n default:\r\n this._keyAutoCompLetter(e);\r\n }\r\n }\r\n \r\n _preventBlur(){\r\n this.blurable = false;\r\n \r\n setTimeout(function(){\r\n this.blurable = true;\r\n }, 10);\r\n }\r\n \r\n //////////////////////////////////////\r\n //////// Keyboard Navigation /////////\r\n //////////////////////////////////////\r\n \r\n _keyUp(e){\r\n var index = this.displayItems.indexOf(this.focusedItem);\r\n \r\n if(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n \r\n if(index > 0){\r\n this._focusItem(this.displayItems[index - 1]);\r\n }\r\n }\r\n }\r\n \r\n _keyDown(e){\r\n var index = this.displayItems.indexOf(this.focusedItem);\r\n \r\n if(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n \r\n if(index < this.displayItems.length - 1){\r\n if(index == -1){\r\n this._focusItem(this.displayItems[0]);\r\n }else{\r\n this._focusItem(this.displayItems[index + 1]);\r\n }\r\n }\r\n }\r\n }\r\n \r\n _keySide(e){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n \r\n _keyEnter(e){\r\n if(this.focusedItem){\r\n this._chooseItem(this.focusedItem);\r\n }else{\r\n this._cancel();\r\n }\r\n }\r\n \r\n _keyEsc(e){\r\n this._cancel();\r\n }\r\n \r\n _keyHomeEnd(e){\r\n if(this.params.autocomplete){\r\n //prevent table navigation while using input element\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n \r\n _keySelectLetter(e){\r\n if(!this.params.autocomplete){\r\n // if(this.edit.currentCell === false){\r\n e.preventDefault();\r\n // }\r\n \r\n if(e.keyCode >= 38 && e.keyCode <= 90){\r\n this._scrollToValue(e.keyCode);\r\n }\r\n }\r\n }\r\n \r\n _keyAutoCompLetter(e){\r\n this._filter();\r\n this.typing = true;\r\n }\r\n \r\n \r\n _scrollToValue(char){\r\n clearTimeout(this.filterTimeout);\r\n \r\n var character = String.fromCharCode(char).toLowerCase();\r\n this.filterTerm += character.toLowerCase();\r\n \r\n var match = this.displayItems.find((item) => {\r\n return typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\r\n });\r\n \r\n if(match){\r\n this._focusItem(match);\r\n }\r\n \r\n this.filterTimeout = setTimeout(() => {\r\n this.filterTerm = \"\";\r\n }, 800)\r\n }\r\n \r\n _focusItem(item){\r\n if(this.focusedItem && this.focusedItem.element){\r\n this.focusedItem.element.classList.remove(\"focused\");\r\n }\r\n \r\n this.focusedItem = item;\r\n \r\n if(item && item.element){\r\n item.element.classList.add(\"focused\");\r\n item.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n }\r\n }\r\n \r\n \r\n //////////////////////////////////////\r\n /////// Data List Generation /////////\r\n //////////////////////////////////////\r\n headerFilterInitialListGen(){\r\n this._generateOptions(true);\r\n }\r\n \r\n rebuildOptionsList(){\r\n this._generateOptions()\r\n .then(this._sortOptions.bind(this))\r\n .then(this._buildList.bind(this))\r\n .then(this._showList.bind(this))\r\n .catch((e) => {\r\n if(!Number.isInteger(e)){\r\n console.error(\"List generation error\", e);\r\n }\r\n })\r\n }\r\n \r\n _filterList(){\r\n this._buildList(this._filterOptions());\r\n this._showList();\r\n }\r\n \r\n _generateOptions(silent){\r\n var values = [];\r\n var itteration = ++ this.listIteration;\r\n \r\n this.filtered = false;\r\n \r\n if(this.params.values){\r\n values = this.params.values;\r\n }else if (this.params.valuesURL){\r\n values = this._ajaxRequest(this.params.valuesURL, this.input.value);\r\n }else{\r\n if(typeof this.params.valuesLookup === \"function\"){\r\n values = this.params.valuesLookup(this.cell, this.input.value);\r\n }else if(this.params.valuesLookup){\r\n values = this._uniqueColumnValues(this.params.valuesLookupField);\r\n }\r\n }\r\n \r\n if(values instanceof Promise){\r\n if(!silent){\r\n this._addPlaceholder(this.params.placeholderLoading);\r\n }\r\n \r\n return values.then()\r\n .then((responseValues) => {\r\n if(this.listIteration === itteration){\r\n return this._parseList(responseValues);\r\n }else{\r\n return Promise.reject(itteration);\r\n }\r\n });\r\n }else{\r\n return Promise.resolve(this._parseList(values))\r\n }\r\n }\r\n \r\n _addPlaceholder(contents){\r\n var placeholder = document.createElement(\"div\");\r\n \r\n if(typeof contents === \"function\"){\r\n contents = contents(cell.getComponent(), this.listEl);\r\n }\r\n \r\n if(contents){\r\n this._clearList();\r\n \r\n if(contents instanceof HTMLElement){\r\n placeholder = contents;\r\n }else{\r\n placeholder.classList.add(\"tabulator-edit-list-placeholder\")\r\n placeholder.innerHTML = contents;\r\n }\r\n \r\n this.listEl.appendChild(placeholder);\r\n \r\n this._showList();\r\n }\r\n }\r\n \r\n _ajaxRequest(url, term){\r\n var params = this.params.filterRemote ? {term:term} : {};\r\n url = urlBuilder(url, {}, params);\r\n \r\n return fetch(url)\r\n .then((response)=>{\r\n if(response.ok) {\r\n return response.json()\r\n .catch((error)=>{\r\n console.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\r\n return Promise.reject(error);\r\n });\r\n }else{\r\n console.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n return Promise.reject(response);\r\n }\r\n })\r\n .catch((error)=>{\r\n console.error(\"List Ajax Load Error - Connection Error: \", error);\r\n return Promise.reject(error);\r\n });\r\n }\r\n \r\n _uniqueColumnValues(field){\r\n var output = {},\r\n data = this.table.getData(this.params.valuesLookup),\r\n column;\r\n \r\n if(field){\r\n column = this.table.columnManager.getColumnByField(field);\r\n }else{\r\n column = this.cell.getColumn()._getSelf();\r\n }\r\n \r\n if(column){\r\n data.forEach((row) => {\r\n var val = column.getFieldValue(row);\r\n \r\n if(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n output[val] = true;\r\n }\r\n });\r\n }else{\r\n console.warn(\"unable to find matching column to create select lookup list:\", field);\r\n output = [];\r\n }\r\n \r\n return Object.keys(output);\r\n }\r\n \r\n \r\n _parseList(inputValues){\r\n var data = [];\r\n \r\n if(!Array.isArray(inputValues)){\r\n inputValues = Object.entries(inputValues).map(([key, value]) => {\r\n return {\r\n label:value,\r\n value:key,\r\n };\r\n });\r\n }\r\n \r\n inputValues.forEach((value) => {\r\n if(typeof value !== \"object\"){\r\n value = {\r\n label:value,\r\n value:value,\r\n };\r\n }\r\n \r\n this._parseListItem(value, data, 0);\r\n });\r\n \r\n this.data = data;\r\n \r\n return data; \r\n }\r\n \r\n _parseListItem(option, data, level){\r\n var item = {};\r\n \r\n if(option.options){\r\n item = this._parseListGroup(option, level + 1);\r\n }else{\r\n item = {\r\n label:option.label,\r\n value:option.value,\r\n itemParams:option.itemParams,\r\n elementAttributes: option.elementAttributes,\r\n element:false,\r\n selected:false,\r\n visible:true,\r\n level:level,\r\n original:option,\r\n };\r\n \r\n if(this.initialValues && this.initialValues.indexOf(option.value) > -1){\r\n this._chooseItem(item, true);\r\n }\r\n }\r\n \r\n data.push(item);\r\n }\r\n \r\n _parseListGroup(option, level){\r\n var item = {\r\n label:option.label,\r\n group:true,\r\n itemParams:option.itemParams,\r\n elementAttributes:option.elementAttributes,\r\n element:false,\r\n visible:true,\r\n level:level,\r\n options:[],\r\n original:option,\r\n };\r\n \r\n option.options.forEach((child) => {\r\n this._parseListItem(child, item.options, level);\r\n });\r\n \r\n return item;\r\n }\r\n \r\n _sortOptions(options){\r\n var sorter;\r\n \r\n if(this.params.sort){\r\n sorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\r\n \r\n this._sortGroup(sorter, options);\r\n }\r\n \r\n return options;\r\n }\r\n \r\n _sortGroup(sorter, options){\r\n options.sort((a,b) => {\r\n return sorter(a.label, b.label, a.value, b.value, a.original, b.original);\r\n });\r\n \r\n options.forEach((option) => {\r\n if(option.group){\r\n this._sortGroup(sorter, option.options);\r\n }\r\n })\r\n }\r\n \r\n _defaultSortFunction(as, bs){\r\n var a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n var emptyAlign = 0;\r\n \r\n if(this.params.sort === \"desc\"){\r\n [as, bs] = [bs, as];\r\n }\r\n \r\n //handle empty values\r\n if(!as && as!== 0){\r\n emptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n }else if(!bs && bs!== 0){\r\n emptyAlign = 1;\r\n }else{\r\n if(isFinite(as) && isFinite(bs)) return as - bs;\r\n a = String(as).toLowerCase();\r\n b = String(bs).toLowerCase();\r\n if(a === b) return 0;\r\n if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n a = a.match(rx);\r\n b = b.match(rx);\r\n L = a.length > b.length ? b.length : a.length;\r\n while(i < L){\r\n a1= a[i];\r\n b1= b[i++];\r\n if(a1 !== b1){\r\n if(isFinite(a1) && isFinite(b1)){\r\n if(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n if(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n return a1 - b1;\r\n }\r\n else return a1 > b1 ? 1 : -1;\r\n }\r\n }\r\n \r\n return a.length > b.length;\r\n }\r\n \r\n return emptyAlign;\r\n }\r\n \r\n _filterOptions(){\r\n var filterFunc = this.params.filterFunc || this._defaultFilterFunc;\r\n var term = this.input.value;\r\n var results = [];\r\n \r\n if(term){\r\n this.filtered = true;\r\n \r\n this.data.forEach((item) => {\r\n this._filterItem(filterFunc, term, item);\r\n });\r\n }else{\r\n this.filtered = false;\r\n }\r\n \r\n return this.data;\r\n }\r\n \r\n _filterItem(func, term, item){\r\n var matches = false;\r\n \r\n if(!item.group){\r\n item.visible = func(term, item.label, item.value, item.original);\r\n }else{\r\n item.options.forEach((option) => {\r\n if(this._filterItem(func, term, option)){\r\n matches = true;\r\n }\r\n });\r\n \r\n item.visible = matches;\r\n }\r\n \r\n return item.visible;\r\n }\r\n \r\n _defaultFilterFunc(term, label, value, item){\r\n var term = String(term).toLowerCase();\r\n \r\n if(label !== null || typeof label !== \"undefined\"){\r\n if(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase(term).indexOf() > -1){\r\n return true;\r\n }\r\n }\r\n \r\n return false;\r\n }\r\n \r\n //////////////////////////////////////\r\n /////////// Display List /////////////\r\n //////////////////////////////////////\r\n \r\n _clearList(){\r\n while(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\r\n \r\n this.displayItems = [];\r\n }\r\n \r\n _buildList(data){\r\n this._clearList();\r\n \r\n data.forEach((option) => {\r\n this._buildItem(option);\r\n });\r\n \r\n if(!this.displayItems.length){\r\n this._addPlaceholder(this.params.placeholderEmpty);\r\n } \r\n }\r\n \r\n _buildItem(item){\r\n var el = item.element,\r\n contents;\r\n \r\n if(!this.filtered || item.visible){\r\n \r\n if(!el){\r\n el = document.createElement(\"div\");\r\n el.tabIndex = 0;\r\n \r\n contents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\r\n \r\n if(contents instanceof HTMLElement){\r\n el.appendChild(contents)\r\n }else{\r\n el.innerHTML = contents;\r\n }\r\n \r\n if(item.group){\r\n el.classList.add(\"tabulator-edit-list-group\");\r\n }else{\r\n el.classList.add(\"tabulator-edit-list-item\");\r\n }\r\n \r\n el.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\r\n \r\n if(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n for (let key in item.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n el.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n }else{\r\n el.setAttribute(key, item.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n \r\n if(item.group){\r\n el.addEventListener(\"click\", this._groupClick.bind(this, item));\r\n }else{\r\n el.addEventListener(\"click\", this._itemClick.bind(this, item));\r\n }\r\n \r\n el.addEventListener(\"mousedown\", this._preventBlur.bind(this));\r\n \r\n item.element = el;\r\n }\r\n \r\n this._styleItem(item);\r\n \r\n this.listEl.appendChild(el);\r\n \r\n if(item.group){\r\n item.options.forEach((option) => {\r\n this._buildItem(option);\r\n });\r\n }else{\r\n this.displayItems.push(item);\r\n }\r\n }\r\n }\r\n \r\n _showList(){\r\n var startVis = this.popup && this.popup.isVisible();\r\n \r\n if(this.input.parentNode){\r\n if(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\r\n if(this.popup){\r\n this.popup.hide(true);\r\n return;\r\n }\r\n }\r\n \r\n this._setListWidth();\r\n \r\n if(!this.popup){\r\n this.popup = this.edit.popup(this.listEl);\r\n }\r\n \r\n this.popup.show(this.cell.getElement(), \"bottom\")\r\n \r\n if(!startVis){\r\n this.popup.hideOnBlur(this._resolveValue.bind(this, true));\r\n }\r\n }\r\n }\r\n \r\n _styleItem(item){\r\n if(item && item.element){\r\n if(item.selected){\r\n item.element.classList.add(\"active\");\r\n }else{\r\n item.element.classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n \r\n //////////////////////////////////////\r\n ///////// User Interaction ///////////\r\n //////////////////////////////////////\r\n \r\n _itemClick(item, e){\r\n e.stopPropagation();\r\n \r\n this._chooseItem(item);\r\n }\r\n \r\n _groupClick(item, e){\r\n e.stopPropagation();\r\n }\r\n \r\n \r\n //////////////////////////////////////\r\n ////// Current Item Management ///////\r\n //////////////////////////////////////\r\n \r\n _cancel(){\r\n this.popup.hide(true);\r\n this.actions.cancel();\r\n }\r\n \r\n _clearChoices(){\r\n this.typing = true;\r\n \r\n this.currentItems.forEach((item) => {\r\n item.selected = false;\r\n this._styleItem(item);\r\n });\r\n \r\n this.currentItems = [];\r\n \r\n this.focusedItem = null;\r\n }\r\n \r\n _chooseItem(item, silent){\r\n var index;\r\n \r\n this.typing = false;\r\n \r\n if(this.params.multiselect){\r\n index = this.currentItems.indexOf(item);\r\n \r\n if(index > -1){\r\n this.currentItems.splice(index, 1);\r\n item.selected = false;\r\n }else{\r\n this.currentItems.push(item);\r\n item.selected = true;\r\n }\r\n \r\n this.input.value = this.currentItems.map(item => item.label).join(\",\");\r\n \r\n this._styleItem(item);\r\n \r\n }else{\r\n this.currentItems = [item];\r\n item.selected = true;\r\n \r\n this.input.value = item.label;\r\n \r\n this._styleItem(item);\r\n \r\n if(!silent){\r\n this._resolveValue();\r\n }\r\n }\r\n \r\n this._focusItem(item);\r\n }\r\n \r\n _resolveValue(blur){\r\n var output, initialValue;\r\n \r\n this.popup.hide(true);\r\n \r\n if(this.params.multiselect){\r\n output = this.currentItems.map(item => item.value);\r\n }else{\r\n if(blur && this.params.autocomplete && this.typing){\r\n if(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\r\n output = this.input.value;\r\n }else{\r\n this.actions.cancel();\r\n return;\r\n }\r\n }else{\r\n if(this.currentItems[0]){\r\n output = this.currentItems[0].value;\r\n }else{\r\n initialValue = this.initialValues[0];\r\n \r\n if(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\r\n output = initialValue;\r\n }else{\r\n output = this.params.emptyValue;\r\n }\r\n }\r\n \r\n }\r\n }\r\n \r\n if(output === \"\"){\r\n output = this.params.emptyValue;\r\n }\r\n \r\n this.actions.success(output);\r\n \r\n if(this.isFilter){\r\n this.initialValues = output && !Array.isArray[output] ? [output] : output;\r\n }\r\n }\r\n \r\n}\r\n","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport list from './editors/list.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tlist:list,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n\r\n if(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\r\n\t console.warn(\"The select editor has been deprecated, please use the new list editor\");\r\n\r\n var list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n return list.input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n return list.input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\r\n\tconsole.warn(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\r\n\r\n\teditorParams.autocomplete = true;\r\n\r\n var list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n return list.input;\r\n}","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false,\r\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\r\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tvar checkedValue = input.checked;\r\n\r\n\t\tif(trueValueSet && checkedValue){\r\n\t\t\tcheckedValue = editorParams.trueValue;\r\n\t\t}else if(falseValueSet && !checkedValue){\r\n\t\t\tcheckedValue = editorParams.falseValue;\r\n\t\t}else{\r\n\t\t\tcheckedValue = checkedValue;\r\n\t\t}\r\n\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn checkedValue;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn checkedValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn checkedValue;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\r\n\t\tthis.editors = Edit.editors;\r\n\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellisEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\r\n\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(cell, e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tcell.getComponent().navigateNext();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\tcellisEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.table.modules.edit.getEditedCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(cell = this.currentCell, e){\r\n\t\tvar nextCell, prevRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateLeft();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(cell = this.currentCell, e){\r\n\t\tvar nextCell, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateRight();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(column.definition.editor === true){\r\n\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successful value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\treturn valid === true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;\r\n","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html outypu config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\r\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tindex = this.table.columnManager.findColumnIndex(column),\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.styleCells[index] || styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.styleCells[index] || styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t\tthis.tableInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.tableInitialized = true;\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\tcolumn.modules.filter.value = initialValue;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.langBind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft + parseInt(this.table.columnManager.element.style.marginLeft);\r\n\r\n\t\t\t\t\tif(left !== headerPos){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.tableInitialized){\r\n\t\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\t\tthis.reloadData(null, false, false);\r\n\t\t\t}else{\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\ttrackChanges(){\r\n\t\tthis.changed = true;\r\n\t\tthis.dispatch(\"filter-changed\");\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tthis.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tthis.filterList.push(filter);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.trackChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar column;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar output = [];\r\n\r\n\t\tfilters.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar output = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tsign = \"\",\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tif(floatVal < 0){\r\n\t\tfloatVal = Math.abs(floatVal);\r\n\t\tsign = negativeSign;\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\tif (formatterParams.thousand !== false) {\r\n\t\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\t\twhile (rgx.test(integer)){\r\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t\t}\r\n\t}\r\n\r\n\treturn after ? sign + integer + decimal + symbol : sign + symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tfunction labelTraverse(path, data){\r\n\t\tvar item = path.shift(),\r\n\t\tvalue = data[item];\r\n\t\t\r\n\t\tif(path.length && typeof value === \"object\"){\r\n\t\t\treturn labelTraverse(path, value);\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t};\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime;\r\n\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\t newDatetime = value;\r\n\t\t }else if(inputFormat === \"iso\"){\r\n\t\t\t newDatetime = DT.fromISO(String(value));\r\n\t\t }else{\r\n\t\t\t newDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t }\r\n\r\n\t\tif(newDatetime.isValid){\r\n\t\t\tif(formatterParams.timezone){\r\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\r\n\t\t\t}\r\n\r\n\t\t\treturn newDatetime.toFormat(outputFormat);\r\n\t\t}else{\r\n\t\t\tif(invalid === true || !value){\r\n\t\t\t\treturn value;\r\n\t\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t}else{\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime;\r\n\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\t newDatetime = value;\r\n\t\t }else if(inputFormat === \"iso\"){\r\n\t\t\t newDatetime = DT.fromISO(String(value));\r\n\t\t }else{\r\n\t\t\t newDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t }\r\n\r\n\t\tif (newDatetime.isValid){\r\n\t\t\tif(humanize){\r\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}else{\r\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}\r\n\t\t} else {\r\n\r\n\t\t\tif (invalid === true) {\r\n\t\t\t\treturn value;\r\n\t\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t} else {\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"absolute\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\tvar barContainer = document.createElement(\"div\");\r\n\tbarContainer.style.position = \"relative\";\r\n\tbarContainer.style.width = \"100%\";\r\n\tbarContainer.style.height = \"100%\";\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = 0;\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barContainer);\r\n\t\tbarContainer.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\tbarContainer.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1 || \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","import RowComponent from '../../../../core/row/RowComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\tvar blocked = false;\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\r\n\t\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\t\tif(!blocked){\r\n\t\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tblocked = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\tblocked = true;\r\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.blocked = true;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\t\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.reinitializeColumns.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\r\n\t}\r\n\t\r\n\tblockLayout(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\t\r\n\tunblockLayout(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n\t\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\t\r\n\treinitializeColumns(){\r\n\t\tthis.reset();\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\t\t\r\n\t\tif(!column.isGroup){\r\n\t\t\t\r\n\t\t\tif(this.frozenCheck(column)){\r\n\t\t\t\t\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\t\t\t\t\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.active = true;\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfrozenCheck(column){\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\t\t\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\t\t\r\n\t\tif(this.active){\t\t\r\n\t\t\tthis.calcMargins(true);\r\n\t\t\t\r\n\t\t\tthis.layoutColumnPosition();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t\t\r\n\t\t\tthis.reinitializeRows();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//calculate margins for rows\r\n\tcalcMargins(scroll){\r\n\t\t\r\n\t\tif(!scroll){\r\n\t\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\t\t\t\r\n\t\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\t\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t\t\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\t\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups())\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutGroupCalcs(groups){\r\n\t\tgroups.forEach((group) => {\r\n\t\t\tif(group.calcs.top){\r\n\t\t\t\tthis.layoutRow(group.calcs.top);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.calcs.bottom){\r\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.groupList && group.groupList.length){\r\n\t\t\t\tthis.layoutGroupCalcs(group.groupList && group.groupList);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\t\tvar leftParents = [];\r\n\t\t\r\n\t\tvar leftMargin = 0;\r\n\t\tvar rightMargin = 0;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column, i) => {\t\r\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin + this.table.columnManager.scrollLeft;\r\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tleftMargin += column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\trightMargin += column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.frozen.marginValue = this.rightPadding - rightMargin;\r\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\r\n\t\t\t\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\t\r\n\t//layout columns appropriately\r\n\tlayout(){\t\r\n\t\tif(this.active && !this.blocked){\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\t\t\t\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.reinitializeRows();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows();\r\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\r\n\r\n\t\totherRows.forEach((row) =>{\r\n\t\t\trow.deinitialize();\r\n\t\t});\r\n\t\t\r\n\t\tvisibleRows.forEach((row) =>{\r\n\t\t\tif(row.type === \"row\"){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tlayoutRow(row){\r\n\t\t// console.trace(\"row\")\r\n\t\tvar rowEl = row.getElement();\r\n\t\t\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\t\t\r\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\r\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\r\n\t\t}\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tlayoutElement(element, column){\r\n\t\t\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\t\t\t\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\t\t\t\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\t\t\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\t}\r\n\r\n\tisRowFrozen(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\treturn index > -1;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\tvisibleRows(viewable, rows){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trows.push(row);\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.refreshData(false, \"display\")\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.refreshData(false, \"display\")\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"row\", target._group, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._group.key;\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._group.field;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._group.element;\r\n\t}\r\n\r\n\tgetRows(){\r\n\t\treturn this._group.getRows(true);\r\n\t}\r\n\r\n\tgetSubGroups(){\r\n\t\treturn this._group.getSubGroups(true);\r\n\t}\r\n\r\n\tgetParentGroup(){\r\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._group.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis._group.show();\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis._group.hide();\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tthis._group.toggleVisibility();\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._group;\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._group.groupManager.table;\r\n\t}\r\n}\r\n\r\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\r\nimport GroupComponent from './GroupComponent.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\t\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.element = false;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\t\t\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\t\t\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\t\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\tif(row.modules){\r\n\t\t\t\t\tdelete row.modules.group;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.arrowElement = false;\r\n\t\tthis.elementContents = false;\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\t\t\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\t\t\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\taddBindings(){\r\n\t\tvar toggleElement;\r\n\t\t\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\t\t\t\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\t\t\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\t\r\n\t_addRowToGroup(row){\r\n\t\t\r\n\t\tvar level = this.level + 1;\r\n\t\t\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\t\t\t\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\t\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\t\t\r\n\t\trow.updateData(data);\r\n\t\t\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\t\t\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\trow.modules.group = this;\r\n\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\t\r\n\tscrollHeader(left){\r\n\t\tif(this.arrowElement){\r\n\t\t\tthis.arrowElement.style.marginLeft = left;\r\n\t\t\t\r\n\t\t\tthis.groupList.forEach(function(child){\r\n\t\t\t\tchild.scrollHeader(left);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRowIndex(row){}\r\n\t\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\t\t\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\t\t\t\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\t\t\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\t\t\t\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\toutput.push(this);\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\t\t\t\t\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\t\t\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\t\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\t\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\t\t\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\t\t\t\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t\t\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\t\t\t\t\t\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\t\t\t\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\r\n\t}\r\n\t\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\t\t\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\t\t\t\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t\t\r\n\t\t\tvar prev = this.generateElement();\r\n\t\t\t\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\t\t\t\t\t\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\t\t\t\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\r\n\t}\r\n\t\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tif(typeof this.visible == \"function\"){\r\n\t\t\t\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\t\t\t\t\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn match;\r\n\t}\r\n\t\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\t\t\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\t\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\t\r\n\t////////////// Standard Row Functions //////////////\r\n\t\r\n\tgetElement(){\r\n\t\treturn this.elementContents ? this.element : this.generateElement();\r\n\t}\r\n\t\r\n\tgenerateElement(){\r\n\t\tthis.addBindings = false;\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\t\t\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\r\n\t\t// this.addBindings();\r\n\t\t\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\t\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\t\t\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\t\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\t\r\n\treinitializeHeight(){}\r\n\t\r\n\tcalcHeight(){}\r\n\t\r\n\tsetCellHeight(){}\r\n\t\r\n\tclearCellHeight(){}\r\n\t\r\n\tdeinitializeHeight(){}\r\n\t\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.displayHandler = this.getRows.bind(this);\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\r\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\r\n\t\tthis.registerTableOption(\"groupValues\", false);\r\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\r\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\r\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\r\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\r\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\r\n\r\n\t\t//register table functions\r\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\r\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\r\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tconfigureGroupSetup(){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tvar groupBy = this.table.options.groupBy,\r\n\t\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\r\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tthis.groupIDLookups = [];\r\n\r\n\t\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\t\tlookupFunc = group;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(startOpen){\r\n\t\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(groupHeader){\r\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowSample(rows, prevValue){\r\n\t\tvar group = this.getGroups(false)[0];\r\n\r\n\t\tprevValue.push(group.getRows(false)[0]);\r\n\r\n\t\treturn prevValue;\r\n\t}\r\n\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\treturn row.type !== \"group\";\r\n\t\t});\r\n\r\n\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t// if(this.table.options.groupBy){\r\n\t\t// \tif(this.layoutMode() != \"fitDataFill\" && rowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t// \t\tel.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n\trowAddingIndex(row, index, top){\r\n\t\tthis.assignRowToGroup(row);\r\n\r\n\t\tvar groupRows = row.modules.group.rows;\r\n\r\n\t\tif(groupRows.length > 1){\r\n\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\tif(top){\r\n\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.initialize();\r\n\t\t}else{\r\n\t\t\tthis.configureGroupSetup();\r\n\t\t}\r\n\r\n\t\tthis.refreshData();\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.configureGroupSetup();\r\n\t\tthis.refreshData();\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.configureGroupSetup();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.configureGroupSetup();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ?\r\n\t\tthis.getGroupedData() : this.getData()\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowMoving(from, to, after){\r\n\t\tif(!after && to instanceof Group){\r\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t}\r\n\r\n\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\r\n\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\r\n\r\n\t\tif(toGroup === fromGroup){\r\n\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t}else{\r\n\t\t\tif(fromGroup){\r\n\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t}\r\n\r\n\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowsUpdated(row){\r\n\t\tthis.updateGroupRows(true);\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.reassignRowToGroup(cell.row);\r\n\t}\r\n\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\r\n\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tif(this.options(\"dataTree\")){\r\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\r\n\t\t}\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList = [];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\tvar oldRowGroup = row.modules.group,\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\r\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\t\tif(!samePath) {\r\n\t\t\t\toldRowGroup.removeRow(row);\r\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.refreshData(true, this.displayHandler);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","import Module from '../../core/Module.js';\r\nimport Row from '../../core/row/Row.js';\r\nimport Cell from '../../core/cell/Cell.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\r\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\r\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\r\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\r\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\r\n\t}\r\n\r\n\trowMoved(from, to, after){\r\n\t\tthis.action(\"rowMove\", from, {posFrom:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t\t\tif(index <= this.index){\r\n\t\t\t\tthis.index--;\r\n\t\t\t}\r\n\r\n\t\t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t\taction.component.cellRendered();\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t\taction.component.cellRendered();\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Column from '../../core/column/Column.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.tableElementCheck();\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\r\n\t\t\tif(this.table.originalElement.childNodes.length){\r\n\t\t\t\tthis.parseTable();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.originalElement,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for Tabulator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for Tabulator inline options\r\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","import csv from './importers/csv.js';\r\nimport json from './importers/json.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n};","function csvImporter(input){\r\n var data = [],\r\n row = 0, \r\n col = 0,\r\n inQuote = false;\r\n \r\n //Iterate over each character\r\n for (let index = 0; index < input.length; index++) {\r\n let char = input[index], \r\n nextChar = input[index+1]; \r\n \r\n //Initialize empty row\r\n if(!data[row]){\r\n data[row] = [];\r\n }\r\n\r\n //Initialize empty column\r\n if(!data[row][col]){\r\n data[row][col] = \"\";\r\n }\r\n \r\n //Handle quotation mark inside string\r\n if (char == '\"' && inQuote && nextChar == '\"') { \r\n data[row][col] += char; \r\n index++;\r\n continue; \r\n }\r\n \r\n //Begin / End Quote\r\n if (char == '\"') { \r\n inQuote = !inQuote;\r\n continue;\r\n }\r\n \r\n //Next column (if not in quote)\r\n if (char == ',' && !inQuote) { \r\n col++;\r\n continue; \r\n }\r\n \r\n //New row if new line and not in quote (CRLF) \r\n if (char == '\\r' && nextChar == '\\n' && !inQuote) { \r\n col = 0; \r\n row++; \r\n index++; \r\n continue; \r\n }\r\n \r\n //New row if new line and not in quote (CR or LF) \r\n if ((char == '\\r' || char == '\\n') && !inQuote) { \r\n col = 0;\r\n row++;\r\n continue; \r\n }\r\n\r\n //Normal Character, append to column\r\n data[row][col] += char;\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport default csvImporter;","export default function(input){\r\n try {\r\n return JSON.parse(input);\r\n } catch(e) {\r\n console.warn(\"JSON Import Error - File contents is invalid JSON\", e);\r\n return Promise.reject();\r\n }\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultImporters from './defaults/importers.js';\r\n\r\nclass Import extends Module{\r\n \r\n constructor(table){\r\n super(table);\r\n \r\n this.registerTableOption(\"importFormat\");\r\n this.registerTableOption(\"importReader\", \"text\");\r\n }\r\n \r\n initialize(){\r\n this.registerTableFunction(\"import\", this.importFromFile.bind(this));\r\n\r\n if(this.table.options.importFormat){\r\n this.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\r\n this.subscribe(\"data-load\", this.loadData.bind(this), 10);\r\n }\r\n }\r\n\r\n loadDataCheck(data){\r\n return typeof data === \"string\";\r\n }\r\n\r\n loadData(data, params, config, silent, previousData){\r\n return this.importData(this.lookupImporter(), data)\r\n .then(this.structureData.bind(this))\r\n .catch((err) => {\r\n console.error(\"Import Error:\", err || \"Unable to import data\")\r\n return Promise.reject(err);\r\n })\r\n }\r\n\r\n lookupImporter(importFormat){\r\n var importer;\r\n \r\n if(!importFormat){\r\n importFormat = this.table.options.importFormat;\r\n }\r\n \r\n if(typeof importFormat === \"string\"){\r\n importer = Import.importers[importFormat];\r\n }else{\r\n importer = importFormat;\r\n }\r\n\r\n if(!importer){\r\n console.error(\"Import Error - Importer not found:\", importFormat);\r\n }\r\n \r\n return importer;\r\n }\r\n \r\n importFromFile(importFormat, extension){\r\n var importer = this.lookupImporter(importFormat);\r\n \r\n if(importer){\r\n return this.pickFile(extension)\r\n .then(this.importData.bind(this, importer))\r\n .then(this.structureData.bind(this))\r\n .then(this.setData.bind(this))\r\n .catch((err) => {\r\n console.error(\"Import Error:\", err || \"Unable to import file\")\r\n return Promise.reject(err);\r\n })\r\n }\r\n }\r\n \r\n pickFile(extensions){\r\n return new Promise((resolve, reject) => {\r\n var input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.accept = extensions;\r\n \r\n input.addEventListener(\"change\", (e) => {\r\n var file = input.files[0],\r\n reader = new FileReader(),\r\n data;\r\n \r\n switch(this.table.options.importReader){\r\n case \"buffer\":\r\n reader.readAsArrayBuffer(file);\r\n break;\r\n\r\n case \"binary\":\r\n reader.readAsBinaryString(file);\r\n break;\r\n\r\n case \"url\":\r\n reader.readAsDataURL(file);\r\n break;\r\n\r\n case \"text\":\r\n default:\r\n reader.readAsText(file);\r\n }\r\n \r\n reader.onload = (e) => {\r\n resolve(reader.result)\r\n };\r\n \r\n reader.onerror = (e) => {\r\n console.warn(\"File Load Error - Unable to read file\");\r\n reject();\r\n };\r\n });\r\n \r\n input.click();\r\n });\r\n }\r\n \r\n importData(importer, fileContents){\r\n var data = importer.call(this.table, fileContents);\r\n \r\n if(data instanceof Promise){\r\n return data;\r\n }else{\r\n return data ? Promise.resolve(data) : Promise.reject();\r\n }\r\n }\r\n\r\n structureData(parsedData){\r\n var data = [];\r\n \r\n if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\r\n if(this.table.options.autoColumns){\r\n data = this.structureArrayToObject(parsedData);\r\n }else{\r\n data = this.structureArrayToColumns(parsedData);\r\n }\r\n\r\n return data;\r\n }else{\r\n return parsedData;\r\n }\r\n }\r\n\r\n structureArrayToObject(parsedData){\r\n var columns = parsedData.shift();\r\n\r\n var data = parsedData.map((values) => {\r\n var row = {};\r\n\r\n columns.forEach((key, i) => {\r\n row[key] = values[i];\r\n })\r\n\r\n return row;\r\n })\r\n\r\n return data;\r\n }\r\n\r\n structureArrayToColumns(parsedData){\r\n var data = [],\r\n columns = this.table.getColumns();\r\n\r\n //remove first row if it is the column names\r\n if(columns[0] && parsedData[0][0]){\r\n if(columns[0].getDefinition().title === parsedData[0][0]){\r\n parsedData.shift();\r\n }\r\n }\r\n \r\n //convert row arrays to objects\r\n parsedData.forEach((rowData) => {\r\n var row = {};\r\n\r\n rowData.forEach((value, index) => {\r\n var column = columns[index];\r\n\r\n if(column){\r\n row[column.getField()] = value;\r\n }\r\n })\r\n\r\n data.push(row);\r\n });\r\n\r\n return data;\r\n }\r\n \r\n setData(data){\r\n return this.table.setData(data);\r\n }\r\n}\r\n\r\nImport.moduleName = \"import\";\r\n\r\n//load defaults\r\nImport.importers = defaultImporters;\r\n\r\nexport default Import;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport Cell from '../../core/cell/Cell';\r\nimport Column from '../../core/column/Column';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t}\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tgroup:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this))\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this))\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\ttry{\r\n\t\t\tif (document.selection) { // IE\r\n\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\tvar range = document.createRange();\r\n\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t}\r\n\t\t}catch(e){}\r\n\t}\r\n\r\n\tinitializeExternalEvents(){\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(key, added){\r\n\t\tvar index;\r\n\r\n\t\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar notouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnotouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(notouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\twatchers.tap = true;\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t}, 1000);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(watchers.tapDbl){\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t}else{\r\n\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t}, 300);\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\twatchers.tapHold = null;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings)\r\n\t\t\tObject.assign(mergedBindings, bindings)\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tbindingList.forEach((item) => {\r\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\r\n\t\t\t\t\t\t});\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\r\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\r\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 89\"],\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nclass Menu extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.menuContainer = null;\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\t\r\n\t\tthis.currentComponent = null;\r\n\t\tthis.rootPopup = null;\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\r\n\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerClickMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t\t\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deprecationCheck();\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\r\n\tdeprecationCheck(){\r\n\t\tif(typeof this.table.options.menuContainer !== \"undefined\"){\r\n\t\t\tconsole.warn(\"Use of the menuContainer option is now deprecated. Please use the popupContainer option instead\");\r\n\r\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\r\n\t\t}\r\n\t}\t\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar options = [\"headerContextMenu\", \"headerClickMenu\"],\r\n\t\tdef = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\r\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\r\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerMenu){\r\n\t\t\tthis.initializeColumnHeaderMenu(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\r\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\r\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderMenu(column){\r\n\t\tvar icon = column.definition.headerMenuIcon,\r\n\t\theaderMenuEl;\r\n\t\t\r\n\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\r\n\r\n\t\tif(icon){\r\n\t\t\tif(typeof icon === \"function\"){\r\n\t\t\t\ticon = icon(column.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tif(icon instanceof HTMLElement){\r\n\t\t\t\theaderMenuEl.appendChild(icon);\r\n\t\t\t}else{\r\n\t\t\t\theaderMenuEl.innerHTML = icon;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\t\t}\r\n\t\t\r\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadMenuTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuEvent(menu, e, component){\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\r\n\t\t\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\t\r\n\tloadMenu(e, component, menu, parentEl, parentPopup){\r\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\r\n\t\tmenuEl = document.createElement(\"div\"),\r\n\t\tpopup;\r\n\t\t\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\t\t\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.rootPopup){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.rootPopup){\r\n\t\t\t\tthis.rootPopup.hide();\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tpopup = parentPopup.child(menuEl);\r\n\t\t}\r\n\t\t\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\t\t\t\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\t\t\t\t\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\t\t\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.rootPopup.hide();\r\n\t\t});\r\n\t\t\r\n\t\tpopup.show(parentEl || e);\r\n\t\t\r\n\t\tif(popup === this.rootPopup){\r\n\t\t\tthis.rootPopup.hideOnBlur(() => {\r\n\t\t\t\tthis.rootPopup = null;\r\n\t\t\t\t\r\n\t\t\t\tif(this.currentComponent){\r\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\r\n\t\t\t\t\tthis.currentComponent = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.currentComponent = component;\r\n\r\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent())\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\t\t\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\t\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\t\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableColumns){\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\t\t\r\n\t\tif(!column.modules.frozen && !column.isGroup){\r\n\t\t\tcolEl = column.getElement();\r\n\t\t\t\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\t\t\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\t\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\t\t\t\t\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\t\t\t\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\t\t\t\t\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\t\t\t\t\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement(),\r\n\t\theaderElement = this.table.columnManager.getElement(),\r\n\t\theadersElement = this.table.columnManager.getHeadersElement();\r\n\t\t\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\t\t\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\t\t\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\t\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\t\t\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\t\t\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\r\n\t\t\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\t\t\t\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\t\t\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\t\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\t\t\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\t\t\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\t\t\t\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\t\t\t\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\t\t\t\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\t\t\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\t\t\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"mutateLink\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tmutateLink(cell){\r\n\t\tvar links = cell.column.definition.mutateLink;\r\n\r\n\t\tif(links){\r\n\t\t\tif(!Array.isArray(links)){\r\n\t\t\t\tlinks = [links];\r\n\t\t\t}\r\n\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tvar linkCell = cell.row.getCell(link);\r\n\r\n\t\t\t\tif(linkCell){\r\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {};","import rows from './pageCounters/rows.js';\r\nimport pages from './pageCounters/pages.js';\r\n\r\n\r\nexport default {\r\n\trows:rows,\r\n\tpages:pages,\r\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\tvar el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\r\n\tif(totalRows){\r\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\r\n\t\t\r\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\r\n\t\t\r\n\t\tel.appendChild(showingEl);\r\n\t\tel.appendChild(valueEl);\r\n\t\tel.appendChild(ofEl);\r\n\t\tel.appendChild(totalEl);\r\n\t\tel.appendChild(rowsEl);\r\n\t}else{\r\n\t\tvalueEl.innerHTML = \" 0 \";\r\n\r\n\t\tel.appendChild(showingEl);\r\n\t\tel.appendChild(valueEl);\r\n\t\tel.appendChild(rowsEl);\r\n\t}\r\n\t\r\n\treturn el;\r\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\r\n var el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\t\r\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tel.appendChild(showingEl);\r\n\tel.appendChild(valueEl);\r\n\tel.appendChild(ofEl);\r\n\tel.appendChild(totalEl);\r\n\tel.appendChild(rowsEl);\r\n\t\r\n\treturn el;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPageCounters from './defaults/pageCounters.js';\r\n\r\nclass Page extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\t\t\r\n\t\tthis.element = null;\r\n\t\tthis.pageCounterElement = null;\r\n\t\tthis.pageCounter = null;\r\n\t\t\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.remoteRowCountEstimate = null;\r\n\t\t\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t\t\r\n\t\tthis.initialLoad = true;\r\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\r\n\t\t\r\n\t\tthis.pageSizes = [];\r\n\t\t\r\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\r\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\r\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\r\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\r\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\r\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\r\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\r\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\r\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\r\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\r\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\r\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\r\n\t\t\r\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\r\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\r\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\r\n\t\t\r\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\r\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\r\n\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\r\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\r\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.options.progressiveLoad){\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\t\t\t\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePageCounter();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\r\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad)\r\n\t\t\t\r\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\r\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdispRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(top){\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\ttop = dispRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn {index, top}\r\n\t}\r\n\t\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\t\t\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = \"hidden\";\r\n\t\t\t\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\t\t\t\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\t\t\t\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\r\n\t\t\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\t\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\t\r\n\tremotePageParams(data, config, silent, params){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\r\n\t\t\t\tthis.reset(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\t\t\r\n\t\t//set page size if defined\r\n\t\tif(this.size){\r\n\t\t\tparams.size = this.size;\r\n\t\t}\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\t\t\t\r\n\t\t\tif(row){\r\n\t\t\t\treturn this.setPageToRow(row)\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn Promise.reject();\r\n\t}\r\n\t\r\n\tuserSetPageSize(size){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.setPageSize(size);\r\n\t\t\treturn this.setPage(1);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tscrollVertical(top, dir){\r\n\t\tvar element, diff, margin;\r\n\t\tif(!dir && !this.table.dataLoader.loading){\r\n\t\t\telement = this.table.rowManager.getElement();\r\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\r\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\r\n\t\t\t\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trestOnRenderBefore(rows, renderInPosition){\r\n\t\tif(!renderInPosition){\r\n\t\t\tif(this.mode === \"local\"){\r\n\t\t\t\tthis.reset();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\t\t\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\t\t\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\t\t\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\t\t\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\t\t\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\t\t\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\t\t\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\t\t\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\t\t\t\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\t\t\t\t\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializePageCounter(){\r\n\t\tvar counter = this.table.options.paginationCounter,\r\n\t\tpageCounter = null;\r\n\t\t\r\n\t\tif(counter){\r\n\t\t\tif(typeof counter === \"function\"){\r\n\t\t\t\tpageCounter = counter;\r\n\t\t\t}else{\r\n\t\t\t\tpageCounter = Page.pageCounters[counter];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(pageCounter){\r\n\t\t\t\tthis.pageCounter = pageCounter;\r\n\t\t\t\t\r\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\r\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup pagination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel, paginationCounterHolder;\r\n\t\t\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\t\t\t\r\n\t\t\t//bind localizations\r\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\r\n\t\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\r\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\r\n\t\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\r\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\r\n\t\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\r\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\r\n\t\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\r\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t//click bindings\r\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(1)\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage()\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max)\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(this.table.options.paginationElement){\r\n\t\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\t\t\t\t\r\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\t\tthis.setPage(1)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//append to DOM\r\n\t\t\tthis.element.appendChild(this.firstBut);\r\n\t\t\tthis.element.appendChild(this.prevBut);\r\n\t\t\tthis.element.appendChild(this.pagesElement);\r\n\t\t\tthis.element.appendChild(this.nextBut);\r\n\t\t\tthis.element.appendChild(this.lastBut);\r\n\t\t\t\r\n\t\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\t\tif(this.table.options.paginationCounter){\r\n\r\n\t\t\t\t\tpaginationCounterHolder \r\n\r\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\r\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\r\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\r\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(paginationCounterHolder){\r\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.footerAppend(this.pageCounterElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.footerAppend(this.element);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\t\t}\r\n\t\t\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\t\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initializePaginator(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\t\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\t\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\t\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\t\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//reset to first page without triggering action\r\n\treset(force){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif(this.mode == \"local\" || force){\r\n\t\t\t\tthis.page = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set the maximum page\r\n\tsetMaxPage(max){\r\n\t\t\r\n\t\tmax = parseInt(max);\r\n\t\t\r\n\t\tthis.max = max || 1;\r\n\t\t\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"last\":\r\n\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t\r\n\t\tpage = parseInt(page);\r\n\t\t\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\tvar index = rows.indexOf(row);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\t\t\t\r\n\t\t\treturn this.setPage(page)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\t\t\r\n\t\tthis.trackChanges();\r\n\t}\r\n\t\r\n\t_setPageCounter(totalRows, size, currentRow){\r\n\t\tvar content;\r\n\t\t\r\n\t\tif(this.pageCounter){\r\n\r\n\t\t\tif(this.mode === \"remote\"){\r\n\t\t\t\tsize = this.size;\r\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\r\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\r\n\t\t\t}\r\n\r\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\r\n\t\t\t\r\n\t\t\tswitch(typeof content){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\tif(content instanceof Node){\r\n\t\t\t\t\t\r\n\t\t\t\t\t//clear previous cell contents\r\n\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.pageCounterElement.appendChild(content);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(content != null){\r\n\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\tcase \"null\":\r\n\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.pageCounterElement.innerHTML = content;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\t\t\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\t\t\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\t\t\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\t\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\t\t\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\t\t\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\t\r\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\t\t\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\t\t\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page)\r\n\t\t});\r\n\t\t\r\n\t\treturn button;\r\n\t}\r\n\t\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger()\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\t\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\t\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\t\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\t\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar actualRowPageSize = 0,\r\n\t\toutput, start, end, actualStartRow;\r\n\r\n\t\tvar actualRows = data.filter((row) => {\r\n\t\t\treturn row.type === \"row\";\r\n\t\t});\r\n\t\t\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\t\t\t\r\n\t\t\tthis.setMaxRows(data.length);\r\n\t\t\t\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setPageButtons();\r\n\t\t\t\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tlet row = data[i];\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\toutput.push(row);\r\n\r\n\t\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\t\tif(!actualStartRow){\r\n\t\t\t\t\t\t\tactualStartRow = row;\r\n\t\t\t\t\t\t}\t\r\n\r\n\t\t\t\t\t\tactualRowPageSize++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\r\n\t\t\t\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\t\t\tthis._setPageCounter(actualRows.length);\r\n\t\t\t\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrigger(){\r\n\t\tvar left;\r\n\t\t\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\t\t\t\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"remote\":\r\n\t\t\tthis.dataChanging = true;\r\n\t\t\treturn this.reloadData(null)\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.dataChanging = false;\r\n\t\t\t})\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\treturn this.reloadData(null, true);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\t\t\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\r\n\t\t\t\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\t\t\t\t\t\r\n\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\treturn data.data;\r\n\t}\r\n\t\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.containerElement;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\t\t\t\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\n//load defaults\r\nPage.pageCounters = defaultPageCounters;\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.slice(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.slice(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};\r\n","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\r\n\t\tthis.registerTableOption(\"persistence\", false);\r\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\r\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\r\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\r\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\tif(this.table.options.persistence){\r\n\t\t\t//determine persistent layout storage type\r\n\t\t\tvar mode = this.table.options.persistenceMode,\r\n\t\t\tid = this.table.options.persistenceID,\r\n\t\t\tretreivedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar options = this.table.options,\r\n\t\tsorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.options.initialSort = sorters;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.filter){\r\n\t\t\tfilters = this.load(\"filter\");\r\n\r\n\t\t\tif(!filters === false){\r\n\t\t\t\tthis.table.options.initialFilter = filters;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif(force && this.config.columns){\r\n\t\t\tthis.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tgetColumnLayout(){\r\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout))\r\n\t\treturn true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t\tkeys.push(\"visible\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\nPersistence.moduleInitOrder = -10;\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Popup extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\r\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\r\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\r\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextPopup\");\r\n\t\tthis.registerColumnOption(\"headerClickPopup\");\r\n\t\tthis.registerColumnOption(\"headerPopup\");\r\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\r\n\t\tthis.registerColumnOption(\"contextPopup\");\r\n\t\tthis.registerColumnOption(\"clickPopup\");\r\n\t\t\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextPopup){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickPopup){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextPopup){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickPopup){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar options = [\"headerContextPopup\", \"headerClickPopup\"],\r\n\t\tdef = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\r\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\r\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerPopup){\r\n\t\t\tthis.initializeColumnHeaderPopup(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\r\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\r\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderPopup(column){\r\n\t\tvar icon = column.definition.headerPopupIcon,\r\n\t\theaderPopupEl;\r\n\t\t\r\n\t\theaderPopupEl = document.createElement(\"span\");\r\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\r\n\r\n\t\tif(icon){\r\n\t\t\tif(typeof icon === \"function\"){\r\n\t\t\t\ticon = icon(column.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tif(icon instanceof HTMLElement){\r\n\t\t\t\theaderPopupEl.appendChild(icon);\r\n\t\t\t}else{\r\n\t\t\t\theaderPopupEl.innerHTML = icon;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\r\n\t\t}\r\n\t\t\r\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadPopupTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadPopupTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadPopupEvent(contents, e, component){\r\n\t\tvar renderedCallback;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trenderedCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\r\n\t\t\r\n\t\tthis.loadPopup(e, component, contents, renderedCallback);\r\n\t}\r\n\t\r\n\tloadPopup(e, component, contents, renderedCallback){\r\n\t\tvar touch = !(e instanceof MouseEvent),\r\n\t\tcontentsEl, popup;\r\n\t\t\r\n\t\tif(contents instanceof HTMLElement){\r\n\t\t\tcontentsEl = contents;\r\n\t\t}else{\r\n\t\t\tcontentsEl = document.createElement(\"div\");\r\n\t\t\tcontentsEl.innerHTML = contents;\r\n\t\t}\r\n\t\t\r\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\r\n\r\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\r\n\t\tpopup = this.popup(contentsEl);\r\n\r\n\t\tif(typeof renderedCallback === \"function\"){\r\n\t\t\tpopup.renderCallback(renderedCallback);\r\n\t\t}\r\n\t\t\r\n\t\tpopup.show(e).hideOnBlur(() => {\r\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\r\n\t\t});\r\n\r\n\r\n\r\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent())\r\n\t}\r\n}\r\n\r\nPopup.moduleName = \"popup\";\r\n\r\nexport default Popup;\r\n","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tthis.unwatchData();\r\n\r\n\t\tthis.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tthis.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(this.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach((arg) => {\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tthis.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(this.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach((arg) => {\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tthis.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(this.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tthis.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(this.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tthis.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(this.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar childField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tthis.table.modules.dataTree.initializeRow(row);\r\n\t\t\tthis.table.modules.dataTree.layoutRow(row);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar props = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: (newValue) => {\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!this.blocked && version === this.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:() => {\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.latestX = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.initialNextColumn = null;\r\n\t\tthis.nextColumn = null;\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\r\n\t}\r\n\t\r\n\tinitializeEventWatchers(){\r\n\t\tif(!this.initialized){\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\r\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.deInitializeComponent(cell);\r\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutColumnHeader(column){\r\n\t\tif(column.definition.resizable){\r\n\t\t\tthis.initializeEventWatchers();\r\n\t\t\tthis.deInitializeComponent(column);\r\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnLayoutUpdated(column){\r\n\t\tvar prev = column.prevColumn();\r\n\t\t\r\n\t\tthis.reinitializeColumn(column);\r\n\t\t\r\n\t\tif(prev){\r\n\t\t\tthis.reinitializeColumn(prev);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnWidthUpdated(column){\r\n\t\tif(column.modules.frozen){\r\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\r\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\r\n\t\t\t\t\tthis.reinitializeColumn(col);\r\n\t\t\t\t});\r\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\r\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\r\n\t\t\t\t\tthis.reinitializeColumn(col);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeColumn(column){\r\n\t\tvar frozenOffset = column.modules.frozen ? (column.modules.frozen.marginValue + column.getWidth() + \"px\") : false;\r\n\t\t;\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\r\n\t\t\t\tif(frozenOffset){\r\n\t\t\t\t\tcell.modules.resize.handleEl.style.left = frozenOffset;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\r\n\t\t\tif(frozenOffset){\r\n\t\t\t\tcolumn.modules.resize.handleEl.style.left = frozenOffset;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(type, component, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable,\r\n\t\tconfig = {},\r\n\t\tnearestColumn = column.getLastColumn();\r\n\t\t\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tconfig = {variableHeight:variableHeight};\r\n\t\t}\r\n\t\t\r\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\r\n\t\t\t\r\n\t\t\tvar handle = document.createElement('span');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\t\t\t\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tself.startColumn = column;\r\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\r\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\t\t\t\r\n\t\t\t//resize column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\r\n\t\t\t\t\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tnearestColumn.reinitializeWidth(true);\r\n\t\t\t\t\r\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\r\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(column.modules.frozen){\r\n\t\t\t\thandle.style.position = \"absolute\";\r\n\t\t\t\thandle.style.left = column.modules.frozen.marginValue + column.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconfig.handleEl = handle;\r\n\t\t\t\r\n\t\t\tif(element.parentNode){\r\n\t\t\t\telement.after(handle);\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tcomponent.modules.resize = config;\r\n\t}\r\n\t\r\n\tdeInitializeColumn(column){\r\n\t\tthis.deInitializeComponent(column);\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tthis.deInitializeComponent(cell);\r\n\t\t});\r\n\t}\r\n\t\r\n\tdeInitializeComponent(component){\r\n\t\tvar handleEl;\r\n\t\t\r\n\t\tif(component.modules.resize){\r\n\t\t\thandleEl = component.modules.resize.handleEl;\r\n\t\t\t\r\n\t\t\tif(handleEl && handleEl.parentElement){\r\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tresizeHandle(component, height){\r\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\r\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\t\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\t\t\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\tfunction mouseMove(e){\r\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\r\n\t\t\tstartDiff = x - self.startX,\r\n\t\t\tmoveDiff = x - self.latestX,\r\n\t\t\tblockedBefore, blockedAfter;\r\n\t\t\t\r\n\t\t\tself.latestX = x;\r\n\t\t\t\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tstartDiff = -startDiff;\r\n\t\t\t\tmoveDiff = -moveDiff;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\r\n\t\t\t\r\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\r\n\t\t\t\r\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\r\n\t\t\t\r\n\t\t\tif(moveDiff < 0){\r\n\t\t\t\tself.nextColumn = self.initialNextColumn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\r\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(moveDiff > 0){\r\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\r\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(self.nextColumn){\r\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tself.table.columnManager.renderer.rerenderColumns(true);\r\n\t\t\t\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfunction mouseUp(e){\r\n\t\t\t\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\t\t\t\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\t\t\t\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(self.startWidth !== column.getWidth()){\r\n\t\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\t\t\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\t\t\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.latestX = self.startX;\r\n\t\tself.startWidth = column.getWidth();\r\n\t\t\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.resizableRows){\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\t\tthis.autoResize = true;\r\n\r\n\t\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate responsive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\r\n\t\t\tif(!force){\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeResponsivity(){\r\n\t\tvar columns = [];\r\n\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//determine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\r\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort((a, b) => {\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, responsiveToggle){\r\n\t\tif(!responsiveToggle && column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = column.visible;\r\n\t\t\tthis.initializeResponsivity();\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tfunction onRendered(callback){\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\t\t\r\n\t\tthis.registerTableOption(\"selectable\", \"highlight\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRangeMode\", \"drag\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\r\n\t\tthis.registerTableOption(\"selectablePersistence\", true); // maintain selection when table view is updated\r\n\t\tthis.registerTableOption(\"selectableCheck\", function(data, row){return true;}); //check wheather row is selectable\r\n\t\t\r\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\r\n\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.selectable !== false){\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\r\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\r\n\t\t\t\r\n\t\t\tif(this.table.options.selectable && !this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\t\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\t\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\t\t\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\t\t\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\t\t\t\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\t\t\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\t\t\r\n\t\trow.modules.select = {selected:false};\r\n\t\t\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\t\t\t\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\t\r\n\thandleComplexRowClick(row, e){\r\n\t\tif(e.shiftKey){\r\n\t\t\tthis.table._clearSelection();\r\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\r\n\t\t\t\r\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\r\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\r\n\t\t\t\r\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\t\t\t\r\n\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\r\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.table.options.selectable !== true && !this.isRowSelected(row)){\r\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectable){\r\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tthis.lastClickedRow = row;\r\n\t\t\t}else{\r\n\t\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.selectable !== true){\r\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectable){\r\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectable)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.selectRows(toggledRows);\r\n\t\t\t}\r\n\t\t\tthis.table._clearSelection();\r\n\t\t}\r\n\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\tthis.toggleRow(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}else{\r\n\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\tthis.selectRows(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\t\t\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"string\":\r\n\t\t\t\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\t\t\t\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\t\t\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\t\t\t\t\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\t\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\t\t\r\n\t\tif(typeof rows == \"undefined\"){\r\n\t\t\t\r\n\t\t\trowCount = self.selectedRows.length;\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(rowCount){\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\t\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\t\t\t\t\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tgetSelectedRows(){\r\n\t\t\r\n\t\tvar rows = [];\r\n\t\t\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(!silent){\r\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\t\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\t\t\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\t\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\t\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\t\t\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tif(DT.isDateTime(a)){\r\n\t\t\t a = a;\r\n\t\t}else if(format === \"iso\"){\r\n\t\t\t a = DT.fromISO(String(a));\r\n\t\t}else{\r\n\t\t\t a = DT.fromFormat(String(a), format);\r\n\t\t}\r\n\r\n\t\tif(DT.isDateTime(b)){\r\n\t\t\t b = b;\r\n\t\t}else if(format === \"iso\"){\r\n\t\t\t b = DT.fromISO(String(b));\r\n\t\t}else{\r\n\t\t\t b = DT.fromFormat(String(b), format);\r\n\t\t}\r\n\r\n\t\tif(!a.isValid){\r\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\r\n\t\t}else if(!b.isValid){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\r\n\t}\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.langLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"dd/MM/yyyy\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\r\n\t \tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t \tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t \tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t \tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t \tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t \tthis.registerColumnOption(\"sorter\");\r\n\t \tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t \tthis.registerColumnOption(\"headerSort\", true);\r\n\t \tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t \tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t }\r\n\r\n\t initialize(){\r\n\t \tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t \tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t \tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t \tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t \tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t \tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t \tif(this.table.options.sortMode === \"remote\"){\r\n\t \t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t \t}\r\n\t }\r\n\r\n\t tableBuilt(){\r\n\t \tif(this.table.options.initialSort){\r\n\t \t\tthis.setSort(this.table.options.initialSort);\r\n\t \t}\r\n\t }\r\n\r\n\t remoteSortParams(data, config, silent, params){\r\n\t \tvar sorters = this.getSort();\r\n\r\n\t \tsorters.forEach((item) => {\r\n\t \t\tdelete item.column;\r\n\t \t});\r\n\r\n\t \tparams.sort = sorters;\r\n\r\n\t \treturn params;\r\n\t }\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = this.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tthis.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tthis.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tthis.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\r\n\t\t\t\t\tthis.refreshSort();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trefreshSort(){\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.reloadData(null, false, false);\r\n\t\t}else{\r\n\t\t\tthis.refreshData(true);\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tthis.dispatch(\"sort-changed\");\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","import Module from '../../core/Module.js';\r\nimport Cell from '../../core/cell/Cell.js';\r\n\r\nclass Tooltip extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.tooltipSubscriber = null,\r\n\t\tthis.headerSubscriber = null,\r\n\t\t\r\n\t\tthis.timeout = null;\r\n\t\tthis.popupInstance = null;\r\n\t\t\r\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\r\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \r\n\t\t\r\n\t\tthis.registerColumnOption(\"tooltip\");\r\n\t\tthis.registerColumnOption(\"headerTooltip\");\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deprecationCheck();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tdeprecationCheck(){\r\n\t\tif(typeof this.table.options.tooltipGenerationMode !== \"undefined\"){\r\n\t\t\tconsole.warn(\"Use of the tooltipGenerationMode option is now deprecated. This option is no longer needed as tooltips are always generated on hover now\");\r\n\t\t}\r\n\t}\t\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\r\n\t\t\tthis.headerSubscriber = true;\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\r\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\r\n\t\t\tthis.tooltipSubscriber = true;\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\r\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\r\n\t\t}\r\n\t}\r\n\t\r\n\tmousemoveCheck(action, e, component){\r\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\r\n\t\t\r\n\t\tif(tooltip){\r\n\t\t\tthis.clearPopup();\r\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\r\n\t\t}\r\n\t}\r\n\r\n\tmouseoutCheck(action, e, component){\r\n\t\tif(!this.popupInstance){\r\n\t\t\tthis.clearPopup();\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearPopup(action, e, component){\r\n\t\tclearTimeout(this.timeout);\r\n\t\tthis.timeout = null;\r\n\t\t\r\n\t\tif(this.popupInstance){\r\n\t\t\tthis.popupInstance.hide();\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadTooltip(e, component, tooltip){\r\n\t\tvar contentsEl, renderedCallback, coords;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trenderedCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(typeof tooltip === \"function\"){\r\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\r\n\t\t}\r\n\t\t\r\n\t\tif(tooltip instanceof HTMLElement){\r\n\t\t\tcontentsEl = tooltip;\r\n\t\t}else{\r\n\t\t\tcontentsEl = document.createElement(\"div\");\r\n\t\t\t\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(component instanceof Cell){\r\n\t\t\t\t\ttooltip = component.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(component.definition.field){\r\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\r\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\ttooltip = component.definition.title;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcontentsEl.innerHTML = tooltip;\r\n\t\t}\r\n\t\t\r\n\t\tif(tooltip || tooltip === 0 || tooltip === \"0\" || tooltip === false){\r\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\r\n\r\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault())\r\n\t\t\t\r\n\t\t\tthis.popupInstance = this.popup(contentsEl);\r\n\t\t\t\r\n\t\t\tif(typeof renderedCallback === \"function\"){\r\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\r\n\t\t\t}\r\n\r\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\r\n\t\t\t\r\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\r\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\r\n\t\t\t\tthis.popupInstance = null;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\r\n\t\t}\r\n\t}\r\n}\r\n\r\nTooltip.moduleName = \"tooltip\";\r\n\r\nexport default Tooltip;\r\n","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.invalidCells = [];\r\n\t\t\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\t\t\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\t\t\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\t\t\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\t\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\r\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\r\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Event Handling //////////\r\n\t///////////////////////////////////\r\n\t\r\n\teditValidate(cell, value, previousValue){\r\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\r\n\t\t\r\n\t\t// allow time for editor to make render changes then style cell\r\n\t\tif(valid !== true){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn valid;\r\n\t}\r\n\t\r\n\teditorClear(cell, cancelled){\r\n\t\tif(cancelled){\r\n\t\t\tif(cell.column.modules.validate){\r\n\t\t\t\tthis.cellValidate(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t}\r\n\t\r\n\teditedClear(cell){\r\n\t\tif(cell.modules.validate){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\r\n\t}\r\n\t\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(this.cellValidate(cell) !== true){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\t\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\t\t\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\tif(this.cellValidate(cell) !== true){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\t\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\t\t\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\t\t\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\t\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trow = row.getComponent();\r\n\t\t\t\r\n\t\t\tvar valid = row.validate();\r\n\t\t\t\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\t\t\r\n\t\tif(column.definition.validator){\r\n\t\t\t\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\t\t\t\t\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\t\t\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\t\t\t\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_buildValidator(type, params){\r\n\t\t\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\t\t\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tfailedValidators = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\t\t\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach((item) => {\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tfailedValidators.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\t\t\r\n\t\tif(!failedValidators.length){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = failedValidators;\r\n\t\t\t\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn failedValidators.length ? failedValidators : true;\r\n\t}\r\n\t\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\t\t\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\t\t\t\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\t\t\t\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;\r\n","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["CoreFeature","table","data","silent","columnsChanged","this","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","options","value","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","cells","forEach","cell","push","getComponent","visible","isGroup","columns","show","hide","output","length","parent","Column","columnManager","scrollToColumn","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","renderer","rerenderColumns","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","checkHeight","Cell","element","oldValue","height","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","field","style","textAlign","hozAlign","vertAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","cssClass","split","classList","add","val","_this2","innerHTML","Node","firstChild","removeChild","appendChild","containerOnly","layoutElement","force","setValueProcessData","cellRendered","cellEdited","call","dispatchExternal","subscribedExternal","rowManager","changed","setFieldValue","_generateContents","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getCellIndex","def","_this","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","maxInitialWidth","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","bindModuleColumns","el","defaults","columnDefaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","dblTap","tapHold","tap","headerClick","addEventListener","e","_this3","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","_this4","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","_this5","langBind","text","_formatColumnHeaderTitle","contents","_this6","dataObj","structure","columnRendered","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","paddingTop","verticalAlign","clearVerticalAlign","formatter","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","ceil","getBoundingClientRect","Promise","resolve","reject","_this7","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","clearWidth","setTo","error","assign","addColumn","then","_this8","defaultOptions","Helpers","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","subject","match","copy","_typeof","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","callback","update","blockRedraw","dir","includingBuffer","getDisplayRows","rowEl","remove","clearRows","clearColumns","renderRows","renderColumns","rerenderRows","position","ifVisible","rowIndex","offset","scrollToRowIfVisible","elVisible","elOffset","scrollToRowPosition","scrollToRowNearestTop","scrollToRow","scrollHeight","scrollTop","offsetTop","BaiscHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","visibleRows","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","ok","find","col","frozen","startsWith","clearVisRowCache","dataChange","scroll","buffer","columnsByIndex","old","cols","colPos","clear","calcWindowBuffer","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","change","colEnd","generateCells","layoutRefresh","getVisibleRows","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","start","end","changes","getCell","fitDataColActualWidthCheck","prepend","ex","message","_this9","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","defaultColumnOptions","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","renderHorizontal","initialize","headerVisible","hozAdjust","scrollWidth","marginLeft","scrollColumns","sorter","definitions","autoColumnsDefinitions","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","nextSibling","getHeight","columnHeaderVertAlign","adjustTableSize","_getSelf","HTMLElement","root","matches","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","toIndex","fromIndex","concat","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getRowPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","created","setData","create","deleteCells","renderRowCells","rowFormatter","rerenderRowCells","children","maxHeight","rowHeight","resizableRows","setHeight","clearHeight","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","getRowIndex","detatchModules","deleteRow","group","BaiscVertical","visibility","onlyGroupHeaders","styleRow","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","deinitializeHeight","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholder","placeholderContents","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","initializePlaceholder","leftDir","topDir","_positionPlaceholder","scrollRows","renderInPosition","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","_showPlaceholder","pos","addRowActual","findAddRowPos","reverse","addRow","_clearPlaceholder","addRowPos","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","viewable","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","_clearTable","renderEmptyScroll","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","initializeElement","footerElement","querySelector","activate","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","filter","links","includes","values","comp","subscriptionChanged","clearWatchers","added","bindPseudoEvents","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","DataLoader","requestOrder","loading","params","replace","requestNo","alertLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","clearAlert","alertError","dataLoaderErrorTimeout","map","alertManager","alert","dataLoaderLoading","langText","dataLoaderError","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifiySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Popup","container","_lookupContainer","reversedX","childPopup","blurable","blurCallback","renderedCallback","blurEvent","escEvent","_escapeCheck","popupContainer","_checkContainerIsParent","body","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","containerOffset","origin","parentEl","coords","elementPositionCoords","containerEventCoords","_fitToScreen","keyCode","Module","_handler","register","func","initGuard","registerDataPipelineHandler","registerDisplayPipelineHandler","append","menuEl","menuContainer","content","responsiveLayout","modExists","fitData","reinitializeColumnWidths","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","registerTableOption","registerColumnOption","modes","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","registerTableFunction","getLang","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","orderedStartMods","orderedEndMods","unOrderedMods","moduleCore","modulesCore","moduleInitOrder","modulesRegular","core","mods","Alert","_createAlertElement","msgElement","_createMsgElement","_typeClass","interactionMonitor","browserSlow","browserMobile","rtl","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","deregister","ua","userAgent","vendor","opera","test","msg","stack","line","debugInitialization","Error","trim","restoreRedraw","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","foundRows","fromRow","getDefinitionTree","fromColumn","plugin","required","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colCompnent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","method","headers","stringify","form","FormData","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","credentials","fetch","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","edit","currentCell","updateOrAddData","insert","addData","headerFindSuccess","columnMap","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","footerRemove","footerPrepend","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","getFormatter","paramKey","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","groups","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","registerComponentFunction","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","registerDisplayHandler","reinitializeRowChildren","firstCol","getFirstVisibleColumn","dataTreeElementColumn","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","commsSend","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","blob","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","Blob","downloadReady","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","maskAutoFill","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","popup","listIteration","actions","_deprecationCheck","_initializeValue","_onRendered","listItemFormatter","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventBlur","_inputKeyDown","attribs","elementAttributes","clearable","padding","boxSizing","autocomplete","cursor","caretColor","getAttribute","_bindInputEvents","valueCheck","valueKeys","verticalNavigation","placeholderLoading","placeholderEmpty","filterDelay","emptyValue","freetext","filterFunc","filterRemote","allowEmpty","listOnEmpty","valuesLookup","valuesURL","_inputFocus","_inputClick","_inputBlur","_inputSearch","_inputKeyUp","rebuildOptionsList","_filterList","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keySelectLetter","_keyAutoCompLetter","stopImmediatePropagation","_focusItem","_chooseItem","_cancel","_scrollToValue","_filter","character","fromCharCode","filterTerm","label","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","itteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","getColumnByField","getColumn","inputValues","entries","_parseListItem","_parseListGroup","itemParams","selected","original","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","_defaultFilterFunc","_filterItem","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","_this10","startVis","isVisible","_setListWidth","hideOnBlur","_resolveValue","_this11","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","getRow","heightNow","selectionStart","number","step","blurFunc","List","star","self","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","trueValueSet","falseValueSet","marginTop","checkedValue","checked","trueValue","falseValue","indeterminate","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellisEdited","clearEdited","editCell","cellCancelEdit","bindEditor","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","edited","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","allowEdit","check","prevCell","editable","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","cellWrapper","formatCells","formatExportValue","align","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","filterList","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","filterMode","remoteFilterParams","registerDataHandler","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","setHeaderFilterColumnPlaceholder","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","reloadData","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","_this12","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","link","urlPrefix","labelField","labelTraverse","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","datetime","newDatetime","DT","DateTime","luxon","inputFormat","outputFormat","invalid","invalidPlaceholder","isDateTime","fromISO","fromFormat","isValid","timezone","setZone","toFormat","datetimediff","suffix","humanize","date","now","toHuman","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","layoutGroupCalcs","groupList","allCells","leftParents","marginValue","getColGroupParentElement","deinitialize","getTableElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","styleRows","GroupComponent","groupManager","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","groupValues","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","groupClosedShowCalcs","count","getDisplayIndex","checkClassicModeGroupHeaderWidth","prev","compoment","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","items","removeCalcs","getRealColumns","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","getGroup","newValue","undoers","redoers","oldRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","exists","_findCol","textContent","inQuote","nextChar","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","err","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","getColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tapDbl","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","notouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","nestedMenuBlock","currentComponent","rootPopup","deprecationCheck","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","on","rowClickMenu","groupContextMenu","groupClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","headerMenuEl","icon","headerMenuIcon","menu","loadMenu","parentPopup","itemEl","disabled","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","Page","progressiveLoad","pageCounterElement","pageCounter","page","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","footerRedraw","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","dispRows","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","counter","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","footerAppend","paginationInitialPage","paginationButtonCount","trigger","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","setMaxRows","_setPageButtons","_setPageCounter","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","retreivedData","persistenceMode","persistenceID","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retreiveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","current","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","rowContextPopup","loadPopupEvent","rowClickPopup","groupContextPopup","groupClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","renderCallback","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","genereateTable","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","pop","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","initializeEventWatchers","reinitializeColumn","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","checkCellHeights","mouseUp","ResizeRows","startHeight","prevHandle","prevHandleDown","screenY","ResizeTable","observer","containerObserver","tableHeight","containerWidth","autoResize","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","tableResized","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","rowRetrieve","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selectableCheck","getCurrentCell","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","langLocale","localeCompare","time","array","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","tooltipGenerationMode","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","editValidate","editorClear","editedClear","previousValue","validate","cancelled","validator","_extractValidator","substring","_buildValidator","validators","failedValidators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":";4sHAAqBA,wBAERC,kBACNA,MAAQA,+CAOHC,EAAMC,EAAQC,UACjBC,KAAKJ,MAAMK,WAAWC,KAAKL,OAAMM,OAAWA,OAAWA,EAAWL,EAAQC,0DAQrEH,MAAMQ,QAAQC,UAASC,gBAAWC,kEAIlCX,MAAMQ,QAAQC,UAASG,aAAQD,oEAI/BX,MAAMQ,QAAQC,UAASI,kBAAaF,0EASpCX,MAAMQ,QAAQM,OAAMC,uBAAkBJ,mEAItCX,MAAMQ,QAAQM,OAAME,aAAQL,uDAQjCP,KAAKJ,MAAMQ,QAAQS,OAAOC,yDAI1Bd,KAAKJ,MAAMQ,QAAQS,OAAOA,iEASrBjB,MAAMmB,UAASC,kBAAaT,qEAI5BX,MAAMmB,UAASE,oBAAeV,8CAGhCW,UACHlB,KAAKJ,MAAMmB,SAASI,WAAWD,oEAI1BtB,MAAMmB,UAASK,2BAAsBb,kEAIrCX,MAAMmB,UAASM,iBAAYd,+DAI3BX,MAAMmB,UAASO,cAASf,iEAIxBX,MAAMmB,UAASQ,gBAAWhB,0EAI1BX,MAAM4B,gBAAeH,iBAAYd,sDAG3BW,UACXlB,KAAKJ,MAAM4B,eAAeL,WAAWD,4EAIhCtB,MAAM4B,gBAAeJ,2BAAsBb,2CAOhDW,UACAlB,KAAKJ,MAAM6B,QAAQP,qCAGjBA,EAAKQ,eACM,IAAVA,SACJ9B,MAAM6B,QAAQP,GAAOQ,GAGpB1B,KAAKJ,MAAM6B,QAAQP,kCAQpBA,UACClB,KAAKJ,MAAM+B,OAAOT,YCvHNU,wBACPC,yBACPC,QAAUD,OACVE,KAAO,kBAEL,IAAIC,MAAMhC,KAAM,CACtBiC,IAAK,SAASC,EAAQC,EAAMC,eACC,IAAjBF,EAAOC,GACVD,EAAOC,GAEPD,EAAOJ,QAAQlC,MAAMyC,wBAAwBC,OAAO,SAAUJ,EAAOJ,QAASK,4DAOjFnC,KAAK8B,QAAQS,4DAIbvC,KAAK8B,QAAQU,0DAIbxC,KAAK8B,QAAQW,6DAIbzC,KAAK8B,QAAQY,0DAIhBC,EAAQ,eAEPb,QAAQa,MAAMC,SAAQ,SAASC,GACnCF,EAAMG,KAAKD,EAAKE,mBAGVJ,6CAIA3C,KAAK8B,QAAQkB,uCAIjBhD,KAAK8B,QAAQmB,aACVnB,QAAQoB,QAAQN,SAAQ,SAASf,GACrCA,EAAOsB,eAGHrB,QAAQqB,sCAKXnD,KAAK8B,QAAQmB,aACVnB,QAAQoB,QAAQN,SAAQ,SAASf,GACrCA,EAAOuB,eAGHtB,QAAQsB,wCAKXpD,KAAK8B,QAAQkB,aACVI,YAEAD,+CAKCnD,KAAK8B,6DAIRuB,EAAS,UAEVrD,KAAK8B,QAAQoB,QAAQI,aAClBxB,QAAQoB,QAAQN,SAAQ,SAASf,GACrCwB,EAAOP,KAAKjB,EAAOkB,mBAIdM,mDAIArD,KAAK8B,QAAQyB,kBAAkBC,GAASxD,KAAK8B,QAAQyB,OAAOR,yDAI5D/C,KAAK8B,kDAIL9B,KAAK8B,QAAQlC,MAAM6D,cAAcC,eAAe1D,KAAK8B,mDAIrD9B,KAAK8B,QAAQlC,mCAGhB+D,EAAIC,OACJC,EAAW7D,KAAK8B,QAAQlC,MAAM6D,cAAcK,WAAWH,GAExDE,OACG/B,QAAQlC,MAAM6D,cAAcM,WAAW/D,KAAK8B,QAAS+B,EAAUD,GAEpEI,QAAQC,KAAK,yCAA0CJ,+CAKpDK,EAAUlE,KAAK8B,QAAQqC,qBAEpBD,GAAUA,EAAQnB,2DAIrBqB,EAAUpE,KAAK8B,QAAQuC,qBAEpBD,GAAUA,EAAQrB,wDAGTuB,UACTtE,KAAK8B,QAAQyC,iBAAiBD,6CAI9BtE,KAAK8B,QAAQ0C,4CAGZC,OACJC,SAGHA,GADY,IAAVD,EACQzE,KAAK8B,QAAQ6C,mBAAkB,GAE/B3E,KAAK8B,QAAQ8C,SAASH,QAG5B3C,QAAQlC,MAAM6D,cAAcoB,SAASC,iBAAgB,GAEnDJ,aCtJM,YACLvE,aACAA,eACEA,eACAA,gBACCA,iBACCA,aACJA,WACG,iBACAA,uBACOA,gBACPA,sBACMA,sBACAA,sBACAA,qBACDA,GCdG4E,wBAEPlC,yBACPmC,MAAQnC,EAEN,IAAIb,MAAMhC,KAAM,CACtBiC,IAAK,SAASC,EAAQC,EAAMC,eACC,IAAjBF,EAAOC,GACVD,EAAOC,GAEPD,EAAO8C,MAAMpF,MAAMyC,wBAAwBC,OAAO,OAAQJ,EAAO8C,MAAO7C,0DAO3EnC,KAAKgF,MAAMC,wDAIXjF,KAAKgF,MAAME,+DAIXlF,KAAKgF,MAAMG,yDAIXnF,KAAKgF,MAAMzC,qDAIXvC,KAAKgF,MAAMI,IAAIrC,wDAIf/C,KAAKgF,MAAMI,IAAIC,oDAIfrF,KAAKgF,MAAMnD,OAAOY,sDAIlBzC,KAAKgF,MAAMnD,OAAOkB,gDAGjBrB,EAAO4D,QACK,IAAVA,IACTA,GAAS,QAGLN,MAAMO,SAAS7D,EAAO4D,kDAItBN,MAAMQ,eAAexF,KAAKgF,MAAME,kEAIhCF,MAAMQ,eAAexF,KAAKgF,MAAMG,yDAIhCH,MAAMS,wDAIJzF,KAAKgF,MAAMpF,gDAIXI,KAAKgF,eCvEOU,2CACR7D,EAAQuD,yCACbvD,EAAOjC,QAERA,MAAQiC,EAAOjC,QACfiC,OAASA,IACTuD,IAAMA,IACNO,QAAU,OACVjE,MAAQ,OACRyD,eACAS,SAAW,OACXxF,QAAU,KAEVyF,OAAS,OACTpB,MAAQ,OACRqB,SAAW,OAEXC,UAAY,OAEZC,QAAS,IAETC,yDAMAC,uBAEAtB,gBAEAuB,sBAEAX,eAAexF,KAAK6B,OAAOuE,cAAcpG,KAAKoF,IAAIvF,YAElDsF,aAAenF,KAAK0B,qDAIpBiE,QAAUU,SAASC,cAAc,YACjCX,QAAQY,UAAY,sBACpBZ,QAAQa,aAAa,OAAQ,iBAC7Bb,QAAU3F,KAAK2F,qDAIhBA,EAAU3F,KAAK2F,QACnBc,EAAQzG,KAAK6B,OAAOY,YAapBkD,EAAQe,MAAMC,UAAY3G,KAAK6B,OAAO+E,SAEnC5G,KAAK6B,OAAOgF,YACdlB,EAAQe,MAAMI,QAAU,cAExBnB,EAAQe,MAAMK,WAjBF,CACZC,IAAI,aACJC,OAAO,WACPC,OAAO,UAc+BlH,KAAK6B,OAAOgF,YAAc,GAE7D7G,KAAK6B,OAAO+E,WACdjB,EAAQe,MAAMS,eAfJ,CACXC,KAAK,aACLC,MAAM,WACNC,OAAO,UAYmCtH,KAAK6B,OAAO+E,WAAa,KAIjEH,GACFd,EAAQa,aAAa,kBAAmBC,GAItCzG,KAAK6B,OAAO0F,WAAWC,WACRxH,KAAK6B,OAAO0F,WAAWC,SAASC,MAAM,KAC5C7E,SAAQ,SAAC2D,GACnBZ,EAAQ+B,UAAUC,IAAIpB,WAInBlF,SAAS,YAAarB,MAGvBA,KAAK6B,OAAOmB,cACVI,uDAMFwE,kBAEJA,EAAM5H,KAAKsB,MAAM,cAAetB,KAAM,MAAM,kBACpC6H,EAAKlC,QAAQmC,UAAYD,EAAKnG,eAIhC,YACFkG,aAAeG,KAAK,MAGhB/H,KAAK2F,QAAQqC,iBAAiBrC,QAAQsC,YAAYjI,KAAK2F,QAAQqC,iBAEhErC,QAAQuC,YAAYN,aAEpBjC,QAAQmC,UAAY,GAEf,MAAPF,GACF5D,QAAQC,KAAK,iJAAkJ2D,aAI5J,gBACA,YACAjC,QAAQmC,UAAY,sBAGpBnC,QAAQmC,UAAYF,+CAKrBvG,SAAS,gBAAiBrB,yCAIrBmI,UACNnI,KAAKgG,cACHA,QAAS,EACVmC,QACEC,iBAIApI,KAAK2F,kDAIL3F,KAAK0B,mDAIL1B,KAAK4F,0CAIJlE,EAAO4D,EAAQ+C,GACTrI,KAAKsI,oBAAoB5G,EAAO4D,EAAQ+C,UAGhDhH,SAAS,qBAAsBrB,WAE/BuI,eAEFvI,KAAK6B,OAAO0F,WAAWiB,iBACpB3G,OAAO0F,WAAWiB,WAAWC,KAAKzI,KAAKJ,MAAOI,KAAK+C,qBAGpD2F,iBAAiB,aAAc1I,KAAK+C,gBAEtC/C,KAAK2I,mBAAmB,qBACrBD,iBAAiB,cAAe1I,KAAKJ,MAAMgJ,WAAWvD,wDAK1C3D,EAAO4D,EAAQ+C,OAC9BQ,GAAU,SAEX7I,KAAK0B,QAAUA,GAAS2G,KAE1BQ,GAAU,EAEPvD,IACF5D,EAAQ1B,KAAKsB,MAAM,sBAAuB,CAACtB,KAAM0B,GAAQ,KAAMA,UAI5D8D,eAAe9D,GAEjBmH,QACGxH,SAAS,qBAAsBrB,MAG9B6I,yCAGOnH,QACTkE,SAAW5F,KAAK0B,WAEhBA,MAAQA,OAERL,SAAS,yBAA0BrB,WAEnC6B,OAAOiH,cAAc9I,KAAKoF,IAAIvF,KAAM6B,QAEpCL,SAAS,wBAAyBrB,MAEpCA,KAAKgG,aACFoC,6DAKDW,yBAEA1H,SAAS,cAAerB,8CAIxByE,MAAQzE,KAAK6B,OAAO4C,WACpBkB,QAAQe,MAAMjC,MAAQzE,KAAK6B,OAAOmH,sDAIlCvE,MAAQ,QACRkB,QAAQe,MAAMjC,MAAQ,6CAIpBzE,KAAKyE,OAASzE,KAAK2F,QAAQsD,uDAI7BnD,SAAW9F,KAAK6B,OAAOiE,cACvBH,QAAQe,MAAMZ,SAAW9F,KAAK6B,OAAOqH,0DAIrCC,SAAWnJ,KAAK6B,OAAOsH,cACvBxD,QAAQe,MAAMyC,SAAWnJ,KAAK6B,OAAOuH,0DAKrChE,IAAIiE,gEAIJ1D,QAAQe,MAAMb,OAAS,QACvBA,OAAS,UAETxE,SAAS,cAAerB,KAAM,6CAI9B6F,OAAS7F,KAAKoF,IAAIS,YAClBF,QAAQe,MAAMb,OAAS7F,KAAKoF,IAAIkE,kBAEhCjI,SAAS,cAAerB,KAAMA,KAAKoF,IAAIkE,yDAIrCtJ,KAAK6F,QAAU7F,KAAK2F,QAAQ4D,iDAI9B5D,QAAQe,MAAMI,QAAU9G,KAAK6B,OAAOgF,UAAY,cAAgB,uCAIhElB,QAAQe,MAAMI,QAAU,6CAIxBzF,SAAS,cAAerB,OAEzBA,KAAKJ,MAAMgJ,WAAWY,aAAexJ,KAAK2F,QAAQ8D,iBAChD9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,cAGrCA,SAAU,OACV9D,OAAO6H,WAAW1J,WAClBoF,IAAIsE,WAAW1J,WACf2J,MAAQ,6CAIN3J,KAAKoF,IAAIwE,aAAa5J,oDAKzBA,KAAK+F,iBACHA,UAAY,IAAIhB,EAAc/E,OAG7BA,KAAK+F,iBAnSoBpG,GCG5B6D,2CAEOqG,EAAKtG,yCACVA,EAAO3D,QAER2H,WAAasC,IACbtG,OAASA,IACTxB,KAAO,WACPmB,QAAU,KACVP,MAAQ,KACRgD,QAAUmE,EAAKxD,kBACfyD,gBAAiB,IACjBC,oBAAqB,IACrBC,cAAe,IACfC,aAAeJ,EAAKK,uBACpBlH,SAAU,IACV2D,SAAW,KACXC,UAAY,KAGZJ,MAAO,KACP2D,eAAiB,KACjBhE,cAAgB,KAChB0C,cAAgB,KAEhBuB,cAAgB,OAChBC,wBAAyB,IAEzBC,mBAEAC,SAASV,EAAKvC,WAAWd,SAEzBrG,QAAU,KAEVqE,MAAQ,OACRuE,YAAc,KACdG,SAAW,OACXC,eAAiB,KACjBqB,gBAAkB,OAClB3E,SAAW,OACXoD,eAAiB,KACjBwB,YAAa,IAEb1H,SAAU,IAEV+C,UAAY,KAGd+D,EAAKvC,WAAWrE,WAEbD,SAAU,IAEVsE,WAAWrE,QAAQN,SAAQ,SAACiH,EAAKc,OACjCC,EAAS,IAAIpH,EAAOqG,UACnBgB,aAAaD,QAGdE,yBAELvH,EAAOwH,4BAGHC,gBAEAC,4EAIDC,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,iBACjBuD,EAAG1E,aAAa,OAAQ,gBACxB0E,EAAG1E,aAAa,YAAa,QAEtB0E,mDAIHA,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,4BAEVuD,+CAIHC,EAAWnL,KAAKJ,MAAM6B,QAAQ2J,kBAG/BD,MACE,IAAIjK,KAAOiK,OACqB,IAAzBnL,KAAKuH,WAAWrG,UACpBqG,WAAWrG,GAAOiK,EAASjK,SAK9BqG,WAAavH,KAAKJ,MAAM6D,cAAc4H,YAAYC,SAAS9H,EAAO+H,kBAAmBvL,KAAKuH,iEAI/FiE,OAAOC,KAAKzL,KAAKuH,YAAY3E,SAAQ,SAAC1B,IACS,IAA3CsC,EAAO+H,kBAAkBG,QAAQxK,IACnC8C,QAAQC,KAAK,yCAA2C4D,EAAKpB,OAASoB,EAAKN,WAAWoE,OAAS,YAAazK,uCAKtGuF,QACHA,MAAQA,OACR2D,eAAiB3D,EAASzG,KAAKJ,MAAM6B,QAAQmK,qBAAuBnF,EAAMgB,MAAMzH,KAAKJ,MAAM6B,QAAQmK,sBAAwB,CAACnF,GAAU,QACtIL,cAAgBpG,KAAKoK,eAAe9G,OAAS,EAAItD,KAAK6L,eAAiB7L,KAAK8L,kBAC5EhD,cAAgB9I,KAAKoK,eAAe9G,OAAS,EAAItD,KAAK+L,eAAiB/L,KAAKgM,4DAI3DnK,QACjB0B,OAAO0I,uBAAuBpK,+CAIhBA,QACd0B,OAAOwH,oBAAoBlJ,gDAK7B7B,KAAKiD,aACFC,QAAQN,SAAQ,SAASf,GAC7BA,EAAOqK,6BAGHD,uBAAuBjM,2GAUzB6J,EAAM7J,KAAKuH,WAETvH,KAAK2F,QAAQqC,iBAAiBrC,QAAQsC,YAAYjI,KAAK2F,QAAQqC,YAElE6B,EAAIsC,sBACDxG,QAAQ+B,UAAUC,IAAI,0BAED,SAAvBkC,EAAIsC,qBACDxG,QAAQ+B,UAAUC,IAAI,qCAIxBoC,eAAiB/J,KAAKoM,mBAEtBrC,eAAiB/J,KAAKqM,iCAEtB1G,QAAQuC,YAAYlI,KAAK+J,gBAE3B/J,KAAKiD,aACFqJ,yBAEAC,0BAGDlL,SAAS,cAAerB,gDAK7BwM,EAAQC,EAASC,SADb7C,EAAM7J,KAAKuH,WAIe,mBAApBsC,EAAI8C,kBACRhH,QAAQiH,iBAAiB,SAAS,SAACC,GAAOhD,EAAI8C,YAAYE,EAAGC,EAAK/J,mBAGvC,mBAAvB8G,EAAIkD,qBACRpH,QAAQiH,iBAAiB,YAAY,SAACC,GAAOhD,EAAIkD,eAAeF,EAAGC,EAAK/J,mBAG9C,mBAAtB8G,EAAImD,oBACRrH,QAAQiH,iBAAiB,eAAe,SAACC,GAAOhD,EAAImD,cAAcH,EAAGC,EAAK/J,mBAIpD,mBAAlB8G,EAAIoD,YACbP,GAAM,OAED/G,QAAQiH,iBAAiB,cAAc,SAACC,GAC5CH,GAAM,IACJ,CAACQ,SAAS,SAERvH,QAAQiH,iBAAiB,YAAY,SAACC,GACvCH,GACF7C,EAAIoD,UAAUJ,EAAGC,EAAK/J,gBAGvB2J,GAAM,MAIuB,mBAArB7C,EAAIsD,eACbX,EAAS,UAEJ7G,QAAQiH,iBAAiB,YAAY,SAACC,GAEvCL,GACFY,aAAaZ,GACbA,EAAS,KAET3C,EAAIsD,aAAaN,EAAGC,EAAK/J,iBAGzByJ,EAASa,YAAW,WACnBD,aAAaZ,GACbA,EAAS,OACP,SAM0B,mBAAtB3C,EAAIyD,gBACbb,EAAU,UAEL9G,QAAQiH,iBAAiB,cAAc,SAACC,GAC5CO,aAAaX,GAEbA,EAAUY,YAAW,WACpBD,aAAaX,GACbA,EAAU,KACVC,GAAM,EACN7C,EAAIyD,cAAcT,EAAG7M,KAAK+C,kBACxB,OAED,CAACmK,SAAS,SAERvH,QAAQiH,iBAAiB,YAAY,SAACC,GAC1CO,aAAaX,GACbA,EAAU,iEAOR5C,EAAM7J,KAAKuH,WACPvH,KAAKJ,YAERyB,SAAS,gBAAiBrB,WAGN,IAAf6J,EAAI7G,UACV6G,EAAI7G,aACDG,MAAK,QAELC,MAAK,IAKTyG,EAAIrC,WACYqC,EAAIrC,SAASC,MAAM,KACzB7E,SAAQ,SAAC2D,GACpBgH,EAAK5H,QAAQ+B,UAAUC,IAAIpB,MAI1BsD,EAAIpD,YACDd,QAAQa,aAAa,kBAAmBqD,EAAIpD,YAI7C+G,YAAYC,SAAS5D,EAAI/D,WAE1B+D,EAAIY,uBACFA,gBAAkBgD,SAAS5D,EAAIY,kBAGlCZ,EAAIV,eACDuE,YAAYD,SAAS5D,EAAIV,gBAG1BxE,yBAGAiC,SAAW5G,KAAKuH,WAAWX,cAC3BC,UAAY7G,KAAKuH,WAAWV,eAE5BoD,aAAavD,MAAMC,UAAY3G,KAAKuH,WAAWoG,mEAI1C3N,KAAKuH,WACPvH,KAAKJ,UAETmK,EAAiB1D,SAASC,cAAc,cAC5CyD,EAAerC,UAAUC,IAAI,8BAExBqC,mBAAqB3D,SAASC,cAAc,YAC5C0D,mBAAmBtC,UAAUC,IAAI,8BAEtCoC,EAAe7B,YAAYlI,KAAKgK,yBAE3BC,aAAejK,KAAK4N,+BAEpB5D,mBAAmB9B,YAAYlI,KAAKiK,cAElCF,+DAKHF,EAAM7J,KAAKuH,WAGXyC,EAAqB3D,SAASC,cAAc,UAChD0D,EAAmBtC,UAAUC,IAAI,uBAE9BkC,EAAIgE,cAAc,KAChB5D,EAAe5D,SAASC,cAAc,SAC1C2D,EAAavC,UAAUC,IAAI,0BAE3BsC,EAAa2C,iBAAiB,SAAS,SAACC,GACvCA,EAAEiB,kBACF7D,EAAa8D,WAGd9D,EAAa2C,iBAAiB,UAAU,WACvC/C,EAAI8B,MAAQ1B,EAAavI,MACzBsM,EAAKtF,iBAAiB,qBAAsBsF,EAAKjL,mBAGlDiH,EAAmB9B,YAAY+B,GAE5BJ,EAAIpD,WACDwH,SAAS,WAAapE,EAAIpD,OAAO,SAACyH,GACtCjE,EAAavI,MAAQwM,GAASrE,EAAI8B,OAAS,YAG5C1B,EAAavI,MAASmI,EAAI8B,OAAS,cAIjC9B,EAAIpD,WACDwH,SAAS,WAAapE,EAAIpD,OAAO,SAACyH,GACtCF,EAAKG,yBAAyBnE,EAAoBkE,GAASrE,EAAI8B,OAAS,kBAGpEwC,yBAAyBnE,EAAoBH,EAAI8B,OAAS,iBAI1D3B,mDAGiBkB,EAAIS,OACxByC,EAAWpO,KAAKsB,MAAM,gBAAiB,CAACtB,KAAM2L,EAAOT,GAAK,MAAM,kBAC5DS,cAGMyC,QACR,SACFA,aAAoBrG,KACtBmD,EAAGhD,YAAYkG,IAEflD,EAAGpD,UAAY,GACf9D,QAAQC,KAAK,uJAAwJmK,cAGjK,gBACA,OACLlD,EAAGpD,UAAY,iBAGfoD,EAAGpD,UAAYsG,gEAMXzI,QAAQ+B,UAAUC,IAAI,4BACtBhC,QAAQa,aAAa,OAAQ,oBAC7Bb,QAAQa,aAAa,aAAcxG,KAAKuH,WAAWoE,OAGrD3L,KAAKuH,WAAWC,WACAxH,KAAKuH,WAAWC,SAASC,MAAM,KACrC7E,SAAQ,SAAC2D,GACpB8H,EAAK1I,QAAQ+B,UAAUC,IAAIpB,WAIxB0D,aAAavD,MAAMC,UAAY3G,KAAKuH,WAAWoG,oBAE/ChI,QAAQuC,YAAYlI,KAAKkK,mDAIlBrK,UACLA,EAAKG,KAAKyG,8CAIH5G,WAIdwD,EAHIiL,EAAUzO,EACd0O,EAAYvO,KAAKoK,eACjB9G,EAASiL,EAAUjL,OAGXqH,EAAI,EAAGA,EAAIrH,IAIlBD,EAFAiL,EAAUA,EAAQC,EAAU5D,IAIxB2D,GANsB3D,YAWpBtH,uCAIKxD,EAAM6B,GACf1B,KAAKyG,QACP5G,EAAKG,KAAKyG,OAAS/E,0CAKN7B,EAAM6B,WAChB4M,EAAUzO,EACd0O,EAAYvO,KAAKoK,eACjB9G,EAASiL,EAAUjL,OAEXqH,EAAI,EAAGA,EAAIrH,EAAQqH,OAEvBA,GAAKrH,EAAQ,EACfgL,EAAQC,EAAU5D,IAAMjJ,MACpB,KACA4M,EAAQC,EAAU5D,IAAI,SACL,IAAVjJ,QACT4M,EAAQC,EAAU5D,IAAM,GAM1B2D,EAAUA,EAAQC,EAAU5D,0CAMlB9I,GACT7B,KAAKkK,mBACFhH,QAAQJ,KAAKjB,QACbqI,aAAahC,YAAYrG,EAAOU,cAErCV,EAAO2M,kBAEPxK,QAAQC,KAAK,0HAKDwK,EAAW5I,OAGpB6I,EAAe1O,KAAKuD,OAAON,QAAUjD,KAAKuD,OAAOoL,kBAAkBC,aAAgB/I,GAAU7F,KAAKuD,OAAOsL,oBAAoBD,kBAG5HjJ,QAAQe,MAAMb,OAAS6I,EAAe,UAEtCrN,SAAS,gBAAiBrB,KAAMA,KAAK2F,QAAQe,MAAMb,QAErD7F,KAAKiD,eACFiH,aAAaxD,MAAMoI,UAAaJ,EAAe1O,KAAK+J,eAAeR,aAAgB,MAIrFvJ,KAAKiD,SAAyB,QAAdwL,SAEb9I,QAAQe,MAAMqI,WADH,WAAdN,EAC+BzO,KAAK2F,QAAQiJ,aAAe5O,KAAK+J,eAAeR,aAAgB,MAE/DvJ,KAAK2F,QAAQiJ,aAAe5O,KAAK+J,eAAeR,cAAgB,EAAK,WAIpGrG,QAAQN,SAAQ,SAASf,GAC7BA,EAAOmN,cAAcP,wDAMjB9I,QAAQe,MAAMqI,WAAa,QAC3BpJ,QAAQe,MAAMb,OAAS,QACvBF,QAAQe,MAAMoI,UAAY,QAC1B5E,aAAaxD,MAAMoI,UAAY,QAE/B5L,QAAQN,SAAQ,SAASf,GAC7BA,EAAOoN,6BAGH5N,SAAS,gBAAiBrB,KAAM,gDAKL,UAA7BA,KAAKuH,WAAW2H,iBACbtP,MAAMgJ,WAAWuG,aAAenP,kDAO/BA,KAAK2F,yDAKL3F,KAAKkK,uDAKLlK,KAAKyG,wDAILzG,KAAKqK,8DAKRrK,KAAKiD,UAGLjD,KAAKkD,QAAQI,QACRtD,KAAKkD,QAAQ,GAAGkM,iBAHjBpP,oDAYJA,KAAKiD,UAGLjD,KAAKkD,QAAQI,QACRtD,KAAKkD,QAAQlD,KAAKkD,QAAQI,OAAQ,GAAG+L,gBAHtCrP,iDAYDA,KAAKkD,kDAKLlD,KAAK2C,oDAKT3C,KAAKuD,OAAON,QACPjD,KAAKuD,OAAO+L,eAEZtP,2CAKKuP,OACTC,EAAU,UAEXxP,KAAKiD,SAAWsM,SACbrM,QAAQN,SAAQ,SAASf,GAC7B2N,EAAQ1M,KAAKjB,EAAOW,eAAc,YAG9B+E,WAAWrE,QAAUsM,GAGpBxP,KAAKuH,+DAKRvE,GAAU,OAETE,QAAQN,SAAQ,SAASf,GAC1BA,EAAOmB,UACTA,GAAU,MAITA,QACGG,YACAuF,iBAAiB,0BAA2B1I,KAAK+C,gBAAgB,SAEjEK,oCAKFtD,EAAQ2P,GACRzP,KAAKgD,eACHA,SAAU,OAEV2C,QAAQe,MAAMI,QAAU,GAE1B9G,KAAKuD,OAAON,cACTM,OAAOuH,6BAGRnI,MAAMC,SAAQ,SAASC,GAC3BA,EAAKM,UAGFnD,KAAKiD,SAA0B,OAAfjD,KAAKyE,YACnBE,yBAGD/E,MAAM6D,cAAciM,4BAEpBrO,SAAS,cAAerB,KAAMyP,GAE/B3P,QACE4I,iBAAiB,0BAA2B1I,KAAK+C,gBAAgB,GAGpE/C,KAAKuD,OAAON,cACTM,OAAOoM,mBAGT3P,KAAKF,aACHF,MAAM6D,cAAcoB,SAASC,gDAMhChF,EAAQ2P,GACTzP,KAAKgD,eACFA,SAAU,OAEV2C,QAAQe,MAAMI,QAAU,YAExBlH,MAAM6D,cAAciM,uBAEtB1P,KAAKuD,OAAON,cACTM,OAAOuH,6BAGRnI,MAAMC,SAAQ,SAASC,GAC3BA,EAAKO,eAGD/B,SAAS,cAAerB,KAAMyP,GAE/B3P,QACE4I,iBAAiB,0BAA2B1I,KAAK+C,gBAAgB,GAGpE/C,KAAKuD,OAAON,cACTM,OAAOoM,mBAGT3P,KAAKF,aACHF,MAAM6D,cAAcoB,SAASC,kEAMhC8K,EAAa,EAEd5P,KAAK+J,gBAAkB/J,KAAKkD,QAAQI,cACjCJ,QAAQN,SAAQ,SAASf,GAC1BA,EAAOmB,UACT4M,GAAc/N,EAAO2C,oBAIlBuF,eAAerD,MAAMyC,SAAYyG,EAAa,EAAK,KAErD5P,KAAKuD,OAAON,cACTM,OAAOoM,wDAKHE,OACPC,EAAQ9P,KAAKkD,QAAQwI,QAAQmE,GAE9BC,GAAS,QACN5M,QAAQ6M,OAAOD,EAAO,GAGxB9P,KAAKkD,QAAQI,uDAKTmB,QACHiG,YAAa,OACbsF,eAAevL,0CAGNA,GACXwL,MAAMxL,KACRA,EAAQyL,KAAKC,MAAOnQ,KAAKJ,MAAM+F,QAAQyK,YAAY,IAAO3C,SAAShJ,KAGpEA,EAAQyL,KAAKG,IAAIrQ,KAAK8F,SAAUrB,GAE7BzE,KAAKmJ,WACP1E,EAAQyL,KAAKI,IAAItQ,KAAKmJ,SAAU1E,SAG5BA,MAAQA,OACRuE,YAAcvE,EAAQA,EAAQ,KAAO,QAErCkB,QAAQe,MAAMjC,MAAQzE,KAAKgJ,YAE5BhJ,KAAKiD,cACHN,MAAMC,SAAQ,SAASC,GAC3BA,EAAK+B,cAIJ5E,KAAKuD,OAAON,cACTM,OAAOoM,wBAGRtO,SAAS,eAAgBrB,qDAI1BuQ,EAAO,QAEN5N,MAAMC,SAAQ,SAASC,GACxBA,EAAKuC,IAAIoL,oBAC+B,OAAvC3N,EAAKuC,IAAI7C,aAAakO,cACxBF,EAAKzN,KAAKD,EAAKuC,KACfvC,EAAKuC,IAAIsL,mBAET7N,EAAKuC,IAAIoL,mBAAoB,MAKhCD,EAAK3N,SAAQ,SAASwC,GACrBA,EAAIuL,gBAGLJ,EAAK3N,SAAQ,SAASwC,GACrBA,EAAIwL,0DAKDnM,EAAQ,SAETzE,KAAKiD,aACFC,QAAQN,SAAQ,SAASf,GAC1BA,EAAOmB,UACTyB,GAAS5C,EAAO2C,eAIlBC,EAAQzE,KAAKyE,MAGPA,6CAIAyL,KAAKW,KAAK7Q,KAAK2F,QAAQmL,wBAAwBjL,4CAG3CC,QACNA,SAAWA,OACXoD,eAAiBpD,EAAWA,EAAW,KAAO,QAE9CH,QAAQe,MAAMZ,SAAW9F,KAAKkJ,oBAE9BvG,MAAMC,SAAQ,SAASC,GAC3BA,EAAK2K,qDAIKrE,QACNA,SAAWA,OACXC,eAAiBD,EAAWA,EAAW,KAAO,QAE9CxD,QAAQe,MAAMyC,SAAWnJ,KAAKoJ,oBAE9BzG,MAAMC,SAAQ,SAASC,GAC3BA,EAAK6K,oEAKC,IAAIqD,SAAQ,SAACC,EAASC,GAGzBC,EAAKjO,SACPiO,EAAKhO,QAAQN,SAAQ,SAASf,GAC7BA,cAIFqP,EAAK7P,SAAS,gBAAiB6P,WAE3BC,EAAYD,EAAKvO,MAAMW,OAEnBqH,EAAI,EAAGA,EAAIwG,EAAWxG,IAC7BuG,EAAKvO,MAAM,YAGTuO,EAAKvL,QAAQ8D,YACfyH,EAAKvL,QAAQ8D,WAAWxB,YAAYiJ,EAAKvL,SAG1CuL,EAAKvL,SAAU,EACfuL,EAAKnH,gBAAiB,EACtBmH,EAAKjH,cAAe,EACpBiH,EAAKhH,cAAe,EAEjBgH,EAAK3N,OAAON,SACdiO,EAAK3N,OAAO0E,YAAYiJ,GAGzBA,EAAKtR,MAAM6D,cAAc2N,iBAAiBF,GAE1CA,EAAKtR,MAAM6D,cAAcoB,SAASC,iBAAgB,GAElDkM,gDAKEhR,KAAKsK,6BACFA,8BAGDjJ,SAAS,kBAAmBrB,2CAKrBoF,OACRvC,EAAO,IAAI6C,EAAK1F,KAAMoF,eAErBzC,MAAMG,KAAKD,GAETA,2CAIHiN,EAAQ9P,KAAKJ,MAAM6D,cAAc4N,gBAAgBrR,aAC9C8P,GAAS,GAAI9P,KAAKsR,mBAAmBxB,EAAQ,8CAGlCA,OACdjO,EAAS7B,KAAKJ,MAAM6D,cAAc8N,iBAAiBzB,UAC/CjO,GAAUA,EAAOmB,QAAUnB,EAAS7B,KAAKsR,mBAAmBxB,EAAQ,4CAIxEA,EAAQ9P,KAAKJ,MAAM6D,cAAc4N,gBAAgBrR,aAC9C8P,GAAS,GAAI9P,KAAKwR,mBAAmB1B,EAAQ,8CAGlCA,OACdjO,EAAS7B,KAAKJ,MAAM6D,cAAc8N,iBAAiBzB,UAC/CjO,GAAUA,EAAOmB,QAAUnB,EAAS7B,KAAKwR,mBAAmB1B,EAAQ,6CAG3DzH,QACZqC,YAAa,OAGkB,IAA1B1K,KAAKuH,WAAW9C,OAA0B4D,QAE9CzD,SAAS5E,KAAKuH,WAAW9C,YAG1BpD,SAAS,0BAA2BrB,WAEpCyR,UAAUpJ,QAEVhH,SAAS,yBAA0BrB,wCAI/BqI,OACNrI,KAAKiD,SAIJjD,KAAK0K,kBACH/E,QAAQe,MAAMjC,MAAQ,QAEtB9B,MAAMC,SAAQ,SAACC,GACnBA,EAAK6O,qBAIHvI,EAAWnJ,KAAK2F,QAAQsD,iBAExBjJ,KAAKyE,QAAUzE,KAAK0K,mBAClB/H,MAAMC,SAAQ,SAACC,OACf4B,EAAQ5B,EAAK2B,WAEdC,EAAQ0E,IACVA,EAAW1E,MAIV0E,GAAS,KACPwI,EAAQxI,EAAW,EACnBnJ,KAAKyK,kBAAoBpC,IAC5BsJ,EAAQzB,KAAKI,IAAIqB,EAAO3R,KAAKyK,uBAEzBuF,eAAe2B,8CAKNrN,OACZiD,gBAEAvH,KAAKiD,SACJjD,KAAKuD,OAAON,SAsBhBe,QAAQ4N,MAAM,8FACPb,QAAQE,OAAO,yGAtBrB1J,EAAaiE,OAAOqG,OAAO,GAAI7R,KAAKwC,iBACpC+E,EAAaiE,OAAOqG,OAAOtK,EAAYjD,GAEhCtE,KAAKJ,MAAM6D,cAAcqO,UAAUvK,GAAY,EAAOvH,MAC5D+R,MAAK,SAAClQ,UAEH0F,EAAWd,OAASuL,EAAKvL,QAC3BuL,EAAKvL,OAAQ,GAGPuL,WACND,MAAK,kBACElQ,EAAOkB,yDAcRF,OACNiN,EAAQ9P,KAAK2C,MAAM+I,QAAQ7I,GAE5BiN,GAAS,QACNnN,MAAMoN,OAAOD,EAAO,iDAMtB9P,KAAK+F,iBACHA,UAAY,IAAInE,EAAgB5B,OAG/BA,KAAK+F,iBA79BOpG,GAi+BrB6D,EAAO+H,kBAAoB0G,MCv+BNC,qFAEHhH,WACPA,EAAGjC,aAAe,GAAKiC,EAAG3B,cAAgB,oCAGpC2B,OACXiH,EAAMjH,EAAG4F,8BAEN,CACN9J,IAAKmL,EAAInL,IAAMoL,OAAOC,YAAchM,SAASiM,gBAAgBC,UAC7DnL,KAAM+K,EAAI/K,KAAOgL,OAAOI,YAAcnM,SAASiM,gBAAgBG,8CAIhDC,EAAKC,cAAOC,yDAAO,GAC/BC,EAAc,GAAGC,UACrBC,EAAa,GAAGD,UAEXH,IACJA,EAAQnH,OAAOqG,OAAOmB,MAAMC,QAAQP,GAAO,GAAK,GAAIA,yBAIhDQ,EAAUR,EAAI/H,GAClBwI,SAAOC,SAEO,MAAXF,GAAsC,WAAnBG,EAAOH,IAAyBA,EAAQJ,YAAcD,GAAeK,EAAQJ,YAAcC,KAChHI,EAAQP,EAAKU,WAAU,SAACC,UAChBA,EAAKL,UAAYA,OAGb,EACXP,EAAMhI,GAAKiI,EAAKO,GAAOC,MAEvBA,EAAO5H,OAAOqG,OAAOmB,MAAMC,QAAQC,GAAW,GAAK,GAAIA,GAEvDN,EAAKY,QAAQ,CAACN,QAAAA,EAASE,KAAAA,IAEvBT,EAAMhI,GAAKb,EAAK2J,UAAUP,EAASE,EAAMR,UAhBxC,IAAIjI,KAAK+H,aAqBNC,WC5CYe,wBACR9T,EAAO+T,OAASxI,yDAAW,kBACjCvL,MAAQA,OACR+T,QAAUA,OACVC,mBAAqBpI,OAAOqG,OAAO,GAAI1G,8CAGpC0I,EAAQnS,QACXkS,mBAAmBC,GAAUnS,mCAG1BuQ,OAAgB6B,yDAAc,GAClCzQ,EAASmI,OAAOqG,OAAO,GAAI7R,KAAK4T,uBAEpCpI,OAAOqG,OAAOxO,EAAQ4O,IAEiB,IAApC6B,EAAYC,qBAAiC/T,KAAKJ,MAAM6B,QAAQsS,wBAC7D,IAAI7S,KAAO4S,EACXzQ,EAAO2Q,eAAe9S,IACzB8C,QAAQC,KAAK,WAAajE,KAAK2T,QAAU,WAAYzS,OAKnD,IAAIA,KAAOmC,EACZnC,KAAO4S,EACTzQ,EAAOnC,GAAO4S,EAAY5S,GAEvB8R,MAAMC,QAAQ5P,EAAOnC,IACvBmC,EAAOnC,GAAOsK,OAAOqG,OAAO,GAAIxO,EAAOnC,IACR,WAAvBmS,EAAOhQ,EAAOnC,KAAqC,OAAhBmC,EAAOnC,GAClDmC,EAAOnC,GAAOsK,OAAOqG,OAAO,GAAIxO,EAAOnC,SACP,IAAhBmC,EAAOnC,WAChBmC,EAAOnC,UAKVmC,WCnCY4Q,2CACRrU,yCACLA,IAEDsU,gBAAkBtU,EAAMgJ,WAAWjD,UACnCwO,kBAAoBvU,EAAM6D,cAAckC,UACxCyO,aAAgBxU,EAAMgJ,WAAWwL,eAEjCC,iBAAmB,sLAqBAnR,wHAaZoR,GAETA,GACFA,4CAIcC,EAAQC,2CAITpP,6CAIEA,EAAKiD,0CAIRjB,EAAMqN,uCAITzN,EAAKyN,0EAQJrP,kDAIUA,wCAIVsP,SAEJ,yCAQA1U,KAAKJ,MAAMgJ,WAAW+L,kDAGrBvP,EAAK0K,OACT8E,EAAQxP,EAAI7C,aAEbuN,EAAQ,GACV8E,EAAMlN,UAAUC,IAAI,sBACpBiN,EAAMlN,UAAUmN,OAAO,uBAEvBD,EAAMlN,UAAUC,IAAI,qBACpBiN,EAAMlN,UAAUmN,OAAO,4DAWnBC,iBACAC,qDAKAC,kBACAC,iDAGGX,QAEHY,oBACApQ,8DAGcM,EAAK+P,EAAUC,cAC9BC,EAAWrV,KAAKuQ,OAAO7E,QAAQtG,GACnCwP,EAAQxP,EAAI7C,aACZ+S,EAAS,SAEF,IAAIvE,SAAQ,SAACC,EAASC,MACzBoE,GAAY,EAAE,SAEQ,IAAdD,IACTA,EAAYvN,EAAKjI,MAAM6B,QAAQ8T,uBAI5BH,GACAlD,EAAQsD,UAAUZ,KACpBU,EAASpD,EAAQuD,SAASb,GAAO5N,IAAMkL,EAAQuD,SAAS5N,EAAKqM,iBAAiBlN,KAElE,GAAKsO,EAASzN,EAAKqM,gBAAgBtF,aAAegG,EAAMrL,oBACnEyH,KACO,cAKa,IAAbmE,IACTA,EAAWtN,EAAKjI,MAAM6B,QAAQiU,qBAGf,YAAbP,IACFA,EAAWtN,EAAK8N,sBAAsBvQ,GAAO,MAAQ,UAItDyC,EAAK+N,YAAYxQ,GAGV+P,OACD,aACA,SAEFtN,EAAKqM,gBAAgB2B,aAAehO,EAAKqM,gBAAgB4B,WAAajO,EAAKqM,gBAAgBtF,aAC7F/G,EAAKqM,gBAAgB4B,UAAYjO,EAAKqM,gBAAgB4B,WAAalB,EAAMmB,UAAYlO,EAAKqM,gBAAgB4B,YAAejO,EAAKqM,gBAAgB2B,aAAejB,EAAMmB,WAAa,EAEhLlO,EAAKqM,gBAAgB4B,UAAYjO,EAAKqM,gBAAgB4B,UAAajO,EAAKqM,gBAAgBtF,aAAe,YAKnG,SAEF/G,EAAKqM,gBAAgB2B,aAAehO,EAAKqM,gBAAgB4B,WAAajO,EAAKqM,gBAAgBtF,aAC7F/G,EAAKqM,gBAAgB4B,UAAYjO,EAAKqM,gBAAgB4B,WAAajO,EAAKqM,gBAAgB2B,aAAejB,EAAMmB,WAAanB,EAAMrL,aAEhI1B,EAAKqM,gBAAgB4B,UAAYjO,EAAKqM,gBAAgB4B,UAAYjO,EAAKqM,gBAAgBtF,aAAegG,EAAMrL,iBAGxG,MACL1B,EAAKqM,gBAAgB4B,UAAYlB,EAAMmB,UAIxC/E,SAGAhN,QAAQC,KAAK,kCACbgN,EAAO,4CAlM2BtR,GCAjBqW,2CACRpW,gCACLA,oDAGQwF,GACdA,EAAIzC,MAAMC,SAAQ,SAACC,GAClBuC,EAAIO,QAAQuC,YAAYrF,EAAKN,cAC7BM,EAAK0F,mEAIkBrF,GACxBA,EAAQN,SAAQ,SAASf,GACxBA,EAAO8C,8BAdmCsP,GCAxBgC,2CACRrW,yCACLA,IAEDsW,QAAU,IACVC,SAAW,IACXC,WAAa,IAEbC,kBAAoB,IACpBC,mBAAqB,IAErBC,YAAc,IACdC,aAAe,IAEfC,cAAgB,IAEhBC,aAAe,MAEfC,YAAc,OAEdC,aAAc,IACdC,WAAY,IAEZ3T,QAAU,yDAIV4T,0BACAC,mBACAC,oEAID9T,EAAUlD,KAAKyB,QAAQ,WAE3BwV,GAAK,QAEwB,gBAA1BjX,KAAKyB,QAAQ,YACfuC,QAAQC,KAAK,0EACbgT,GAAK,GAGHjX,KAAKyB,QAAQ,sBACfuC,QAAQC,KAAK,oEACbgT,GAAK,GAGHjX,KAAKyB,QAAQ,SACfuC,QAAQC,KAAK,8EACbgT,GAAK,GAGH/T,GACOA,EAAQgU,MAAK,SAACC,UACfA,EAAIC,YAIXpT,QAAQC,KAAK,gEACbgT,GAAK,GAQAA,6CAIFJ,UAAY7W,KAAKyB,QAAQ,UAAU4V,WAAW,2DAI9CrW,UAAU,kBAAmBhB,KAAKsX,iBAAiB9W,KAAKR,YACxDgB,UAAU,iBAAkBhB,KAAKsX,iBAAiB9W,KAAKR,uDAIvD2W,YAAc,2CAONvR,EAAKiD,QACbkP,mDAIQnQ,EAAMqN,GAChBzU,KAAKoW,YAAchP,SAChBgP,WAAahP,OAEboQ,OAAOpQ,GAAQpH,KAAKqW,kBAAoBrW,KAAK0W,+DAK/Ce,EAASzX,KAAKkU,gBAAgB9D,iBAE7BxQ,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,MAC7CA,EAAOmB,QAAQ,KACbyB,EAAQ5C,EAAO2C,WAEhBC,EAAQgT,IACVA,EAAShT,YAKPiS,aAAwB,EAATe,0CAGLlD,EAAQC,cACnBmD,EAAM,CACTC,KAAK5X,KAAKkD,QACVgT,QAAQlW,KAAKkW,QACbC,SAASnW,KAAKmW,UAEf0B,EAAS,EAGNtD,IAAWvU,KAAK4W,mBAIdkB,aAEAC,wBAEA3B,WAAapW,KAAKkU,gBAAgBkC,gBAElCC,kBAAoBrW,KAAKoW,WAAapW,KAAK0W,kBAC3CJ,mBAAqBtW,KAAKoW,WAAapW,KAAKkU,gBAAgB9D,YAAcpQ,KAAK0W,kBAE/E9W,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,OAC5CmW,EAAS,MAEVnW,EAAOmB,QAAQ,KACbyB,EAAQ5C,EAAO2C,WAEnBwT,EAAOC,QAAUJ,EACjBG,EAAOE,SAAWL,EAASpT,EAE3BuT,EAAOvT,MAAQA,EAEXoD,EAAKgP,YACRmB,EAAOG,cAAetW,EAAOzB,QAAQgY,SAAUvW,EAAOzB,QAAQgY,QAAQD,cAGnEN,EAASpT,EAAQoD,EAAKwO,mBAAuBwB,EAAShQ,EAAKyO,qBAG1C,GAAjBzO,EAAKqO,UACPrO,EAAKqO,QAAUrO,EAAK3E,QAAQI,OAC5BuE,EAAK0O,YAAcsB,GAGpBhQ,EAAKsO,SAAWtO,EAAK3E,QAAQI,SAGR,IAAlBuE,EAAKqO,UACPrO,EAAK2O,cAAgB/R,GAIvBoD,EAAK3E,QAAQJ,KAAKjB,GAElBA,EAAOzB,QAAQgY,QAAUJ,EAEzBH,GAAUpT,WAIP2P,aAAa1N,MAAM2R,YAAcrY,KAAKuW,YAAc,UACpDnC,aAAa1N,MAAM4R,aAAetY,KAAKwW,aAAe,UAEtDI,aAAc,EAEfpC,GACCD,IAAUvU,KAAKuY,cAAcZ,SAC3Ba,wBAIFtE,gBAAgBkC,WAAapW,KAAKoW,mDAGzBhR,GACXpF,KAAK4W,iBACF6B,cAAcrT,GAEnBA,EAAIzC,MAAMC,SAAQ,SAACC,GAClBuC,EAAIO,QAAQuC,YAAYrF,EAAKN,cAC7BM,EAAK0F,2DAKSnD,EAAKiD,QAChBqQ,gBAAgBtT,EAAKiD,oDAGFnF,OACpB,IAAIyH,EAAI3K,KAAKkW,QAASvL,GAAK3K,KAAKmW,SAAUxL,SACxCzH,QAAQyH,GAAGhG,gEASZiS,aAAc,uCAId1T,QAAU,QAEVgT,SAAW,OACXC,SAAW,OAEXE,kBAAoB,OACpBC,mBAAqB,OACrBC,YAAc,OACdC,aAAe,2CAOR5B,EAcLxP,SAjBHuT,GAAS,EAEbC,EAAS,KAGN5Y,KAAK6W,mBACFjX,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,IAC5CA,EAAO0F,WAAW9C,OAAS5C,EAAOmB,UACrC2V,GAAS,MAIRA,GACCA,GAAU3Y,KAAKJ,MAAMgJ,WAAW+L,iBAAiBrR,cAE9CgT,mBAAqBtW,KAAKoW,WAAapW,KAAKkU,gBAAgB9D,YAAcpQ,KAAK0W,aAEhFtR,EAAMpF,KAAKsB,MAAM,cAAe,CAAC,GAAI,IAAI,kBACrCwL,EAAKlN,MAAMgJ,WAAW+L,oBAC3B,IAEI,CAENC,EAAQxP,EAAI7C,aAEZ6C,EAAIyT,qBAECzE,aAAalM,YAAY0M,OAEtBgE,EAAS,EAAGA,EAASxT,EAAIzC,MAAMW,OAAQsV,IAAS,KACnD/V,EAAOuC,EAAIzC,MAAMiW,GACrBhE,EAAM1M,YAAYrF,EAAKN,cAEvBM,EAAKhB,OAAO8C,oBAEE9B,EAAKhB,OAAO2C,WAO3BoQ,EAAMnL,WAAWxB,YAAY2M,QAQxB9P,iBAAgB,GAAO,QAKD,eAA3B9E,KAAKyB,QAAQ,iBACVqX,qBACAhU,iBAAgB,GAAO,0CAKjB6S,cACTxE,GAAQ,SAETwE,EAAIC,KAAKtU,SAAWtD,KAAKkD,QAAQI,QAAUqU,EAAIzB,UAAYlW,KAAKkW,SAAWyB,EAAIxB,WAAanW,KAAKmW,WAIpGwB,EAAIC,KAAKhV,SAAQ,SAACuU,EAAKxM,GACnBwM,IAAQ5J,EAAKrK,QAAQyH,KACvBwI,GAAQ,OAIFA,yDAIGnT,KAAK+Y,iBACXnW,SAAQ,SAACwC,GACb4I,EAAK0K,gBAAgBtT,GAAK,sDAKtBpF,KAAK2W,mBACJA,YAAc3W,KAAKJ,MAAMgJ,WAAWmQ,kBAGnC/Y,KAAK2W,2CAGNqC,QACD3C,mBAAqB2C,OACrB1C,oBAAsB0C,EAExB9I,KAAK+I,IAAID,GAAShZ,KAAK0W,aAAe,OACnC5R,kBAEFkU,EAAO,QAEJE,mBACAC,uBAGAC,kBACAC,4DAKWC,EAAOC,EAAKP,OAC1B,IAAIrO,EAAI2O,EAAO3O,EAAI4O,EAAK5O,IAAI,KAC3B9I,EAAS7B,KAAKkD,QAAQyH,GAE1B9I,EAAOzB,QAAQgY,QAAQH,SAAWe,EAClCnX,EAAOzB,QAAQgY,QAAQF,UAAYc,wDAKhCQ,GAAU,mBAIT3X,EAASwM,EAAKnL,QAAQmL,EAAK8H,SAAW,UAEvCtU,GACCA,EAAOzB,QAAQgY,QAAQH,SAAW5J,EAAKiI,oBACzCkD,GAAU,EAEVnL,EAAK0K,iBAAiBnW,SAAQ,SAACwC,MACd,UAAbA,EAAIrD,KAAiB,KACnBc,EAAOuC,EAAIqU,QAAQ5X,GACvBuD,EAAI7C,aAAa2F,YAAYrF,EAAKN,cAClCM,EAAK0F,mBAIP8F,EAAKqL,2BAA2B7X,GAEhCwM,EAAK8H,gBAEF9H,EAAK8H,UAAa9H,EAAKnL,QAAQI,OAAS,EAC1C+K,EAAKmI,aAAe,EAEpBnI,EAAKmI,cAAgB3U,EAAO2C,wBAvBrB,kBA6BT,MAICgV,SACGpF,aAAa1N,MAAM4R,aAAetY,KAAKwW,aAAe,0DAKxDgD,GAAU,mBAGT3X,EAASqP,EAAKhO,QAAQgO,EAAKgF,QAAU,OAEtCrU,qBACCA,EAAOzB,QAAQgY,QAAQF,UAAYhH,EAAKmF,iCAC1CmD,GAAU,EAEVtI,EAAK6H,iBAAiBnW,SAAQ,SAACwC,MACd,UAAbA,EAAIrD,KAAiB,KACnBc,EAAOuC,EAAIqU,QAAQ5X,GACvBuD,EAAI7C,aAAaoX,QAAQ9W,EAAKN,cAC9BM,EAAK0F,mBAIP2I,EAAKgF,UAEFhF,EAAKgF,SAAW,EAClBhF,EAAKqF,YAAc,EAEnBrF,EAAKqF,aAAe1U,EAAO2C,eAGxBwU,EAAO9H,EAAKwI,2BAA2B7X,GAExCmX,IACF9H,EAAKkF,WAAalF,EAAKgD,gBAAgBkC,WAAalF,EAAKgD,gBAAgBkC,WAAa4C,EACtF9H,EAAKsF,cAAgBwC,MA3Bd,kBAkCT,MAICQ,SACGpF,aAAa1N,MAAM2R,YAAcrY,KAAKuW,YAAc,8DAKtDiD,GAAU,mBAGT3X,EAASmQ,EAAK9O,QAAQ8O,EAAKmE,iBAE5BtU,GACCA,EAAOzB,QAAQgY,QAAQH,QAAUjG,EAAKsE,oBACxCkD,GAAU,EAEVxH,EAAK+G,iBAAiBnW,SAAQ,SAACwC,MACd,UAAbA,EAAIrD,KAAiB,KACnBc,EAAOuC,EAAIqU,QAAQ5X,OAGtBuD,EAAI7C,aAAa0F,YAAYpF,EAAKN,cACjC,MAAOqX,GACR5V,QAAQC,KAAK,2BAA4B2V,EAAGC,cAK/C7H,EAAKwE,cAAgB3U,EAAO2C,gBAC5BwN,EAAKmE,uBApBG,kBAyBT,MAICqD,SACGpF,aAAa1N,MAAM4R,aAAetY,KAAKwW,aAAe,6DAKxDgD,GAAU,mBAGT3X,EAASiY,EAAK5W,QAAQ4W,EAAK5D,gBAE5BrU,GACCA,EAAOzB,QAAQgY,QAAQF,SAAW4B,EAAKzD,mBACzCmD,GAAU,EAEVM,EAAKf,iBAAiBnW,SAAQ,SAACwC,MACd,UAAbA,EAAIrD,KAAiB,KACnBc,EAAOuC,EAAIqU,QAAQ5X,OAGtBuD,EAAI7C,aAAa0F,YAAYpF,EAAKN,cACjC,MAAOqX,GACR5V,QAAQC,KAAK,0BAA2B2V,EAAGC,cAK9CC,EAAKvD,aAAe1U,EAAO2C,gBAC3BsV,EAAK5D,sBApBG,kBAyBT,MAICsD,SACGpF,aAAa1N,MAAM2R,YAAcrY,KAAKuW,YAAc,yDAKhC1U,OACtBkY,EAAUC,SAEXnY,EAAOzB,QAAQgY,QAAQD,eACzBtW,EAAO8C,qBAGPqV,GADAD,EAAWlY,EAAO2C,YACK3C,EAAOzB,QAAQgY,QAAQ3T,SAG7C5C,EAAOzB,QAAQgY,QAAQF,UAAY8B,EACnCnY,EAAOzB,QAAQgY,QAAQ3T,MAAQsV,OAC1BE,kBAAkBja,KAAKkD,QAAQwI,QAAQ7J,GAAU,EAAG7B,KAAKkD,QAAQI,OAAQ0W,IAG/EnY,EAAOzB,QAAQgY,QAAQD,cAAe,GAGhC6B,wCAGM5U,MACG,UAAbA,EAAIrD,KAAiB,CACvBqD,EAAIhF,QAAQgY,QAAU,CACrBlC,QAAQlW,KAAKkW,QACbC,SAASnW,KAAKmW,cAGX,IAAIxL,EAAI3K,KAAKkW,QAASvL,GAAK3K,KAAKmW,SAAUxL,IAAI,KAC7C9I,EAAS7B,KAAKkD,QAAQyH,MAEvB9I,GAAUA,EAAOmB,QAAQ,KACvBH,EAAOuC,EAAIqU,QAAQ5X,GAEvBuD,EAAI7C,aAAa2F,YAAYrF,EAAKN,cAClCM,EAAK0F,0DAMOnD,EAAKiD,MACJ,UAAbjD,EAAIrD,OACHsG,IAAUjD,EAAIhF,QAAQgY,SAAWhT,EAAIhF,QAAQgY,QAAQlC,UAAYlW,KAAKkW,SAAW9Q,EAAIhF,QAAQgY,QAAQjC,WAAanW,KAAKmW,UAAS,SAC9HvB,EAAQxP,EAAI7C,aACVqS,EAAM5M,YAAY4M,EAAM3M,YAAY2M,EAAM5M,iBAE3CyQ,cAAcrT,WAnjB2B6O,GCQ7BiG,2CAEPta,yCACNA,IAEDua,qBAAsB,IACtBC,eAAiB,OACjBzU,QAAU,OACVzC,QAAU,KACVwU,eAAiB,KACjB2C,eAAiB,KACjBjE,WAAa,IACb/K,YAAc,IAAIqI,EAAY5J,EAAKlK,MAAO,oBAAqB0a,KAE/DzV,SAAW,2DAMX0V,0BAEAH,eAAiBpa,KAAKwa,4BACtB7U,QAAU3F,KAAKya,2BAEf9U,QAAQ+U,aAAa1a,KAAKoa,eAAgBpa,KAAK2F,QAAQqC,iBAEvDhH,UAAU,oBAAqBhB,KAAK2a,iBAAiBna,KAAKR,wDAI3D4a,EAEAC,EAAY,SACJC,QACFC,IAITH,EADiD,iBAAxC5a,KAAKJ,MAAM6B,QAAQuZ,iBACdH,EAAU7a,KAAKJ,MAAM6B,QAAQuZ,kBAE7Bhb,KAAKJ,MAAM6B,QAAQuZ,wBAI5BnW,SAAW,IAAI+V,EAAY5a,KAAKJ,MAAOI,KAAK2F,QAAS3F,KAAKoU,mBAC1DvP,SAASoW,cAEdjX,QAAQ4N,MAAM,oCAAqChS,MAAM6B,QAAQuZ,qEAM9D9P,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,qBACjBuD,EAAG1E,aAAa,OAAQ,OAEjB0E,oDAIHA,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,oBACjBuD,EAAG1E,aAAa,OAAQ,YAEpBxG,KAAKJ,MAAM6B,QAAQyZ,eACtBhQ,EAAGxD,UAAUC,IAAI,2BAGXuD,8CAKAlL,KAAK2F,2DAKL3F,KAAKoa,wDAIIhT,OACZ+T,EAAY,EAChBC,EAAcpb,KAAK2F,QAAQyV,YAAcpb,KAAKJ,MAAM+F,QAAQyK,iBAGvDzK,QAAQyQ,WAAahP,EAGvBA,EAAOgU,GACTD,EAAY/T,EAAOgU,OACdzV,QAAQe,MAAM2U,YAAgBF,EAAc,WAE5CxV,QAAQe,MAAM2U,WAAa,OAG5BjF,WAAahP,OAEbvC,SAASyW,cAAclU,sDAIFvH,OAG1BuF,EAAKmW,EAFD3D,EAAO,GACX4D,EAAcxb,KAAKJ,MAAM6B,QAAQga,0BAG9B5b,GAAQA,EAAKyD,OAAO,KAIlB,IAAIpC,KAFRkE,EAAMvF,EAAK,GAEQ,KACdsX,EAAM,CACT1Q,MAAMvF,EACNyK,MAAMzK,GAGHQ,EAAQ0D,EAAIlE,YAEFQ,QACR,YACL6Z,EAAS,mBAGJ,UACLA,EAAS,oBAGJ,SAEJA,EADEvI,MAAMC,QAAQvR,GACP,QAEA,uBASR6Z,EAJEtL,MAAMvO,IAAoB,KAAVA,EAGhBA,EAAMyR,MAAM,wCACL,WAEA,SALD,SAWXgE,EAAIoE,OAASA,EAEb3D,EAAK9U,KAAKqU,MAGRqE,WAEYA,QACR,gBACA5b,MAAM6B,QAAQyB,QAAUsY,EAAY/S,KAAKzI,KAAKJ,MAAOgY,aAGrD,SACF5E,MAAMC,QAAQuI,GAChB5D,EAAKhV,SAAQ,SAACuU,OACThE,EAAQqI,EAAYtE,MAAK,SAACrN,UACtBA,EAAIpD,QAAU0Q,EAAI1Q,SAGvB0M,GACF3H,OAAOqG,OAAOsF,EAAKhE,MAKrByE,EAAKhV,SAAQ,SAACuU,GACVqE,EAAYrE,EAAI1Q,QAClB+E,OAAOqG,OAAOsF,EAAKqE,EAAYrE,EAAI1Q,gBAKjC7G,MAAM6B,QAAQyB,QAAU0U,YAIzBhY,MAAM6B,QAAQyB,QAAU0U,OAGzB8D,WAAW1b,KAAKJ,MAAM6B,QAAQyB,6CAI1B0U,EAAMxS,kBACVpF,KAAKoa,eAAepS,iBAAiBoS,eAAenS,YAAYjI,KAAKoa,eAAepS,iBAErF9E,QAAU,QACVwU,eAAiB,QACjB2C,eAAiB,QAEjBhZ,SAAS,mBAEduW,EAAKhV,SAAQ,SAACiH,EAAKc,GAClB9C,EAAK8T,WAAW9R,WAGZ+R,uBAEAva,SAAS,uBAETwD,SAASC,iBAAgB,GAAO,QAEhC+W,QAAO,sCAGFtU,EAAYuU,EAAQC,OAC1Bla,EAAS,IAAI2B,EAAO+D,EAAYvH,MACpCgc,EAAQna,EAAOU,aACfuN,EAAQiM,EAAe/b,KAAKqR,gBAAgB0K,GAAgBA,KAEzDA,GAAgBjM,GAAS,EAAE,KACzBmM,EAAYF,EAAazM,eACzB4M,EAAclc,KAAKkD,QAAQwI,QAAQuQ,GACnCE,EAASF,EAAU1Z,aAEpBuZ,QACG5Y,QAAQ6M,OAAOmM,EAAa,EAAGra,GACpCsa,EAAO1S,WAAWiR,aAAasB,EAAOG,UAEjCjZ,QAAQ6M,OAAOmM,EAAc,EAAG,EAAGra,GACxCsa,EAAO1S,WAAWiR,aAAasB,EAAOG,EAAOC,mBAG3CN,QACG5Y,QAAQsQ,QAAQ3R,QAChBuY,eAAeM,aAAa7Y,EAAOU,aAAcvC,KAAKoa,eAAepS,mBAErE9E,QAAQJ,KAAKjB,QACbuY,eAAelS,YAAYrG,EAAOU,sBAIzCV,EAAO2M,iBAEA3M,8CAGYsV,GAChBA,EAAI5P,WAAWd,aACZ4T,eAAelD,EAAI5P,WAAWd,OAAS0Q,kDAIvBA,QACjBO,eAAe5U,KAAKqU,kDAIpBO,eAAiB,QAEjBxU,QAAQN,SAAQ,SAASf,GAC7BA,EAAOqK,kFAMJ4C,EAAY,OAEX5L,QAAQN,SAAQ,SAACf,OACjBgE,EAEJhE,EAAOoN,sBAEPpJ,EAAShE,EAAOwa,aAEJvN,IACXA,EAAYjJ,WAIT3C,QAAQN,SAAQ,SAACf,GACrBA,EAAOmN,cAAclC,EAAKlN,MAAM6B,QAAQ6a,sBAAuBxN,WAG3DlP,MAAMgJ,WAAW2T,qDAIZrJ,SACW,UAAlBG,EAAOH,GAmBFlT,KAAKqa,eAAenH,KAAY,EAjBpCA,aAAmB1P,EAEd0P,EACCA,aAAmBtR,EAEpBsR,EAAQsJ,aAAc,EACE,oBAAhBC,aAA+BvJ,aAAmBuJ,aAErDzc,KAAKkD,QAAQgU,MAAK,SAACrV,UACvBA,EAAO8D,UAAYuN,OAYtB,2CAGSzM,UACTzG,KAAKqa,eAAe5T,iDAGNiW,cACjBC,EAAU,UAEdnR,OAAOC,KAAKzL,KAAKqa,gBAAgBzX,SAAQ,SAAC6D,GACzBA,EAAMgB,MAAM,KAAK,KAChBiV,GAChBC,EAAQ7Z,KAAKyK,EAAK8M,eAAe5T,OAI5BkW,2CAGS7M,UACT9P,KAAK0X,eAAe5H,iDAGNA,UACjBA,EAAQ9P,KAAK0X,eAAepE,WAAU,SAAC6D,UACnCA,EAAInU,aAGI,GAAIhD,KAAK0X,eAAe5H,+CAIjC9P,KAAKkD,gDAGGrB,UACR7B,KAAK0X,eAAepE,WAAU,SAAC6D,UAC9BtV,IAAWsV,qDAMZnX,KAAK0X,gDAIJpD,QACHoD,eAAe9U,SAAQ,SAACf,EAAO8I,GACnC2J,EAASzS,EAAQ8I,6CAKJiS,OACVvZ,EAAS,eAERqU,eAAe9U,SAAQ,SAACf,KACxB+a,GAAWA,GAAU/a,EAAOmB,UAC/BK,EAAOP,KAAKjB,EAAOW,oBAIda,kDAKHA,EAAS,eAERH,QAAQN,SAAQ,SAACf,GACrBwB,EAAOP,KAAKjB,EAAOW,eAAc,OAG3Ba,wCAGMwZ,OACTxZ,EAAS,UACHwZ,EAAa7c,KAAKkD,QAAUlD,KAAK0X,gBAEnC9U,SAAQ,SAACf,GAChBwB,EAAOP,KAAKjB,EAAOkB,mBAGbM,yCAIHoB,EAAQ,cAEPiT,eAAe9U,SAAQ,SAACf,GACzBA,EAAOmB,UACTyB,GAAS5C,EAAO2C,eAIXC,qCAGGqY,EAAMnZ,EAAIC,QACfmZ,iBAAiBD,EAAMnZ,EAAIC,GAEhCD,EAAGgC,QAAQ8D,WAAWiR,aAAaoC,EAAKnX,QAAShC,EAAGgC,SAEjD/B,GACFD,EAAGgC,QAAQ8D,WAAWiR,aAAa/W,EAAGgC,QAASmX,EAAKnX,cAGhD+J,4BAEA9P,MAAMgJ,WAAWoU,wDAGNF,EAAMnZ,EAAIC,GACvBkZ,EAAKvZ,OAAON,aACTga,mBAAmBH,EAAKvZ,OAAOL,QAAS4Z,EAAMnZ,EAAIC,QAElDqZ,mBAAmBjd,KAAKkD,QAAS4Z,EAAMnZ,EAAIC,QAG5CqZ,mBAAmBjd,KAAK0X,eAAgBoF,EAAMnZ,EAAIC,GAAO,QAEzDiB,SAASC,iBAAgB,QAEzBzD,SAAS,eAAgByb,EAAMnZ,EAAIC,GAErC5D,KAAK2I,mBAAmB,qBACrBD,iBAAiB,cAAeoU,EAAK/Z,eAAgB/C,KAAKJ,MAAM6D,cAAcyZ,4DAIlEha,EAAS4Z,EAAMnZ,EAAIC,EAAOuZ,OAE5CC,EADIC,EAAYna,EAAQwI,QAAQoR,GAG5BO,GAAa,IAEhBna,EAAQ6M,OAAOsN,EAAW,IAE1BD,EAAUla,EAAQwI,QAAQ/H,KAEX,EAEXC,IACFwZ,GAAkB,GAInBA,EAAUC,EAGXna,EAAQ6M,OAAOqN,EAAS,EAAGN,GAExBK,IAEKnd,KAAKsB,MAAM,qBAAsB,CAACwb,EAAMnZ,EAAIC,GAAQ,KAAM,KAAO,IAE5D0Z,OAAOtd,KAAKJ,MAAMgJ,WAAW2H,MAEpC3N,SAAQ,SAASwC,MAClBA,EAAIzC,MAAMW,OAAO,KACfT,EAAOuC,EAAIzC,MAAMoN,OAAOsN,EAAW,GAAG,GAC1CjY,EAAIzC,MAAMoN,OAAOqN,EAAS,EAAGva,+CAQnBhB,EAAQsT,EAAUC,cAC5BhO,EAAO,EACXkO,EAAS,EACTiI,EAAS,EACTvB,EAAQna,EAAOU,oBAER,IAAIwO,SAAQ,SAACC,EAASC,WAEL,IAAbkE,IACTA,EAAWnH,EAAKpO,MAAM6B,QAAQ+b,6BAGP,IAAdpI,IACTA,EAAYpH,EAAKpO,MAAM6B,QAAQgc,yBAG7B5b,EAAOmB,QAAQ,QAGVmS,OACD,aACA,SACLoI,GAAUvP,EAAKrI,QAAQyK,YAAc,YAGhC,QACLmN,EAASvB,EAAM5L,YAAcpC,EAAKoM,eAAehK,gBAK9CgF,IAEHE,EAAS0G,EAAM0B,YAEH,GAAKpI,EAAS0G,EAAM/S,YAAc+E,EAAKrI,QAAQyK,mBACnD,EAKThJ,EAAO4U,EAAM0B,WAAaH,EAE1BnW,EAAO8I,KAAKG,IAAIH,KAAKI,IAAIlJ,EAAM4G,EAAKpO,MAAMgJ,WAAWjD,QAAQyV,YAAcpN,EAAKpO,MAAMgJ,WAAWjD,QAAQyK,aAAa,GAEtHpC,EAAKpO,MAAMgJ,WAAW+R,iBAAiBvT,GACvC4G,EAAK2M,iBAAiBvT,GAEtB4J,SAEAhN,QAAQC,KAAK,qCACbgN,EAAO,8EAOI7L,OACTzC,EAAQ,eAEP+U,eAAe9U,SAAQ,SAACf,GAC5Bc,EAAMG,KAAKjB,EAAO8b,aAAavY,OAGzBzC,iDAKHib,EAAa5d,KAAKJ,MAAM+F,QAAQyK,YACpCyN,EAAa,SAGV7d,KAAKJ,MAAMgJ,WAAWjD,QAAQkQ,aAAe7V,KAAKJ,MAAMgJ,WAAWjD,QAAQiJ,eAC7EgP,GAAc5d,KAAKJ,MAAMgJ,WAAWjD,QAAQsD,YAAcjJ,KAAKJ,MAAMgJ,WAAWjD,QAAQyK,kBAGpFsH,eAAe9U,SAAQ,SAASf,OAChC4C,EAAOqB,EAAUgY,EAElBjc,EAAOmB,UAETyB,EAAQ5C,EAAO0F,WAAW9C,OAAS,EAEnCqB,EAAW2H,SAAS5L,EAAOiE,UAIzBgY,EAFkB,iBAAVrZ,EACNA,EAAMiH,QAAQ,MAAQ,EACZkS,EAAa,IAAOnQ,SAAShJ,GAE9BgJ,SAAShJ,GAGVA,EAGZoZ,GAAcC,EAAWhY,EAAWgY,EAAWhY,MAK1C+X,oCAGEtW,EAAYuU,EAAQC,qBACtB,IAAIhL,SAAQ,SAACC,EAASC,OACxBpP,EAASwM,EAAKsN,WAAWpU,EAAYuU,EAAQC,GAEjD1N,EAAKuN,kBAELvN,EAAKhN,SAAS,aAAckG,EAAYuU,EAAQC,GAExB,cAArB1N,EAAK0P,cACPlc,EAAO8C,oBAGR0J,EAAKwN,QAAO,GAEZxN,EAAKzO,MAAMgJ,WAAWoU,eAEtB3O,EAAKxJ,SAASC,kBAEdkM,EAAQnP,+CAKOA,OAEhBiO,EADIrJ,EAAQ5E,EAAOY,WAIhBgE,UACKzG,KAAKqa,eAAe5T,IAI5BqJ,EAAQ9P,KAAK0X,eAAehM,QAAQ7J,KAExB,QACN6V,eAAe3H,OAAOD,EAAO,IAInCA,EAAQ9P,KAAKkD,QAAQwI,QAAQ7J,KAEjB,QACNqB,QAAQ6M,OAAOD,EAAO,QAGvBJ,4BAEAmM,wCAICxT,GACH6J,EAAQsD,UAAUxV,KAAK2F,eACpB+J,uBAGHrH,SACGzI,MAAMgJ,WAAWoV,mBACjBpe,MAAMgJ,WAAWoU,gBAGnBhd,KAAKuB,QAAQ,kBAAmB8G,SAC9ByQ,qBAGDzX,SAAS,eAAgBgH,QAEzBzI,MAAMqe,cAAcpC,gBAtpBgBlc,GCVtBue,wBAEP9Y,yBACP+Y,KAAO/Y,EAEL,IAAIpD,MAAMhC,KAAM,CACtBiC,IAAK,SAASC,EAAQC,EAAMC,eACC,IAAjBF,EAAOC,GACVD,EAAOC,GAEPD,EAAOic,KAAKve,MAAMyC,wBAAwBC,OAAO,MAAOJ,EAAOic,KAAMhc,gDAMxEic,UACApe,KAAKme,KAAK9Y,QAAQ+Y,+CAIlBpe,KAAKme,KAAK5b,oDAIbI,EAAQ,eAEPwb,KAAKE,WAAWzb,SAAQ,SAASC,GACrCF,EAAMG,KAAKD,EAAKE,mBAGVJ,kCAGAd,OACHgB,EAAO7C,KAAKme,KAAK1E,QAAQ5X,WACtBgB,GAAOA,EAAKE,yDAIZ/C,KAAKme,KAAK9Y,QAAQ,QAAQrF,KAAKme,KAAKve,MAAM6B,QAAQqO,2CAG9C8M,UACJ5c,KAAKme,KAAKve,MAAMgJ,WAAW0V,eAAete,KAAKme,KAAMvB,2CAIrD5c,KAAKme,wDAILne,KAAKme,KAAKve,MAAMgJ,WAAWgN,YAAY5V,KAAKme,mCAG/Cxa,EAAIC,QACHua,KAAKI,UAAU5a,EAAIC,kCAGlB/D,UACCG,KAAKme,KAAKK,WAAW3e,kDAIvBse,KAAKM,iBAAgB,6CAInBze,KAAKme,+CAILne,KAAKme,KAAKnB,yDAIVhd,KAAKme,KAAKve,+CAIbwF,EAAMpF,KAAKme,KAAKO,iBACbtZ,EAAMA,EAAIrC,eAAiBqC,2CAI9BA,EAAMpF,KAAKme,KAAKQ,iBACbvZ,EAAMA,EAAIrC,eAAiBqC,WCnFfwZ,2CACP/e,EAAM0D,SAAQxB,yDAAO,sCAC3BwB,EAAO3D,QAER2D,OAASA,IACT1D,KAAO,KACPkC,KAAOA,IACP4D,SAAU,IACVvF,QAAU,KACVuC,MAAQ,KACRkD,OAAS,IACTyD,aAAe,KACfuV,cAAe,IACfC,YAAc,IACdlI,aAAc,IACdpG,mBAAoB,IAEpBzK,UAAY,OAEZgZ,SAAU,IAEVC,QAAQnf,gDAITG,KAAK+e,eACHA,SAAU,OACV7Y,+DAKFgF,EAAK7E,SAASC,cAAc,OAEhC4E,EAAGxD,UAAUC,IAAI,iBACjBuD,EAAG1E,aAAa,OAAQ,YAEnBb,QAAUuF,mDAIV+T,SACEjf,KAAK2F,gDAIR3F,KAAK2F,SAAW3F,KAAK2F,QAAQ8D,iBAC3B9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,wDAKrCW,qBACAjF,SAAS,WAAYrB,mDAIrB2C,MAAQ3C,KAAKJ,MAAM6D,cAAcoV,cAAc7Y,yCAI1CqI,WACL4W,UAEDjf,KAAK4W,aAAevO,EAAM,UAExB6W,cAEClf,KAAK2F,QAAQqC,iBAAiBrC,QAAQsC,YAAYjI,KAAK2F,QAAQqC,iBAEhE3G,SAAS,oBAAqBrB,WAE9B6Y,qBAEAjC,aAAc,OAEdhX,MAAM6D,cAAcoB,SAASsa,eAAenf,MAE9CqI,QACGoW,uBAGDpd,SAAS,aAAcrB,MAEzBA,KAAKJ,MAAM6B,QAAQ2d,mBAChBxf,MAAM6B,QAAQ2d,aAAapf,KAAK+C,qBAGjC1B,SAAS,mBAAoBrB,gBAE7BJ,MAAM6D,cAAcoB,SAASwa,iBAAiBrf,wDAK/CwQ,mBAAoB,EAEtBxQ,KAAK2F,SAAyC,OAA9B3F,KAAK2F,QAAQ8K,mBAC1BgO,iBAAgB,+CAKjB7H,aAAc,oDAIdpG,mBAAoB,uCAGb8O,QACP1I,aAAc,OACdpG,mBAAoB,EAErBxQ,KAAK6e,oBACHhZ,OAAS,OACTyD,aAAe,IAGlBtJ,KAAK2F,SAAyC,OAA9B3F,KAAK2F,QAAQ8K,mBAC1BwK,YAAW,QAGZ5Z,SAAS,eAAgBrB,yCAIpBqI,OAEVyG,EADIyQ,EAAY,EAGbvf,KAAKJ,MAAM6B,QAAQ+d,eAChB3Z,OAAS7F,KAAKJ,MAAM6B,QAAQ+d,WAEjC1Q,EAAY9O,KAAKJ,MAAM6B,QAAQge,cAAgBzf,KAAK2F,QAAQiJ,aAAe,OAEtEjM,MAAMC,SAAQ,SAASC,OACvBgD,EAAShD,EAAKwZ,YACfxW,EAAS0Z,IACXA,EAAY1Z,WAKRA,OADHwC,EACY6H,KAAKG,IAAIkP,EAAWzQ,GAEpB9O,KAAK6e,aAAe7e,KAAK6F,OAASqK,KAAKG,IAAIkP,EAAWzQ,SAIjExF,aAAetJ,KAAK6F,OAAS7F,KAAK6F,OAAS,KAAO,QAClDiZ,YAAc9e,KAAK2F,QAAQ4D,0DAK3B5G,MAAMC,SAAQ,SAASC,GAC3BA,EAAK6c,oBAGDlP,mBAAoB,iDAIpB7N,MAAMC,SAAQ,SAASC,GAC3BA,EAAK8c,yDAKStX,GACZA,IAAUrI,KAAKJ,MAAM6B,QAAQ+d,gBAC1B9O,uBAGDC,WAAWtI,QAEXuI,kDAII/K,EAAQwC,IACdrI,KAAK6F,QAAUA,GAAUwC,UAEtBwW,cAAe,OAEfhZ,OAASA,OACTyD,aAAezD,EAASA,EAAS,KAAO,QAExC+K,qBAGAkO,YAAc9e,KAAK2F,QAAQ4D,yDAM1BvJ,KAAK8e,sDAKL9e,KAAK2F,QAAQsD,+CAIVpG,OACNiN,EAAQ9P,KAAK2C,MAAM+I,QAAQ7I,GAE5BiN,GAAS,QACNnN,MAAMoN,OAAOD,EAAO,mCAKnBjQ,QACFA,KAAOG,KAAKsB,MAAM,uBAAwB,CAACtB,KAAMH,QAAOM,EAAWN,QAEnEwB,SAAS,sBAAuBrB,yCAI3B4f,OAGVC,SAFI7c,EAAUhD,KAAK2F,SAAWuM,EAAQsD,UAAUxV,KAAK2F,SACrDma,EAAW,UAGJ,IAAI/O,SAAQ,SAACC,EAASC,OAgBvB,IAAI8O,IAdiB,iBAAhBH,IACTA,EAAcI,KAAKC,MAAML,IAG1B/X,EAAKxG,SAAS,uBAAwBwG,GAEnCA,EAAK1G,WAAW,uBAClB2e,EAAWtU,OAAOqG,OAAOiO,EAAUjY,EAAKhI,MACxCigB,EAAWtU,OAAOqG,OAAOiO,EAAUF,IAGpCC,EAAahY,EAAKvG,MAAM,oBAAqB,CAACuG,EAAMiY,EAAUF,GAAc,KAAMA,GAIjF/X,EAAKhI,KAAKkgB,GAAYF,EAAWE,OAM7B,IAAIA,KAHTlY,EAAKxG,SAAS,sBAAuBwG,GAGhB+X,EAAa,CAEnB/X,EAAKjI,MAAM6D,cAAcyc,sBAAsBH,GAErDnd,SAAQ,SAACf,OACZgB,EAAOgF,EAAK4R,QAAQ5X,EAAOY,eAE5BI,EAAK,KACHnB,EAAQG,EAAOuE,cAAcyZ,GAC9Bhd,EAAKoC,YAAcvD,IACrBmB,EAAKyF,oBAAoB5G,GAEtBsB,GACFH,EAAK0F,oBAQPvF,GACF6E,EAAK4W,iBAAgB,GAElB5W,EAAKjI,MAAM6B,QAAQ2d,cACrBvX,EAAKjI,MAAM6B,QAAQ2d,aAAavX,EAAK9E,kBAGtC8E,EAAK+O,aAAc,EACnB/O,EAAKhC,OAAS,EACdgC,EAAKyB,aAAe,IAGrBzB,EAAKxG,SAAS,mBAAoBwG,EAAM7E,EAAS4c,GAIjD/X,EAAKa,iBAAiB,aAAcb,EAAK9E,gBAEtC8E,EAAKc,mBAAmB,gBAC1Bd,EAAKa,iBAAiB,cAAeb,EAAKjI,MAAMgJ,WAAWvD,WAG5D2L,uCAIMoN,UACJA,EACKpe,KAAKsB,MAAM,oBAAqB,CAACtB,KAAMoe,GAAY,KAAMpe,KAAKH,MAG/DG,KAAKH,qCAGLgC,UAGPA,EAAS7B,KAAKJ,MAAM6D,cAAcK,WAAWjC,GAEzC7B,KAAK4W,kBACHiC,gBAGE7Y,KAAK2C,MAAMuU,MAAK,SAASrU,UACzBA,EAAKhB,SAAWA,0CAMZse,UACLngB,KAAK2C,MAAM2Q,WAAU,SAASzQ,UAC7BA,IAASsd,sCAITjN,UACDlT,KAAK2C,MAAMuU,MAAK,SAACrU,UAChBA,EAAK8C,UAAYuN,+CAKrBlT,KAAK4W,kBACHiC,gBAGC7Y,KAAK2C,+CAIF3C,KAAKJ,MAAMgJ,WAAWwX,eAAepgB,MAAM,KACvC,2CAIJA,KAAKJ,MAAMgJ,WAAWyX,eAAergB,MAAM,KACvC,oCAGL2D,EAAImY,OACTwE,EAAQtgB,KAAKJ,MAAMgJ,WAAW2X,QAAQ5c,GAEvC2c,QACG1gB,MAAMgJ,WAAW4X,cAAcxgB,KAAMsgB,GAAQxE,QAC7Clc,MAAMgJ,WAAW6X,kBAAkB,WAAW,GAAO,IAE1Dzc,QAAQC,KAAK,sCAAuCN,gDAMhDtC,SAAS,aAAcrB,WAEvB0gB,eAEE3P,QAAQC,+CAGHwD,GACAxU,KAAKJ,MAAMgJ,WAAW+X,YAAY3gB,WAEzC4gB,sBAEAhhB,MAAMgJ,WAAWiY,UAAU7gB,KAAMwU,QAEjC0K,mBAEAtI,aAAc,OACdpG,mBAAoB,OACpB7K,SAAU,OAEVtE,SAAS,cAAerB,oDAIxBqB,SAAS,eAAgBrB,oDAI1BmR,EAAYnR,KAAK2C,MAAMW,OAEnBqH,EAAI,EAAGA,EAAIwG,EAAWxG,SACxBhI,MAAM,mDAKPie,sBACA1B,cAEFlf,KAAK2F,QAAQ,MACT3F,KAAK2F,QAAQqC,iBAAiBrC,QAAQsC,YAAYjI,KAAK2F,QAAQqC,YAElEhI,KAAK2F,QAAQ8D,iBACV9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,cAItCA,SAAU,OACVvF,QAAU,6CAIRJ,KAAKI,QAAQ0gB,QAAS,gDAKzB9gB,KAAK+F,iBACHA,UAAY,IAAImY,EAAale,OAG5BA,KAAK+F,iBA1amBpG,GCDZohB,2CACRnhB,yCACLA,IAEDyU,iBAAmB,SAEnByB,UAAY,IACZM,WAAa,IAEbN,UAAY,IACZM,WAAa,0DAIdzQ,EAAU3F,KAAKoU,aAGbzO,EAAQqC,YAAYrC,EAAQsC,YAAYtC,EAAQqC,YAEtDrC,EAAQmQ,UAAY,EACpBnQ,EAAQyQ,WAAa,EAErBzQ,EAAQe,MAAMZ,SAAW,GACzBH,EAAQe,MAAMoI,UAAY,GAC1BnJ,EAAQe,MAAMI,QAAU,GACxBnB,EAAQe,MAAMsa,WAAa,mDAIvBrb,EAAU3F,KAAKoU,aACnB6M,GAAmB,OAEd1Q,OAAO3N,SAAQ,SAACwC,EAAK0K,GACzBjI,EAAKqZ,SAAS9b,EAAK0K,GACnBnK,EAAQuC,YAAY9C,EAAI7C,cACxB6C,EAAI6V,YAAW,GAEC,UAAb7V,EAAIrD,OACNkf,GAAmB,MAKpBtb,EAAQe,MAAMZ,SADZmb,EACuBjhB,KAAKJ,MAAM6D,cAAce,WAAa,KAEtC,wCAKd8P,QACPQ,iBACAE,aAEFV,GACFA,kDAIoBlP,OACjB+b,EAASjP,EAAQuD,SAASrQ,EAAI7C,cAAcyE,YAEvCkJ,KAAK+I,IAAIjZ,KAAKkU,gBAAgB4B,UAAYqL,GAAUjR,KAAK+I,IAAIjZ,KAAKkU,gBAAgB4B,UAAY9V,KAAKkU,gBAAgBtF,aAAeuS,wCAGhI/b,OACPwP,EAAQxP,EAAI7C,kBAEX2R,gBAAgB4B,UAAY5D,EAAQuD,SAASb,GAAO5N,IAAMkL,EAAQuD,SAASzV,KAAKkU,iBAAiBlN,IAAMhH,KAAKkU,gBAAgB4B,8CAGtHpB,UACJ1U,KAAKuQ,cAxE6B0D,GCAtBmN,2CACRxhB,yCACLA,IAEDyU,iBAAmB,SAEnByB,UAAY,IACZM,WAAa,IAEbiL,cAAgB,KAEhBC,QAAU,IACVC,WAAa,IAEbC,iBAAmB,IACnBC,oBAAsB,IAEtBC,WAAa,IACbC,cAAgB,IAEhBC,mBAAqB,KAErBC,iBAAmB,IAEnBC,uBAAyB,KACzBC,wBAA0B,IAE1BC,eAAiB,KACjBC,kBAAoB,2DAQrBtc,EAAU3F,KAAKoU,aAGbzO,EAAQqC,YAAYrC,EAAQsC,YAAYtC,EAAQqC,YAEtDrC,EAAQe,MAAMqI,WAAa,GAC3BpJ,EAAQe,MAAMwb,cAAgB,GAE9Bvc,EAAQe,MAAMoI,UAAY,GAC1BnJ,EAAQe,MAAMI,QAAU,GACxBnB,EAAQe,MAAMsa,WAAa,QAEtB9M,gBAAgB4B,UAAY,OAC5B5B,gBAAgBkC,WAAa,OAE7BN,UAAY,OACZM,WAAa,OAEbkL,QAAU,OACVC,WAAa,OACbG,WAAa,OACbC,cAAgB,OAChBH,iBAAmB,OACnBC,oBAAsB,4CAItBU,0DAGO7N,WACRwB,EAAY9V,KAAKkU,gBAAgB4B,UACjCsM,GAAS,EACTC,GAAY,EAEZjb,EAAOpH,KAAKJ,MAAMgJ,WAAWwN,WAE7B7F,EAAOvQ,KAAKuQ,OAER5F,EAAI3K,KAAKshB,QAAS3W,GAAK3K,KAAKuhB,WAAY5W,OAE5C4F,EAAK5F,GAAG,KACNqO,EAAOlD,EAAYvF,EAAK5F,GAAGpI,aAAawT,gBAE3B,IAAdsM,GAAuBnS,KAAK+I,IAAID,GAAQqJ,SAC1CA,EAAYrJ,EACZoJ,EAASzX,EAOZ4F,EAAK3N,SAAQ,SAACwC,GACbA,EAAIkd,wBAGFhO,GACFA,SAGI6N,oBAA+B,IAAXC,EAAmBpiB,KAAKuQ,KAAKjN,OAAS,EAAI8e,GAAS,EAAMC,GAAa,QAE1F/G,cAAclU,yCAGNA,QACRxH,MAAMgJ,WAAW+R,iBAAiBvT,sCAG7BJ,EAAKyN,OACX8N,EAAUvb,EAAMhH,KAAKwhB,iBACrBgB,EAAaxb,EAAMhH,KAAKyhB,oBACxBgB,EAAiC,EAAxBziB,KAAK6hB,iBACdtR,EAAOvQ,KAAKuQ,eAEXuF,UAAY9O,GAEbub,EAAUE,GAAUD,EAAaC,EAAO,KAEvCrb,EAAOpH,KAAKJ,MAAMgJ,WAAWwN,gBAC5B+L,mBAAmBjS,KAAKC,MAAOnQ,KAAKkU,gBAAgB4B,UAAY9V,KAAKkU,gBAAgB2B,aAAgBtF,EAAKjN,cAC1GgY,cAAclU,QAGhBqN,GAEC8N,EAAU,QACPG,WAAWnS,GAAOgS,GAGrBC,EAAa,IAEZxiB,KAAK2iB,iBAAmB3iB,KAAK8V,UAAY9V,KAAK6hB,sBAC3Ce,iBAAiBrS,GAAOiS,QAExBf,oBAAsBzhB,KAAK8V,aAK/B0M,GAAc,QACXK,cAActS,EAAMiS,GAIvBD,GAAW,IAEVviB,KAAK8V,UAAY9V,KAAK6hB,sBACnBiB,cAAcvS,EAAMgS,QAEpBf,iBAAmBxhB,KAAK8V,kDAQ5B+L,iBAAmB7hB,KAAKJ,MAAM6B,QAAQshB,sBAAwB/iB,KAAKkU,gBAAgBtF,2DAGnExJ,OACjBiQ,EAAWrV,KAAKuQ,OAAO7E,QAAQtG,WAE1B8K,KAAK+I,IAAIjZ,KAAKshB,QAAUjM,GAAYnF,KAAK+I,IAAIjZ,KAAKuhB,WAAalM,wCAG7DjQ,OACP0K,EAAQ9P,KAAKuQ,OAAO7E,QAAQtG,GAE7B0K,GAAS,QACNqS,mBAAmBrS,GAAO,uCAIrB4E,OACPsO,EAAUhjB,KAAKkU,gBAAgB4B,UACnCmN,EAAajjB,KAAKkU,gBAAgBtF,aAAeoU,EACjDE,GAAW,EACXd,EAAS,EACTe,EAAY,EACZ5S,EAAOvQ,KAAKuQ,UAETmE,EACF0N,EAASpiB,KAAKshB,QACd6B,EAAYnjB,KAAKuhB,oBAEb,IAAI5W,EAAI3K,KAAKshB,QAAS3W,GAAK3K,KAAKuhB,WAAY5W,OAC5C4F,EAAK5F,MACHuY,EAYC,MACDD,EAAa1S,EAAK5F,GAAGpI,aAAawT,WAAa,SACjDoN,EAAYxY,UAbTqY,EAAUzS,EAAK5F,GAAGpI,aAAawT,WAAc,EAChDqM,EAASzX,MACL,IACJuY,GAAW,IAERD,EAAa1S,EAAK5F,GAAGpI,aAAawT,WAAa,SACjDoN,EAAYxY,SAgBX4F,EAAK6S,MAAMhB,EAAQe,EAAY,8CAQpBhO,EAAUkO,EAAW/N,OACnC3P,EAAU3F,KAAKoU,aACnBkP,EAAStjB,KAAKkU,gBACdqP,EAAS,EACTC,EAAa,EACbC,EAAiB,EACjBC,EAAe,EACf/Y,EAAI,EACJ4F,EAAOvQ,KAAKuQ,OACZoT,EAAYpT,EAAKjN,OACjBsgB,EAAkB5jB,KAAKkU,gBAAgBtF,gBAIvC0G,EAASA,GAAU,EAFnBH,EAAWA,GAAY,EAMlB,MACExP,EAAQqC,YAAYrC,EAAQsC,YAAYtC,EAAQqC,aAGtDyb,GAAkBE,EAAYxO,EAAW,GAAKnV,KAAKqhB,eAE/BuC,IACnBzO,GAAYjF,KAAKW,MAAM+S,EAAkBH,GAAkBzjB,KAAKqhB,gBAClD,IACblM,EAAW,GAMbA,GADAoO,EAASrT,KAAKI,IAAIJ,KAAKG,IAAIH,KAAKC,MAAMnQ,KAAK6hB,iBAAmB7hB,KAAKqhB,eAAiBrhB,KAAK+hB,yBAA0B5M,aAf9G2C,WAmBH6L,GAAazR,EAAQsD,UAAUxV,KAAKkU,iBAAiB,UAClDoN,QAAUnM,OAEVoM,WAAapM,EAAU,GAEpBqO,GAAcI,EAAkB5jB,KAAK6hB,kBAAoBlX,EAAI3K,KAAK8hB,yBAA2B9hB,KAAKuhB,WAAaoC,EAAW,GAAE,KAGnInE,EAFI1P,EAAQ9P,KAAKuhB,WAAa,EAC9Bnc,EAAMmL,EAAKT,QAGNoR,SAAS9b,EAAK0K,GAEnBnK,EAAQuC,YAAY9C,EAAI7C,cAExB6C,EAAI6V,aAEA7V,EAAIoL,mBACPpL,EAAIqZ,iBAAgB,GAGrBe,EAAYpa,EAAIiX,YAEb1R,EAAI4Y,EACNG,GAAgBlE,EAEhBgE,GAAchE,EAGZA,EAAYxf,KAAK6hB,wBACdA,iBAA+B,EAAZrC,QAGpB+B,aACL5W,IAGGwK,QAQEuM,WAAc2B,EAA6CrjB,KAAKqhB,cAAgBrhB,KAAKshB,QAAWhM,EAAtEtV,KAAK8V,UAAY4N,OAC3C/B,cAAgB3hB,KAAKuhB,YAAcoC,EAAU,EAAI,EAAIzT,KAAKG,IAAIrQ,KAAK2iB,iBAAmB3iB,KAAK0hB,WAAa8B,EAAaE,EAAc,UARnIhC,WAAa,OAEbL,cAAgBnR,KAAKC,OAAOqT,EAAaE,GAAgB/Y,QACzDgX,cAAgB3hB,KAAKqhB,eAAiBsC,EAAY3jB,KAAKuhB,WAAY,QAEnEoB,iBAAmBe,EAAeF,EAAaxjB,KAAK2hB,cAAgBiC,GAM1Eje,EAAQe,MAAMqI,WAAa/O,KAAK0hB,WAAa,KAC7C/b,EAAQe,MAAMwb,cAAgBliB,KAAK2hB,cAAgB,KAEhD0B,SACGvN,UAAY9V,KAAK0hB,WAAcgC,EAAgBpO,GAAUtV,KAAKkU,gBAAgBkH,YAAcpb,KAAKkU,gBAAgB9D,YAAcpQ,KAAKkU,gBAAgB3K,aAAeqa,EAAkB,SAGtL9N,UAAY5F,KAAKI,IAAItQ,KAAK8V,UAAW9V,KAAKkU,gBAAgB2B,aAAe+N,GAG3E5jB,KAAKkU,gBAAgBkH,YAAcpb,KAAKkU,gBAAgBjL,aAAeoa,SACpEvN,WAAa9V,KAAKkU,gBAAgB3K,aAAeqa,QAGlDpC,iBAAmBxhB,KAAK8V,eACxB2L,oBAAsBzhB,KAAK8V,UAEhCwN,EAAOxN,UAAY9V,KAAK8V,eAEnBzU,SAAS,2DAILkP,EAAMsT,WACZjkB,EAAQI,KAAKoU,aACjB0P,EAAY,GACZC,EAAgB,EAChBjU,EAAQ9P,KAAKshB,QAAS,EACtB3W,EAAI,EAGA3K,KAAKshB,SADE,KAELlc,EAAMmL,EAAKT,GACf0P,SAAW5I,cAERxR,GAAOuF,EAAI3K,KAAK4hB,6BAClBpC,EAAYpa,EAAIiX,aAAerc,KAAKqhB,cACpCzK,EAAcxR,EAAIwR,cAEfiN,GAAiBrE,cAEd0B,SAAS9b,EAAK0K,GACnBlQ,EAAM8a,aAAatV,EAAI7C,aAAc3C,EAAMoI,YAEvC5C,EAAIwR,aAAgBxR,EAAIoL,mBAC3BsT,EAAUhhB,KAAKsC,GAGhBA,EAAI6V,aAEArE,IACH4I,EAAYpa,EAAI7C,aAAagH,cAEdvJ,KAAK6hB,wBACdA,iBAA+B,EAAZrC,GAI1BqE,GAAiBrE,EACjBuE,GAAiBvE,OAEZ8B,UACLxR,IACAnF,kBAeYmZ,iBAAU,MACrBpT,uBAGAsT,yBAAyBF,GAE3BC,SACGrC,YAAcqC,EAEhB/jB,KAAK0hB,WAAa,SACfA,WAAa5R,EAAQ9P,KAAKqhB,eAG7BvR,EAAQ,SACL4R,WAAa,GAGnB9hB,EAAM8G,MAAMqI,WAAa/O,KAAK0hB,WAAa,UACtCF,kBAAoBuC,yCAIbxT,EAAMsT,WACfI,EAAgB,GACpBF,EAAgB,EAChBpZ,EAAI,IAEO,KACNvF,EAAMmL,EAAKvQ,KAAKshB,SACpB9B,cAEGpa,GAAOuF,EAAI3K,KAAK4hB,+BAGfiC,IAFHrE,EAAYpa,EAAIiX,aAAerc,KAAKqhB,2BAG9BC,UAELuC,GAAiBrE,EACjBuE,GAAiBvE,EAEjByE,EAAcnhB,KAAKsC,GACnBuF,kBASasZ,iBAAc,KACzBrP,OAAYrS,aAEbqS,EAAMnL,YACRmL,EAAMnL,WAAWxB,YAAY2M,GAI5BmP,SACGrC,YAAcqC,OACd3P,aAAa1N,MAAMqI,WAAa/O,KAAK0hB,WAAa,UAClDF,kBAAoBxhB,KAAKshB,QAAUyC,EAAgBA,EAAgB/jB,KAAK6hB,wDAIjEtR,EAAMsT,WACfjkB,EAAQI,KAAKoU,aACjB0P,EAAY,GACZC,EAAgB,EAChBjU,EAAQ9P,KAAKuhB,WAAa,EAC1B5W,EAAI,IAEO,KACNvF,EAAMmL,EAAKT,GACf0P,SAAW5I,cAERxR,GAAOuF,EAAI3K,KAAK4hB,6BAClBpC,EAAYpa,EAAIiX,aAAerc,KAAKqhB,cACpCzK,EAAcxR,EAAIwR,cAEfiN,GAAiBrE,cAEd0B,SAAS9b,EAAK0K,GACnBlQ,EAAMsI,YAAY9C,EAAI7C,cAElB6C,EAAIwR,aAAgBxR,EAAIoL,mBAC3BsT,EAAUhhB,KAAKsC,GAGhBA,EAAI6V,aAEArE,IACH4I,EAAYpa,EAAI7C,aAAagH,cAEdvJ,KAAK6hB,wBACdA,iBAA+B,EAAZrC,GAI1BqE,GAAiBrE,EACjBuE,GAAiBvE,OAEZ+B,aACLzR,IACAnF,kBASamZ,iBAAU,MACrBpT,uBAGAsT,yBAAyBF,GAE3BC,SACGpC,eAAiBoC,GAEnB/jB,KAAK2hB,cAAgB,GAAK7R,GAASS,EAAKjN,OAAQ,UAC7Cqe,cAAgB,GAGtB/hB,EAAM8G,MAAMwb,cAAgBliB,KAAK2hB,cAAgB,UAC5CF,qBAAuBsC,4CAIbxT,EAAMsT,WAClBI,EAAgB,GACpBF,EAAgB,EAChBpZ,EAAI,IAEO,KACNvF,EAAMmL,EAAKvQ,KAAKuhB,YACpB/B,cAEGpa,GAAOuF,EAAI3K,KAAK4hB,+BAGfiC,IAFHrE,EAAYpa,EAAIiX,aAAerc,KAAKqhB,2BAG9BE,aAELsC,GAAiBrE,EACjBuE,GAAiBvE,EAEjByE,EAAcnhB,KAAKsC,GACnBuF,kBASasZ,iBAAc,KACzBrP,OAAYrS,aAEbqS,EAAMnL,YACRmL,EAAMnL,WAAWxB,YAAY2M,GAI5BmP,SACGpC,eAAiBoC,EAEnB/jB,KAAK2hB,cAAgB,SAClBA,cAAgB,QAGjBvN,aAAa1N,MAAMwb,cAAgBliB,KAAK2hB,cAAgB,UACxDF,qBAAuBsC,oDAILxT,aACTA,kCAAK,SACfI,sDAGUJ,kCAAK,SACfK,uDApjByCqD,GCK3BiQ,2CAERtkB,yCACLA,IAED+F,QAAUmE,EAAKqa,wBACf/P,aAAetK,EAAKsa,uBACpBC,YAAcva,EAAKsa,uBACnBE,YAAc,OACdC,oBAAsB,OAEtBC,aAAc,IACdC,WAAa,YACbC,aAAc,IAEdnU,KAAO,KACPoU,mBAAqB,KACrBC,WAAa,KACbC,gBAAkB,IAElBC,YAAc,KACdC,iBAAmB,IAEnBjP,UAAY,IACZM,WAAa,IAEbjH,cAAe,IAEf3F,aAAc,IACdwb,0BAA2B,IAC3BC,6BAA8B,IAE9BC,aAAe,KACfC,gBAAkB,KAElBtgB,SAAW,mEAMZqG,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,yBACjBuD,EAAG1E,aAAa,WAAY,GAC5B0E,EAAG1E,aAAa,OAAQ,YAEjB0E,mDAIHA,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,mBACjBuD,EAAG1E,aAAa,OAAQ,YAEjB0E,qDAKqC,iBAAlClL,KAAKJ,MAAM6B,QAAQ6iB,YAAwB,KAChDpZ,EAAK7E,SAASC,cAAc,OAChC4E,EAAGxD,UAAUC,IAAI,6BAEbyG,EAAW/H,SAASC,cAAc,OACtC8H,EAAS1G,UAAUC,IAAI,kCACvByG,EAAStG,UAAY9H,KAAKJ,MAAM6B,QAAQ6iB,YAExCpZ,EAAGhD,YAAYkG,QAEVmW,oBAAsBnW,OACtBkW,YAAcpZ,+CAMblL,KAAK2F,yDAKL3F,KAAKoU,oDAIEhP,EAAKwX,UAChBA,EACK5c,KAAK4kB,WAAWlZ,QAAQtG,GAExBpF,KAAKuQ,KAAK7E,QAAQtG,wDAKrBggB,6BACA7K,0BAGA5U,QAAQuC,YAAYlI,KAAKoU,mBAEzBoQ,aAAc,OAGd7e,QAAQiH,iBAAiB,UAAU,eACnCxF,EAAOS,EAAKlC,QAAQyQ,WACxBiP,EAAUxd,EAAKuO,WAAahP,EAC5BJ,EAAMa,EAAKlC,QAAQmQ,UACnBwP,EAASzd,EAAKiO,UAAY9O,EAGvBa,EAAKuO,YAAchP,IACrBS,EAAKuO,WAAahP,EAElBS,EAAKxG,SAAS,oBAAqB+F,EAAMie,GACzCxd,EAAKa,iBAAiB,mBAAoBtB,EAAMie,GAEhDxd,EAAK0d,wBAIH1d,EAAKiO,WAAa9O,IACpBa,EAAKiO,UAAY9O,EAEjBa,EAAKhD,SAAS2gB,WAAWxe,EAAKse,GAE9Bzd,EAAKxG,SAAS,kBAAmB2F,EAAKse,GACtCzd,EAAKa,iBAAiB,iBAAkB1B,EAAKse,uCAMxCpS,oBACc,UAAlBG,EAAOH,GAeD,MAAOA,IAIHlT,KAAKuQ,KAAK2G,MAAK,SAAC9R,UACpBA,EAAIvF,KAAKiN,EAAKlN,MAAM6B,QAAQqO,QAAUoD,OAG9B,GAtBbA,aAAmB0L,EAEd1L,EACCA,aAAmBgL,EAEpBhL,EAAQsJ,aAAc,EACE,oBAAhBC,aAA+BvJ,aAAmBuJ,aAErDzc,KAAKuQ,KAAK2G,MAAK,SAAC9R,UACpBA,EAAI7C,eAAiB2Q,OAiBxB,+CAGarT,UACRG,KAAKuQ,KAAK2G,MAAK,SAAC9R,UACpBA,EAAIvF,OAASA,OAGL,6CAGEsV,EAAUyH,UACzBA,EACK5c,KAAK4kB,WAAWzP,GAEhBnV,KAAKuQ,KAAK4E,uCAIP/P,EAAK+P,EAAUC,UACnBpV,KAAK6E,SAAS6Q,oBAAoBtQ,EAAK+P,EAAUC,mCAIjDvV,EAAM4lB,EAAkB1lB,qBACxB,IAAIgR,SAAQ,SAACC,EAASC,GACzBwU,GAAoBlY,EAAKoH,iBAAiBrR,OACzCiK,EAAK3N,MAAM6B,QAAQikB,WACrBnY,EAAKoY,eAAe9lB,GAAM,GAE1B0N,EAAKqY,oBAAmB,WACvBrY,EAAKoY,eAAe9lB,OAInB0N,EAAK3N,MAAM6B,QAAQokB,aAAe9lB,GAAkBwN,EAAK3N,MAAMgX,aACjErJ,EAAK3N,MAAM6D,cAAcqiB,2BAA2BjmB,GAErD0N,EAAKyQ,cAELzQ,EAAKoY,eAAe9lB,IAGrBmR,8CAIanR,EAAM4lB,mBACf/c,iBAAiB,iBAAkB7I,QAEnCkmB,gBAEF/S,MAAMC,QAAQpT,SACXwB,SAAS,kBAAmBxB,GAEjCA,EAAK+C,SAAQ,SAACiH,EAAKc,MACfd,GAAsB,WAAfwJ,EAAOxJ,GAAiB,KAC7BzE,EAAM,IAAIwZ,EAAI/U,EAAKmE,GACvBA,EAAKuC,KAAKzN,KAAKsC,QAEfpB,QAAQC,KAAK,+FAAgG4F,WAI1G4W,mBAAkB,GAAO,EAAOgF,QAEhCpkB,SAAS,iBAAkBxB,QAC3B6I,iBAAiB,gBAAiB7I,IAEvCmE,QAAQ4N,MAAM,yGAA+G/R,GAAM,eAAgBA,gDAK/IwB,SAAS,kBAETkP,KAAK3N,SAAQ,SAACwC,GAClBA,EAAI4gB,eAGAzV,KAAO,QACPqU,WAAa,QACbD,mBAAqB,QACrBE,gBAAkB,OAClBC,YAAc,QACdC,iBAAmB,OAEnBxI,oDAGInX,EAAKoP,OACVyR,EAAWjmB,KAAKuQ,KAAK7E,QAAQtG,GACjC8gB,EAAclmB,KAAK4kB,WAAWlZ,QAAQtG,GAEnC8gB,GAAe,QACZtB,WAAW7U,OAAOmW,EAAa,GAGlCD,GAAY,QACT1V,KAAKR,OAAOkW,EAAU,QAGvBE,cAAcnmB,KAAK4kB,iBAEnBwB,oBAAmB,SAAC7V,OACpB8V,EAAe9V,EAAK7E,QAAQtG,GAE7BihB,GAAgB,GAClB9V,EAAKR,OAAOsW,EAAc,MAIxB7R,QACEoR,0BAGDU,4BAEA5d,iBAAiB,aAActD,EAAIrC,gBAEpC/C,KAAK+kB,uBACHwB,mBAGHvmB,KAAK2I,mBAAmB,qBACrBD,iBAAiB,cAAe1I,KAAKqF,0CAIrCxF,EAAM2mB,EAAK1W,EAAO0E,UACdxU,KAAKymB,aAAa5mB,EAAM2mB,EAAK1W,EAAO0E,mCAKvC3U,EAAM2mB,EAAK1W,cAElBS,EAAO,UAEA,IAAIQ,SAAQ,SAACC,EAASC,GAC5BuV,EAAMnY,EAAKqY,cAAcF,GAErBxT,MAAMC,QAAQpT,KACjBA,EAAO,CAACA,IAGAA,EAAKyD,aAEM,IAATwM,GAAwB0W,QAA0B,IAAV1W,IAA0B0W,IAC5E3mB,EAAK8mB,UAGN9mB,EAAK+C,SAAQ,SAAC2Q,EAAM5I,OACfvF,EAAMiJ,EAAKuY,OAAOrT,EAAMiT,EAAK1W,GAAO,GACxCS,EAAKzN,KAAKsC,GACViJ,EAAKhN,SAAS,YAAa+D,EAAKvF,EAAM2mB,EAAK1W,MAG5CzB,EAAKoS,mBAAkB,GAAO,GAAO,GAErCpS,EAAKiY,uBAEF/V,EAAKjN,QACP+K,EAAKwY,oBAGN7V,EAAQT,4CAIIiW,eACK,IAARA,IACTA,EAAMxmB,KAAKJ,MAAM6B,QAAQqlB,WAGf,QAARN,IACFA,GAAM,GAGI,WAARA,IACFA,GAAM,GAGAA,uCAGK3mB,EAAM2mB,EAAK1W,EAAO0E,OAI9B0R,EAAaa,EAHT3hB,EAAMvF,aAAgB+e,EAAM/e,EAAO,IAAI+e,EAAI/e,GAAQ,GAAIG,MAC3DgH,EAAMhH,KAAK0mB,cAAcF,GACzBP,GAAY,SAGRnW,IACHiX,EAAc/mB,KAAKsB,MAAM,sBAAuB,CAAC8D,EAAK4B,GAAM,KAAM,CAAC8I,MAAAA,EAAO9I,IAAAA,IAE1E8I,EAAQiX,EAAYjX,MACpB9I,EAAM+f,EAAY/f,UAGC,IAAV8I,IACTA,EAAQ9P,KAAKugB,QAAQzQ,KAGtBA,EAAQ9P,KAAKsB,MAAM,mBAAoB,CAAC8D,EAAK0K,EAAO9I,GAAM,KAAM8I,MAG/DmW,EAAWjmB,KAAKuQ,KAAK7E,QAAQoE,IAG3BA,GAASmW,GAAY,GACvBC,EAAclmB,KAAK4kB,WAAWlZ,QAAQoE,QAEjCsW,oBAAmB,SAAS7V,OAC5B8V,EAAe9V,EAAK7E,QAAQoE,GAE7BuW,GAAgB,GAClB9V,EAAKR,OAAQ/I,EAAMqf,EAAeA,EAAe,EAAI,EAAGjhB,MAIvD8gB,GAAe,QACZtB,WAAW7U,OAAQ/I,EAAMkf,EAAcA,EAAc,EAAI,EAAG9gB,QAG7DmL,KAAKR,OAAQ/I,EAAMif,EAAWA,EAAW,EAAI,EAAG7gB,IAIlD4B,QAEGof,oBAAmB,SAAS7V,GAChCA,EAAKiD,QAAQpO,WAGTwf,WAAWpR,QAAQpO,QACnBmL,KAAKiD,QAAQpO,UAEbghB,oBAAmB,SAAS7V,GAChCA,EAAKzN,KAAKsC,WAGNwf,WAAW9hB,KAAKsC,QAChBmL,KAAKzN,KAAKsC,SAIZ+gB,cAAcnmB,KAAK4kB,iBAEnBlc,iBAAiB,WAAYtD,EAAIrC,gBAEnC/C,KAAK2I,mBAAmB,qBACrBD,iBAAiB,cAAe1I,KAAKJ,MAAMgJ,WAAWvD,WAGxDmP,QACEoR,qBAGCxgB,kCAGA0X,EAAMnZ,EAAIC,QACZvC,SAAS,WAAYyb,EAAMnZ,EAAIC,QAE/B4c,cAAc1D,EAAMnZ,EAAIC,QAExB0iB,4BAEAjlB,SAAS,YAAayb,EAAMnZ,EAAIC,QAChC8E,iBAAiB,WAAYoU,EAAK/Z,sDAG1B+Z,EAAMnZ,EAAIC,mBAClBojB,eAAehnB,KAAKuQ,KAAMuM,EAAMnZ,EAAIC,QACpCojB,eAAehnB,KAAK4kB,WAAY9H,EAAMnZ,EAAIC,QAE1CwiB,oBAAmB,SAAC7V,GACxBW,EAAK8V,eAAezW,EAAMuM,EAAMnZ,EAAIC,WAGhCvC,SAAS,aAAcyb,EAAMnZ,EAAIC,0CAGxB2M,EAAMuM,EAAMnZ,EAAIC,OAC1ByZ,EAAWD,EAAgB7D,KAE5BuD,IAASnZ,KAEX0Z,EAAY9M,EAAK7E,QAAQoR,KAER,IAEhBvM,EAAKR,OAAOsN,EAAW,IAEvBD,EAAU7M,EAAK7E,QAAQ/H,KAER,EAEXC,EACF2M,EAAKR,OAAOqN,EAAQ,EAAG,EAAGN,GAE1BvM,EAAKR,OAAOqN,EAAS,EAAGN,GAIzBvM,EAAKR,OAAOsN,EAAW,EAAGP,IAKzBvM,IAASvQ,KAAK2U,kBAAiB,CAGjC4E,EAAM6D,EAAUC,EAAYD,EAAUC,EAAW,MAE7C,IAAI1S,EAHA0S,EAAYD,EAAUC,EAAYD,EAGvBzS,GAAK4O,EAAK5O,IACzB4F,EAAK5F,SACFuW,SAAS3Q,EAAK5F,GAAIA,6CAQtBqU,QAAQ,wCAGF5Z,UACJpF,KAAKinB,aAAa7hB,EAAKpF,KAAKuQ,iDAGjBnL,OACd0K,EAAQ9P,KAAK2U,iBAAiBjJ,QAAQtG,UACnC0K,GAAS,GAAIA,yCAGN1K,EAAK8hB,OACfpX,EAAQ9P,KAAKmnB,mBAAmB/hB,GACpCsZ,GAAU,SAGG,IAAV5O,GAAmBA,EAAQ9P,KAAK+kB,iBAAkB,IACpDrG,EAAU1e,KAAK2U,iBAAiB7E,EAAM,KAGpC4O,GAAcA,aAAmBE,GAAwB,OAAhBF,EAAQ3c,KAI7C2c,EAHC1e,KAAKogB,eAAe1B,EAASwI,0CAMvB9hB,EAAK8hB,OACfpX,EAAQ9P,KAAKmnB,mBAAmB/hB,GACpCuZ,GAAU,SAEP7O,IACF6O,EAAU3e,KAAK2U,iBAAiB7E,EAAM,KAGpCoX,IAAWvI,GAAcA,aAAmBC,GAAwB,OAAhBD,EAAQ5c,KAIxD4c,EAHC3e,KAAKqgB,eAAe1B,EAASuI,wCAMzB9hB,EAAKwN,OACbyC,YAEJjQ,EAAMpF,KAAKugB,QAAQnb,MAGlBiQ,EAAWzC,EAAKlH,QAAQtG,KAET,IACPiQ,kCAOFuH,EAAQwB,OACX/a,EAAS,UACNrD,KAAKonB,QAAQxK,GAEfha,SAAQ,SAASwC,GACN,OAAZA,EAAIrD,MACNsB,EAAOP,KAAKsC,EAAIC,QAAQ+Y,GAAa,YAIhC/a,wCAGMuZ,OACTvZ,EAAS,UACNrD,KAAKonB,QAAQxK,GAEfha,SAAQ,SAASwC,GACrB/B,EAAOP,KAAKsC,EAAIrC,mBAGVM,uCAGKuZ,UACD5c,KAAKonB,QAAQxK,GAEZtZ,gDAGI8D,QACXgP,WAAahP,OACbzB,QAAQyQ,WAAahP,OAErB/F,SAAS,oBAAqB+F,uDAGRigB,EAASC,QACb,IAAbA,QACJpC,aAAapiB,KAAK,CAACukB,QAAAA,EAASC,SAAAA,SAC5BpC,aAAaqC,MAAK,SAACC,EAAGC,UACnBD,EAAEF,SAAWG,EAAEH,aAGvBtjB,QAAQ4N,MAAM,gIAIeyV,EAASC,QAChB,IAAbA,QACJnC,gBAAgBriB,KAAK,CAACukB,QAAAA,EAASC,SAAAA,SAC/BnC,gBAAgBoC,MAAK,SAACC,EAAGC,UACtBD,EAAEF,SAAWG,EAAEH,aAGvBtjB,QAAQ4N,MAAM,sHAKEyV,EAASK,EAAWjC,OACjC7lB,EAAQI,KAAKJ,MACjB+nB,EAAQ,GACR7X,EAAQ,EACR8X,EAAe,CAAC,MAAO,eAAgB,UAAW,kBAAmB,UAI/C,mBAAZP,MACTvX,EAAQ9P,KAAKklB,aAAa5R,WAAU,SAACC,UAC7BA,EAAK8T,UAAYA,OAGb,EACXM,EAAQ,eAELD,IACC5X,GAAS9P,KAAKklB,aAAa5hB,OAAS,EACtCqkB,EAAQ,UAER7X,SAGE,OACJA,EAAQ9P,KAAKmlB,gBAAgB7R,WAAU,SAACC,UAChCA,EAAK8T,UAAYA,OAGb,eAWXrjB,QAAQ4N,MAAM,mDAAoDyV,GAVlEM,EAAQ,kBAELD,IACC5X,GAAS9P,KAAKmlB,gBAAgB7hB,OAAS,EACzCqkB,EAAQ,MAER7X,UASJ6X,EAAQN,GAAW,MACnBvX,EAAQ,EAGN9P,KAAKwJ,cACHxJ,KAAKglB,0BAA6BhlB,KAAKglB,2BAA8BhlB,KAAKglB,yBAAyB2C,QAAUA,GAAS7X,EAAQ9P,KAAKglB,yBAAyBlV,OAAW8X,EAAalc,QAAQic,GAASC,EAAalc,QAAQ1L,KAAKglB,yBAAyB2C,gBACtP3C,yBAA2B,CAC/BqC,QAASA,EACTK,UAAWA,EACXjC,iBAAkBA,EAClBkC,MAAMA,EACN7X,MAAMA,KAMLoC,EAAQsD,UAAUxV,KAAK2F,SACtB8f,OACGG,mBAAmB5lB,KAAK6nB,iBAAiBrnB,KAAKR,KAAMqnB,EAASM,EAAO7X,EAAO2V,UAE3EoC,iBAAiBR,EAASM,EAAO7X,EAAO2V,GAEzC4B,QACEznB,MAAM6D,cAAcoB,SAASoQ,qBAG9B6S,cAEFloB,EAAM6B,QAAQsmB,6BACXnoB,MAAM6D,cAAcoY,QAAO,SAI7BgM,iBAAiBR,EAASM,EAAO7X,EAAO2V,QAGzCpkB,SAAS,4DAICgmB,EAASM,EAAO7X,EAAO2V,eAClCpkB,SAAS,mBAEVgmB,SACE1C,mBAAmB,GAAK3kB,KAAKuQ,KAAK6S,MAAM,IAIvCuE,OACD,UAGA,mBAED,IAAIhd,EAAImF,EAAOnF,EAAI3K,KAAKklB,aAAa5hB,OAAQqH,IAAI,KAChDjG,EAAS1E,KAAKklB,aAAava,GAAG0c,QAAQrnB,KAAK2kB,mBAAmBha,GAAGyY,MAAM,SAEtEuB,mBAAmBha,EAAI,GAAKjG,GAAU1E,KAAK2kB,mBAAmBha,GAAGyY,MAAM,QAGxE+C,cAAcnmB,KAAK2kB,mBAAmB3kB,KAAKklB,aAAa5hB,cAExDgjB,2BAEA,UACLxW,EAAQ,OACHkY,uBAEA,sBACD,IAAIrd,EAAImF,EAAOnF,EAAI3K,KAAKmlB,gBAAgB7hB,OAAQqH,IAAI,KACnDjG,EAAS1E,KAAKmlB,gBAAgBxa,GAAG0c,SAAS1c,EAAI3K,KAAK2U,eAAehK,EAAI,GAAK3K,KAAK4kB,YAAYxB,MAAM,GAAIqC,QAErGwC,eAAevjB,GAAU1E,KAAK2U,eAAehK,EAAI,GAAGyY,MAAM,GAAIzY,+DAUlE3K,KAAKmP,mBACFyV,WAAWhiB,SAAQ,SAACwC,OACpBvC,EAAOuC,EAAIqU,QAAQzH,EAAK7C,cAEzBtM,GACFA,EAAKkG,6DAMK6b,QACRA,WAAaA,OACbC,gBAAkB7kB,KAAK4kB,WAAWthB,uDAKlCwhB,YAAc,QAEdA,YAAYhiB,KAAK9C,KAAK4kB,WAAWxB,MAAM,SAEvC2B,iBAAmB/kB,KAAK8kB,YAAY,GAAGxhB,4DAIrCtD,KAAK8kB,YAAYxhB,8CAIVwhB,EAAahV,OAEvBzM,GAAS,SAEVyM,QAA2C,IAA3B9P,KAAK8kB,YAAYhV,SAC9BgV,YAAYhV,GAASgV,EAC1BzhB,GAAS,SAEJyhB,YAAYhiB,KAAKgiB,GACtBzhB,EAASyM,EAAQ9P,KAAK8kB,YAAYxhB,OAAQ,GAGxCwM,GAAS9P,KAAK8kB,YAAYxhB,OAAQ,SAC/ByhB,iBAAmB/kB,KAAK8kB,YAAY9kB,KAAK8kB,YAAYxhB,OAAQ,GAAGA,QAG/DD,yCAGOyM,eACK,IAATA,EACF9P,KAAK8kB,YAAYxhB,OAAStD,KAAK8kB,YAAY9kB,KAAK8kB,YAAYxhB,OAAQ,GAAK,GAEzEtD,KAAK8kB,YAAYhV,IAAU,0CAIrBxO,EAAO4mB,OACjB3X,EAAQ/E,OAAOqG,OAAO,GAAI7R,KAAK6E,SAAS8R,aAAauR,WAEtD5mB,IACFiP,EAAOvQ,KAAKsB,MAAM,eAAgB,CAAC4mB,GAAW3X,EAAMA,IAG9CA,6CAIW+D,QACbqQ,mBAAmB/hB,QAAQ0R,QAC3BwQ,YAAYliB,QAAQ0R,QAEpByQ,iBAAmB/kB,KAAK8kB,YAAY9kB,KAAK8kB,YAAYxhB,OAAQ,GAAGA,uCAI9DvB,OACHwO,SAEGxO,OACD,SACLwO,EAAOvQ,KAAK4kB,qBAGP,UACLrU,EAAOvQ,KAAKJ,MAAMgJ,WAAW+L,2BAGxB,UACLpE,EAAOvQ,KAAK+Y,gBAAe,GAAO,iBAIlCxI,EAAOvQ,KAAKsB,MAAM,gBAAiBS,EAAM,KAAM/B,KAAKuQ,OAASvQ,KAAKuQ,YAG5DA,6CAKW+D,GACftU,KAAKwJ,YACJ8K,EACFA,SAEK2Q,6BAA8B,QAG/Bvc,iBAAiB,sBACjB7D,SAASqQ,aAAaZ,QACtB5L,iBAAiB,oEAKnBkS,EAEAC,EAAY,SACJsN,QACFC,IAITxN,EAD+C,iBAAtC5a,KAAKJ,MAAM6B,QAAQ4mB,eACdxN,EAAU7a,KAAKJ,MAAM6B,QAAQ4mB,gBAE7BroB,KAAKJ,MAAM6B,QAAQ4mB,sBAI5BxjB,SAAW,IAAI+V,EAAY5a,KAAKJ,MAAOI,KAAK2F,QAAS3F,KAAKoU,mBAC1DvP,SAASoW,aAEVjb,KAAKJ,MAAM+F,QAAQiJ,cAAgB5O,KAAKJ,MAAM6B,QAAQoE,YACpD6e,aAAc,OAEdA,aAAc,GAGpB1gB,QAAQ4N,MAAM,oCAAqChS,MAAM6B,QAAQ4mB,+DAK3DroB,KAAKykB,sDAIP/b,iBAAiB,sBAEjB/C,QAAQmQ,UAAY,OAEpBwS,cAEFtoB,KAAK+kB,uBACFlgB,SAASmQ,aAEXhV,KAAKwkB,mBACFA,aAAc,OACd1L,uBAGDyP,oBAGFvoB,KAAK0kB,kBACHnI,uBAGDlb,SAAS,gBAEVrB,KAAK+kB,uBACHwB,wBAGD7d,iBAAiB,8DAKnB1I,KAAKskB,iBACFlQ,aAAa1N,MAAMI,QAAU,YAE7BsN,aAAa1N,MAAMZ,SAAW9F,KAAKJ,MAAM6D,cAAce,WAAa,2CAO5DxE,KAAKoU,kBAEdyS,yBAEA/Q,UAAY,OACZM,WAAa,OAEbvR,SAASiQ,uDAIX9U,KAAKskB,mBACFA,YAAY9d,aAAa,wBAAyBxG,KAAKykB,iBAEvDliB,aAAa2F,YAAYlI,KAAKskB,kBAC9BiB,oEAKHvlB,KAAKskB,aAAetkB,KAAKskB,YAAY7a,iBAClC6a,YAAY7a,WAAWxB,YAAYjI,KAAKskB,4DAK3CtkB,KAAKskB,aAAetkB,KAAKskB,YAAY7a,kBAClC6a,YAAY5d,MAAMjC,MAAQzE,KAAKJ,MAAM6D,cAAce,WAAa,UAChE+f,oBAAoB7d,MAAMjC,MAAQzE,KAAKJ,MAAMgJ,WAAWjD,QAAQyK,YAAc,UAC9EmU,oBAAoB7d,MAAM2U,WAAarb,KAAKoW,WAAa,uCAIvDhR,EAAK0K,OACT8E,EAAQxP,EAAI7C,aAEbuN,EAAQ,GACV8E,EAAMlN,UAAUC,IAAI,sBACpBiN,EAAMlN,UAAUmN,OAAO,uBAEvBD,EAAMlN,UAAUC,IAAI,qBACpBiN,EAAMlN,UAAUmN,OAAO,sEAMnB+P,WAAWhiB,SAAQ,SAASwC,GAChCA,EAAIqZ,mEAMD+J,EAAgBxoB,KAAK2F,QAAQiJ,gBAGK,SAAnC5O,KAAK6E,SAASwP,iBAA4B,KACxCoU,EAAevY,KAAKC,MAAMnQ,KAAKJ,MAAM6D,cAAclB,aAAauO,wBAAwBjL,QAAU7F,KAAKJ,MAAMqe,eAAiBje,KAAKJ,MAAMqe,cAAcrB,SAAW5c,KAAKJ,MAAMqe,cAAcyK,SAAW1oB,KAAKJ,MAAMqe,cAAc1b,aAAauO,wBAAwBjL,OAAS,IAE9Q7F,KAAK0kB,kBACF/e,QAAQe,MAAMoI,UAAY,eAAiB2Z,EAAc,WACzD9iB,QAAQe,MAAMb,OAAS,eAAiB4iB,EAAc,WACtD9iB,QAAQe,MAAM6Y,UAAY,eAAiBkJ,EAAc,aAEzD9iB,QAAQe,MAAMb,OAAS,QACvBF,QAAQe,MAAMb,OAAU7F,KAAKJ,MAAM+F,QAAQiJ,aAAe6Z,EAAe,UACzE9iB,QAAQmQ,UAAY9V,KAAK8V,gBAG1BjR,SAAS8jB,SAGV3oB,KAAK0kB,aAAe8D,GAAiBxoB,KAAK2F,QAAQiJ,eAClD5O,KAAKmB,WAAW,qBACbE,SAAS,qBAETwa,eAKH0J,mEAKAhV,KAAK3N,SAAQ,SAASwC,GAC1BA,EAAI4X,cAAa,iDAMbxT,aAAc,OACdwb,0BAA2B,+CAK3Bxb,aAAc,EAEhBxJ,KAAKglB,+BACFvE,kBAAkBzgB,KAAKglB,yBAAyBqC,QAASrnB,KAAKglB,yBAAyB0C,UAAW1nB,KAAKglB,yBAAyBS,uBAEhIT,0BAA2B,GAE7BhlB,KAAKilB,kCACFW,0BAIFX,6BAA8B,iCAI5B5c,OAEPjB,EAAOpH,KAAKoW,gBAEPmG,uBAEA3c,MAAMgpB,WAAa5oB,KAAKJ,MAAM+F,QAAQyK,YAEvC/H,OAIEyf,oBAHAlC,0BACAjL,iBAAiBvT,kDAOlBzB,QAAQyQ,WAAa,OACrBzQ,QAAQmQ,UAAY,EAEC,OAAvB9V,KAAKJ,MAAMipB,QAAiB,KAC1BC,EAAQziB,SAAS0iB,YAAY,SACjCD,EAAME,UAAU,UAAU,GAAO,QAC5BrjB,QAAQsjB,cAAcH,aAEtBnjB,QAAQsjB,cAAc,IAAIC,MAAM,kBAxiCAvpB,GCNnBwpB,2CAERvpB,yCACLA,IAEDgd,QAAS,IACTjX,QAAUmE,EAAKxD,kBACf8iB,iBAAmBtf,EAAKuf,2BACxBX,UAAW,wDAIXY,gEAIDpe,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,oBAEVuD,uDAKHA,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,kCAEZhC,QAAQuC,YAAYgD,GAElBA,iDAIJlL,KAAKJ,MAAM6B,QAAQ8nB,uBAEPvpB,KAAKJ,MAAM6B,QAAQ8nB,oBAC3B,SACsC,MAAxCvpB,KAAKJ,MAAM6B,QAAQ8nB,cAAc,QAC9BH,iBAAiBthB,UAAY9H,KAAKJ,MAAM6B,QAAQ8nB,oBAEhDb,UAAW,OACXU,iBAAmB/iB,SAASmjB,cAAcxpB,KAAKJ,MAAM6B,QAAQ8nB,mCAK9D5jB,QAAU3F,KAAKJ,MAAM6B,QAAQ8nB,2DAO7BvpB,KAAK2F,uCAGNA,QACD8jB,gBAEAL,iBAAiBlhB,YAAYvC,QAC7B/F,MAAMgJ,WAAW2T,kDAGf5W,QACF8jB,gBAEA9jB,QAAQ+U,aAAa/U,EAAS3F,KAAK2F,QAAQqC,iBAC3CpI,MAAMgJ,WAAW2T,iDAGhB5W,GACNA,EAAQ8D,WAAWxB,YAAYtC,QAC1B+jB,gDAGKrhB,GACNrI,KAAK2F,QAAQqC,aAAcK,IAC1BrI,KAAK0oB,eACH/iB,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,cAErCiX,QAAS,sCAKX5c,KAAK4c,cACHA,QAAS,EACV5c,KAAK0oB,gBACH9oB,MAAM+F,QAAQuC,YAAYlI,KAAKuC,mBAC/B3C,MAAM+F,QAAQe,MAAMI,QAAU,2CAMhCzF,SAAS,wBAjG2B1B,GCEtBgqB,2CAEP/pB,yCACNA,IAEDsL,GAAK,OAEL0e,aAAe,CAAC,oBAAqB,qBAErCC,gBAAkB,KAElBC,UAAY,CAChB,QACA,WACA,cACA,aACA,aACA,YACA,WACA,YACA,aACA,cAGIC,aAAe,kBACF,uBACD,wBACE,wBACF,YAGZC,eAAiB,KACf,CACLC,WAAW,KACX/nB,OAAO,WAED,CACN+nB,WAAW,KACX/nB,OAAO,YAEA,CACP+nB,WAAW,KACX/nB,OAAO,aAEC,CACR+nB,WAAW,KACX/nB,OAAO,SAIJgoB,gBAAiB,wDAIjBhf,GAAKlL,KAAKJ,MAAM+F,aAEhBwkB,wBACAC,0EAIDC,EAAc,QAEbP,UAAUlnB,SAAQ,SAAC0nB,GACvBD,EAAYC,GAAY,CACvBjD,QAAQ,KACRkD,WAAW,YAIRT,UAAYO,wDAIjB7e,OAAOC,KAAKzL,KAAKgqB,gBAAgBpnB,SAAQ,SAAC1B,GACzC2G,EAAKmiB,eAAe9oB,GAAK+oB,WAAapiB,EAAK2iB,iBAAiBhqB,KAAKqH,EAAM3G,GACvE2G,EAAK7G,UAAUE,EAAM,aAAc2G,EAAKmiB,eAAe9oB,GAAK+oB,oBAGxDC,gBAAiB,2CAGNhpB,EAAK2L,EAAG3K,GACrBlC,KAAKgqB,eAAe9oB,GAAKgB,SAAWA,IAEnClC,KAAKgqB,eAAe9oB,GAAKgB,aACtBb,SAASH,EAAM,cAAe2L,EAAG7M,KAAKgqB,eAAe9oB,GAAKgB,aAG3DuoB,iBAAiBvpB,EAAK2L,QAEtBmd,eAAe9oB,GAAKgB,OAASA,OAE7Bb,SAASH,EAAM,cAAe2L,EAAG3K,6CAIvBhB,EAAK2L,cACjB6d,EAAYlf,OAAOC,KAAKzL,KAAKgqB,gBACjCW,EAAa,KACN,CAAC,aACA,CAAC,SAGTD,EAAYA,EAAUE,QAAO,SAACrX,OACzBsX,EAAQF,EAAWzpB,UAChBqS,IAASrS,KAAS2pB,GAAUA,IAAUA,EAAMC,SAASvX,QAInD3Q,SAAQ,SAAC1B,OACdgB,EAAS4K,EAAKkd,eAAe9oB,GAAKgB,OAEnC4K,EAAKkd,eAAe9oB,GAAKgB,SAC3B4K,EAAKzL,SAASH,EAAM,cAAe2L,EAAG3K,GAEtC4K,EAAKkd,eAAe9oB,GAAKgB,OAAS,oEAOhC4nB,EAAYte,OAAOC,KAAKzL,KAAK8pB,iBACpBte,OAAOuf,OAAO/qB,KAAK+pB,6BAEL,OAAnBiB,WACalB,kCAAU,KAAtBQ,UACHppB,EAAM8pB,EAAO,IAAMV,OAElBlpB,mBAAmBF,EAAKlB,KAAKirB,oBAAoBzqB,KAAKR,KAAMgrB,EAAMV,yCAIpEtpB,UAAU,gBAAiBhB,KAAKkrB,cAAc1qB,KAAKR,mDAGrC+F,EAAW7E,EAAKiqB,OAC/Bb,EAAWtqB,KAAK8pB,UAAU5oB,GAAKqpB,WACnCza,EAAQwa,EAAS5e,QAAQ3F,GACzB8C,GAAU,EAEPsiB,GACY,IAAXrb,IACFwa,EAASxnB,KAAKiD,GACd8C,GAAU,GAGP7I,KAAKmB,WAAW4E,EAAY,IAAM7E,IAClC4O,GAAS,IACXwa,EAASva,OAAOD,EAAO,GACvBjH,GAAU,GAKD,eAAR3H,GAAgC,eAARA,GAA0BlB,KAAKkqB,qBACrDkB,mBAGHviB,QACGwiB,0EAKF,IAAInqB,KAAOlB,KAAK8pB,UAAU,KACzBQ,EAAWtqB,KAAK8pB,UAAU5oB,GAE3BopB,EAASC,WAAWjnB,OAClBgnB,EAASjD,UACZiD,EAASjD,QAAUrnB,KAAKsrB,MAAM9qB,KAAKR,KAAMkB,QACpCgK,GAAG0B,iBAAiB1L,EAAKopB,EAASjD,UAIrCiD,EAASjD,eACNnc,GAAGqgB,oBAAoBrqB,EAAKopB,EAASjD,SAC1CiD,EAASjD,QAAU,qCAMjBtlB,EAAM8K,OACP2e,EAAQ3e,EAAE4e,cAAgB5e,EAAE4e,gBAAmB5e,EAAE2e,KAEjDE,EAAU1rB,KAAK2rB,YAAYH,GAC/BE,EAAU1rB,KAAK4rB,eAAe7pB,EAAM2pB,QAE/BG,cAAc9pB,EAAM8K,EAAG6e,IAEzB1rB,KAAKkqB,gBAA2B,aAARnoB,GAA+B,cAARA,GAA0ByJ,OAAOC,KAAKigB,GAASpoB,aAC3FmnB,iBAAiB,OAAQ5d,uCAIpB2e,gBACPE,EAAU,GAEV3B,EAAeve,OAAOC,KAAKzL,KAAK+pB,kBAErByB,kCAAM,KAAZtgB,UACJxD,EAAYwD,EAAGxD,YAAgBwD,EAAGxD,WAAa,MAEvCA,EAAUkjB,QAAO,SAACrX,UACtBhG,EAAKqc,aAAakB,SAASvX,MAG1BjQ,uBAIOoE,EAAUkjB,QAAO,SAACrX,UAC1BwW,EAAae,SAASvX,sCAGA,KAArBrR,UACRwpB,EAAQ1rB,KAAK+pB,aAAa7nB,IAAWgJ,wEAIpCwgB,EAAQ5K,OAAS4K,EAAQ5K,QAAU4K,EAAQtmB,YACtCsmB,EAAQtmB,IAGTsmB,yCAGO3pB,EAAM2pB,gBAEhBjgB,EAAOD,OAAOC,KAAKigB,GAAS/E,UAChC2D,EAAWtqB,KAAK8pB,UAAU/nB,GAC1B+pB,EAAgB,OAEDrgB,4BAAPvK,UACH6E,SACA7D,EAASwpB,EAAQxqB,GACjB6qB,EAAiB/d,EAAK6b,gBAAgB3oB,MAEvC6qB,GAAkBA,EAAe7pB,SAAWA,EAC9C6D,EAAYgmB,EAAehmB,sBAEpB7E,OACD,UACA,WACFopB,EAASC,WAAWO,SAAS,QAAUR,EAASC,WAAWO,SAAS,SAAWR,EAASC,WAAWO,SAAS,SAG9G/kB,EAFWiI,EAAKpO,MAAMgJ,WAAWmQ,gBAAe,GAE/B7B,MAAK,SAAC9R,UACfA,EAAI7C,eAAiBL,KAG1BwpB,EAAO,KAAWA,EAAO,IAAQjiB,YAAciiB,EAAO,IAAQjiB,WAAWuiB,QAAQ,oBACnFN,EAAQxqB,IAAO,aAKZ,SACFopB,EAASC,WAAWO,SAAS,YAC/B/kB,EAAYiI,EAAKpO,MAAM6D,cAAcK,WAAW5B,cAI5C,OACFooB,EAASC,WAAWO,SAAS,UAC5BY,EAAO,eAAmB9M,EAC5B7Y,EAAY2lB,EAAO,IAAQvL,SAASje,GAEjCwpB,EAAO,KACT1nB,QAAQC,KAAK,kJAQf8B,IACF2lB,EAAQxqB,GAAO6E,EACf+lB,EAAc5qB,GAAO,CACpBgB,OAAOA,EACP6D,UAAUA,8EAKR8jB,gBAAkBiC,EAEhBJ,wCAGM3pB,EAAM8K,EAAG6e,OAClBpB,EAAWtqB,KAAK8pB,UAAU/nB,OAE1B,IAAIb,KAAOwqB,EACXA,EAAQxqB,IAAQopB,EAASC,WAAWO,SAAS5pB,SAC1CG,SAASH,EAAM,IAAMa,EAAM8K,EAAG6e,EAAQxqB,gDAMzC,IAAIA,KAAOlB,KAAK8pB,UAAU,KACzBQ,EAAWtqB,KAAK8pB,UAAU5oB,GAE3BopB,EAASjD,eACNnc,GAAGqgB,oBAAoBrqB,EAAKopB,EAASjD,SAC1CiD,EAASjD,QAAU,cArTyB1nB,GCJ3BssB,wBAERrsB,kBACNA,MAAQA,OAERssB,SAAW,0CAGZnqB,EAAMoqB,EAAU9E,GAChBrnB,KAAKksB,SAASnqB,UACZmqB,SAASnqB,GAAQ,IAGpB/B,KAAKksB,SAASnqB,GAAMoqB,GACtBnoB,QAAQC,KAAK,8EAA+ElC,EAAMoqB,EAAU9E,QAEvG6E,SAASnqB,GAAMoqB,GAAY9E,iCAI3BtlB,EAAMgE,EAAW5D,MACpBnC,KAAKksB,SAASnqB,IAAS/B,KAAKksB,SAASnqB,GAAMI,IAAmD,mBAAnCnC,KAAKksB,SAASnqB,GAAMI,GAAM3B,YAChFR,KAAKksB,SAASnqB,GAAMI,GAAM3B,KAAK,KAAMuF,GAEhC,SAAT5D,GAAmC,iBAATA,GAAsBA,EAAKkV,WAAW,MACjErT,QAAQ4N,MAAM,OAAS7P,EAAO,8BAAgCI,EAAO,8FCvBrDiqB,2CACRxsB,yCACLA,IAEDysB,aAAe,IACfC,SAAU,iFAKXzsB,EAAM0sB,EAAQvU,EAAQwU,EAAS1sB,EAAQC,cACvC0sB,IAAczsB,KAAKqsB,yBAElB3jB,iBAAiB,cAAe7I,IAGjCA,GAA8B,GAArBA,EAAK6L,QAAQ,MAAkC,GAArB7L,EAAK6L,QAAQ,OACnD7L,EAAOmgB,KAAKC,MAAMpgB,IAGhBG,KAAKuB,QAAQ,eAAgB,CAAC1B,EAAM0sB,EAAQvU,EAAQlY,UACjDwsB,SAAU,EAEXxsB,QACE4sB,cAINH,EAASvsB,KAAKsB,MAAM,cAAe,CAACzB,EAAMmY,EAAQlY,GAASysB,GAAU,GAAIA,GAAU,IAEnFA,EAASvsB,KAAK2sB,UAAUJ,EAAQvsB,KAAKJ,MAAM6B,QAAQmrB,gBAEtC5sB,KAAKsB,MAAM,YAAa,CAACzB,EAAM0sB,EAAQvU,EAAQlY,IAAS,EAAOiR,QAAQC,QAAQ,KAE9Ee,MAAK,SAAC8a,GACf7Z,MAAMC,QAAQ4Z,IAAgC,UAAnBxZ,EAAOwZ,KACrCA,EAAWhlB,EAAK8kB,UAAUE,EAAUhlB,EAAKilB,aAAajlB,EAAKjI,MAAM6B,QAAQsrB,yBAGtEC,EAAUnlB,EAAKvG,MAAM,cAAeurB,EAAU,KAAMA,GAErDJ,GAAa5kB,EAAKwkB,cACpBxkB,EAAKolB,cAEU,IAAZD,IACFnlB,EAAKa,iBAAiB,aAAcskB,GACpCnlB,EAAKjI,MAAMgJ,WAAWoW,QAAQgO,EAAUR,OAAmC,IAAnBzsB,GAAkCysB,EAAUzsB,KAGrGiE,QAAQC,KAAK,sJAEN,SAAC2N,GACT5N,QAAQ4N,MAAM,oBAAqBA,GACnC/J,EAAKa,iBAAiB,gBAAiBkJ,GAEnC9R,GACH+H,EAAKqlB,aAGN7f,YAAW,WACVxF,EAAKolB,eACHplB,EAAKjI,MAAM6B,QAAQ0rB,oCAEd,WACRtlB,EAAKykB,SAAU,YAGX5jB,iBAAiB,aAAc7I,GAEhCA,IACHA,EAAO,SAGHD,MAAMgJ,WAAWoW,QAAQnf,EAAM2sB,OAAmC,IAAnBzsB,GAAkCysB,EAAUzsB,GACzFgR,QAAQC,6CAIPub,EAAQa,OACb/pB,EAAS,OAET,IAAInC,KAAOqrB,EACdlpB,EAAO+pB,EAAIpZ,eAAe9S,GAAOksB,EAAIlsB,GAAOA,GAAOqrB,EAAOrrB,UAGpDmC,uCAGKqP,OACRrP,EAAS,OAET,IAAInC,KAAOwR,EACdrP,EAAOqP,EAAIxR,IAAQA,SAGbmC,iDAIFgpB,sDAIqD,mBAAlCrsB,KAAKJ,MAAM6B,QAAQxB,WAA4BD,KAAKJ,MAAM6B,QAAQxB,aAAeD,KAAKJ,MAAM6B,QAAQxB,kBAGtHL,MAAMytB,aAAaC,MAAMttB,KAAKJ,MAAM6B,QAAQ8rB,mBAAqBvtB,KAAKwtB,SAAS,2DAKhF5tB,MAAMytB,aAAaC,MAAMttB,KAAKJ,MAAM6B,QAAQgsB,iBAAmBztB,KAAKwtB,SAAS,cAAe,mDAI5F5tB,MAAMytB,aAAavV,eAnHcnY,GCFnB+tB,wBAER9tB,EAAOyL,EAAasiB,kBAC1B/tB,MAAQA,OACRguB,OAAS,QACTviB,YAAcA,GAAe,QAC7BwiB,sBAAwB,QAExBxsB,SAAWssB,EAAQ3tB,KAAK8tB,eAAettB,KAAKR,MAAQA,KAAK+tB,UAAUvtB,KAAKR,WACxE2tB,MAAQA,uDAGKzsB,EAAKoT,GACnBtU,KAAK6tB,sBAAsB3sB,UACzB2sB,sBAAsB3sB,GAAO,SAG9B2sB,sBAAsB3sB,GAAK4B,KAAKwR,GAElCtU,KAAKmB,WAAWD,SACb8sB,2BAA2B9sB,GAAK,qCAI7BA,EAAKoT,GACVtU,KAAK4tB,OAAO1sB,UACV0sB,OAAO1sB,GAAO,SAGf0sB,OAAO1sB,GAAK4B,KAAKwR,QAEjB0Z,2BAA2B9sB,GAAK,uCAG1BA,EAAKoT,OACZxE,KAED9P,KAAK4tB,OAAO1sB,OACXoT,EAAS,OACXxE,EAAQ9P,KAAK4tB,OAAO1sB,GAAKoS,WAAU,SAACC,UAC5BA,IAASe,OAGL,eAGXtQ,QAAQC,KAAK,gDAAiD/C,EAAKoT,QAF9DsZ,OAAO1sB,GAAK6O,OAAOD,EAAO,eAMzB9P,KAAK4tB,OAAO1sB,QAOhB8sB,2BAA2B9sB,GAAK,QAJpC8C,QAAQC,KAAK,yCAA0C/C,sCAO9CA,UACHlB,KAAK4tB,OAAO1sB,IAAQlB,KAAK4tB,OAAO1sB,GAAKoC,0DAGlBpC,EAAKC,OAC3B8sB,EAAYjuB,KAAK6tB,sBAAsB3sB,GAExC+sB,GACFA,EAAUrrB,SAAQ,SAAC0R,GAClBA,EAASnT,8CAQXuD,SAFIwpB,EAAOlb,MAAM8J,KAAKvc,WACtBW,EAAMgtB,EAAKC,eAGRnuB,KAAK4tB,OAAO1sB,SACT0sB,OAAO1sB,GAAK0B,SAAQ,SAAC0R,EAAU3J,OAC/ByjB,EAAa9Z,EAAS+Z,MAAMvkB,EAAKlK,MAAOsuB,GAExCvjB,IACHjG,EAAS0pB,MAKL1pB,iDAIHwpB,EAAOlb,MAAM8J,KAAKvc,WACtBW,EAAMgtB,EAAK,IAEXA,EAAK,GAAK,iBAAmBA,EAAK,IAEhB,IAAfluB,KAAK2tB,OAAkB3tB,KAAK2tB,MAAM7C,SAAS5pB,QAC7C8C,SAAQsqB,cAAOJ,WAGTluB,KAAK+tB,qBAAaxtB,oBCtGNguB,wBAERZ,kBACNC,OAAS,QACTC,sBAAwB,QAExBxsB,SAAWssB,EAAQ3tB,KAAK8tB,eAAettB,KAAKR,MAAQA,KAAK+tB,UAAUvtB,KAAKR,WACxEsB,MAAQqsB,EAAQ3tB,KAAKwuB,YAAYhuB,KAAKR,MAAQA,KAAKyuB,OAAOjuB,KAAKR,WAC/DuB,QAAUosB,EAAQ3tB,KAAK0uB,cAAcluB,KAAKR,MAAQA,KAAK2uB,SAASnuB,KAAKR,WACrE2tB,MAAQA,uDAGKzsB,EAAKoT,GACnBtU,KAAK6tB,sBAAsB3sB,UACzB2sB,sBAAsB3sB,GAAO,SAG9B2sB,sBAAsB3sB,GAAK4B,KAAKwR,GAElCtU,KAAKmB,WAAWD,SACb8sB,2BAA2B9sB,GAAK,qCAI7BA,EAAKoT,OAAUgT,yDAAW,IAC/BtnB,KAAK4tB,OAAO1sB,UACV0sB,OAAO1sB,GAAO,SAGf0sB,OAAO1sB,GAAK4B,KAAK,CAACwR,SAAAA,EAAUgT,SAAAA,SAE5BsG,OAAO1sB,GAAKqmB,MAAK,SAACC,EAAGC,UAClBD,EAAEF,SAAWG,EAAEH,iBAGlB0G,2BAA2B9sB,GAAK,uCAG1BA,EAAKoT,OACZxE,KAED9P,KAAK4tB,OAAO1sB,OACXoT,EAAS,OACXxE,EAAQ9P,KAAK4tB,OAAO1sB,GAAKoS,WAAU,SAACC,UAC5BA,EAAKe,WAAaA,OAGd,eAGXtQ,QAAQC,KAAK,gDAAiD/C,EAAKoT,QAF9DsZ,OAAO1sB,GAAK6O,OAAOD,EAAO,QAW7Bke,2BAA2B9sB,GAAK,QAJpC8C,QAAQC,KAAK,yCAA0C/C,sCAO9CA,UACHlB,KAAK4tB,OAAO1sB,IAAQlB,KAAK4tB,OAAO1sB,GAAKoC,sCAGtCpC,EAAKgtB,EAAM/oB,EAAcypB,cAC3BltB,EAAQyD,SAER6N,MAAMC,QAAQib,KACjBA,EAAO,CAACA,IAGNluB,KAAKmB,WAAWD,SACb0sB,OAAO1sB,GAAK0B,SAAQ,SAACqnB,EAAYtf,GACrCjJ,EAAQuoB,EAAW3V,SAAS+Z,MAAMvkB,EAAMokB,EAAK5Q,OAAO,CAAC5b,QAG/CA,GAEoB,mBAAbktB,EAA0BA,IAAaA,mCAI9C1tB,EAAKgtB,cACTW,GAAY,SAEZ7b,MAAMC,QAAQib,KACjBA,EAAO,CAACA,IAGNluB,KAAKmB,WAAWD,SACb0sB,OAAO1sB,GAAK0B,SAAQ,SAACqnB,EAAYtf,GAClCsf,EAAW3V,SAAS+Z,MAAMxmB,EAAMqmB,KAClCW,GAAY,MAKRA,qDAGmB3tB,EAAKC,OAC3B8sB,EAAYjuB,KAAK6tB,sBAAsB3sB,GAExC+sB,GACFA,EAAUrrB,SAAQ,SAAC0R,GAClBA,EAASnT,qDAMP+sB,EAAOlb,MAAM8J,KAAKvc,WACtBW,EAAMgtB,EAAKC,QAERnuB,KAAK4tB,OAAO1sB,SACT0sB,OAAO1sB,GAAK0B,SAAQ,SAACqnB,GACRA,EAAW3V,SAAS+Z,MAAMvhB,EAAMohB,qDAM/CA,EAAOlb,MAAM8J,KAAKvc,WACtBW,EAAMgtB,EAAK,IAEXA,EAAK,GAAK,iBAAmBhtB,GAEX,IAAflB,KAAK2tB,OAAkB3tB,KAAK2tB,MAAM7C,SAAS5pB,QAC7C8C,SAAQsqB,cAAOJ,WAGTluB,KAAK+tB,qBAAaxtB,uDAIrB2tB,EAAOlb,MAAM8J,KAAKvc,WACtBW,EAAMgtB,EAAK,IAEXA,EAAK,GAAK,iBAAmBhtB,GAEX,IAAflB,KAAK2tB,OAAkB3tB,KAAK2tB,MAAM7C,SAAS5pB,QAC7C8C,SAAQsqB,cAAOJ,WAGTluB,KAAKyuB,kBAAUluB,yDAIlB2tB,EAAOlb,MAAM8J,KAAKvc,WACtBW,EAAMgtB,EAAK,IAEXA,EAAK,GAAK,iBAAmBhtB,GAEX,IAAflB,KAAK2tB,OAAkB3tB,KAAK2tB,MAAM7C,SAAS5pB,QAC7C8C,SAAQsqB,cAAOJ,WAGTluB,KAAK2uB,oBAAYpuB,oBC7JpBuuB,oFAEWlvB,GACfkvB,EAAcC,OAAOjsB,KAAKlD,sCAGTA,OACbkQ,EAAQgf,EAAcC,OAAOrjB,QAAQ9L,GAEtCkQ,GAAS,GACXgf,EAAcC,OAAOhf,OAAOD,EAAO,uCAIlBkf,EAAOlvB,OAEzB6c,EAASxJ,EADL8b,EAAU,MAGM,iBAAVD,OACTrS,EAAUtW,SAAS6oB,iBAAiBF,IAEzB1rB,WACN,IAAIqH,EAAI,EAAGA,EAAIgS,EAAQrZ,OAAQqH,KAClCwI,EAAQ2b,EAAcK,aAAaxS,EAAQhS,MAG1CskB,EAAQnsB,KAAKqQ,OAKgB,oBAAhBsJ,aAA+BuS,aAAiBvS,aAAgBuS,aAAiBI,GACjGjc,EAAQ2b,EAAcK,aAAaH,KAGlCC,EAAQnsB,KAAKqQ,GAENH,MAAMC,QAAQ+b,GACtBA,EAAMpsB,SAAQ,SAAS2Q,GACtB0b,EAAUA,EAAQ3R,OAAOwR,EAAcO,YAAY9b,OAGhDzT,GACHkE,QAAQC,KAAK,4CAA6C+qB,UAIrDC,uCAGYtpB,UACZmpB,EAAcC,OAAO7X,MAAK,SAAStX,UAClC+F,aAAmBypB,EAAYxvB,IAAU+F,EAAU/F,EAAM+F,UAAYA,cAK/EmpB,EAAcC,OAAS,OCxDFO,2CACL1vB,EAAO+F,EAASpC,yCAClB3D,IAED+F,QAAUA,IACV4pB,UAAYzlB,EAAK0lB,qBAEjBjsB,OAASA,IAETksB,WAAY,IACZC,WAAa,OACbC,UAAW,IACXC,aAAe,OACfC,iBAAmB,OAEnB7sB,SAAU,IAEV2C,QAAQ+B,UAAUC,IAAI,+BAEtBmoB,UAAYhmB,EAAK1G,KAAK5C,WAAW,KACjCuvB,SAAWjmB,EAAKkmB,aAAaxvB,sEAI9B+uB,EAAYvvB,KAAKJ,MAAM6B,QAAQwuB,qBAEX,iBAAdV,GACNA,EAAYlpB,SAASmjB,cAAc+F,KAG/BvrB,QAAQC,KAAK,6DAA+DjE,KAAKJ,MAAM6B,QAAQwuB,eAAiB,kCAEhG,IAAdV,IACNA,EAAYvvB,KAAKJ,MAAM+F,SAGxB4pB,IAAcvvB,KAAKkwB,wBAAwBX,KAC1CA,GAAY,EACZvrB,QAAQC,KAAK,8DAAgEjE,KAAKJ,MAAM6B,QAAQwuB,eAAiB,kCAGjHV,IACAA,EAAYlpB,SAAS8pB,MAGlBZ,kDAGaA,OAAW5pB,yDAAU3F,KAAKJ,MAAM+F,eACjD4pB,IAAc5pB,KAGNA,EAAQ8D,YAAazJ,KAAKkwB,wBAAwBX,EAAW5pB,EAAQ8D,mDAIrE6K,QACNub,iBAAmBvb,+CAGPzH,OACbujB,IAAUvjB,aAAawjB,YAEvBC,EAAIF,EAAQvjB,EAAE0jB,QAAQ,GAAGC,MAAQ3jB,EAAE2jB,MACnCC,EAAIL,EAAQvjB,EAAE0jB,QAAQ,GAAGG,MAAQ7jB,EAAE6jB,SAEpC1wB,KAAKuvB,YAAclpB,SAAS8pB,KAAK,KAC5BQ,EAAeze,EAAQuD,SAASzV,KAAKuvB,WAEzCe,GAAKK,EAAavpB,KAClBqpB,GAAKE,EAAa3pB,UAGf,CAACspB,EAAAA,EAAGG,EAAAA,iDAGO9qB,OAElBirB,EAAiBN,EAAGG,EAFOtb,yDAAW,QAClCG,EAASpD,EAAQuD,SAAS9P,UAG3B3F,KAAKuvB,YAAclpB,SAAS8pB,OAC3BS,EAAkB1e,EAAQuD,SAASzV,KAAKuvB,WAExCja,EAAOlO,MAAQwpB,EAAgBxpB,KAC/BkO,EAAOtO,KAAO4pB,EAAgB5pB,KAG3BmO,OACE,QACLmb,EAAIhb,EAAOlO,KAAOzB,EAAQsD,YAC1BwnB,EAAInb,EAAOtO,IAAM,YAGZ,SACLspB,EAAIhb,EAAOlO,KACXqpB,EAAInb,EAAOtO,IAAMrB,EAAQ4D,mBAItB,CAAC+mB,EAAAA,EAAGG,EAAAA,EAAGnb,OAAAA,gCAGbub,EAAQ1b,OACLmb,EAAGG,EAAGK,EAAUH,EAA+BI,SAEhDF,aAAkBpU,aACjBqU,EAAWD,EAGXF,GAFAI,EAAS/wB,KAAKgxB,sBAAsBH,EAAQ1b,IAEtBG,OACtBgb,EAAIS,EAAOT,EACXG,EAAIM,EAAON,GAEY,iBAAXI,GACZF,EAAe,CAAC3pB,IAAI,EAAGI,KAAK,GAC5BkpB,EAAIO,EACJJ,EAAItb,IAIJmb,GAFAS,EAAS/wB,KAAKixB,qBAAqBJ,IAExBP,EACXG,EAAIM,EAAON,OAENhB,WAAY,QAGhB9pB,QAAQe,MAAMM,IAAMypB,EAAI,UACxB9qB,QAAQe,MAAMU,KAAOkpB,EAAI,UAEzBf,UAAUrnB,YAAYlI,KAAK2F,SAEI,mBAA1B3F,KAAK6vB,uBACNA,wBAGJqB,aAAaZ,EAAGG,EAAGK,EAAUH,EAAcxb,QAE3CnS,SAAU,EAERhD,0CAGEswB,EAAGG,EAAGK,EAAUH,EAAcxb,OACnCW,EAAY9V,KAAKuvB,YAAclpB,SAAS8pB,KAAO9pB,SAASiM,gBAAgBwD,UAAY9V,KAAKuvB,UAAUzZ,cAGnGwa,EAAItwB,KAAK2F,QAAQsD,aAAgBjJ,KAAKuvB,UAAUtmB,aAAejJ,KAAKyvB,kBAC/D9pB,QAAQe,MAAMU,KAAO,QAGjBzB,QAAQe,MAAMW,MADpBypB,EAC6B9wB,KAAKuvB,UAAUtmB,YAAc0nB,EAAavpB,KAAQ,KAElDpH,KAAKuvB,UAAUtmB,YAAcqnB,EAAK,UAG7Db,WAAY,GAIjBgB,EAAIzwB,KAAK2F,QAAQ4D,aAAgB2G,KAAKG,IAAIrQ,KAAKuvB,UAAUhmB,aAAcuM,EAAY9V,KAAKuvB,UAAU1Z,aAAe,MAC9Gib,SACQ3b,OACE,cACAxP,QAAQe,MAAMM,IAAOyG,SAASzN,KAAK2F,QAAQe,MAAMM,KAAOhH,KAAK2F,QAAQ4D,aAAeunB,EAASvnB,aAAe,EAAK,wBAIjH5D,QAAQe,MAAMM,IAAOyG,SAASzN,KAAK2F,QAAQe,MAAMM,KAAOhH,KAAK2F,QAAQ4D,aAAeunB,EAASvnB,aAAe,EAAK,eAIrH5D,QAAQe,MAAMM,IAAOyG,SAASzN,KAAK2F,QAAQe,MAAMM,KAAOhH,KAAK2F,QAAQ4D,aAAgB,gDAM3FvJ,KAAKgD,2CAGLsR,0BACFqb,UAAW,EAEb3vB,KAAKgD,UACJqK,YAAW,WACPxF,EAAKjI,MAAMgJ,WAAWjD,QAAQiH,iBAAiB,SAAU/E,EAAKioB,WAC9DjoB,EAAK7G,UAAU,eAAgB6G,EAAKioB,WACpCzpB,SAAS8pB,KAAKvjB,iBAAiB,QAAS/E,EAAKioB,WAC7CzpB,SAAS8pB,KAAKvjB,iBAAiB,cAAe/E,EAAKioB,WACnD1d,OAAOxF,iBAAiB,SAAU/E,EAAKioB,WACvCzpB,SAAS8pB,KAAKvjB,iBAAiB,UAAW/E,EAAKkoB,YAChD,UAEEH,aAAetb,GAGjBtU,0CAGE6M,GACO,IAAbA,EAAEskB,cACI/tB,0CAIRtD,iEACEE,KAAKgD,UACDhD,KAAK2vB,WACJtpB,SAAS8pB,KAAK5E,oBAAoB,UAAWvrB,KAAK+vB,UAClD1pB,SAAS8pB,KAAK5E,oBAAoB,QAASvrB,KAAK8vB,WAChDzpB,SAAS8pB,KAAK5E,oBAAoB,cAAevrB,KAAK8vB,WACtD1d,OAAOmZ,oBAAoB,SAAUvrB,KAAK8vB,gBACrClwB,MAAMgJ,WAAWjD,QAAQ4lB,oBAAoB,SAAUvrB,KAAK8vB,gBAC5D7uB,YAAY,eAAgBjB,KAAK8vB,YAGvC9vB,KAAK0vB,iBACCA,WAAWtsB,OAGjBpD,KAAKuD,cACCA,OAAOmsB,WAAa,MAG1B1vB,KAAK2F,QAAQ8D,iBACP9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,cAGvC3C,SAAU,EAEbhD,KAAK4vB,eAAiB9vB,QAChB8vB,gBAIN5vB,mCAGL2F,UACC3F,KAAK0vB,iBACCA,WAAWtsB,YAGfssB,WAAa,IAAIJ,EAAMtvB,KAAKJ,MAAO+F,EAAS3F,MAE1CA,KAAK0vB,kBArPe/vB,GCA7ByxB,2CAEOxxB,EAAOuC,yCACZvC,IAEDyxB,SAAW,mGAYGnwB,EAAKQ,QACnB9B,MAAMyL,YAAYimB,SAASpwB,EAAKQ,gDAGjBR,EAAKQ,QACpB9B,MAAM6D,cAAc4H,YAAYimB,SAASpwB,EAAKQ,iDAO9BS,EAAMovB,mBACI,IAArBvxB,KAAKJ,MAAMuC,QACfvC,MAAMuC,GAAQ,kBAClB0F,EAAKjI,MAAM4xB,UAAUrvB,GAEdovB,2BAGRvtB,QAAQC,KAAK,qDAAsD9B,qDAI3C4D,EAAWwrB,EAAMlK,UACnCrnB,KAAKJ,MAAMyC,wBAAwB7B,KAAKuF,EAAWwrB,EAAMlK,+CAO7CA,EAASC,QACvB1nB,MAAMgJ,WAAW6oB,4BAA4BpK,EAASC,QACtD+J,SAAWhK,iDAGMA,EAASC,QAC1B1nB,MAAMgJ,WAAW8oB,+BAA+BrK,EAASC,QACzD+J,SAAWhK,sCAGL5B,EAAkB4B,GACzBA,IACHA,EAAUrnB,KAAKqxB,UAGbhK,QACGznB,MAAMgJ,WAAW6X,kBAAkB4G,GAAS,EAAO5B,wCAQ7C9f,UACL3F,KAAKJ,MAAMqe,cAAc0T,OAAOhsB,yCAG1BA,UACN3F,KAAKJ,MAAMqe,cAActE,QAAQhU,wCAG5BA,UACL3F,KAAKJ,MAAMqe,cAAcpJ,OAAOlP,iCAOlCisB,EAAQC,UACN,IAAIvC,EAAMtvB,KAAKJ,MAAOgyB,EAAQC,iCAOhCC,EAAS/vB,UACP/B,KAAKJ,MAAMytB,aAAaC,MAAMwE,EAAS/vB,+CAIvC/B,KAAKJ,MAAMytB,aAAavV,eAtGZnY,GCFN,WAASuD,GACvBA,EAAQN,SAAQ,SAASf,GACxBA,EAAO8C,uBAGL3E,KAAKJ,MAAM6B,QAAQswB,kBAAoB/xB,KAAKJ,MAAMoyB,UAAU,oBAAoB,SAC7EpyB,MAAMQ,QAAQ2xB,iBAAiBxd,eCFvB,CACd0d,QCLc,SAAS/uB,QAClBtD,MAAM6D,cAAcoB,SAASqtB,yBAAyBhvB,GAExDlD,KAAKJ,MAAM6B,QAAQswB,kBAAoB/xB,KAAKJ,MAAMoyB,UAAU,oBAAoB,SAC7EpyB,MAAMQ,QAAQ2xB,iBAAiBxd,UDErC4d,YAAYC,EACZC,aAAaD,EACbE,eERc,SAASpvB,cACnBqvB,EAAY,EAChB3J,EAAa5oB,KAAKJ,MAAMgJ,WAAWjD,QAAQyK,YAC3CoiB,EAAM,EACNC,GAAU,EAEVvvB,EAAQN,SAAQ,SAACf,EAAQ8I,GACpB9I,EAAO6I,YACV7I,EAAO8C,qBAGLmF,EAAKlK,MAAM6B,QAAQswB,iBAAmBlwB,EAAOzB,QAAQsyB,WAAW1vB,QAAUnB,EAAOmB,WACnFyvB,EAAU5wB,GAGRA,EAAOmB,UACTuvB,GAAa1wB,EAAO2C,eAInBiuB,GACFD,EAAM5J,EAAa2J,EAAYE,EAAQjuB,WAEpCxE,KAAKJ,MAAM6B,QAAQswB,kBAAoB/xB,KAAKJ,MAAMoyB,UAAU,oBAAoB,KAClFS,EAAQ7tB,SAAS,QACZhF,MAAMQ,QAAQ2xB,iBAAiBxd,UAGlCie,EAAM,EACRC,EAAQ7tB,SAAS4tB,GAEjBC,EAAQ9tB,qBAGN3E,KAAKJ,MAAM6B,QAAQswB,kBAAoB/xB,KAAKJ,MAAMoyB,UAAU,oBAAoB,SAC7EpyB,MAAMQ,QAAQ2xB,iBAAiBxd,UF1BtCoe,WGTc,SAASzvB,OAKnB0vB,EAIAC,EARAjV,EAAa5d,KAAKJ,MAAM+F,QAAQyK,YAChCyN,EAAa,EACbiV,EAAY,EACZC,EAAgB,EAEhBC,EAAc,GACdC,EAAqB,GACrBC,EAAkB,EAElBC,EAAQ,WAEHC,EAAU3uB,SAGE,iBAAVA,EACNA,EAAMiH,QAAQ,MAAQ,EACZkS,EAAa,IAAOnQ,SAAShJ,GAE9BgJ,SAAShJ,GAGVA,WAOJ4uB,EAAanwB,EAASowB,EAAWxV,EAAUyV,OAE/CC,EAAe,GACnBC,EAAgB,EAChBC,EAAiB,EACjBC,EAAe,EACfC,EAAyBb,EACzBP,EAAM,EACNqB,EAAc,EACdC,EAAgB,YAEPC,EAAS5c,UACT2G,GAAY3G,EAAItV,OAAO0F,WAAWysB,WAAa,YAG/CC,EAAW9c,UACVic,EAAUjc,EAAI1S,OAAUqZ,GAAY3G,EAAItV,OAAO0F,WAAW2sB,aAAe,UAGnFhxB,EAAQN,SAAQ,SAASuU,EAAKxM,OACzBlG,EAAQ8uB,EAAaU,EAAW9c,GAAO4c,EAAS5c,GACjDA,EAAItV,OAAOiE,UAAYrB,EACzB+uB,EAAa1wB,KAAKqU,GAEfA,EAAItV,OAAOsH,UAAYgO,EAAItV,OAAOsH,SAAW1E,GAC/C0S,EAAI1S,MAAQ0S,EAAItV,OAAOsH,SACvBmqB,GAAanc,EAAItV,OAAOsH,UAExByqB,GAA0BL,EAAcpc,EAAItV,OAAO0F,WAAW2sB,aAAe,EAAM/c,EAAItV,OAAO0F,WAAWysB,WAAa,KAGrHlW,EAAW5N,KAAKC,MAAMmjB,EAAUM,MAGjCE,EAAchxB,KAAKqU,GACnB0c,GAAeN,EAAcpc,EAAItV,OAAO0F,WAAW2sB,aAAe,EAAM/c,EAAItV,OAAO0F,WAAWysB,WAAa,MAK3GR,EAAalwB,QACfkwB,EAAa5wB,SAAQ,SAASuU,GAC7Bsc,GAAiBF,EAAcpc,EAAI1S,MAAQ0S,EAAItV,OAAOiE,SAAWqR,EAAItV,OAAOiE,SAC5EqR,EAAI1S,MAAQ0S,EAAItV,OAAOiE,YAOxB0sB,GAJAkB,EAAiBJ,EAAYG,IAE7BE,EAAeE,EAAc3jB,KAAKC,MAAMujB,EAAeG,GAAeH,GAE/BG,EAEvCrB,GAAOa,EAAaS,EAAeJ,EAAgBC,EAAcJ,KAEjEf,EAAMqB,EAAcP,EAAapjB,KAAKC,MAAMmjB,EAAUO,GAAeA,EAAeP,EAEpFQ,EAAclxB,SAAQ,SAASf,GAC9BA,EAAO4C,MAAQ8uB,EAAaU,EAAWpyB,GAAUkyB,EAASlyB,OAIrD2wB,EAGLxyB,KAAKJ,MAAM6B,QAAQswB,kBAAoB/xB,KAAKJ,MAAMoyB,UAAU,oBAAoB,SAC7EpyB,MAAMQ,QAAQ2xB,iBAAiBxd,SAIlCvU,KAAKJ,MAAMgJ,WAAWjD,QAAQkQ,aAAe7V,KAAKJ,MAAMgJ,WAAWjD,QAAQiJ,eAC7EgP,GAAc5d,KAAKJ,MAAMgJ,WAAWjD,QAAQsD,YAAcjJ,KAAKJ,MAAMgJ,WAAWjD,QAAQyK,aAGzFlN,EAAQN,SAAQ,SAASf,OACpB4C,EAAOqB,EAAUgY,EAElBjc,EAAOmB,UAETyB,EAAQ5C,EAAO0F,WAAW9C,MAC1BqB,EAAY2H,SAAS5L,EAAOiE,UAEzBrB,GAEFqZ,EAAWsV,EAAU3uB,GAErBoZ,GAAcC,EAAWhY,EAAWgY,EAAWhY,EAE5CjE,EAAO0F,WAAW2sB,cACpBjB,EAAmBnwB,KAAK,CACvBjB,OAAOA,EACP4C,MAAMqZ,EAAWhY,EAAWgY,EAAWhY,IAExCotB,GAAmBrxB,EAAO0F,WAAW2sB,eAItClB,EAAYlwB,KAAK,CAChBjB,OAAOA,EACP4C,MAAM,IAEPsuB,GAAiBlxB,EAAO0F,WAAWysB,WAAa,OAMnDlB,EAAYlV,EAAaC,EAGzB+U,EAAe1iB,KAAKC,MAAM2iB,EAAYC,GAGlCI,EAAUE,EAAaL,EAAaF,EAAWF,GAAc,GAG9DI,EAAY1vB,QAAU6vB,EAAU,IAClCH,EAAYA,EAAY1vB,OAAO,GAAGmB,QAAW0uB,GAI9CH,EAAYpwB,SAAQ,SAASuU,GAC5B2b,GAAa3b,EAAI1S,UAGlBouB,EAAgB3iB,KAAK+I,IAAIka,GAAWL,GAGjB,GAAKI,IACvBC,EAAUE,EAAaJ,EAAoBJ,EAAe3iB,KAAKC,MAAM0iB,EAAgBK,IAAkB,IAIrGD,EAAmB3vB,SACrB2vB,EAAmBA,EAAmB3vB,OAAO,GAAGmB,OAAS0uB,GAG1DH,EAAYpwB,SAAQ,SAASuU,GAC5BA,EAAItV,OAAO+C,SAASuS,EAAI1S,UAGzBwuB,EAAmBrwB,SAAQ,SAASuU,GACnCA,EAAItV,OAAO+C,SAASuS,EAAI1S,YCvKpB0vB,2CAEOv0B,yCACLA,EAAO,WAERw0B,KAAO,OAEPC,oBAAoB,SAAU,aAC9BA,oBAAoB,0BAA0B,KAE9CC,qBAAqB,eACrBA,qBAAqB,oEAKtBzzB,EAASb,KAAKJ,MAAM6B,QAAQZ,OAE7BszB,EAAOI,MAAM1zB,QACVuzB,KAAOvzB,GAEZmD,QAAQC,KAAK,8DAAgEpD,QACxEuzB,KAAO,gBAGRx0B,MAAM+F,QAAQa,aAAa,mBAAoBxG,KAAKo0B,+CAIlDp0B,KAAKo0B,2CAKP/yB,SAAS,qBACd8yB,EAAOI,MAAMv0B,KAAKo0B,MAAM3rB,KAAKzI,KAAMA,KAAKJ,MAAM6D,cAAciU,qBAEvDrW,SAAS,2BArCK+vB,GAyCrB+C,EAAOK,WAAa,SAGpBL,EAAOI,MAAQE,MC1CTC,2CAEO90B,yCACLA,IAED+0B,OAAS,YACTC,MAAO,IACP1I,SAAW,KACX2I,SAAW,KAEXR,oBAAoB,UAAU,KAC9BA,oBAAoB,QAAS,yDAU9B,IAAIM,UANHE,SAAW3iB,EAAQuB,UAAUihB,EAASI,QAEsB,IAA9D90B,KAAKJ,MAAM6B,QAAQ2J,eAAe2pB,8BAC/BC,2BAA2Bh1B,KAAKJ,MAAM6B,QAAQ2J,eAAe2pB,yBAGjD/0B,KAAKJ,MAAM6B,QAAQqzB,WAC/BG,YAAYN,EAAQ30B,KAAKJ,MAAM6B,QAAQqzB,MAAMH,SAG9CO,UAAUl1B,KAAKJ,MAAM6B,QAAQkzB,aAE7BQ,sBAAsB,YAAan1B,KAAKk1B,UAAU10B,KAAKR,YACvDm1B,sBAAsB,YAAan1B,KAAKS,UAAUD,KAAKR,YACvDm1B,sBAAsB,UAAWn1B,KAAKo1B,QAAQ50B,KAAKR,0DAI9BskB,QACrBuQ,iBAAiBQ,sBAAwB/Q,2DAIdziB,EAAQyiB,QACnCuQ,iBAAiBQ,cAAcnyB,QAAQrB,GAAUyiB,EAEnDtkB,KAAK40B,OAAS50B,KAAK40B,KAAKS,cAAcnyB,QAAQrB,UAC3C+yB,KAAKS,cAAcnyB,QAAQrB,GAAUyiB,uCAKhCqQ,EAAQC,GAChB50B,KAAK60B,SAASF,QACXW,aAAat1B,KAAK60B,SAASF,GAASC,QAEpCC,SAASF,GAAUC,uCAIbA,EAAM7J,OACd,IAAI7pB,KAAO6pB,EACX6J,EAAK1zB,IAA4B,UAApBmS,EAAOuhB,EAAK1zB,SACtBo0B,aAAaV,EAAK1zB,GAAM6pB,EAAO7pB,IAEpC0zB,EAAK1zB,GAAO6pB,EAAO7pB,qCAMZq0B,OAkBY,KAjBrBA,EAAgBA,GAAiB,YAiBJC,UAAUC,WAEtCF,EAAgBC,UAAUC,SAASC,eAGjCH,IAEEv1B,KAAK60B,SAASU,GAAe,KAC5BI,EAASJ,EAAc9tB,MAAM,KAAK,GAEnCzH,KAAK60B,SAASc,IAChB3xB,QAAQC,KAAK,8EAA+EsxB,EAAeI,GAC3GJ,EAAgBI,IAEhB3xB,QAAQC,KAAK,kEAAmEsxB,GAChFA,EAAgB,gBAKdZ,OAASY,OAGTX,KAAO1iB,EAAQuB,UAAUzT,KAAK60B,kBAAoB,IAEnC,WAAjBU,YAvCMK,EAAaC,EAAOrK,OACxB,IAAIsK,KAAQD,EACU,UAAtBxiB,EAAOwiB,EAAMC,KACXtK,EAAKsK,KACRtK,EAAKsK,GAAQ,IAEdF,EAAaC,EAAMC,GAAOtK,EAAKsK,KAE/BtK,EAAKsK,GAAQD,EAAMC,GAgCrBF,CAAa51B,KAAK60B,SAASU,GAAgBv1B,KAAK40B,WAG5ClsB,iBAAiB,YAAa1I,KAAK20B,OAAQ30B,KAAK40B,WAEhDmB,qDAIIpB,UACF30B,KAAK20B,uCAILA,UACAA,EAAS30B,KAAK60B,SAASF,GAAU30B,KAAK40B,qCAItCpJ,EAAM9pB,OAEbs0B,GADIxK,EAAO9pB,EAAQ8pB,EAAO,IAAM9pB,EAAQ8pB,GACvB/jB,MAAM,YAChBzH,KAAKi2B,gBAAgBD,EAAWh2B,KAAK20B,SAM7B,2CAIAnJ,EAAMmJ,OACjBjY,EAAO1c,KAAK40B,YAEhBpJ,EAAK5oB,SAAQ,SAASszB,OACjBC,EAEDzZ,IACFyZ,EAAWzZ,EAAKwZ,GAGfxZ,OADqB,IAAZyZ,GACFA,MAOHzZ,+BAIH8O,EAAMlX,GACNtU,KAAKksB,SAASV,UACZU,SAASV,GAAQ,SAGlBU,SAASV,GAAM1oB,KAAKwR,GAEzBA,EAAStU,KAAKM,QAAQkrB,GAAOxrB,KAAK40B,uEAK1BpJ,GACP3jB,EAAKqkB,SAASV,GAAM5oB,SAAQ,SAACwzB,GAC5BA,EAAQvuB,EAAKvH,QAAQkrB,GAAO3jB,EAAK+sB,cAF/B,IAAIpJ,KAAQxrB,KAAKksB,WAAbV,UA/Ka4F,GAuLvBsD,EAASF,WAAa,WAGtBE,EAASI,MChMM,SACJ,QACA,MACD,aACC,iBAEC,QAEH,SACI,gBACF,oBAEI,WACA,uBACC,kBACL,oBACM,kBACP,kBACM,iBACN,kBACM,iBACN,kBACM,gBACP,cACI,SACE,aACL,UACE,aACC,wBAGK,SACL,2BACA,UC9BPuB,2CAEOz2B,gCACLA,uDAIDu1B,sBAAsB,aAAcn1B,KAAKs2B,QAAQ91B,KAAKR,8CAG7Cu2B,cACVC,EAAc,UAGL1H,EAAcO,YAAYkH,GAE5B3zB,SAAQ,SAAC6zB,GAChB3sB,EAAKlK,QAAU62B,GACjBD,EAAY1zB,KAAK2zB,MAIZD,+BAGHD,EAAW50B,EAAQ+0B,EAAQ72B,cAC3B22B,EAAcx2B,KAAKW,eAAe41B,GAEtCC,EAAY5zB,SAAQ,SAAC+zB,GACpBA,EAAWC,WAAW/uB,EAAKjI,MAAM+F,QAAShE,EAAQ+0B,EAAQ72B,OAGvD22B,EAAYlzB,QAAUizB,GACzBvyB,QAAQC,KAAK,6DAA8DsyB,mCAIrE32B,EAAO+B,EAAQ+0B,EAAQ72B,MAC3BG,KAAKJ,MAAMoyB,UAAUrwB,UAChB3B,KAAKJ,MAAMQ,QAAQuB,GAAQk1B,cAAcj3B,EAAO82B,EAAQ72B,GAE/DmE,QAAQC,KAAK,4CAA6CtC,UAzCzCyvB,GA8CpBiF,EAAM7B,WAAa,4FC9CEsC,wBAERC,EAAW32B,kBACjB42B,uBAAuBD,QACvBE,YAAYF,EAAWG,GAAa,GAEtC92B,QACG62B,YAAYF,EAAW32B,4DAIP22B,GACtBA,EAAUI,eAAiB,GAE3BJ,EAAUK,aAAe,SAASj1B,EAAMk1B,EAAUtM,MAC9CgM,EAAUI,eAAeh1B,GAAM,KAC7Bm1B,EAASP,EAAUI,eAAeh1B,GAAMk1B,MAEzCC,KACkB,UAAjBjkB,EAAO0X,OACL,IAAI7pB,KAAO6pB,EACduM,EAAOp2B,GAAO6pB,EAAO7pB,QAGtB8C,QAAQC,KAAK,gEAGdD,QAAQC,KAAK,0CAA2CozB,QAGzDrzB,QAAQC,KAAK,wCAAyC9B,IAIxD40B,EAAUQ,eAAiB,SAASn3B,GAC/B4S,MAAMC,QAAQ7S,KACjBA,EAAU,CAACA,IAGZA,EAAQwC,SAAQ,SAAC40B,GAChBT,EAAUU,sBAAsBD,OAIlCT,EAAUU,sBAAwB,SAASD,GAC1CT,EAAUI,eAAeK,EAAIhD,YAAcgD,GAG5CT,EAAUW,UAAY,SAAS1I,OAC1BC,EAAUH,EAAcO,YAAYL,GAAO,WACxChc,MAAMC,QAAQgc,KAAaA,EAAQ3rB,SAAiB2rB,GAI5D8H,EAAUY,UAAUV,YAAc,eAC7BW,EAAmB,GACvBC,EAAiB,GACjBC,EAAgB,OAIZ,IAAI31B,UAFH/B,QAAU,GAEC22B,EAAUI,eAAe,KACpCK,EAAMT,EAAUI,eAAeh1B,GAC/BR,EAAS,IAAI61B,EAAIx3B,WAEhBI,QAAQ+B,GAAQR,EAElB61B,EAAIG,UAAUI,gBACXC,YAAYl1B,KAAKnB,GAEnB61B,EAAIS,gBACHT,EAAIS,gBAAkB,EACxBL,EAAiB90B,KAAKnB,GAEtBk2B,EAAe/0B,KAAKnB,GAIrBm2B,EAAch1B,KAAKnB,GAKtBi2B,EAAiBrQ,MAAK,SAACC,EAAGC,UAAMD,EAAEyQ,gBAAkBxQ,EAAEwQ,gBAAkB,GAAK,KAC7EJ,EAAetQ,MAAK,SAACC,EAAGC,UAAMD,EAAEyQ,gBAAkBxQ,EAAEwQ,gBAAkB,GAAK,UAEtEC,eAAiBN,EAAiBta,OAAOwa,EAAcxa,OAAOua,yCAIzDd,EAAW32B,EAAS+3B,OAC3BC,EAAO5sB,OAAOuf,OAAO3qB,GAEtB+3B,GACFC,EAAKx1B,SAAQ,SAAC40B,GACbA,EAAIG,UAAUI,YAAa,KAI7BhB,EAAUQ,eAAea,YCnGNC,2CACLz4B,yCACFA,IAED+F,QAAUmE,EAAKwuB,wBACfC,WAAazuB,EAAK0uB,sBAClBz2B,KAAO,OAEP4D,QAAQuC,YAAY4B,EAAKyuB,0EAI1BrtB,EAAK7E,SAASC,cAAc,cAChC4E,EAAGxD,UAAUC,IAAI,mBACVuD,kDAIHA,EAAK7E,SAASC,cAAc,cAChC4E,EAAGxD,UAAUC,IAAI,uBACjBuD,EAAG1E,aAAa,OAAQ,SACjB0E,6CAIA,yBAA2BlL,KAAK+B,mCAGrC+vB,OAAS/vB,yDAAO,SACf+vB,EAAQ,UACFha,aAEA/V,KAAOA,EAEN/B,KAAKu4B,WAAWvwB,iBAAiBuwB,WAAWtwB,YAAYjI,KAAKu4B,WAAWvwB,iBAEzEuwB,WAAW7wB,UAAUC,IAAI3H,KAAKy4B,cAEb,mBAAZ3G,IACNA,EAAUA,KAGXA,aAAmBrV,iBACb8b,WAAWrwB,YAAY4pB,QAEvByG,WAAWzwB,UAAYgqB,OAG3BlyB,MAAM+F,QAAQuC,YAAYlI,KAAK2F,0CAKrC3F,KAAK2F,QAAQ8D,iBACP9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,cAGxC4yB,WAAW7wB,UAAUmN,OAAO7U,KAAKy4B,qBAzDX94B,GCmB7ByvB,wBAEOzpB,EAASlE,6BAEfA,QAAU,QAEVgC,cAAgB,UAChBmF,WAAa,UACbqV,cAAgB,UAChBoP,aAAe,UACfjV,QAAW,UACX5W,eAAiB,UACjBT,SAAW,UACX23B,oBAAqB,OACrB7P,QAAU,QACV8P,aAAc,OACdC,eAAgB,OAChBC,KAAM,OACNC,gBAAkB,UAElBz2B,wBAA0B,IAAI4pB,EAAwBjsB,WACtDC,YAAa,OAEbG,QAAU,QACV43B,YAAc,QACdE,eAAiB,QAEjB7sB,YAAc,IAAIqI,EAAY1T,KAAM,0BAEpC4W,aAAc,EAEhB5W,KAAKspB,kBAAkB3jB,UAEpBozB,sBAAsBt3B,GAG3B4L,YAAW,WACVvD,EAAKkvB,cAIPlK,EAAcwC,SAAStxB,0DAGN2F,SACS,oBAAhB8W,aAA+B9W,aAAmB8W,kBACtD9W,QAAUA,GACR,GACoB,iBAAZA,QACVA,QAAUU,SAASmjB,cAAc7jB,KAEnC3F,KAAK2F,UAGP3B,QAAQ4N,MAAM,kEAAmEjM,IAC1E,KAGR3B,QAAQ4N,MAAM,uDAAwDjM,IAC/D,iDAIalE,QAChBgC,cAAgB,IAAIyW,EAAcla,WAClC4I,WAAa,IAAIsb,EAAWlkB,WAC5Bie,cAAgB,IAAIkL,EAAcnpB,WAClCC,WAAa,IAAImsB,EAAWpsB,WAC5BqtB,aAAe,IAAIgL,EAAMr4B,WAEzBi3B,mBAEAx1B,QAAUzB,KAAKqL,YAAYC,SAAS8jB,EAAUnd,eAAgBxQ,QAE9Dw3B,4BAEAC,mCAEA13B,eAAiB,IAAIksB,EAAiB1tB,KAAMA,KAAKyB,QAASzB,KAAKyB,QAAQ03B,0BACvEp4B,SAAW,IAAIwtB,EAAiBvuB,KAAKyB,QAAQ23B,0BAE7CV,mBAAqB,IAAIW,EAAmBr5B,WAE5CC,WAAWgb,kBAGXgD,cAAchD,mHAUdtV,QAAQ+B,UAAUC,IAAI,0BAEvByK,OAAOknB,aACNlnB,OAAOknB,eAAeC,MACzBnnB,OAAOknB,eAAeC,QACZnnB,OAAOknB,eAAeE,iBAChCpnB,OAAOknB,eAAeE,kBAEbnzB,SAASozB,WACnBpzB,SAASozB,UAAUF,aAGf5zB,QAAQ+B,UAAUmN,OAAO,iEAKzBrT,eAAeH,SAAS,sBACxBN,SAASM,SAAS,uBAElBq4B,iBAEAC,qBAEAC,wBAEAC,wBAEAjjB,aAAc,OAEdpV,eAAeH,SAAS,sDAIzBqF,EAAQ0L,OAAO0nB,iBAAiB95B,KAAK2F,gBAElC3F,KAAKyB,QAAQs4B,mBACf,UACmB,QAApBrzB,EAAMszB,oBAIJ,WACAr0B,QAAQ+B,UAAUC,IAAI,sBACtBkxB,KAAM,YAGN,WACAlzB,QAAQ+B,UAAUC,IAAI,8BAGtBkxB,KAAM,uDAMPp3B,QAAQyB,QAAUlD,KAAKyB,QAAQyB,QAAQkgB,MAAM,GAE/CpQ,MAAMC,QAAQjT,KAAKyB,QAAQ5B,QAAUG,KAAKyB,QAAQw4B,oBAC/Cx4B,QAAQ5B,KAAOG,KAAKyB,QAAQ5B,KAAKujB,MAAM,gDAQ7C8W,EAFIv0B,EAAU3F,KAAK2F,QACnBlE,EAAUzB,KAAKyB,WAGQ,UAApBkE,EAAQw0B,QAAoB,MACzBrB,gBAAkB94B,KAAK2F,QAC5Bu0B,EAAa7zB,SAASC,cAAc,WAGhC8zB,EAAaz0B,EAAQy0B,eAGrB,IAAIzvB,KAAKyvB,EACe,UAAxB/mB,EAAO+mB,EAAWzvB,KACpBuvB,EAAW1zB,aAAa4zB,EAAWzvB,GAAGxI,KAAMi4B,EAAWzvB,GAAGjJ,OAK5DiE,EAAQ8D,WAAW4wB,aAAaH,EAAYv0B,QAEvCA,QAAUA,EAAUu0B,MAG1Bv0B,EAAQ+B,UAAUC,IAAI,aACtBhC,EAAQa,aAAa,OAAQ,QAGvBb,EAAQqC,YAAYrC,EAAQsC,YAAYtC,EAAQqC,YAGnDvG,EAAQoE,SACVpE,EAAQoE,OAASoK,MAAMxO,EAAQoE,QAAUpE,EAAQoE,OAASpE,EAAQoE,OAAS,KAC3EF,EAAQe,MAAMb,OAASpE,EAAQoE,SAIP,IAAtBpE,EAAQqN,YACVrN,EAAQqN,UAAYmB,MAAMxO,EAAQqN,WAAarN,EAAQqN,UAAYrN,EAAQqN,UAAY,KACvFnJ,EAAQe,MAAMoI,UAAYrN,EAAQqN,YAIV,IAAtBrN,EAAQ8d,YACV9d,EAAQ8d,UAAYtP,MAAMxO,EAAQ8d,WAAa9d,EAAQ8d,UAAY9d,EAAQ8d,UAAY,KACvF5Z,EAAQe,MAAM6Y,UAAY9d,EAAQ8d,0DAM/B5Z,EAAU3F,KAAK2F,QACnBlE,EAAUzB,KAAKyB,aAEVi3B,mBAAmBzd,kBAEnBxX,cAAcwX,kBACdrS,WAAWqS,kBAEXqf,sBAGAtC,YAAYp1B,SAAQ,SAAC40B,GACzBA,EAAIvc,gBAILtV,EAAQuC,YAAYlI,KAAKyD,cAAclB,cACvCoD,EAAQuC,YAAYlI,KAAK4I,WAAWrG,cAEjCd,EAAQ8nB,oBACLtL,cAAcwL,WAGjBhoB,EAAQokB,aAAepkB,EAAQ5B,WAE5B4D,cAAcqiB,2BAA2B9lB,KAAKyB,QAAQ5B,WAIvDq4B,eAAet1B,SAAQ,SAAC40B,GAC5BA,EAAIvc,qBAGAxX,cAAciY,WAAWja,EAAQyB,cAEjCnC,SAASM,SAAS,+DAIlBpB,WAAWC,KAAKF,KAAKyB,QAAQ5B,4CAK9B8F,EAAU3F,KAAK2F,YAEnBmpB,EAAcyL,WAAWv6B,WAEpBe,SAASM,SAAS,sBAGlBuH,WAAW2H,KAAK3N,SAAQ,SAASwC,GACrCA,EAAI4gB,eAGApd,WAAW2H,KAAO,QAClB3H,WAAWgc,WAAa,QACxBhc,WAAWkc,YAAc,GAGxBnf,EAAQqC,YAAYrC,EAAQsC,YAAYtC,EAAQqC,YACtDrC,EAAQ+B,UAAUmN,OAAO,0DAIrB2lB,EAAKhF,UAAUiF,WAAWjF,UAAUkF,QAAQtoB,OAAOuoB,MAEpDH,EAAG9uB,QAAQ,YAAc,QACtBmd,QAAU,UACV8P,aAAc,GACX6B,EAAG9uB,QAAQ,SAAW,QACzBmd,QAAU,YACV8P,aAAc,GACX6B,EAAG9uB,QAAQ,YAAc,QAC5Bmd,QAAU,eACV8P,aAAc,SAEd9P,QAAU,aACV8P,aAAc,QAGfC,cAAgB,sVAAsVgC,KAAKJ,IAAK,0kDAA0kDI,KAAKJ,EAAGpX,MAAM,EAAE,sCAGt8DmO,EAAMsJ,OACXC,EAAOC,SAER/6B,KAAKyB,QAAQu5B,sBAAwBh7B,KAAK4W,cACxC2a,IAMFA,EADa,MAFdwJ,EAAmB,UAFnBD,GAAQ,IAAIG,OAAQH,MAAMrzB,MAAM,OAEnB,GAAgBqzB,EAAM,GAAKA,EAAM,IAEtC,GACAC,EAAKG,OAAOzzB,MAAM,KAAK,GAAGA,MAAM,KAAK,GAErCszB,EAAKG,OAAOzzB,MAAM,KAAK,IAIhCzD,QAAQC,KAAK,uCAAyCstB,EAAO,uJAAyJsJ,EAAM,IAAMA,EAAM,MAGlO76B,KAAK4W,8DAMP4a,YAEExxB,KAAK4I,WAAW4L,kEAKlBgd,YAEExxB,KAAK4I,WAAWuyB,gDAIhBt7B,EAAM0sB,EAAQvU,eAChBwZ,WAAU,EAAO,gFAEfxxB,KAAKC,WAAWC,KAAKL,EAAM0sB,EAAQvU,GAAQ,4CAK7CwZ,iBAEAvxB,WAAWm7B,uBACXxyB,WAAWyyB,4CAITze,UACA5c,KAAK4I,WAAWvD,QAAQuX,wCAInBA,UACL5c,KAAK4I,WAAW0yB,aAAa1e,uCAIzB/c,EAAM0sB,EAAQvU,eACpBwZ,YAEExxB,KAAKC,WAAWC,KAAKL,EAAM0sB,EAAQvU,GAAQ,GAAM,sCAI9CnY,cACN07B,EAAY,cAEX/J,YAEE,IAAIzgB,SAAQ,SAACC,EAASC,GAC5BpJ,EAAK5H,WAAWm7B,kBAEG,iBAATv7B,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGhBA,EACFA,EAAK+C,SAAQ,SAAC2Q,OACTnO,EAAMyC,EAAKe,WAAW2X,QAAQhN,EAAK1L,EAAKpG,QAAQqO,QAEjD1K,IACFm2B,IAEAn2B,EAAIoZ,WAAWjL,GACdxB,MAAK,aACLwpB,GAGCvqB,YAMJhN,QAAQC,KAAK,mCACbgN,EAAO,uEAKFpR,EAAM2mB,EAAK1W,0BACb0hB,YAEE,IAAIzgB,SAAQ,SAACC,EAASC,GAC5BnE,EAAK7M,WAAWm7B,kBAEG,iBAATv7B,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGhBA,EACFiN,EAAKlE,WAAW4yB,QAAQ37B,EAAM2mB,EAAK1W,GAClCiC,MAAK,SAACxB,OACFlN,EAAS,GAEbkN,EAAK3N,SAAQ,SAASwC,GACrB/B,EAAOP,KAAKsC,EAAIrC,mBAGjBiO,EAAQ3N,OAGTW,QAAQC,KAAK,mCACbgN,EAAO,+EAMMpR,cACX0Q,EAAO,GACXgrB,EAAY,cAEP/J,YAEE,IAAIzgB,SAAQ,SAACC,EAASC,GAC5B1D,EAAKtN,WAAWm7B,kBAEG,iBAATv7B,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGhBA,EACFA,EAAK+C,SAAQ,SAAC2Q,OACTnO,EAAMmI,EAAK3E,WAAW2X,QAAQhN,EAAKhG,EAAK9L,QAAQqO,QAEpDyrB,IAEGn2B,EACFA,EAAIoZ,WAAWjL,GACdxB,MAAK,WACLwpB,IACAhrB,EAAKzN,KAAKsC,EAAIrC,gBAEVw4B,GACHvqB,EAAQT,MAIVhD,EAAK3E,WAAW4yB,QAAQjoB,GACvBxB,MAAK,SAAC0pB,GACNF,IACAhrB,EAAKzN,KAAK24B,EAAQ,GAAG14B,gBAEjBw4B,GACHvqB,EAAQT,UAMZvM,QAAQC,KAAK,mCACbgN,EAAO,sEAMHnB,OACF1K,EAAMpF,KAAK4I,WAAW2X,QAAQzQ,UAE/B1K,EACKA,EAAIrC,gBAEXiB,QAAQC,KAAK,sCAAuC6L,IAC7C,8CAKUqF,EAAUyH,OACxBxX,EAAMpF,KAAK4I,WAAW8yB,mBAAmBvmB,EAAUyH,UAEpDxX,EACKA,EAAIrC,gBAEXiB,QAAQC,KAAK,sCAAuCkR,IAC7C,qCAKCrF,cACL6rB,EAAY,QAEXnK,YAEDxe,MAAMC,QAAQnD,KACjBA,EAAQ,CAACA,cAIMA,kCAAM,KAAdyD,UACHnO,EAAMpF,KAAK4I,WAAW2X,QAAQhN,GAAM,OAErCnO,SAGFpB,QAAQ4N,MAAM,wCAAyC2B,GAChDxC,QAAQE,OAAO,wCAHtB0qB,EAAU74B,KAAKsC,yCASjBu2B,EAAUpU,MAAK,SAACC,EAAGC,UACXzZ,EAAKpF,WAAW2H,KAAK7E,QAAQ8b,GAAKxZ,EAAKpF,WAAW2H,KAAK7E,QAAQ+b,GAAK,GAAK,KAIjFkU,EAAU/4B,SAAQ,SAACwC,GAClBA,mBAGIwD,WAAWgd,qBAET7U,QAAQC,yCAITnR,EAAM2mB,EAAK1W,eACZ0hB,YAEc,iBAAT3xB,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGZG,KAAK4I,WAAW4yB,QAAQ37B,EAAM2mB,EAAK1W,GACzCiC,MAAK,SAACxB,UACCA,EAAK,GAAGxN,yDAKF+M,EAAOjQ,OACjBuF,EAAMpF,KAAK4I,WAAW2X,QAAQzQ,eAE7B0hB,YAEc,iBAAT3xB,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGhBuF,EACKA,EAAIoZ,WAAW3e,GACrBkS,MAAK,kBACE3M,EAAIrC,kBAGL/C,KAAK4I,WAAW4yB,QAAQ37B,GAC9BkS,MAAK,SAACxB,UACCA,EAAK,GAAGxN,oDAMR+M,EAAOjQ,OACZuF,EAAMpF,KAAK4I,WAAW2X,QAAQzQ,eAE7B0hB,YAEc,iBAAT3xB,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGhBuF,EACKA,EAAIoZ,WAAW3e,GACrBkS,MAAK,kBACEhB,QAAQC,QAAQ5L,EAAIrC,oBAG5BiB,QAAQC,KAAK,wCAAyC6L,GAC/CiB,QAAQE,OAAO,6EAKZnB,EAAOqF,EAAUC,OACxBhQ,EAAMpF,KAAK4I,WAAW2X,QAAQzQ,UAE/B1K,EACKpF,KAAK4I,WAAWgN,YAAYxQ,EAAK+P,EAAUC,IAElDpR,QAAQC,KAAK,wCAAyC6L,GAC/CiB,QAAQE,OAAO,yEAIhB6L,EAAMnZ,EAAIC,OACbg4B,EAAU57B,KAAK4I,WAAW2X,QAAQzD,QAEjC0U,YAEFoK,EACFA,EAAQrd,UAAU5a,EAAIC,GAEtBI,QAAQC,KAAK,sCAAuC6Y,mCAI9CF,UACA5c,KAAK4I,WAAWsU,cAAcN,0CAIvB9M,EAAO8M,OACjBxX,EAAMpF,KAAK4I,WAAW2X,QAAQzQ,UAE/B1K,EACKpF,KAAK4I,WAAW0V,eAAelZ,EAAKwX,IAE3C5Y,QAAQC,KAAK,0CAA2C6L,IACjD,sCAKEvI,QACLiqB,WAAU,EAAO,0FAEjB/tB,cAAciY,WAAWnU,sCAGpBsV,UACH7c,KAAKyD,cAAcyZ,cAAcL,qCAG/BpW,OACL5E,EAAS7B,KAAKyD,cAAcK,WAAW2C,UAExC5E,EACKA,EAAOkB,gBAEdiB,QAAQC,KAAK,yCAA0CwC,IAChD,yDAKDzG,KAAKyD,cAAco4B,uDAGhBp1B,OACN5E,EAAS7B,KAAKyD,cAAcK,WAAW2C,WAEtC+qB,aAEF3vB,SAGFmC,QAAQC,KAAK,gDAAiDwC,IACvD,EAHP5E,EAAOsB,0CAOEsD,OACN5E,EAAS7B,KAAKyD,cAAcK,WAAW2C,WAEtC+qB,aAEF3vB,SAGFmC,QAAQC,KAAK,gDAAiDwC,IACvD,EAHP5E,EAAOuB,4CAOIqD,OACR5E,EAAS7B,KAAKyD,cAAcK,WAAW2C,WAEtC+qB,aAEF3vB,SAOFmC,QAAQC,KAAK,6DAA8DwC,IACpE,EAPJ5E,EAAOmB,QACTnB,EAAOuB,OAEPvB,EAAOsB,yCAQAoE,EAAYuU,EAAQrV,OACzB5E,EAAS7B,KAAKyD,cAAcK,WAAW2C,eAEtC+qB,YAEExxB,KAAKyD,cAAcqO,UAAUvK,EAAYuU,EAAQja,GACvDkQ,MAAK,SAAClQ,UACCA,EAAOkB,uDAIH0D,OACR5E,EAAS7B,KAAKyD,cAAcK,WAAW2C,eAEtC+qB,YAEF3vB,EACKA,YAEPmC,QAAQC,KAAK,kDAAmDwC,GACzDsK,QAAQE,yDAIMxK,EAAOc,OACzB1F,EAAS7B,KAAKyD,cAAcK,WAAW2C,eAEtC+qB,YAEF3vB,EACKA,EAAO0C,iBAAiBgD,IAE/BvD,QAAQC,KAAK,kDAAmDwC,GACzDsK,QAAQE,6CAIN6L,EAAMnZ,EAAIC,OAChBk4B,EAAa97B,KAAKyD,cAAcK,WAAWgZ,GAC/CjZ,EAAW7D,KAAKyD,cAAcK,WAAWH,QAEpC6tB,YAEFsK,EACCj4B,OACGJ,cAAcM,WAAW+3B,EAAYj4B,EAAUD,GAEpDI,QAAQC,KAAK,yCAA0CJ,GAGxDG,QAAQC,KAAK,yCAA0C6Y,0CAK1CrW,EAAO0O,EAAUC,qBACxB,IAAIrE,SAAQ,SAACC,EAASC,OACxBpP,EAASwM,EAAK5K,cAAcK,WAAW2C,UAExC5E,EACKwM,EAAK5K,cAAcC,eAAe7B,EAAQsT,EAAUC,IAE3DpR,QAAQC,KAAK,2CAA4CwC,GAClDsK,QAAQE,OAAO,8EAOlB5I,QACDmpB,iBAEA/tB,cAAcoY,OAAOxT,QACrBO,WAAWiT,OAAOxT,qCAGdxC,QACJpE,QAAQoE,OAASoK,MAAMpK,GAAUA,EAASA,EAAS,UACnDF,QAAQe,MAAMb,OAAS7F,KAAKyB,QAAQoE,YACpC+C,WAAW2R,0BACX3R,WAAWiT,oCAKd3a,EAAKoT,QACF9S,eAAeR,UAAUE,EAAKoT,+BAGhCpT,EAAKoT,QACH9S,eAAeP,YAAYC,EAAKoT,iDAIjC4Z,EAAOlb,MAAM8J,KAAKvc,WAChB2tB,EAAKC,gBAEN3sB,gBAAeH,iBAAYd,yCAK3B6N,EAAUrM,QACVyvB,iBAEAnE,aAAaC,MAAMlf,EAAUrM,6CAI7ByvB,iBAEAnE,aAAavV,0CAITikB,EAAQC,WACdh8B,KAAKI,QAAQ27B,KAGZC,GACFh4B,QAAQ4N,MAAM,mCAAqCmqB,IAE7C,kCAIF76B,OACFs2B,EAAMx3B,KAAKI,QAAQc,UAEnBs2B,GACHxzB,QAAQ4N,MAAM,mCAAqC1Q,GAG7Cs2B,WAKTpI,EAAUnd,eCt2BK,CAEdknB,qBAAoB,EACpBC,qBAAoB,EACpBrlB,qBAAoB,EACpBinB,qBAAoB,EAEpBn1B,QAAO,EACPiJ,WAAU,EACVyQ,WAAU,EAEVjD,sBAAsB,MAEtB2T,gBAAe,EAEf/sB,QAAQ,GACRkI,eAAe,GAEfvL,MAAK,EAELgmB,aAAY,EACZpK,wBAAuB,EAEvB7P,qBAAqB,IAErB2d,eAAc,EAEdzZ,MAAM,KAENiqB,cAAc,OAEdjT,UAAU,SAEV5L,eAAc,EAEdmN,eAAe,UACfrN,iBAAiB,QACjB+H,qBAAqB,EAErBrN,oBAAoB,MACpBH,sBAAqB,EAErBiI,uBAAuB,OACvBC,yBAAwB,EAExB2B,cAAa,EACb6c,kBAAkB,KAClBC,sBAAsB,KACtBC,uBAAuB,KAEvB3c,UAAU,KAEV8E,aAAY,EAEZrkB,YAAW,EACXstB,mBAAkB,EAClBE,iBAAgB,EAChBN,uBAAuB,IAEvBP,eAAe,GAEfG,kBAAkB,ID4yBnB,IAAI+J,EAAa1H,OEp2BXgN,2CAEOx8B,yCACLA,IAEDy8B,aAAe,CAAC,GAAI,OAAQ,WAAY,YAAa,QAAS,gBAE9D/H,qBAAqB,cACrBA,qBAAqB,oBACrBA,qBAAqB,kBACrBA,qBAAqB,wBACrBA,qBAAqB,sBACrBA,qBAAqB,4BACrBA,qBAAqB,uBACrBA,qBAAqB,6BACrBA,qBAAqB,mBACrBA,qBAAqB,yBACrBA,qBAAqB,wBACrBA,qBAAqB,kFAIrBtzB,UAAU,gBAAiBhB,KAAKs8B,iBAAiB97B,KAAKR,YACtDgB,UAAU,oBAAqBhB,KAAKu8B,aAAa/7B,KAAKR,gDAI3C6B,cACZsR,GAAQ,EACZ6E,EAAS,QAEJqkB,aAAaz5B,SAAQ,SAACb,OAE1By6B,EADIt7B,EAAM,YAAca,EAAK06B,OAAO,GAAGC,cAAgB36B,EAAKqhB,MAAM,IAG/DvhB,EAAO0F,WAAWrG,KACpBs7B,EAAW30B,EAAK80B,eAAe96B,EAAO0F,WAAWrG,OAGhDiS,GAAQ,EAER6E,EAAO9W,GAAO,CACbs7B,SAASA,EACTjQ,OAAQ1qB,EAAO0F,WAAWrG,EAAM,WAAa,QAM9CiS,IACFtR,EAAOzB,QAAQo8B,SAAWxkB,0CAIbtW,OACV86B,GAAW,WAGD96B,QACR,SACF06B,EAASQ,UAAUl7B,GACrB86B,EAAWJ,EAASQ,UAAUl7B,GAE9BsC,QAAQC,KAAK,sDAAuDvC,aAIhE,WACL86B,EAAW96B,SAIL86B,uCAIKp3B,EAAKrD,OACbb,EAAM,YAAca,EAAK06B,OAAO,GAAGC,cAAgB36B,EAAKqhB,MAAM,IAClEyZ,EAAez3B,EAAIrC,eAGflD,EAAOqS,EAAQuB,UAAUrO,EAAIvF,MAAQ,gBAEpCD,MAAM6D,cAAcq5B,UAAS,SAASj7B,OACtCH,EAAO86B,EAAUjQ,EAAQwQ,EAE1Bl7B,EAAOzB,QAAQo8B,WAEjBA,EAAW36B,EAAOzB,QAAQo8B,SAASt7B,IAAQW,EAAOzB,QAAQo8B,SAASA,WAAY,IAKlE,cAFZ96B,EAAQG,EAAOuE,cAAcvG,MAG5Bk9B,EAAcl7B,EAAOkB,eACrBwpB,EAAoC,mBAApBiQ,EAASjQ,OAAwBiQ,EAASjQ,OAAO7qB,EAAO7B,EAAMkC,EAAMg7B,EAAaF,GAAgBL,EAASjQ,OAC1H1qB,EAAOiH,cAAcjJ,EAAM28B,EAASA,SAAS96B,EAAO7B,EAAMkC,EAAMwqB,EAAQwQ,EAAaF,QAMlFh9B,SAtGcuxB,GA2GvBgL,EAAS5H,WAAa,WACtB4H,EAASQ,UCjHM,GCAf,SAASI,EAAmBn9B,EAAM81B,OAC7BtyB,EAAS,MAEbsyB,EAASA,GAAU,GAEhB3iB,MAAMC,QAAQpT,GAChBA,EAAK+C,SAAQ,SAAC2Q,EAAM5I,GACnBtH,EAASA,EAAOia,OAAO0f,EAAmBzpB,EAAMoiB,EAASA,EAAS,IAAMhrB,EAAI,IAAMA,YAE9E,GAAoB,WAAhB0I,EAAOxT,OACX,IAAIqB,KAAOrB,EACfwD,EAASA,EAAOia,OAAO0f,EAAmBn9B,EAAKqB,GAAMy0B,EAASA,EAAS,IAAMz0B,EAAM,IAAMA,SAG1FmC,EAAOP,KAAK,CAAC5B,IAAIy0B,EAAQj0B,MAAM7B,WAGzBwD,EAGR,SAAS45B,EAAgB1Q,OACpBlpB,EAAS25B,EAAmBzQ,GAChC2Q,EAAU,UAEV75B,EAAOT,SAAQ,SAAS2Q,GACvB2pB,EAAQp6B,KAAKq6B,mBAAmB5pB,EAAKrS,KAAO,IAAMi8B,mBAAmB5pB,EAAK7R,WAGpEw7B,EAAQE,KAAK,KAGN,YAASC,EAAKrlB,EAAQuU,UACjC8Q,GACC9Q,GAAU/gB,OAAOC,KAAK8gB,GAAQjpB,SAC5B0U,EAAOslB,QAAyC,OAA/BtlB,EAAOslB,OAAO5H,gBAClC1d,EAAOslB,OAAS,MAEhBD,IAAQA,EAAIvS,SAAS,KAAO,IAAM,KAAOmS,EAAgB1Q,KAKrD8Q,EC1CR,SAASL,GAAmBn9B,EAAM81B,OAC7BtyB,EAAS,MAEbsyB,EAASA,GAAU,GAEhB3iB,MAAMC,QAAQpT,GAChBA,EAAK+C,SAAQ,SAAC2Q,EAAM5I,GACnBtH,EAASA,EAAOia,OAAO0f,GAAmBzpB,EAAMoiB,EAASA,EAAS,IAAMhrB,EAAI,IAAMA,YAE9E,GAAoB,WAAhB0I,EAAOxT,OACX,IAAIqB,KAAOrB,EACfwD,EAASA,EAAOia,OAAO0f,GAAmBn9B,EAAKqB,GAAMy0B,EAASA,EAAS,IAAMz0B,EAAM,IAAMA,SAG1FmC,EAAOP,KAAK,CAAC5B,IAAIy0B,EAAQj0B,MAAM7B,WAGzBwD,SAGO,MACP,CACNk6B,QAAQ,gBACS,oBAEjBpN,KAAK,SAASkN,EAAKrlB,EAAQuU,UACnBvM,KAAKwd,UAAUjR,UAGjB,CACNgR,QAAQ,GAERpN,KAAK,SAASkN,EAAKrlB,EAAQuU,OAEtBlpB,EAAS25B,GAAmBzQ,GAChCkR,EAAO,IAAIC,gBAEXr6B,EAAOT,SAAQ,SAAS2Q,GACvBkqB,EAAK9L,OAAOpe,EAAKrS,IAAKqS,EAAK7R,UAGrB+7B,KClCJE,4CAEO/9B,yCACLA,IAEDoY,OAAS,KACTqlB,IAAM,KACNO,cAAe,IACfrR,QAAS,IAETsR,eAAgB,IAEhBxJ,oBAAoB,WAAW,KAC/BA,oBAAoB,oBAAoB,KACxCA,oBAAoB,aAAc,MAClCA,oBAAoB,aAAc,SAClCA,oBAAoB,kBAAmB,UACvCA,oBAAoB,mBAAmB,KAEvCA,oBAAoB,kBAAkB,iBACtCA,oBAAoB,gBAAgB,KAEpCyJ,sBAAwBH,EAAKG,4EAK7BD,cAAgB79B,KAAKJ,MAAM6B,QAAQs8B,iBAAmBJ,EAAKK,0BAC3DJ,aAAe59B,KAAKJ,MAAM6B,QAAQw8B,kBAAoBN,EAAKO,oBAE7Dl+B,KAAKJ,MAAM6B,QAAQ08B,cAChBC,OAAOp+B,KAAKJ,MAAM6B,QAAQ08B,cAI3BE,iBAAiBr+B,KAAKJ,MAAM6B,QAAQ68B,iBAEpCnJ,sBAAsB,aAAcn1B,KAAKu+B,OAAO/9B,KAAKR,YAErDgB,UAAU,eAAgBhB,KAAKw+B,iBAAiBh+B,KAAKR,YACrDgB,UAAU,cAAehB,KAAKy+B,cAAcj+B,KAAKR,YACjDgB,UAAU,YAAahB,KAAK0+B,YAAYl+B,KAAKR,6CAGrCH,EAAMmY,EAAQlY,EAAQysB,OAC/BoS,EAAa3+B,KAAKJ,MAAM6B,QAAQk9B,kBAEjCA,IACuB,mBAAfA,IACTA,EAAaA,EAAWl2B,KAAKzI,KAAKJ,QAGnC2sB,EAAS/gB,OAAOqG,OAAO0a,EAAQoS,IAGzBpS,2CAGS1sB,EAAM0sB,EAAQvU,EAAQlY,YAC1BD,IAAQG,KAAKq9B,MAAwB,iBAATx9B,uCAG7Bw9B,EAAK9Q,EAAQvU,EAAQlY,EAAQ8+B,OACpCN,SAEAM,GAAgB5+B,KAAKw+B,iBAAiBnB,IACtCA,QACGe,OAAOf,GAGbiB,EAAat+B,KAAK6+B,eAAe7mB,GAE1BhY,KAAK8+B,YAAY9+B,KAAKq9B,IAAK9Q,EAAQ+R,IAEnCM,iDAIQ5mB,yDAAS,QACpBA,OAASxM,OAAOqG,OAAO,GAAI8rB,EAAKoB,eAEjB,iBAAV/mB,OACJA,OAAOslB,OAAStlB,EAErBxM,OAAOqG,OAAO7R,KAAKgY,OAAQA,gDAKdA,yDAAS,GACnBsmB,EAAa9yB,OAAOqG,OAAO,GAAI7R,KAAKgY,cAEpB,iBAAVA,EACTsmB,EAAWhB,OAAStlB,EAEpBxM,OAAOqG,OAAOysB,EAAYtmB,GAGpBsmB,iCAIDjB,QACDA,IAAMA,0CAKJr9B,KAAKq9B,wCAIDA,EAAK9Q,EAAQvU,qBAC+C,IAApEhY,KAAKJ,MAAM6B,QAAQu9B,eAAev2B,KAAKzI,KAAKJ,MAAOy9B,EAAK9Q,GACnDvsB,KAAK69B,cAAcR,EAAKrlB,EAAQuU,GACtCxa,MAAK,SAAClS,UACHgI,EAAKjI,MAAM6B,QAAQw9B,eACrBp/B,EAAOgI,EAAKjI,MAAM6B,QAAQw9B,aAAax2B,KAAKZ,EAAKjI,MAAOy9B,EAAK9Q,EAAQ1sB,IAG/DA,KAGDkR,QAAQE,gBA3HCmgB,GAgInBuM,GAAKnJ,WAAa,OAGlBmJ,GAAKoB,cC1IU,CACdzB,OAAQ,OD0ITK,GAAKO,oBAAsBA,GAC3BP,GAAKK,qBE5IU,SAASX,EAAKrlB,EAAQuU,OAChC2S,gBAEG,IAAInuB,SAAQ,SAACC,EAASC,MAE5BosB,EAAMvzB,EAAK8zB,aAAan1B,KAAKqB,EAAKlK,MAAOy9B,EAAKrlB,EAAQuU,GAGpB,OAA/BvU,EAAOslB,OAAOZ,iBAChBwC,EAA4D,WAA9C7rB,EAAOvJ,EAAKlK,MAAM6B,QAAQ09B,iBAAgCr1B,EAAKlK,MAAM6B,QAAQ09B,gBAAkBr1B,EAAKg0B,sBAAsBh0B,EAAKlK,MAAM6B,QAAQ09B,iBAC5I,KAEV,IAAIj+B,KAAOg+B,EAAY3B,QACtBvlB,EAAOulB,UACVvlB,EAAOulB,QAAU,SAGgB,IAAxBvlB,EAAOulB,QAAQr8B,KACxB8W,EAAOulB,QAAQr8B,GAAOg+B,EAAY3B,QAAQr8B,IAI5C8W,EAAOmY,KAAO+O,EAAY/O,KAAK1nB,KAAKqB,EAAMuzB,EAAKrlB,EAAQuU,QAGvDvoB,QAAQC,KAAK,8CAA+C6F,EAAKlK,MAAM6B,QAAQ09B,iBAI9E9B,QAE2B,IAAnBrlB,EAAOulB,UAChBvlB,EAAOulB,QAAU,SAGkB,IAA1BvlB,EAAOulB,QAAQ6B,SACxBpnB,EAAOulB,QAAQ6B,OAAS,yBAGwB,IAAvCpnB,EAAOulB,QAAQ,sBACxBvlB,EAAOulB,QAAQ,oBAAsB,uBAGZ,IAAhBvlB,EAAOoc,OAChBpc,EAAOoc,KAAO,QAGG,QAAfpc,EAAOoc,WAC8B,IAA7Bpc,EAAOulB,QAAP,SACTvlB,EAAOulB,QAAP,OAA2BnrB,OAAOitB,SAASxO,aAGX,IAAvB7Y,EAAOsnB,cAChBtnB,EAAOsnB,YAAc,qBAGW,IAAvBtnB,EAAOsnB,cAChBtnB,EAAOsnB,YAAc,WAKvBC,MAAMlC,EAAKrlB,GACVjG,MAAK,SAAC8a,GACHA,EAAS5V,GACX4V,EAAS2S,OACRztB,MAAK,SAAClS,GACNmR,EAAQnR,aACA,SAAC+R,GACTX,EAAOW,GACP5N,QAAQC,KAAK,0CAA2C2N,OAGzD5N,QAAQ4N,MAAM,uCAAyCib,EAAS4S,OAAQ5S,EAAS6S,YACjFzuB,EAAO4b,cAGF,SAACjb,GACP5N,QAAQ4N,MAAM,uCAAwCA,GACtDX,EAAOW,QAGR5N,QAAQC,KAAK,gCACb+M,EAAQ,SF0DX2sB,GAAKG,sBAAwB6B,OGxIvBC,4CAEOhgC,yCACLA,IAEDw0B,MAAO,IACPyL,YAAc,eACdC,YAAc,eACdC,iBAAkB,IAClBC,UAAW,IACXC,SAAU,IAEV5L,oBAAoB,aAAa,KACjCA,oBAAoB,uBAAuB,KAC3CA,oBAAoB,uBAAuB,KAC3CA,oBAAoB,0BAA0B,KAC9CA,oBAAoB,wBAAyB,YAC7CA,oBAAoB,uBAAwB,WAC5CA,oBAAoB,uBAAwB,YAE5CC,qBAAqB,eACrBA,qBAAqB,mFAIrBF,KAAOp0B,KAAKJ,MAAM6B,QAAQy+B,eAE1BF,SAAWhgC,KAAKJ,MAAM6B,QAAQ0+B,uBAElB,IAAdngC,KAAKo0B,MAA+B,SAAdp0B,KAAKo0B,WACxBx0B,MAAM+F,QAAQiH,iBAAiB,QAAQ,SAACC,OACxCuzB,EAAOC,MAEPx4B,EAAKo4B,QAAQ,IAChBpzB,EAAEyzB,iBAECz4B,EAAKk4B,gBACPK,EAAQv4B,EAAKk4B,gBAEVl4B,EAAKjI,MAAM6B,QAAQ8+B,yBACrBH,EAAQv4B,EAAKjI,MAAM6B,QAAQ8+B,uBAAuB,QAASH,QAExD,KAEAxtB,EAAO/K,EAAKjI,MAAMQ,eAAeogC,mBAAmB34B,EAAKjI,MAAM6B,QAAQg/B,oBAAqB54B,EAAKjI,MAAM6B,QAAQi/B,oBAAqB74B,EAAKm4B,SAAU,aAGvJI,GADAC,EAAOx4B,EAAKjI,MAAMQ,eAAeugC,mBAAmB/tB,IACrC/K,EAAK+4B,qBAAqBhuB,GAAQ,GAE9C/K,EAAKjI,MAAM6B,QAAQ8+B,yBACrBH,EAAQv4B,EAAKjI,MAAM6B,QAAQ8+B,uBAAuB,QAASH,GAC3DC,EAAOx4B,EAAKjI,MAAM6B,QAAQ8+B,uBAAuB,OAAQF,IAIvDjuB,OAAOyuB,eAAiBzuB,OAAOyuB,cAAc7hB,QAChD5M,OAAOyuB,cAAc7hB,QAAQ,OAAQohB,GAC3BvzB,EAAEg0B,eAAiBh0B,EAAEg0B,cAAc7hB,SAC7CnS,EAAEg0B,cAAc7hB,QAAQ,aAAcohB,GACnCC,GACFxzB,EAAEg0B,cAAc7hB,QAAQ,YAAaqhB,IAE5BxzB,EAAEi0B,eAAiBj0B,EAAEi0B,cAAcD,cAAc7hB,UAC3DnS,EAAEi0B,cAAcD,cAAc7hB,QAAQ,aAAcohB,GACjDC,GACFxzB,EAAEi0B,cAAcD,cAAc7hB,QAAQ,YAAaqhB,IAIrDx4B,EAAKa,iBAAiB,kBAAmB03B,EAAOC,GAEhDx4B,EAAKk5B,aAKS,IAAd/gC,KAAKo0B,MAA+B,UAAdp0B,KAAKo0B,WACxBx0B,MAAM+F,QAAQiH,iBAAiB,SAAS,SAACC,GAC7ChF,EAAKm5B,MAAMn0B,WAIRo0B,eAAejhC,KAAKJ,MAAM6B,QAAQy/B,2BAClCC,eAAenhC,KAAKJ,MAAM6B,QAAQ2/B,2BAElCjM,sBAAsB,kBAAmBn1B,KAAKoT,KAAK5S,KAAKR,4CAIxDigC,SAAU,OACVF,iBAAkB,+CAGFntB,OACjBvP,EAAS,UAEbuP,EAAKhQ,SAAQ,SAACwC,OACT4nB,EAAU,GAEd5nB,EAAIlC,QAAQN,SAAQ,SAACuU,OAChBzV,EAAQ,MAETyV,KAEc,UAAb/R,EAAIrD,OACNoV,EAAIzV,MAAQyV,EAAIpR,UAAUs7B,UAGV,OAAdlqB,EAAIzV,MACNA,EAAQ,iBAEMyV,EAAIzV,YACZ,SACLA,EAAQse,KAAKwd,UAAUrmB,EAAIzV,iBAGtB,YACLA,EAAQ,iBAIRA,EAAQyV,EAAIzV,MAKfsrB,EAAQlqB,KAAKpB,MAGd2B,EAAOP,KAAKkqB,EAAQoQ,KAAK,UAGnB/5B,EAAO+5B,KAAK,mCAGdkE,EAAOC,OACDC,EAAKC,OACXxB,SAAU,OACVF,iBAAkB,GAEL,IAAd//B,KAAKo0B,MAA+B,SAAdp0B,KAAKo0B,YAEzB4L,SAAWsB,GAASthC,KAAKJ,MAAM6B,QAAQ0+B,2BAEV,IAAvB/tB,OAAOknB,mBAA8D,IAAxBjzB,SAASq7B,cAChEJ,EAAQj7B,SAASq7B,eACXC,mBAAmB3hC,KAAKJ,MAAM+F,UACpC67B,EAAMpvB,OAAOknB,gBAELsI,YAAcL,SAChBxB,gBAAkByB,EAAII,YAG5BJ,EAAIhI,kBACJgI,EAAIK,SAASP,SAC0B,IAAtBj7B,SAASozB,gBAAoE,IAAjCpzB,SAAS8pB,KAAK2R,mBAC3EL,EAAYp7B,SAAS8pB,KAAK2R,mBAChBC,kBAAkB/hC,KAAKJ,MAAM+F,SACvC87B,EAAUO,UAGX37B,SAAS47B,YAAY,QAEjBT,GACHA,EAAIhI,0DAMQ9C,YAEAA,QACR,cACAoJ,YAAcF,EAAUsC,aAAaxL,GAEtC12B,KAAK8/B,aACR97B,QAAQC,KAAK,gDAAiDyyB,aAI1D,gBACAoJ,YAAcpJ,0CAKNyL,YACAA,QACR,cACAtC,YAAcD,EAAUwC,aAAaD,GAEtCniC,KAAK6/B,aACR77B,QAAQC,KAAK,gDAAiDk+B,aAI1D,gBACAtC,YAAcsC,iCAKft1B,OACDhN,EAAMmtB,EAASzc,EAEhBvQ,KAAKqiC,gBAAgBx1B,KAEvBhN,EAAOG,KAAKsiC,aAAaz1B,IAEzBmgB,EAAUhtB,KAAK6/B,YAAYp3B,KAAKzI,KAAMH,KAGrCgN,EAAEyzB,iBAECtgC,KAAKJ,MAAMoyB,UAAU,aACvBhF,EAAUhtB,KAAKuiC,WAAWvV,IAG3Bzc,EAAOvQ,KAAK8/B,YAAYr3B,KAAKzI,KAAMgtB,QAE9BtkB,iBAAiB,kBAAmB7I,EAAMmtB,EAASzc,SAEnD7H,iBAAiB,sBAAuB7I,uCAKrCA,cACNwD,EAAS,UAEV2P,MAAMC,QAAQpT,GAChBA,EAAK+C,SAAQ,SAACwC,GACb/B,EAAOP,KAAKgK,EAAKlN,MAAMQ,QAAQoiC,QAAQjG,aAAan3B,EAAK,iBAG1D/B,EAASxD,EAGHwD,0CAIQwJ,OACX41B,GAAQ,SAEW,OAApB51B,EAAE3K,OAAOi4B,SAAoBn6B,KAAKJ,MAAMQ,QAAQsiC,KAAKC,eACvDF,GAAQ,GAGFA,uCAGK51B,OACRhN,SAEAuS,OAAOyuB,eAAiBzuB,OAAOyuB,cAAcx7B,QAChDxF,EAAOuS,OAAOyuB,cAAcx7B,QAAQ,QAC1BwH,EAAEg0B,eAAiBh0B,EAAEg0B,cAAcx7B,QAC7CxF,EAAOgN,EAAEg0B,cAAcx7B,QAAQ,cACrBwH,EAAEi0B,eAAiBj0B,EAAEi0B,cAAcD,cAAcx7B,UAC3DxF,EAAOgN,EAAEi0B,cAAcD,cAAcx7B,QAAQ,eAGvCxF,SAxQeuxB,GA4QxBwO,GAAUpL,WAAa,YAGvBoL,GAAUsC,aCpRK,CACd1V,QAAQ,SAASjc,UACTvQ,KAAKJ,MAAMof,QAAQzO,IAE3BgE,OAAO,SAAShE,UACRvQ,KAAKJ,MAAMgjC,gBAAgBryB,IAEnCsyB,OAAO,SAAStyB,UACRvQ,KAAKJ,MAAMkjC,QAAQvyB,KD6Q5BqvB,GAAUwC,aErRK,CACdxiC,MAAM,SAASsgC,OACVrgC,EAAO,GAEXkjC,GAAoB,EACpB7/B,EAAUlD,KAAKJ,MAAM6D,cAAcP,QACnC8/B,EAAY,GACZzyB,EAAO,UAGP2vB,EAAYA,EAAUz4B,MAAM,OAElB7E,SAAQ,SAASwC,GAC1BvF,EAAKiD,KAAKsC,EAAIqC,MAAM,aAGlB5H,EAAKyD,QAA4B,IAAhBzD,EAAKyD,QAAgBzD,EAAK,GAAGyD,OAAS,KAIzDzD,EAAK,GAAG+C,SAAQ,SAASlB,OACpBG,EAASqB,EAAQgU,MAAK,SAASrV,UAC3BH,GAASG,EAAO0F,WAAWoE,OAASjK,EAAMw5B,QAAUr5B,EAAO0F,WAAWoE,MAAMuvB,SAAWx5B,EAAMw5B,UAGlGr5B,EACFmhC,EAAUlgC,KAAKjB,GAEfkhC,GAAoB,KAKlBA,IACHA,GAAoB,EACpBC,EAAY,GAEZnjC,EAAK,GAAG+C,SAAQ,SAASlB,OACpBG,EAASqB,EAAQgU,MAAK,SAASrV,UAC3BH,GAASG,EAAO4E,OAAS/E,EAAMw5B,QAAUr5B,EAAO4E,MAAMy0B,SAAWx5B,EAAMw5B,UAG5Er5B,EACFmhC,EAAUlgC,KAAKjB,GAEfkhC,GAAoB,KAIlBA,IACHC,EAAYhjC,KAAKJ,MAAM6D,cAAciU,iBAKpCqrB,GACFljC,EAAKsuB,QAGNtuB,EAAK+C,SAAQ,SAAS2Q,OACjBnO,EAAM,GAEVmO,EAAK3Q,SAAQ,SAASlB,EAAOiJ,GACzBq4B,EAAUr4B,KACZvF,EAAI49B,EAAUr4B,GAAGlE,OAAS/E,MAI5B6O,EAAKzN,KAAKsC,MAGJmL,SCvEJ0yB,yBACQ79B,yBACP+Y,KAAO/Y,EAEL,IAAIpD,MAAMhC,KAAM,CACtBiC,IAAK,SAASC,EAAQC,EAAMC,eACC,IAAjBF,EAAOC,GACVD,EAAOC,GAEPD,EAAOic,KAAKve,MAAMyC,wBAAwBC,OAAO,MAAOJ,EAAOic,KAAMhc,gDAMxEic,UACApe,KAAKme,KAAK9Y,QAAQ+Y,+CAIlBpe,KAAKme,KAAK5b,uDAIVvC,KAAKme,KAAKve,6CAIb+C,EAAQ,eAEPwb,KAAKE,WAAWzb,SAAQ,SAASC,GACrCF,EAAMG,KAAKD,EAAKE,mBAGVJ,kCAGAd,OACHgB,EAAO7C,KAAKme,KAAK1E,QAAQ5X,WACtBgB,GAAOA,EAAKE,yDAIZ/C,KAAKme,iBC3CC,KACR,SAAS4M,EAAQlrB,EAAMqjC,OACxB7/B,EAAS,EACb8/B,OAA4C,IAAzBD,EAAWC,UAA4BD,EAAWC,UAAY,SAE9EpY,EAAOznB,SACTD,EAAS0nB,EAAOqY,QAAO,SAASC,EAAK3hC,UAC7B4hC,OAAOD,GAAOC,OAAO5hC,MAG7B2B,GAAkB0nB,EAAOznB,OAEzBD,GAAuB,IAAd8/B,EAAsB9/B,EAAOkgC,QAAQJ,GAAa9/B,GAGrDmgC,WAAWngC,GAAQu+B,gBAErB,SAAS7W,EAAQlrB,EAAMqjC,OACxB7/B,EAAS,KACb8/B,OAA4C,IAAzBD,EAAWC,WAA4BD,EAAWC,iBAErEpY,EAAOnoB,SAAQ,SAASlB,KAEvBA,EAAQ4hC,OAAO5hC,IAEJ2B,GAAqB,OAAXA,KACpBA,EAAS3B,MAIO,OAAX2B,GAAiC,IAAd8/B,EAAsB9/B,EAAOkgC,QAAQJ,GAAa9/B,EAAU,QAEjF,SAAS0nB,EAAQlrB,EAAMqjC,OACxB7/B,EAAS,KACb8/B,OAA4C,IAAzBD,EAAWC,WAA4BD,EAAWC,iBAErEpY,EAAOnoB,SAAQ,SAASlB,KAEvBA,EAAQ4hC,OAAO5hC,IAEJ2B,GAAqB,OAAXA,KACpBA,EAAS3B,MAIO,OAAX2B,GAAiC,IAAd8/B,EAAsB9/B,EAAOkgC,QAAQJ,GAAa9/B,EAAU,QAEjF,SAAS0nB,EAAQlrB,EAAMqjC,OACxB7/B,EAAS,EACb8/B,OAA4C,IAAzBD,EAAWC,WAA4BD,EAAWC,iBAElEpY,EAAOznB,QACTynB,EAAOnoB,SAAQ,SAASlB,GACvBA,EAAQ4hC,OAAO5hC,GAEf2B,GAAW4M,MAAMvO,GAAyB,EAAhB4hC,OAAO5hC,OAId,IAAdyhC,EAAsB9/B,EAAOkgC,QAAQJ,GAAa9/B,UAEjD,SAAS0nB,EAAQlrB,EAAMqjC,OAC3B7/B,EAAS,SAEV0nB,EAAOznB,SACTD,EAAS0nB,EAAOqY,QAAO,SAASC,EAAK3hC,UAC7B+hC,OAAOJ,GAAOI,OAAO/hC,OAIvB2B,SAEA,SAAS0nB,EAAQlrB,EAAMqjC,OAC1B7/B,EAAS,SAEV0nB,EAAOznB,QACTynB,EAAOnoB,SAAQ,SAASlB,GACpBA,GACF2B,OAKIA,ICzEHqgC,4CAEO9jC,yCACLA,IAED+jC,SAAW,KACXC,SAAW,KACXC,WAAY,IACZC,WAAah6B,EAAKxD,kBAClBy9B,WAAaj6B,EAAKxD,kBAClB8b,QAAS,IACT4hB,QAAS,IACTC,gBAAiB,IACjBC,gBAAiB,IAEjB7P,oBAAoB,eAAe,KAEnCC,qBAAqB,aACrBA,qBAAqB,mBACrBA,qBAAqB,sBACrBA,qBAAqB,4BACrBA,qBAAqB,gBACrBA,qBAAqB,sBACrBA,qBAAqB,yBACrBA,qBAAqB,qFAItBppB,EAAK7E,SAASC,cAAc,cAChC4E,EAAGxD,UAAUC,IAAI,0BACVuD,4CAIF24B,UAAY,IAAIrgC,EAAO,CAACiD,MAAM,SAAUzG,WAExCgB,UAAU,qBAAsBhB,KAAKmkC,iBAAiB3jC,KAAKR,YAC3DgB,UAAU,cAAehB,KAAKokC,sBAAsB5jC,KAAKR,YACzDgB,UAAU,cAAehB,KAAKqkC,YAAY7jC,KAAKR,YAC/CgB,UAAU,oBAAqBhB,KAAK2a,iBAAiBna,KAAKR,YAC1DgB,UAAU,YAAahB,KAAKqkC,YAAY7jC,KAAKR,YAC7CgB,UAAU,eAAgBhB,KAAKskC,iBAAiB9jC,KAAKR,YACrDgB,UAAU,aAAchB,KAAKskC,iBAAiB9jC,KAAKR,YACnDgB,UAAU,iBAAkBhB,KAAKukC,wBAAwB/jC,KAAKR,YAC9DgB,UAAU,eAAgBhB,KAAKwkC,YAAYhkC,KAAKR,YAChDgB,UAAU,eAAgBhB,KAAK2W,YAAYnW,KAAKR,YAEhDm1B,sBAAsB,iBAAkBn1B,KAAKykC,WAAWjkC,KAAKR,YAC7Dm1B,sBAAsB,SAAUn1B,KAAK0kC,WAAWlkC,KAAKR,2CAG/CqI,QACNs8B,OAAO3kC,KAAKJ,MAAMgJ,WAAWgc,YAE/Bvc,QACGwT,mDASD8oB,OAAO3kC,KAAKJ,MAAMgJ,WAAWgc,gDAOvBsD,EAAU3X,UAClBvQ,KAAKoiB,QACP7R,EAAKiD,QAAQxT,KAAKoiB,QAGhBpiB,KAAKgkC,QACPzzB,EAAKzN,KAAK9C,KAAKgkC,QAGTzzB,sCAGInL,GACRpF,KAAKJ,MAAM6B,QAAQmjC,aAChBC,eAAe7kC,WAEfskC,qEAKHtkC,KAAKJ,MAAM6B,QAAQmjC,SAAW5kC,KAAKJ,MAAM6B,QAAQqjC,uBAAyB9kC,KAAKJ,MAAM6B,QAAQsjC,cAC1FC,iBAEAV,mEAKDK,OAAO3kC,KAAKJ,MAAMgJ,WAAWgc,qDAGlB/hB,IACbA,EAAKhB,OAAO0F,WAAW09B,SAAWpiC,EAAKhB,OAAO0F,WAAW29B,cACxDllC,KAAKJ,MAAM6B,QAAQmjC,SACgB,SAAlC5kC,KAAKJ,MAAM6B,QAAQ0jC,aAA4D,QAAlCnlC,KAAKJ,MAAM6B,QAAQ0jC,kBAC7Db,mBAG+B,SAAlCtkC,KAAKJ,MAAM6B,QAAQ0jC,kBAChBN,eAAehiC,EAAKuC,WAGrBk/B,kEAKcziC,IAClBA,EAAO0F,WAAW09B,SAAWpjC,EAAO0F,WAAW29B,kBAC5C5I,iBAAiBz6B,4CAKPA,OACZgI,EAAMhI,EAAO0F,WAEbyQ,EAAS,CACZotB,cAAcv7B,EAAIu7B,eAAiB,GACnCC,cAAcx7B,EAAIy7B,kBAAoB,OAGpCz7B,EAAIo7B,QAAQ,UAEAp7B,EAAIo7B,cACZ,SACFvB,EAAY6B,aAAa17B,EAAIo7B,SAC/BjtB,EAAOitB,QAAUvB,EAAY6B,aAAa17B,EAAIo7B,SAE9CjhC,QAAQC,KAAK,4DAA6D4F,EAAIo7B,mBAI1E,WACLjtB,EAAOitB,QAAUp7B,EAAIo7B,QAKnBjtB,EAAOitB,UACTpjC,EAAOzB,QAAQ+kC,YAAcntB,OACxB2rB,SAAS7gC,KAAKjB,GAEkB,SAAlC7B,KAAKJ,MAAM6B,QAAQ0jC,kBAChBK,uBAML37B,EAAIq7B,WAAW,UACHr7B,EAAIq7B,iBACZ,SACFxB,EAAY6B,aAAa17B,EAAIq7B,YAC/BltB,EAAOytB,QAAU/B,EAAY6B,aAAa17B,EAAIq7B,YAE9ClhC,QAAQC,KAAK,4DAA6D4F,EAAIq7B,sBAI1E,WACLltB,EAAOytB,QAAU57B,EAAIq7B,WAKnBltB,EAAOytB,UACT5jC,EAAOzB,QAAQ+kC,YAAcntB,OACxB4rB,SAAS9gC,KAAKjB,GAEkB,SAAlC7B,KAAKJ,MAAM6B,QAAQ0jC,kBAChBO,iHAWJ78B,GAAU,EAEX7I,KAAKikC,sBACFA,gBAAiB,OACjBH,WAAWr6B,WAAWxB,YAAYjI,KAAK8jC,YAC5Cj7B,GAAU,GAGR7I,KAAKkkC,sBACFA,gBAAiB,OACjByB,aAAa3lC,KAAK+jC,YACvBl7B,GAAU,GAGRA,QACGjJ,MAAMgJ,WAAW2T,6DAKnBvc,KAAKikC,sBACHrkC,MAAM6D,cAAclB,aAAamY,aAAa1a,KAAK8jC,WAAY9jC,KAAKJ,MAAM6D,cAAc2W,eAAegC,kBACvG6nB,gBAAiB,iDAKnBjkC,KAAKkkC,sBACH0B,cAAc5lC,KAAK+jC,iBACnBG,gBAAiB,4CAIP98B,GACbpH,KAAKkkC,gBAAkBlkC,KAAKgkC,cACzBA,OAAOzhC,aAAamE,MAAM2U,YAAejU,EAAQ,qCAIjDmJ,OACInL,KAEPpF,KAAKikC,gBAAkBjkC,KAAKkkC,eAAe,IACtClkC,KAAK6lC,WAAWt1B,GAEpBvQ,KAAKikC,eAAe,KACnBjkC,KAAKoiB,aACFA,OAAOlD,cAGb9Z,EAAMpF,KAAK8lC,YAAY,MAAO9lC,KAAK6lC,WAAWt1B,SACzC6R,OAAShd,EACRpF,KAAK8jC,WAAW97B,iBAAiB87B,WAAW77B,YAAYjI,KAAK8jC,WAAW97B,iBACzE87B,WAAW57B,YAAY9C,EAAI7C,cAChC6C,EAAI6V,YAAW,MAGbjb,KAAKkkC,eAAe,KACnBlkC,KAAKgkC,aACFA,OAAO9kB,cAGb9Z,EAAMpF,KAAK8lC,YAAY,SAAU9lC,KAAK6lC,WAAWt1B,SAC5CyzB,OAAS5+B,EACRpF,KAAK+jC,WAAW/7B,iBAAiB+7B,WAAW97B,YAAYjI,KAAK+jC,WAAW/7B,iBACzE+7B,WAAW77B,YAAY9C,EAAI7C,cAChC6C,EAAI6V,YAAW,QAGXrb,MAAMgJ,WAAW2T,kBAGnBvc,KAAKJ,MAAMoyB,UAAU,uBAClBpyB,MAAMQ,QAAQ2lC,cAAcllC,iDAKrBuE,QACT4gC,YAAYhmC,KAAKJ,MAAMQ,QAAQ6lC,UAAUC,YAAY9gC,oDAIvDpF,KAAK2jC,SAASrgC,QAAUtD,KAAK4jC,SAAStgC,UACF,UAAnCtD,KAAKJ,MAAM6B,QAAQ0jC,kBAChBb,mBAGHtkC,KAAKJ,MAAM6B,QAAQmjC,SAA8C,UAAnC5kC,KAAKJ,MAAM6B,QAAQ0jC,aAEtCnlC,KAAKJ,MAAMQ,QAAQ6lC,UAAUE,iBAEnCvjC,SAAQ,SAACke,GACfjZ,EAAKm+B,YAAYllB,2CAMTA,OACPjhB,EAAMmtB,EAEPlM,GACCA,EAAMnX,QACLmX,EAAMnX,MAAM1C,SACdpH,EAAOG,KAAK6lC,WAAW/kB,EAAMvQ,MAC7Byc,EAAUhtB,KAAKomC,gBAAgB,SAAUvmC,GAEzCihB,EAAMnX,MAAM1C,OAAOuX,WAAWwO,GAC9BlM,EAAMnX,MAAM1C,OAAO+V,gBAGjB8D,EAAMnX,MAAM3C,MACdnH,EAAOG,KAAK6lC,WAAW/kB,EAAMvQ,MAC7Byc,EAAUhtB,KAAKomC,gBAAgB,MAAOvmC,GAEtCihB,EAAMnX,MAAM3C,IAAIwX,WAAWwO,GAC3BlM,EAAMnX,MAAM3C,IAAIgW,wDAOLzM,UACPvQ,KAAK8lC,YAAY,MAAO9lC,KAAK6lC,WAAWt1B,8CAG9BA,UACVvQ,KAAK8lC,YAAY,SAAU9lC,KAAK6lC,WAAWt1B,uCAGxCA,cACN1Q,EAAO,UAEX0Q,EAAK3N,SAAQ,SAACwC,MACbvF,EAAKiD,KAAKsC,EAAIC,WAEXyH,EAAKlN,MAAM6B,QAAQsjC,UAAYj4B,EAAKlN,MAAM6B,QAAQ4kC,0BACjDjhC,EAAIhF,QAAQ2kC,UAAY3/B,EAAIhF,QAAQ2kC,SAASuB,KAAK,KAChDhnB,EAAWxS,EAAK+4B,WAAW/4B,EAAKlN,MAAMQ,QAAQ2kC,SAASwB,wBAAwBnhC,IACnFvF,EAAOA,EAAKyd,OAAOgC,OAKfzf,sCAII2mB,EAAK3mB,OAEhBuF,SADI4nB,EAAUhtB,KAAKomC,gBAAgB5f,EAAK3mB,UAGrCG,KAAKJ,MAAMoyB,UAAU,iBAClBpyB,MAAMQ,QAAQoiC,QAAQgE,UAG5BphC,EAAM,IAAIwZ,EAAIoO,EAAShtB,KAAM,QAE1BA,KAAKJ,MAAMoyB,UAAU,iBAClBpyB,MAAMQ,QAAQoiC,QAAQiE,SAG5BrhC,EAAI7C,aAAamF,UAAUC,IAAI,kBAAmB,mBAAqB6e,GAEvEphB,EAAIW,WAAY,EAEhBX,EAAIrC,aAAe,kBACdqC,EAAIW,YACPX,EAAIW,UAAY,IAAIk9B,GAAc79B,IAG5BA,EAAIW,WAGZX,EAAIyT,cAAgB,eAEflW,EAAQ,GAEZ4K,EAAK3N,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,GAG/C0L,EAAKs2B,UAAUr5B,SAAS3I,EAAOY,YAC/B8K,EAAKs2B,UAAUj9B,SAAW/E,EAAO+E,SAE9B/E,EAAO0F,WAAWif,EAAM,kBAAoBjZ,EAAK3N,MAAMoyB,UAAU,UACnEzkB,EAAKs2B,UAAUzjC,QAAQsmC,OAAS,CAC/Bx3B,UAAW3B,EAAK3N,MAAMQ,QAAQsmC,OAAOC,aAAa9kC,EAAO0F,WAAWif,EAAM,kBAC1E+F,OAAQ1qB,EAAO0F,WAAWif,EAAM,wBAA0B,IAG3DjZ,EAAKs2B,UAAUzjC,QAAQsmC,OAAS,CAC/Bx3B,UAAW3B,EAAK3N,MAAMQ,QAAQsmC,OAAOC,aAAa,aAClDpa,OAAO,IAKThf,EAAKs2B,UAAUt8B,WAAWC,SAAW3F,EAAO0F,WAAWC,aAGnD3E,EAAO,IAAI6C,EAAK6H,EAAKs2B,UAAWz+B,GACpCvC,EAAKN,aACLM,EAAKhB,OAASA,EACdgB,EAAK+B,WAEL/C,EAAOc,MAAMG,KAAKD,GAClBF,EAAMG,KAAKD,GAEPhB,EAAOmB,SACVH,EAAKO,UAIRgC,EAAIzC,MAAQA,GAGNyC,0CAIQohB,EAAK3mB,OAIpB0sB,EAAQqa,EAHJ5Z,EAAU,GACdrjB,EAAe,OAAP6c,EAAexmB,KAAK2jC,SAAW3jC,KAAK4jC,SAC5C7hC,EAAc,OAAPykB,EAAe,UAAY,iBAGlC7c,EAAM/G,SAAQ,SAASf,OAClBkpB,EAAS,GAEVlpB,EAAOzB,QAAQ+kC,aAAetjC,EAAOzB,QAAQ+kC,YAAYpjC,KAC3DlC,EAAK+C,SAAQ,SAAS2Q,GACrBwX,EAAOjoB,KAAKjB,EAAOuE,cAAcmN,OAGlCqzB,EAAW7kC,EAAO,SAClBwqB,EAAyD,mBAAzC1qB,EAAOzB,QAAQ+kC,YAAYyB,GAA2B/kC,EAAOzB,QAAQ+kC,YAAYyB,GAAU7b,EAAQlrB,GAAQgC,EAAOzB,QAAQ+kC,YAAYyB,GAEtJ/kC,EAAOiH,cAAckkB,EAASnrB,EAAOzB,QAAQ+kC,YAAYpjC,GAAMgpB,EAAQlrB,EAAM0sB,QAIxES,gDAIGhtB,KAAK2jC,SAASrgC,wDAIdtD,KAAK4jC,SAAStgC,wCAKrBtD,KAAKoiB,aACFA,OAAO3D,iBAAgB,GAE1Bze,KAAKgkC,aACFA,OAAOvlB,iBAAgB,mDAMzBwQ,EAAU,UAGXjvB,KAAKJ,MAAM6B,QAAQmjC,SAAW5kC,KAAKJ,MAAMoyB,UAAU,aAC5ChyB,KAAKJ,MAAMQ,QAAQ6lC,UAAUY,WAAU,GAEzCjkC,SAAQ,SAACke,GACfmO,EAAQnO,EAAMugB,UAAYrzB,EAAK84B,gBAAgBhmB,MAGhDmO,EAAU,CACTjoB,IAAKhH,KAAKoiB,OAASpiB,KAAKoiB,OAAO/c,UAAY,GAC3C4B,OAAQjH,KAAKgkC,OAAShkC,KAAKgkC,OAAO3+B,UAAY,IAIzC4pB,0CAIQnO,cACXimB,EAAWjmB,EAAMtE,WACrBwqB,EAAYlmB,EAAMmmB,eAClBC,EAAkB,UAGlBF,EAAUpkC,SAAQ,SAACukC,GAClBD,EAAgBC,EAAS9F,UAAYhzB,EAAKy4B,gBAAgBK,MAGjD,CACTngC,IAAK+/B,EAASp9B,MAAM3C,IAAM+/B,EAASp9B,MAAM3C,IAAI3B,UAAY,GACzD4B,OAAQ8/B,EAASp9B,MAAM1C,OAAS8/B,EAASp9B,MAAM1C,OAAO5B,UAAY,GAClE+hC,OAAQF,UA7ee9V,GAof1BsS,GAAYlP,WAAa,cAGzBkP,GAAY6B,aAAe8B,OC7frBC,4CAEO1nC,yCACLA,IAED2nC,OAAS,KACT9gC,MAAQ,KACR+gC,WAAa,OACbC,SAAW,OACXC,SAAW,OACXC,cAAe,IAEfC,UAAY,eAEZvhB,aAAe,IAEfgO,oBAAoB,YAAY,KAChCA,oBAAoB,kBAAkB,KACtCA,oBAAoB,gBAAgB,KACpCA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,sBAAuB,KAC3CA,oBAAoB,qBAAsB,eAC1CA,oBAAoB,2BAA2B,KAC/CA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,4BAA4B,KAChDA,oBAAoB,2BAA2B,KAG/CwT,0BAA0B,MAAO,eAAgB/9B,EAAKg+B,YAAYtnC,cAClEqnC,0BAA0B,MAAO,aAAc/9B,EAAKi+B,UAAUvnC,cAC9DqnC,0BAA0B,MAAO,aAAc/9B,EAAKk+B,UAAUxnC,cAC9DqnC,0BAA0B,MAAO,gBAAiB/9B,EAAKm+B,cAAcznC,cACrEqnC,0BAA0B,MAAO,kBAAmB/9B,EAAKo+B,eAAe1nC,cACxEqnC,0BAA0B,MAAO,eAAgB/9B,EAAKq+B,gBAAgB3nC,cACtEqnC,0BAA0B,MAAO,iBAAkB/9B,EAAKs+B,cAAc5nC,gEAIxER,KAAKJ,MAAM6B,QAAQsjC,SAAS,KAC1BsD,EAAU,KACd5mC,EAAUzB,KAAKJ,MAAM6B,oBAEhBgF,MAAQhF,EAAQ6mC,wBAChBf,OAAS9lC,EAAQ8mC,oBAEnB9mC,EAAQ+mC,yBAE2B,IAAlC/mC,EAAQ+mC,4BACLd,SAAWrhC,SAASC,cAAc,YAClCohC,SAAShgC,UAAUC,IAAI,+BAEgB,iBAAlClG,EAAQ+mC,wBACjBH,EAAUhiC,SAASC,cAAc,QACzBwB,UAAYrG,EAAQ+mC,2BACvBd,SAAWW,EAAQrgC,iBAEnB0/B,SAAWjmC,EAAQ+mC,uBAKxB/mC,EAAQgnC,wBACoC,iBAApChnC,EAAQgnC,0BACjBJ,EAAUhiC,SAASC,cAAc,QACzBwB,UAAYrG,EAAQgnC,6BACvBjB,WAAaa,EAAQrgC,iBAErBw/B,WAAa/lC,EAAQgnC,8BAGtBjB,WAAanhC,SAASC,cAAc,YACpCkhC,WAAW9/B,UAAUC,IAAI,oCACzB6/B,WAAWkB,SAAW,OACtBlB,WAAW1/B,UAAY,4DAG1BrG,EAAQknC,sBACkC,iBAAlClnC,EAAQknC,wBACjBN,EAAUhiC,SAASC,cAAc,QACzBwB,UAAYrG,EAAQknC,2BACvBlB,SAAWY,EAAQrgC,iBAEnBy/B,SAAWhmC,EAAQknC,4BAGpBlB,SAAWphC,SAASC,cAAc,YAClCmhC,SAAS//B,UAAUC,IAAI,oCACvB8/B,SAASiB,SAAW,OACpBjB,SAAS3/B,UAAY,4DAIbrG,EAAQqjC,4BAChB,eACA8C,UAAY,SAASxiC,EAAK0K,UACvBrO,EAAQqjC,iCAIX,gBACA8C,UAAYnmC,EAAQqjC,yCAIpB8C,UAAY,SAASxiC,EAAK0K,UACvBrO,EAAQqjC,sBAAsBh1B,SAKlC9O,UAAU,WAAYhB,KAAKyY,cAAcjY,KAAKR,YAC9CgB,UAAU,mBAAoBhB,KAAK4oC,UAAUpoC,KAAKR,YAClDgB,UAAU,cAAehB,KAAK6oC,UAAUroC,KAAKR,MAAM,QACnDgB,UAAU,mBAAoBhB,KAAK8oC,eAAetoC,KAAKR,MAAO,SAC9DgB,UAAU,qBAAsBhB,KAAKmkC,iBAAiB3jC,KAAKR,YAC3DgB,UAAU,iBAAkBhB,KAAKmkC,iBAAiB3jC,KAAKR,YACvDgB,UAAU,qBAAsBhB,KAAK+oC,aAAavoC,KAAKR,YACvDgB,UAAU,cAAehB,KAAKgpC,uBAAuBxoC,KAAKR,YAC1DgB,UAAU,kBAAmBhB,KAAKipC,eAAezoC,KAAKR,YAEtDkpC,uBAAuBlpC,KAAKonB,QAAQ5mB,KAAKR,MAAO,4CAIxCqI,cAGXA,GACKrI,KAAKJ,MAAMgJ,WAAWwe,UAExBxkB,SAAQ,SAACwC,GACbyC,EAAKshC,wBAAwB/jC,2DAM3BgkC,EAAWppC,KAAKJ,MAAM6D,cAAc4lC,6BAEnC1B,aAAe3nC,KAAKJ,MAAM6B,QAAQ6nC,yBAA0BF,GAAWA,EAAS3iC,6CAGvErB,UACPpF,KAAKupC,gBAAgBnkC,GAAK,qDAI7BmL,EAAO,eAEN3Q,MAAMgJ,WAAW2H,KAAK3N,SAAQ,SAACwC,GACnCmL,EAAOA,EAAK+M,OAAOxQ,EAAKy8B,gBAAgBnkC,GAAK,GAAO,OAG9CmL,yCAGOnL,EAAKpC,EAAS4c,GACzB5f,KAAKwpC,aAAa5pB,UACfnH,cAAcrT,GAEhBpC,SACG4lC,UAAUxjC,QACVqkC,aAAY,8CAKH5mC,GACJA,EAAKhB,OAAOY,aAEXzC,KAAK2nC,mBACZiB,UAAU/lC,EAAKuC,2CAIRA,OACTskC,EAAatkC,EAAIC,UAAUrF,KAAKyG,OAChCwM,EAAUD,MAAMC,QAAQy2B,GAExBpqB,EAAWrM,IAAaA,GAAiC,WAAtBI,EAAOq2B,IAA0C,OAAfA,GAErEpqB,GAAYla,EAAIhF,QAAQ2kC,UAAY3/B,EAAIhF,QAAQ2kC,SAAS2C,UAC5DtiC,EAAIhF,QAAQ2kC,SAAS2C,SAASj+B,WAAWxB,YAAY7C,EAAIhF,QAAQ2kC,SAAS2C,WAGvEpoB,GAAYla,EAAIhF,QAAQ2kC,UAAY3/B,EAAIhF,QAAQ2kC,SAAS4E,WAC5DvkC,EAAIhF,QAAQ2kC,SAAS4E,UAAUlgC,WAAWxB,YAAY7C,EAAIhF,QAAQ2kC,SAAS4E,WAG5EvkC,EAAIhF,QAAQ2kC,SAAW,CACtBj1B,MAAO1K,EAAIhF,QAAQ2kC,SAAW3/B,EAAIhF,QAAQ2kC,SAASj1B,MAAQ,EAC3Dw2B,OAAMhnB,IAAYla,EAAIhF,QAAQ2kC,SAAW3/B,EAAIhF,QAAQ2kC,SAASuB,KAAOtmC,KAAK4nC,UAAUxiC,EAAIrC,eAAgB,IACxG4mC,aAAWvkC,EAAIhF,QAAQ2kC,WAAYzlB,IAAWla,EAAIhF,QAAQ2kC,SAAS4E,UACnEjC,YAAUtiC,EAAIhF,QAAQ2kC,WAAYzlB,IAAWla,EAAIhF,QAAQ2kC,SAAS2C,SAClEnkC,SAAQ6B,EAAIhF,QAAQ2kC,UAAW3/B,EAAIhF,QAAQ2kC,SAASxhC,OACpD+b,SAASA,mDAIala,GACRpF,KAAKupC,gBAAgBnkC,GAAK,GAAO,GAEvCxC,SAAQ,SAASiN,GACzBA,EAAMmN,cAAa,wCAIX5X,OAET8F,GADWlL,KAAK2nC,aAAeviC,EAAIqU,QAAQzZ,KAAK2nC,cAAgBviC,EAAIiZ,WAAW,IACrE9b,aACVyV,EAAS5S,EAAIhF,QAAQ2kC,SAElB/sB,EAAO0vB,WACN1vB,EAAO0vB,SAASj+B,YAClBuO,EAAO0vB,SAASj+B,WAAWxB,YAAY+P,EAAO0vB,UAE/C1vB,EAAO0vB,UAAW,GAGhB1vB,EAAO2xB,YACN3xB,EAAO2xB,UAAUlgC,YACnBuO,EAAO2xB,UAAUlgC,WAAWxB,YAAY+P,EAAO2xB,WAEhD3xB,EAAO2xB,WAAY,QAGfC,uBAAuBxkC,EAAK8F,GAEjC9F,EAAI7C,aAAamF,UAAUC,IAAI,wBAA0BqQ,EAAOlI,OAE7DkI,EAAOlI,QACN9P,KAAK0nC,UACP1vB,EAAO0vB,SAAW1nC,KAAK0nC,SAASmC,WAAU,GAC1C3+B,EAAGwP,aAAa1C,EAAO0vB,SAAUx8B,EAAGlD,YAEjChI,KAAKJ,MAAMi5B,IACb7gB,EAAO0vB,SAAShhC,MAAMojC,aAAiB9xB,EAAO0vB,SAASz+B,YAAc+O,EAAO0vB,SAAShhC,MAAM2U,aAAerD,EAAOlI,MAAQ,GAAOkI,EAAOlI,MAAQ9P,KAAKunC,OAAW,KAE/JvvB,EAAO0vB,SAAShhC,MAAM2U,YAAgBrD,EAAO0vB,SAASz+B,YAAc+O,EAAO0vB,SAAShhC,MAAMojC,cAAgB9xB,EAAOlI,MAAQ,GAAOkI,EAAOlI,MAAQ9P,KAAKunC,OAAW,MAI7JvnC,KAAKJ,MAAMi5B,IACb3tB,EAAGxE,MAAM4R,aAAe7K,SAAS2E,OAAO0nB,iBAAiB5uB,EAAI,MAAM6+B,iBAAiB,kBAAqB/xB,EAAOlI,MAAQ9P,KAAKunC,OAAU,KAEvIr8B,EAAGxE,MAAM2R,YAAc5K,SAAS2E,OAAO0nB,iBAAiB5uB,EAAI,MAAM6+B,iBAAiB,iBAAoB/xB,EAAOlI,MAAQ9P,KAAKunC,OAAU,qDAMlHniC,EAAK8F,cACvB8M,EAAS5S,EAAIhF,QAAQ2kC,SAEzBiF,GADA9+B,EAAKA,GAAM9F,EAAIiZ,WAAW,GAAG9b,aAChByV,EAAO2xB,YAEG,IAApB3xB,EAAOsH,WAENtH,EAAOsuB,MACTtuB,EAAO2xB,UAAY3pC,KAAKwnC,WAAWqC,WAAU,GAC7C7xB,EAAO2xB,UAAU/8B,iBAAiB,SAAS,SAACC,GAC3CA,EAAEiB,kBACFP,EAAKu6B,YAAY1iC,QAGlB4S,EAAO2xB,UAAY3pC,KAAKynC,SAASoC,WAAU,GAC3C7xB,EAAO2xB,UAAU/8B,iBAAiB,SAAS,SAACC,GAC3CA,EAAEiB,kBACFP,EAAKw6B,UAAU3iC,OAIjB4S,EAAO2xB,UAAU/8B,iBAAiB,aAAa,SAACC,GAC/CA,EAAEiB,qBAGAk8B,GAAcA,EAAWvgC,aAAeyB,EAC1C8+B,EAAWvgC,WAAW4wB,aAAariB,EAAO2xB,UAAUK,GAEpD9+B,EAAGwP,aAAa1C,EAAO2xB,UAAWz+B,EAAGlD,qDAKvB8H,QACXuW,aAAevW,mDAIb9P,KAAKqmB,6CAGL9V,cACHlN,EAAS,UAEbkN,EAAK3N,SAAQ,SAACwC,EAAKuF,OACdqN,EAEJ3U,EAAOP,KAAKsC,GAETA,aAAewZ,IAEjBxZ,EAAI6Z,UAEJjH,EAAS5S,EAAIhF,QAAQ2kC,SAASzlB,UAEnBxP,QAA6B,IAApBkI,EAAOsH,UACftR,EAAKi8B,YAAY7kC,GAEnBxC,SAAQ,SAACiN,GACjBA,EAAMoP,SACN5b,EAAOP,KAAK+M,UAMTxM,sCAGI+B,EAAK8kC,cACZlyB,EAAS5S,EAAIhF,QAAQ2kC,SACzBzlB,EAAW,GACXjc,EAAS,UAEc,IAApB2U,EAAOsH,WAAuBtH,EAAOsuB,MAAQ4D,KAC3Cl3B,MAAMC,QAAQ+E,EAAOsH,YACxBtH,EAAOsH,SAAWtf,KAAKmqC,iBAAiB/kC,IAIxCka,EADEtf,KAAKJ,MAAMoyB,UAAU,WAAahyB,KAAKJ,MAAM6B,QAAQ2oC,eAC5CpqC,KAAKJ,MAAMQ,QAAQwqB,OAAOA,OAAO5S,EAAOsH,UAExCtH,EAAOsH,SAGhBtf,KAAKJ,MAAMoyB,UAAU,SAAWhyB,KAAKJ,MAAM6B,QAAQ4oC,mBAChDzqC,MAAMQ,QAAQmnB,KAAKA,KAAKjI,GAG9BA,EAAS1c,SAAQ,SAACiN,GACjBxM,EAAOP,KAAK+M,GAEMxB,EAAK47B,YAAYp6B,GAEvBjN,SAAQ,SAAC0nC,GACpBjnC,EAAOP,KAAKwnC,UAKRjnC,2CAGS+B,cACZka,EAAW,GAEXoqB,EAAatkC,EAAIC,UAAUrF,KAAKyG,cAEhCuM,MAAMC,QAAQy2B,KACjBA,EAAa,CAACA,IAGfA,EAAW9mC,SAAQ,SAAC2nC,OACfC,EAAW,IAAI5rB,EAAI2rB,GAAa,GAAIr5B,EAAKtR,MAAMgJ,YAEnD4hC,EAASvrB,SAETurB,EAASpqC,QAAQ2kC,SAASj1B,MAAQ1K,EAAIhF,QAAQ2kC,SAASj1B,MAAQ,EAC/D06B,EAASpqC,QAAQ2kC,SAASxhC,OAAS6B,EAEhColC,EAASpqC,QAAQ2kC,SAASzlB,WAC5BkrB,EAASpqC,QAAQ2kC,SAASuB,KAAOp1B,EAAK02B,UAAU4C,EAASznC,eAAgBynC,EAASpqC,QAAQ2kC,SAASj1B,QAEpGwP,EAASxc,KAAK0nC,MAGRlrB,oCAGEla,EAAKtF,OACVkY,EAAS5S,EAAIhF,QAAQ2kC,UAEF,IAApB/sB,EAAOsH,WACTtH,EAAOsuB,MAAO,EAEdlhC,EAAI4X,oBAECysB,aAAY,QAEZ/gC,iBAAiB,sBAAuBtD,EAAIrC,eAAgBqC,EAAIhF,QAAQ2kC,SAASj1B,4CAI5E1K,OACP4S,EAAS5S,EAAIhF,QAAQ2kC,UAEF,IAApB/sB,EAAOsH,WACTtH,EAAOsuB,MAAO,EAEdlhC,EAAI4X,oBAECysB,aAAY,QAEZ/gC,iBAAiB,uBAAwBtD,EAAIrC,eAAgBqC,EAAIhF,QAAQ2kC,SAASj1B,0CAI/E1K,OACL4S,EAAS5S,EAAIhF,QAAQ2kC,UAEF,IAApB/sB,EAAOsH,WACNtH,EAAOsuB,UACJwB,YAAY1iC,QAEZ2iC,UAAU3iC,0CAKJA,UACNA,EAAIhF,QAAQ2kC,SAASuB,2CAGflhC,WACNA,EAAIhF,QAAQ2kC,SAASxhC,QAAS6B,EAAIhF,QAAQ2kC,SAASxhC,OAAOR,yDAGhDqC,UACVA,EAAIhF,QAAQ2kC,SAASxhC,OAASvD,KAAKyqC,kBAAkBrlC,EAAIhF,QAAQ2kC,SAASxhC,QAAU6B,kDAGpEA,OACnB4S,EAAS5S,EAAIhF,QAAQ2kC,SACzB1hC,EAAS,UAEN2U,EAAOsH,WAELtM,MAAMC,QAAQ+E,EAAOsH,YACxBtH,EAAOsH,SAAWtf,KAAKmqC,iBAAiB/kC,KAGtCpF,KAAKJ,MAAMoyB,UAAU,WAAahyB,KAAKJ,MAAM6B,QAAQ2oC,eAC5CpqC,KAAKJ,MAAMQ,QAAQwqB,OAAOA,OAAO5S,EAAOsH,UAExCtH,EAAOsH,UAGV1c,SAAQ,SAAC4nC,GACdA,aAAoB5rB,GACtBvb,EAAOP,KAAK0nC,OAKRnnC,oCAGE+B,OAETslC,EADInnC,EAAS6B,EAAIhF,QAAQ2kC,SAASxhC,OAG/BA,KAGgB,KAFlBmnC,EAAa1qC,KAAK2qC,eAAevlC,EAAK7B,KAGrCA,EAAO1D,KAAKG,KAAKyG,OAAOsJ,OAAO26B,EAAY,GAGxCnnC,EAAO1D,KAAKG,KAAKyG,OAAOnD,eACpBC,EAAO1D,KAAKG,KAAKyG,YAGpBgS,cAAclV,QACdqlC,UAAUrlC,SAGXkmC,aAAY,2CAGFrkC,EAAKvF,EAAMmH,EAAK8I,OAC3B46B,GAAa,EAEE,iBAAT7qC,IACTA,EAAOmgB,KAAKC,MAAMpgB,IAGfmT,MAAMC,QAAQ7N,EAAIvF,KAAKG,KAAKyG,UAC/BrB,EAAIvF,KAAKG,KAAKyG,OAAS,GAEvBrB,EAAIhF,QAAQ2kC,SAASuB,KAAOtmC,KAAK4nC,UAAUxiC,EAAIrC,eAAgBqC,EAAIhF,QAAQ2kC,SAASj1B,aAGjE,IAAVA,IAGS,KAFlB46B,EAAa1qC,KAAK2qC,eAAe76B,EAAO1K,KAGvCA,EAAIvF,KAAKG,KAAKyG,OAAOsJ,OAAQ/I,EAAM0jC,EAAaA,EAAa,EAAI,EAAG7qC,IAIpD,IAAf6qC,IACC1jC,EACF5B,EAAIvF,KAAKG,KAAKyG,OAAO+M,QAAQ3T,GAE7BuF,EAAIvF,KAAKG,KAAKyG,OAAO3D,KAAKjD,SAIvB4Y,cAAcrT,QACdwjC,UAAUxjC,QAEVqkC,aAAY,0CAGHv2B,EAAS3P,cACnB4P,GAAQ,QAES,UAAlBE,EAAOH,GAENA,aAAmB0L,EAErBzL,EAAQD,EAAQrT,KACRqT,aAAmBgL,aAE3B/K,EAAQD,EAAQsJ,WAAW3c,KACI,oBAAhB4c,aAA+BvJ,aAAmBuJ,aAC9DlZ,EAAOnD,QAAQ2kC,WACjB5xB,EAAQ5P,EAAOnD,QAAQ2kC,SAASzlB,SAASpI,MAAK,SAACszB,UACvCA,aAAoB5rB,GAAM4rB,EAAS7kC,UAAYuN,QAItDC,EAAQA,EAAMtT,MAMjBsT,EADQ,MAAOD,GAIP3P,EAAO1D,KAAKG,KAAKyG,OAAOyQ,MAAK,SAAC9R,UAC9BA,EAAIvF,KAAKmS,EAAKpS,MAAM6B,QAAQqO,QAAUoD,KAI5CC,IAECH,MAAMC,QAAQ1P,EAAO1D,KAAKG,KAAKyG,UACjC0M,EAAQ5P,EAAO1D,KAAKG,KAAKyG,OAAOiF,QAAQyH,KAG5B,GAAVA,IACFA,GAAQ,IAMHA,0CAGQ/N,EAAKW,EAAW6kC,cAC3B5yB,EAAS5S,EAAIhF,QAAQ2kC,SACzB1hC,EAAS,UAEN2U,EAAOsH,WAELtM,MAAMC,QAAQ+E,EAAOsH,YACxBtH,EAAOsH,SAAWtf,KAAKmqC,iBAAiB/kC,IAGzC4S,EAAOsH,SAAS1c,SAAQ,SAAC4nC,GACrBA,aAAoB5rB,IACtBvb,EAAOP,KAAKiD,EAAYykC,EAASznC,eAAiBynC,GAE/CI,IACFvnC,EAASA,EAAOia,OAAOxD,EAAKyvB,gBAAgBiB,EAAUzkC,EAAW6kC,UAM9DvnC,iDAIArD,KAAKyG,2CAGA5G,WACJG,KAAKyG,YAAoC,IAArB5G,EAAKG,KAAKyG,UAAoCzG,KAAK2nC,mBAAkD,IAA5B9nC,EAAKG,KAAK2nC,qBAllB1FvW,GAslBvBkW,GAAS9S,WAAa,kBCnlBP,CACdqW,ICRc,SAASj4B,EAAMnR,EAASqpC,OAClCC,EAAYtpC,GAAWA,EAAQspC,UAAYtpC,EAAQspC,UAAY,IACnEC,EAAe,GACfzN,EAAU,GAEV3qB,EAAKhQ,SAAQ,SAACwC,OACTmO,EAAO,UAEJnO,EAAIrD,UACL,QACLiC,QAAQC,KAAK,yEAGR,OACLD,QAAQC,KAAK,kFAGR,SACLmB,EAAIlC,QAAQN,SAAQ,SAACuU,EAAKxM,GACtBwM,GAAqB,IAAdA,EAAI8zB,QACb1N,EAAQ5yB,QAAyB,IAAbwM,EAAIzV,OAAuC,OAAdyV,EAAIzV,MAAiB,GAAM,IAAM+hC,OAAOtsB,EAAIzV,OAAO+F,MAAM,KAAK21B,KAAK,MAAQ,kBAKzH,MACLh4B,EAAIlC,QAAQN,SAAQ,SAACuU,MAEjBA,EAAI,UAEQA,EAAIzV,YACZ,SACLyV,EAAIzV,MAAQse,KAAKwd,UAAUrmB,EAAIzV,iBAG1B,gBACA,OACLyV,EAAIzV,MAAQ,GAIb6R,EAAKzQ,KAAK,IAAM2gC,OAAOtsB,EAAIzV,OAAO+F,MAAM,KAAK21B,KAAK,MAAQ,SAI5D4N,EAAaloC,KAAKyQ,EAAK6pB,KAAK2N,QAK3BxN,EAAQj6B,QACV0nC,EAAax3B,QAAQ+pB,EAAQH,KAAK2N,IAGnCC,EAAeA,EAAa5N,KAAK,MAE9B37B,EAAQypC,MACVF,EAAe,SAAWA,GAG3BF,EAAgBE,EAAc,aDnD9BxL,KETc,SAAS5sB,EAAMnR,EAASqpC,OAClCE,EAAe,GAEnBp4B,EAAKhQ,SAAQ,SAACwC,OACTmO,EAAO,UAEJnO,EAAIrD,UACL,mBAGA,QACLiC,QAAQC,KAAK,0EAGR,OACLD,QAAQC,KAAK,mFAGR,MACLmB,EAAIlC,QAAQN,SAAQ,SAACuU,GACjBA,IACF5D,EAAK4D,EAAIpR,UAAUrD,oBAAsByU,EAAIpR,UAAUtD,YAAc0U,EAAIzV,UAI3EspC,EAAaloC,KAAKyQ,OAOpBu3B,EAFAE,EAAehrB,KAAKwd,UAAUwN,EAAc,KAAM,MAEpB,qBFtB9BG,UGVc,SAAUv4B,EAAMnR,EAASqpC,OACjCE,EAAe,GAErBp4B,EAAKhQ,SAAQ,SAACwC,OACPmO,EAAO,UAELnO,EAAIrD,UACN,mBAGA,QACJiC,QAAQC,KAAK,0EAGT,OACJD,QAAQC,KAAK,mFAGT,MACJmB,EAAIlC,QAAQN,SAAQ,SAACuU,GAChBA,IACH5D,EAAK4D,EAAIpR,UAAUrD,oBAAsByU,EAAIpR,UAAUtD,YAAc0U,EAAIzV,UAI3EspC,EAAaloC,KAAKkd,KAAKwd,UAAUjqB,QAKpCu3B,EAAgBE,EAAa5N,KAAK,MAAO,yBHnBzCgO,IIXc,SAASx4B,EAAMnR,EAASqpC,OAClCO,EAAS,GACblb,EAAO,GACPmb,EAAkB,GAClBC,EAAiB9pC,EAAQ8pC,gBAAkB,CAC1CC,UAAW,OACXC,SAAU,GACVC,YAAa,EACbC,UAAW,KAEZC,EAAgBnqC,EAAQmqC,eAAiB,CACxCJ,UAAW,OACXC,SAAU,GACVC,YAAa,EACbC,UAAW,KAEZE,EAAcpqC,EAAQqqC,OAAS,GAC/BngC,EAAQlK,GAAWA,EAAQkK,MAAQlK,EAAQkK,MAAQ,YAiC1CogC,EAAS3mC,EAAK4mC,OAClBhf,EAAU,UAEd5nB,EAAIlC,QAAQN,SAAQ,SAACuU,OAChBtU,KAEDsU,EAAI,UACQA,EAAIzV,YACZ,SACLyV,EAAIzV,MAAQse,KAAKwd,UAAUrmB,EAAIzV,iBAG1B,gBACA,OACLyV,EAAIzV,MAAQ,GAIbmB,EAAO,CACNivB,QAAQ3a,EAAIzV,MACZuqC,QAAQ90B,EAAI1S,MACZynC,QAAQ/0B,EAAItR,QAGVmmC,IACFnpC,EAAKmpC,OAASA,GAGfhf,EAAQlqB,KAAKD,OAIRmqB,EA/DJ6e,EAAYM,cACfN,EAAYM,YAAc1qC,EAAQ0qC,aAAe,aAG9CN,EAAYO,OACfP,EAAYO,KAAO,MAIpBx5B,EAAKhQ,SAAQ,SAACwC,UAGNA,EAAIrD,UACL,SACLspC,EAAOvoC,KAAKipC,EAAS3mC,cAGhB,QACL+qB,EAAKrtB,KAAKipC,EAAS3mC,EAAKmmC,cAGnB,OACLpb,EAAKrtB,KAAKipC,EAAS3mC,EAAKwmC,cAGnB,MACLzb,EAAKrtB,KAAKipC,EAAS3mC,YA0CjBinC,EAAM,IAAIC,MAAMR,MAAMD,GAEvBpqC,GAAWA,EAAQ8qC,YAEpBjB,EAD+B,mBAAtB7pC,EAAQ8qC,UACC9qC,EAAQ8qC,UAAUF,IAAQ,GAE1B5qC,EAAQ8qC,WAIzB5gC,IACF2/B,EAAgBkB,YAAc,SAAS3sC,GACtCwsC,EAAIn+B,KAAKvC,EAAO,GAAI,MAItB2/B,EAAgBmB,KAAOpB,EACvBC,EAAgBnb,KAAOA,EAEvBkc,EAAIE,UAAUjB,GAEX7pC,GAAWA,EAAQirC,oBACrBjrC,EAAQirC,mBAAmBL,GAG5BvB,EAAgBuB,EAAIhpC,OAAO,eAAgB,oBJpG3CspC,KKVc,SAAS/5B,EAAMnR,EAASqpC,OAEtC8B,EAAYnrC,EAAQmrC,WAAa,SACjCC,EAAWC,KAAKC,MAAMC,WACtBC,EAAgB,IAAIttC,EAAYK,eAMvBktC,QACJ38B,EAAO,GACX48B,EAAS,GACTC,EAAY,GACZ9L,EAAQ,CAAC+L,EAAG,CAACC,EAAE,EAAGC,EAAE,GAAI1gC,EAAG,CAACygC,EAAG16B,EAAK,GAAKA,EAAK,GAAG1P,QAAQkgC,QAAO,SAAC5b,EAAGC,UAAMD,GAAKC,GAAKA,EAAEhjB,MAAQgjB,EAAEhjB,MAAQ,KAAI,GAAK,EAAI8oC,EAAE36B,EAAKtP,gBAG5HsP,EAAKhQ,SAAQ,SAACwC,EAAKuF,OACdqiB,EAAU,GAEd5nB,EAAIlC,QAAQN,SAAQ,SAASuU,EAAKq2B,GAE9Br2B,GACF6V,EAAQlqB,KAAOqU,EAAIzV,iBAAiB+rC,MAA8B,WAArBp6B,EAAO8D,EAAIzV,OAAiDyV,EAAIzV,MAAhCse,KAAKwd,UAAUrmB,EAAIzV,SAE7FyV,EAAI1S,MAAQ,GAAK0S,EAAItR,QAAU,KAC9BsR,EAAItR,OAAS,GAAKsR,EAAI1S,MAAQ,IAChC0oC,EAAOrqC,KAAK,CAACuqC,EAAE,CAACE,EAAE5iC,EAAE2iC,EAAEE,GAAG3gC,EAAE,CAAC0gC,EAAE5iC,EAAIwM,EAAItR,OAAS,EAAEynC,EAAEE,EAAIr2B,EAAI1S,MAAQ,MAIrEuoB,EAAQlqB,KAAK,OAIfyN,EAAKzN,KAAKkqB,MAIX8f,KAAKC,MAAMW,cAAcN,EAAW78B,GAEpC68B,EAAU,QAAUN,KAAKC,MAAMY,aAAarM,GAEzC6L,EAAO7pC,SACT8pC,EAAU,WAAaD,GAGjBC,KAxCRP,EAASe,WAAa,GACtBf,EAASgB,OAAS,GA0CfpsC,EAAQqsC,UACVhD,EAAgBoC,aAIdzrC,EAAQssC,WACN,IAAIC,KAASvsC,EAAQssC,QAEK,IAA1BtsC,EAAQssC,OAAOC,IACjBnB,EAASe,WAAW9qC,KAAKkrC,GACzBnB,EAASgB,OAAOG,GAASd,MAGzBL,EAASe,WAAW9qC,KAAKkrC,GAEzBf,EAAcgB,UAAUxsC,EAAQssC,OAAOC,GAAQ,WAAY,YAAY,CACtEjsC,KAAK,OACLN,QAAQ,CAACqsC,WAAU,GACnBlxB,OAnEO5c,KAmEK4c,OACZsxB,UAAU,SAASruC,GAClBgtC,EAASgB,OAAOG,GAASnuC,WAM7BgtC,EAASe,WAAW9qC,KAAK8pC,GACzBC,EAASgB,OAAOjB,GAAaM,IAG3BzrC,EAAQirC,qBACVG,EAAWprC,EAAQirC,mBAAmBG,IAavC/B,WATcuC,WACTc,EAAM,IAAIC,YAAYf,EAAE/pC,QACxB+qC,EAAO,IAAIC,WAAWH,GACjBxjC,EAAE,EAAGA,GAAG0iC,EAAE/pC,SAAUqH,EAAG0jC,EAAK1jC,GAAuB,IAAlB0iC,EAAEkB,WAAW5jC,UAC/CwjC,EAKOK,CAFP1B,KAAK2B,MAAM5B,EAAU,CAAC6B,SAAS,OAAQC,SAAQ,EAAM5sC,KAAM,YAEtC,8BLnF9Bs+B,KMbc,SAASztB,EAAMnR,EAASqpC,GACnC9qC,KAAKgyB,UAAU,UAAU,IAC3B8Y,EAAgB9qC,KAAKI,eAAeugC,mBAAmB/tB,GAAO,eCE1Dg8B,4CAEOhvC,yCACLA,IAEDy0B,oBAAoB,iBAAiB,SAASx0B,EAAMgvC,UAAaA,OACjExa,oBAAoB,iBAAkB,MACtCA,oBAAoB,mBAAoB,YAExCC,qBAAqB,cACrBA,qBAAqB,uEAIrBa,sBAAsB,WAAYn1B,KAAK8uC,SAAStuC,KAAKR,YACrDm1B,sBAAsB,gBAAiBn1B,KAAK+uC,cAAcvuC,KAAKR,6CAOvD+B,EAAMitC,EAAUvtC,EAASmb,QACjCkyB,SAAS/sC,EAAMitC,EAAUvtC,EAASmb,GAAQ,oCAQvC7a,EAAMitC,EAAUvtC,EAAS6/B,EAAO2N,OACpCC,GAAe,KAeD,mBAARntC,EACTmtC,EAAentC,EAEZ6sC,EAASO,YAAYptC,GACvBmtC,EAAeN,EAASO,YAAYptC,GAEpCiC,QAAQC,KAAK,iDAAkDlC,GAI9DmtC,EAAa,KACXt8B,EAAO5S,KAAKwgC,mBAAmBc,GAEnC4N,EAAazmC,KAAKzI,KAAKJ,MAAOgT,EAAOnR,GAAW,YA1B9B5B,EAAMuvC,GACrBH,GACuB,IAAtBA,OACGI,gBAAgBxvC,EAAMuvC,EAAMrtC,EAAMitC,GAAU,GAEjDC,EAAkBpvC,QAIdwvC,gBAAgBxvC,EAAMuvC,EAAMrtC,EAAMitC,IAiBsBxuC,KAAKR,mDAIlDshC,OACd1uB,EAAO5S,KAAKJ,MAAMQ,eAAeogC,mBAAmBxgC,KAAKJ,MAAM6B,QAAQ6tC,gBAAgB,EAAOhO,GAASthC,KAAKJ,MAAM6B,QAAQ8tC,iBAAkB,YAG5IC,EAAcxvC,KAAKJ,MAAM6B,QAAQguC,2BAElCD,IAAgBx8B,MAAMC,QAAQu8B,KAChCA,EAAc,CAACA,IAGhB58B,EAAKhQ,SAAQ,SAACwC,OACT0b,EAEY,UAAb1b,EAAIrD,OACN+e,EAAQ1b,EAAIlC,QAAQ,GAEjBssC,GAAeA,EAAYpqC,EAAImiC,UACjCzmB,EAAMpf,MAAQ8tC,EAAYpqC,EAAImiC,QAAQzmB,EAAMpf,MAAO0D,EAAIW,UAAU2pC,OAAOC,cAAevqC,EAAIW,UAAU2pC,OAAOrqC,UAAWD,EAAIW,gBAKvH6M,0CAGQ/S,EAAMuvC,EAAMrtC,EAAMitC,EAAUY,OACvCjqC,EAAUU,SAASC,cAAc,KACrCuoC,EAAO,IAAIgB,KAAK,CAAChwC,GAAM,CAACkC,KAAKqtC,IAC7BJ,EAAWA,GAAY,cAAgC,mBAATjtC,EAAsB,MAAQA,IAE5E8sC,EAAO7uC,KAAKJ,MAAM6B,QAAQquC,cAAcjwC,EAAMgvC,MAI1Ce,EACFx9B,OAAOk0B,KAAKl0B,OAAO29B,IAAIC,gBAAgBnB,IAEpCrZ,UAAUya,iBACZza,UAAUya,iBAAiBpB,EAAMG,IAEjCrpC,EAAQa,aAAa,OAAQ4L,OAAO29B,IAAIC,gBAAgBnB,IAGxDlpC,EAAQa,aAAa,WAAYwoC,GAGjCrpC,EAAQe,MAAMI,QAAU,OACxBT,SAAS8pB,KAAKjoB,YAAYvC,GAC1BA,EAAQuqC,QAGR7pC,SAAS8pB,KAAKloB,YAAYtC,SAIvB+C,iBAAiB,2DAIV9I,EAAO82B,EAAQ72B,UACrB62B,OACD,iBACAoY,SAASjvC,EAAKkC,KAAM,GAAIlC,EAAK4B,QAAS5B,EAAK+c,OAAQ/c,EAAKquC,mBA9HzC9c,GCJR,SAAS+e,GAAUjlC,EAAIzJ,OACjC2uC,EAAO3uC,EAAQ2uC,KACnBC,OAA+C,IAA3B5uC,EAAQ6uC,eAAiC7uC,EAAQ6uC,eAAiB,IACtFC,OAA+C,IAA3B9uC,EAAQ+uC,eAAiC/uC,EAAQ+uC,eAAiB,IACtFC,OAAmD,IAA7BhvC,EAAQivC,iBAAmCjvC,EAAQivC,iBAAmB,aAGnFC,EAAY7gC,OAChB8gC,EAASR,EAAKtgC,QACG,IAAX8gC,GAA0BA,IAAWH,GAAgBG,IAAWP,GAAcO,IAAWL,IAClGrlC,EAAGxJ,MAAQwJ,EAAGxJ,MAAQ,GAAKkvC,EAC3BD,EAAY7gC,EAAM,IAIpB5E,EAAG0B,iBAAiB,WAAW,SAACC,OAC3BiD,EAAQ5E,EAAGxJ,MAAM4B,OACrButC,EAAOhkC,EAAE3L,OAEN2L,EAAEskB,QAAU,GAAG,IACdrhB,GAASsgC,EAAK9sC,cAChBuJ,EAAEyzB,iBACFzzB,EAAEiB,mBAEK,SAEAsiC,EAAKtgC,SACNugC,KACFQ,EAAKnU,eAAiBmU,EAAKnb,qBAC7B7oB,EAAEyzB,iBACFzzB,EAAEiB,mBAEK,aAIHyiC,KACFtgC,MAAM4gC,UACRhkC,EAAEyzB,iBACFzzB,EAAEiB,mBAEK,aAIH2iC,mBAIFI,IAAST,EAAKtgC,UAChBjD,EAAEyzB,iBACFzzB,EAAEiB,mBAEK,OAWZ5C,EAAG0B,iBAAiB,SAAS,SAACC,GAC1BA,EAAEskB,QAAU,IACX1vB,EAAQqvC,cACVH,EAAYzlC,EAAGxJ,MAAM4B,WAMpB4H,EAAGoZ,cACNpZ,EAAGoZ,YAAc8rB,GAGf3uC,EAAQqvC,cACVH,EAAYzlC,EAAGxJ,MAAM4B,QD0DvBsrC,GAASpa,WAAa,WAGtBoa,GAASO,YAAc4B,OExIFC,yBACLC,EAAQpuC,EAAMquC,EAAYC,EAASC,EAAQC,kBAC9C3O,KAAOuO,OACPrxC,MAAQqxC,EAAOrxC,WACfiD,KAAOA,OACP0pB,OAASvsB,KAAKsxC,kBAAkBD,QAEhCxxC,KAAO,QACP0xC,aAAe,QACfC,aAAe,QACfC,YAAc,UAEdC,MAAQ1xC,KAAK2xC,2BACbC,OAAS5xC,KAAK6xC,0BAEdC,cAAgB,UAEhBC,UAAYlvC,EAAK2Z,cAEjBw1B,cAAgB,UAChBC,UAAW,OACXC,QAAS,OAETnnB,OAAS,QACTonB,MAAQ,UAERC,cAAgB,OAEhBziB,UAAW,OAEX0iB,QAAU,CACXlB,QAAQA,EACRC,OAAOA,QAGNkB,yBACAC,mBAELrB,EAAWlxC,KAAKwyC,YAAYhyC,KAAKR,6DAI9BA,KAAKusB,OAAOkmB,mBACXzuC,QAAQC,KAAK,0HAGdjE,KAAKusB,OAAOmmB,gBACX1uC,QAAQC,KAAK,uHAGdjE,KAAKusB,OAAOomB,YACX3uC,QAAQC,KAAK,mHAGdjE,KAAKusB,OAAOqmB,sBACX5uC,QAAQC,KAAK,4KAKbkB,EAAenF,KAAK6C,KAAKoC,gBAEF,IAAjBE,QAAoE,IAA7BnF,KAAKusB,OAAOsmB,eACzD1tC,EAAenF,KAAKusB,OAAOsmB,mBAG1Bf,cAAgB9xC,KAAKusB,OAAOumB,YAAc3tC,EAAe,CAACA,GAE5DnF,KAAK+xC,gBACCL,MAAMhwC,MAAQ1B,KAAK8xC,cAAc1U,KAAK,UACtC2V,wEAKLC,EAAShzC,KAAK6C,KAAKN,sBAEd0wC,EAAUpmC,GACfA,EAAEiB,uBAGD4jC,MAAMhrC,MAAMb,OAAS,YACrB6rC,MAAM3jC,MAAM,CAACmlC,eAAe,IAGjCF,EAAOpmC,iBAAiB,QAASqmC,GAEjC5lC,YAAW,WACP2lC,EAAOznB,oBAAoB,QAAS0nB,KACrC,sDAICrB,EAASvrC,SAASC,cAAc,cACpCsrC,EAAOlqC,UAAUC,IAAI,uBAErBiqC,EAAOhlC,iBAAiB,YAAa5M,KAAKmzC,aAAa3yC,KAAKR,OAC5D4xC,EAAOhlC,iBAAiB,UAAW5M,KAAKozC,cAAc5yC,KAAKR,OAEpD4xC,8CAIHjsC,EAAU3F,KAAK+xC,SAAW/xC,KAAK0xC,MAAQ1xC,KAAK6C,KAAKN,kBAEhDqvC,OAAOlrC,MAAMZ,SAAWH,EAAQsD,YAAc,KAEhDjJ,KAAKusB,OAAOpjB,YACiB,IAAzBnJ,KAAKusB,OAAOpjB,cACNyoC,OAAOlrC,MAAMyC,SAAWxD,EAAQsD,YAAc,KACd,iBAAzBjJ,KAAKusB,OAAOpjB,cACnByoC,OAAOlrC,MAAMyC,SAAWnJ,KAAKusB,OAAOpjB,SAAW,UAE/CyoC,OAAOlrC,MAAMyC,SAAWnJ,KAAKusB,OAAOpjB,4DAO7CkqC,EAAUrzC,KAAKusB,OAAO+mB,kBACtB5B,EAAQrrC,SAASC,cAAc,YAEnCorC,EAAMlrC,aAAa,OAAQxG,KAAKusB,OAAOgnB,UAAY,SAAW,QAE9D7B,EAAMhrC,MAAM8sC,QAAU,MACtB9B,EAAMhrC,MAAMjC,MAAQ,OACpBitC,EAAMhrC,MAAM+sC,UAAY,aAEpBzzC,KAAKusB,OAAOmnB,eACZhC,EAAMhrC,MAAMitC,OAAS,UACrBjC,EAAMhrC,MAAMktC,WAAa,eAI1BP,GAA6B,UAAlBhgC,EAAOggC,OACZ,IAAInyC,KAAOmyC,EACQ,KAAjBnyC,EAAIu7B,OAAO,IACVv7B,EAAMA,EAAIkiB,MAAM,GAChBsuB,EAAMlrC,aAAatF,EAAKwwC,EAAMmC,aAAa3yC,GAAOmyC,EAAQ,IAAMnyC,KAEhEwwC,EAAMlrC,aAAatF,EAAKmyC,EAAQnyC,WAKzClB,KAAKusB,OAAO6jB,MACXD,GAAUuB,EAAO1xC,KAAKusB,aAGrBunB,iBAAiBpC,GAEfA,4CAGOnlB,OAEdwnB,EADIC,EAAY,CAAC,SAAU,YAAa,uBAGxCznB,EAAS/gB,OAAOqG,OAAO,GAAI0a,IAEpB0nB,mBAAqB1nB,EAAO0nB,oBAAsB,SACzD1nB,EAAO2nB,wBAA0D,IAA9B3nB,EAAO2nB,mBAAqC,gBAAkB3nB,EAAO2nB,mBACxG3nB,EAAO4nB,sBAAsD,IAA5B5nB,EAAO4nB,iBAAmC,mBAAqB5nB,EAAO4nB,iBACvG5nB,EAAO6nB,iBAA4C,IAAvB7nB,EAAO6nB,YAA8B,IAAM7nB,EAAO6nB,YAE9E7nB,EAAO8nB,WAAa7oC,OAAOC,KAAK8gB,GAAQzB,SAAS,cAAgByB,EAAO8nB,WAAa,IAErFN,EAAavoC,OAAOC,KAAK8gB,GAAQ3B,QAAO,SAAA1pB,UAAO8yC,EAAUlpB,SAAS5pB,MAAMoC,QAI/DywC,EAAa,GAClB/vC,QAAQC,KAAK,uHAFbD,QAAQC,KAAK,+FAKdsoB,EAAOmnB,aACHnnB,EAAOumB,cACNvmB,EAAOumB,aAAc,EACrB9uC,QAAQC,KAAK,iGAGdsoB,EAAO+nB,WACN/nB,EAAO+nB,UAAW,EAClBtwC,QAAQC,KAAK,8FAGdsoB,EAAOgoB,aACNhoB,EAAOgoB,YAAa,EACpBvwC,QAAQC,KAAK,gGAGdsoB,EAAOioB,eACNjoB,EAAOioB,cAAe,EACtBxwC,QAAQC,KAAK,kGAGdsoB,EAAO6jB,OACN7jB,EAAO6jB,MAAO,EACdpsC,QAAQC,KAAK,0FAGdsoB,EAAOkoB,aACNloB,EAAOkoB,YAAa,EACpBzwC,QAAQC,KAAK,gGAGdsoB,EAAOmoB,cACNnoB,EAAOmoB,aAAc,EACrB1wC,QAAQC,KAAK,kGAIlBsoB,EAAOioB,cAAiD,mBAAxBjoB,EAAOooB,iBAAsCpoB,EAAOqoB,aACnFroB,EAAOioB,cAAe,EACtBxwC,QAAQC,KAAK,0HAEVsoB,2CAMMmlB,GACbA,EAAM9kC,iBAAiB,QAAS5M,KAAK60C,YAAYr0C,KAAKR,OACtD0xC,EAAM9kC,iBAAiB,QAAS5M,KAAK80C,YAAYt0C,KAAKR,OACtD0xC,EAAM9kC,iBAAiB,OAAQ5M,KAAK+0C,WAAWv0C,KAAKR,OACpD0xC,EAAM9kC,iBAAiB,UAAW5M,KAAKozC,cAAc5yC,KAAKR,OAC1D0xC,EAAM9kC,iBAAiB,SAAU5M,KAAKg1C,aAAax0C,KAAKR,OAErDA,KAAKusB,OAAOmnB,cACXhC,EAAM9kC,iBAAiB,QAAS5M,KAAKi1C,YAAYz0C,KAAKR,2CAKlD6M,QACHqoC,kEAIFl1C,KAAKusB,OAAOioB,cACXpnC,aAAapN,KAAKgyC,oBAEbA,cAAgB3kC,YAAW,WAC5BvD,EAAKorC,uBACNl1C,KAAKusB,OAAO6nB,mBAEVe,kDAIDtoC,GACRA,EAAEiB,qDAGKjB,GACJ7M,KAAK2vB,UAAY3vB,KAAKmyC,YAChBA,MAAM/uC,mDAKVgyC,sDAGKvoC,UACHA,EAAEskB,cAEA,QACAkkB,OAAOxoC,cAGP,QACAyoC,SAASzoC,cAGT,QACA,QACA0oC,SAAS1oC,cAGT,QACA2oC,uBAGA,QACAC,qBAGA,QACA,QACAC,YAAY7oC,cAGZ,qBAIA8oC,iBAAiB9oC,wCAIlBA,UACDA,EAAEskB,cACA,QACA,QACA,QACA,QACA,QACA,sBAIAykB,mBAAmB/oC,gDAKvB8iB,UAAW,EAEhBtiB,YAAW,gBACFsiB,UAAW,IACjB,mCAOA9iB,OACCiD,EAAQ9P,KAAKuxC,aAAa7lC,QAAQ1L,KAAKyxC,cAEN,UAAlCzxC,KAAKusB,OAAO0nB,oBAAqE,UAAlCj0C,KAAKusB,OAAO0nB,oBAAkCnkC,KAC5FjD,EAAEgpC,2BACFhpC,EAAEiB,kBACFjB,EAAEyzB,iBAECxwB,EAAQ,QACFgmC,WAAW91C,KAAKuxC,aAAazhC,EAAQ,sCAK7CjD,OACDiD,EAAQ9P,KAAKuxC,aAAa7lC,QAAQ1L,KAAKyxC,cAEN,UAAlCzxC,KAAKusB,OAAO0nB,oBAAqE,UAAlCj0C,KAAKusB,OAAO0nB,oBAAkCnkC,EAAQ9P,KAAKuxC,aAAajuC,OAAS,KAC/HuJ,EAAEgpC,2BACFhpC,EAAEiB,kBACFjB,EAAEyzB,iBAECxwB,EAAQ9P,KAAKuxC,aAAajuC,OAAS,KACrB,GAAVwM,OACMgmC,WAAW91C,KAAKuxC,aAAa,SAE7BuE,WAAW91C,KAAKuxC,aAAazhC,EAAQ,uCAMjDjD,GACLA,EAAEgpC,2BACFhpC,EAAEiB,kBACFjB,EAAEyzB,mDAGIzzB,GACH7M,KAAKyxC,iBACCsE,YAAY/1C,KAAKyxC,kBAEjBuE,0CAILnpC,QACCmpC,8CAGGnpC,GACL7M,KAAKusB,OAAOmnB,cAEX7mC,EAAEgpC,oEAIOhpC,GACT7M,KAAKusB,OAAOmnB,eAEZ7mC,EAAEyzB,iBAGCzzB,EAAEskB,SAAW,IAAMtkB,EAAEskB,SAAW,SAC1B8kB,eAAeppC,EAAEskB,qDAKftkB,QACVqpC,eACAhE,QAAS,yCAIHrB,cACXzjC,aAAapN,KAAKgyC,mBAEdmE,EAAY1S,OAAO2S,aAAavF,GAAMnb,mBACrC2gB,YAAcF,EAAUzgB,kBAEzBviB,EAAQnT,KAAKuxC,aAAar6B,MAAK,SAAC3D,eACH,IAAfA,EAAK+iC,OAAyB/iC,EAAK+iC,MAAM5gB,cAAcre,WAAWxP,EAAKwuC,eAGtFljC,QACM2iC,WAAW3iC,QAGf6+B,cAAgB3kC,YAAW,WAC5BxF,EAAKwuC,WAAa,KACnB,wCAGI9iC,GACJvT,KAAKyxC,aAAezxC,KAAKyxC,YAAY9rC,cAC/B8rC,YAAY9rC,QAAQ+B,UAAUmN,OAAO,gBAGzC48B,YAAcl+B,EAEhBA,GAAQA,EAAK5N,UACZ4N,EAAK5N,QAAQ+B,UAAUC,IAAI,WAC3B4L,EAAK5N,QAAQ4wC,eAAe,CAACC,SAAU,SAAUC,MAAO,UAAWC,OAAQ,qEAS1EC,kBAAiB,qDAIjBA,mBACJ5kC,KAAK/R,KAAK42C,aAAap2C,KAAKR,OAC5B+R,KAAK/R,KAAK62C,WAAWr2C,KAAKR,OAC1B+R,KAAK/R,KAAK82C,UAAUt2C,KAAKR,cACnB,SAAC6M,GACAy2B,OAAOyT,UAAUlqC,IACjB7I,QAAQ4N,MAAM,wBAAyB/E,iDAM1CgqC,WAAW72C,KAAKg3C,uBAChBF,qDAGQh3C,cACTirB,EAAS,GACTksB,IAAgBj3C,KAAKoyC,0BAEpBH,UAAW,EAEbjyC,KAAKusB,OAAOxB,OACXA,EAAS/qB,KAAKusB,OAAOxB,OACf/qB,KAAKusB,OAAOqoB,UAClB7pB,EAAS/qB,KAAKk3C,aAAal3C,KAAKusB,OAAOqoB,UAAW50C,KAAK0xC,MAAMhwC,OAEtB,mBAA7B1B,KAAKusB,OAAOooB,aAClB5pB,EAAS/qB,KAAKusB,OAAOooB,aAAa30C,KAAK6C,KAAM7C,KAAK0xC,MAAMhwC,OACnD1B,KAAKusB,OAAOooB,eACjB5pB,EAAS/qB,KAAKm3C,oBAAoBn3C,KAAKusB,OAAO6qB,oBAInDrsB,aAAkBha,SACbjR,QACKu3C,gBAAgBr3C,KAAKusB,OAAO2nB,oBAG9BnpB,EAAOhZ,OACbA,MAAK,SAACulC,UACAxqC,EAAKslC,gBAAkB6E,EACfnqC,EAAKyqC,WAAWD,GAEhBvmC,QAAQE,OAAOgmC,OAIvBlmC,QAAQC,QAAQhR,KAAKu3C,WAAWxsB,4CAI/B3c,OACRkW,EAAcje,SAASC,cAAc,OAElB,mBAAb8H,IACNA,EAAWA,EAASvL,KAAKE,eAAgB/C,KAAK4xC,SAG/CxjC,SACMopC,aAEFppC,aAAoBqO,YACnB6H,EAAclW,GAEdkW,EAAY5c,UAAUC,IAAI,mCAC1B2c,EAAYxc,UAAYsG,QAGvBwjC,OAAO1pC,YAAYoc,QAEnBwyB,kDAIAzZ,EAAKoa,UAEdpa,EAAMqa,GAAWra,EAAK,GADTr9B,KAAKusB,OAAOioB,aAAe,CAACiD,KAAKA,GAAQ,IAG/ClY,MAAMlC,GACZtrB,MAAK,SAAC8a,UACAA,EAAS5V,GACD4V,EAAS2S,cACT,SAAC5tB,UACJ5N,QAAQC,KAAK,+CAAgD2N,GACtDb,QAAQE,OAAOW,OAG1B5N,QAAQ4N,MAAM,4CAA8Cib,EAAS4S,OAAQ5S,EAAS6S,YAC/E3uB,QAAQE,OAAO4b,cAGvB,SAACjb,UACJ5N,QAAQ4N,MAAM,4CAA6CA,GACpDb,QAAQE,OAAOW,kDAIVnL,OAGhB5E,EAFIwB,EAAS,GACbxD,EAAOG,KAAKJ,MAAMyF,QAAQrF,KAAKusB,OAAOooB,qBAIlC9yC,EADD4E,EACUzG,KAAKJ,MAAM6D,cAAck0C,iBAAiBlxC,GAE1CzG,KAAK6C,KAAK+0C,YAAYp7B,YAI/B3c,EAAK+C,SAAQ,SAACwC,OACNwC,EAAM/F,EAAOuE,cAAchB,GAE5BwC,MAAAA,GAAsD,KAARA,IAC7CvE,EAAOuE,IAAO,OAItB5D,QAAQC,KAAK,+DAAgEwC,GAC7EpD,EAAS,IAGNmI,OAAOC,KAAKpI,sCAIZw0C,cACHh4C,EAAO,UAEPmT,MAAMC,QAAQ4kC,KACdA,EAAcrsC,OAAOssC,QAAQD,GAAazqB,KAAI,yBAAElsB,aACrC,CACHo1C,WACA50C,MAAMR,OAKlB22C,EAAYj1C,SAAQ,SAAClB,GACG,WAAjB2R,EAAO3R,KACNA,EAAQ,CACJ40C,MAAM50C,EACNA,MAAMA,IAId6L,EAAKwqC,eAAer2C,EAAO7B,EAAM,WAGhCA,KAAOA,EAELA,yCAGIgU,EAAQhU,EAAMq2B,OACrB3iB,EAAO,GAERM,EAAOpS,QACN8R,EAAOvT,KAAKg4C,gBAAgBnkC,EAAQqiB,EAAQ,IAE5C3iB,EAAO,CACH+iC,MAAMziC,EAAOyiC,MACb50C,MAAMmS,EAAOnS,MACbu2C,WAAWpkC,EAAOokC,WAClB3E,kBAAmBz/B,EAAOy/B,kBAC1B3tC,SAAQ,EACRuyC,UAAS,EACTl1C,SAAQ,EACRkzB,MAAMA,EACNiiB,SAAStkC,GAGV7T,KAAK8xC,eAAiB9xC,KAAK8xC,cAAcpmC,QAAQmI,EAAOnS,QAAU,QAC5Dq0C,YAAYxiC,GAAM,IAI/B1T,EAAKiD,KAAKyQ,2CAGEM,EAAQqiB,cAChB3iB,EAAO,CACP+iC,MAAMziC,EAAOyiC,MACbx1B,OAAM,EACNm3B,WAAWpkC,EAAOokC,WAClB3E,kBAAkBz/B,EAAOy/B,kBACzB3tC,SAAQ,EACR3C,SAAQ,EACRkzB,MAAMA,EACNz0B,QAAQ,GACR02C,SAAStkC,UAGbA,EAAOpS,QAAQmB,SAAQ,SAACiN,GACpB7B,EAAK+pC,eAAeloC,EAAO0D,EAAK9R,QAASy0B,MAGtC3iB,uCAGE9R,OACL8Z,SAEDvb,KAAKusB,OAAOhF,OACXhM,EAAqC,mBAArBvb,KAAKusB,OAAOhF,KAAsBvnB,KAAKusB,OAAOhF,KAAOvnB,KAAKo4C,qBAAqB53C,KAAKR,WAE/Fq4C,WAAW98B,EAAQ9Z,IAGrBA,qCAGA8Z,EAAQ9Z,cACfA,EAAQ8lB,MAAK,SAACC,EAAEC,UACLlM,EAAOiM,EAAE8uB,MAAO7uB,EAAE6uB,MAAO9uB,EAAE9lB,MAAO+lB,EAAE/lB,MAAO8lB,EAAE2wB,SAAU1wB,EAAE0wB,aAGpE12C,EAAQmB,SAAQ,SAACiR,GACVA,EAAOiN,OACNzS,EAAKgqC,WAAW98B,EAAQ1H,EAAOpS,yDAKtB62C,EAAIC,OACjB/wB,EAAGC,EAAG+wB,EAAIC,EAAUC,EAAN/tC,EAAG,EAAMguC,EAAK,eAAgBC,EAAK,KACjDC,EAAa,KAEO,SAArB74C,KAAKusB,OAAOhF,KAAgB,OAChB,CAACgxB,EAAID,GAAfA,OAAIC,UAILD,GAAY,IAANA,EAEJ,CAAA,GAAIC,GAAY,IAANA,EAEX,IACEO,SAASR,IAAOQ,SAASP,GAAK,OAAOD,EAAKC,MAC7C/wB,EAAIic,OAAO6U,GAAI5iB,kBACfjO,EAAIgc,OAAO8U,GAAI7iB,eACH,OAAO,MACdkjB,EAAGhe,KAAKpT,KAAMoxB,EAAGhe,KAAKnT,GAAK,OAAOD,EAAIC,EAAI,GAAK,MACpDD,EAAIA,EAAErU,MAAMwlC,GACZlxB,EAAIA,EAAEtU,MAAMwlC,GACZD,EAAIlxB,EAAElkB,OAASmkB,EAAEnkB,OAASmkB,EAAEnkB,OAASkkB,EAAElkB,OACjCqH,EAAI+tC,OACNF,EAAIhxB,EAAE7c,OACN8tC,EAAIhxB,EAAE9c,aAECmuC,SAASN,IAAOM,SAASL,IACJ,MAAjBD,EAAG/b,OAAO,KAAY+b,EAAK,IAAMA,GAChB,MAAjBC,EAAGhc,OAAO,KAAYgc,EAAK,IAAMA,GAC7BD,EAAKC,GAEJD,EAAKC,EAAK,GAAK,SAI5BjxB,EAAElkB,OAASmkB,EAAEnkB,OAvBpBu1C,EAAc,OAFdA,EAAeN,GAAY,IAANA,GAAe,EAAL,SA4B5BM,sDAIHtE,EAAav0C,KAAKusB,OAAOgoB,YAAcv0C,KAAK+4C,mBAC5CtB,EAAOz3C,KAAK0xC,MAAMhwC,aAGnB+1C,QACMxF,UAAW,OAEXpyC,KAAK+C,SAAQ,SAAC2Q,GACfrC,EAAK8nC,YAAYzE,EAAYkD,EAAMlkC,YAGlC0+B,UAAW,EAGbjyC,KAAKH,yCAGJ0xB,EAAMkmB,EAAMlkC,cAChBoJ,GAAU,SAEVpJ,EAAKuN,OAGLvN,EAAK9R,QAAQmB,SAAQ,SAACiR,GACf7B,EAAKgnC,YAAYznB,EAAMkmB,EAAM5jC,KAC5B8I,GAAU,MAIlBpJ,EAAKvQ,QAAU2Z,GARfpJ,EAAKvQ,QAAUuuB,EAAKkmB,EAAMlkC,EAAK+iC,MAAO/iC,EAAK7R,MAAO6R,EAAK4kC,UAWpD5kC,EAAKvQ,mDAGGy0C,EAAMnB,EAAO50C,EAAO6R,GAC/BkkC,EAAOhU,OAAOgU,GAAM/hB,qBAEX,OAAV4gB,QAAmC,IAAVA,KACrB7S,OAAO6S,GAAO5gB,cAAchqB,QAAQ+rC,IAAS,GAAKhU,OAAO/hC,GAAOg0B,YAAY+hB,GAAM/rC,WAAa,6CAahG1L,KAAK4xC,OAAO5pC,iBAAiB4pC,OAAO3pC,YAAYjI,KAAK4xC,OAAO5pC,iBAE7DupC,aAAe,sCAGb1xC,mBACF23C,aAEL33C,EAAK+C,SAAQ,SAACiR,GACViG,EAAKm/B,WAAWplC,MAGhB7T,KAAKuxC,aAAajuC,aACb+zC,gBAAgBr3C,KAAKusB,OAAO4nB,qDAI9B5gC,OAEPnF,SADIlD,EAAKqI,EAAK5N,YAGV3F,KAAKiyC,UAAY1+B,EAAKvQ,QAAQ,KAE1BkI,EAAG,KACHA,EAAK7E,SAASC,cAAc,QACzBoiC,SAAW,GAEdt6B,EAAWpO,KAAKusB,OAAO2sB,cAAgBl5C,KAAKusB,OAAO2sB,cAAc3lC,EAAK+iC,MAAO/iC,EAAK7R,MAAO6R,EAAK4kC,SAAUjtC,GAAMqI,EAAK+iC,iBAE5F75B,YACnBvR,EAAGhD,YAAYkG,GAEflD,EAAGpD,UAAYsG,EAGhBmF,EAAKuN,MACJ5V,EAAGxD,UAAUC,IAAI,6BAEjBuD,EAAGxD,UAAUC,IAAI,4BAGrBuD,EAAGxD,UAAUC,IAAI,mCAAqC4L,EAAK2iB,OAExD3iB,EAAK+/B,mBAAsD,UAAjCjgC,EAAOE,EAAK+/B,uBAChC,IAAIpyC,KAAOqS,EAAK+/B,kBACG,KAAjBpyC,EAAIu7B,OAAO,IACVv7B,EAAMA,EAAIkiB,MAAM,GAChBlY,EAAG1E,aAAatF,EAAKlB,KAAK0xC,MAAMmC,aAAa3yC,GAAOqS,EAAK+/B,kBAAkB,IAAMpyC,KAEjFgK,EAAG1E,aAAatF,EAAKqS,EAAK+/B,kBAAkBpyC,IAKrDqS,EAAKuN,MACJ5V,EAAG0B,iBAAiB,QAAS5M,KAAKm5C,YAAY34C,KAAKR,KAAMuT,IAEzDrI,EAAG0B,iBAAiB,QAAS5M,KAAKo5C,WAAW54C,KAAKR,KAAMuT,IAG5DrI,EAAG0B,iBAAiB,YAAa5M,KAAKmzC,aAAa3yC,KAAKR,OAExDuT,EAAK5N,QAAUuF,OAGdmuC,WAAW9lC,QAEXq+B,OAAO1pC,YAAYgD,GAErBqI,EAAKuN,MACJvN,EAAK9R,QAAQmB,SAAQ,SAACiR,GAClBylC,EAAKL,WAAWplC,WAGf09B,aAAazuC,KAAKyQ,4CAM3BgmC,EAAWv5C,KAAKmyC,OAASnyC,KAAKmyC,MAAMqH,eAErCx5C,KAAK0xC,MAAMjoC,WAAW,IAClBzJ,KAAKusB,OAAOmnB,cAAqC,KAArB1zC,KAAK0xC,MAAMhwC,QAAiB1B,KAAKusB,OAAOmoB,aAChE10C,KAAKmyC,uBACCA,MAAM/uC,MAAK,QAKnBq2C,gBAEDz5C,KAAKmyC,aACAA,MAAQnyC,KAAK0iC,KAAKyP,MAAMnyC,KAAK4xC,cAGjCO,MAAMhvC,KAAKnD,KAAK6C,KAAKN,aAAc,UAEpCg3C,QACKpH,MAAMuH,WAAW15C,KAAK25C,cAAcn5C,KAAKR,MAAM,wCAKrDuT,GACJA,GAAQA,EAAK5N,UACT4N,EAAK2kC,SACJ3kC,EAAK5N,QAAQ+B,UAAUC,IAAI,UAE3B4L,EAAK5N,QAAQ+B,UAAUmN,OAAO,8CAS/BtB,EAAM1G,GACbA,EAAEiB,uBAEGioC,YAAYxiC,uCAGTA,EAAM1G,GACdA,EAAEiB,yDASGqkC,MAAM/uC,MAAK,QACXivC,QAAQjB,iEAIRc,QAAS,OAETV,aAAa5uC,SAAQ,SAAC2Q,GACvBA,EAAK2kC,UAAW,EAChB0B,EAAKP,WAAW9lC,WAGfi+B,aAAe,QAEfC,YAAc,yCAGXl+B,EAAMzT,OACVgQ,OAECoiC,QAAS,EAEXlyC,KAAKusB,OAAOumB,cACXhjC,EAAQ9P,KAAKwxC,aAAa9lC,QAAQ6H,KAEtB,QACHi+B,aAAazhC,OAAOD,EAAO,GAChCyD,EAAK2kC,UAAW,SAEX1G,aAAa1uC,KAAKyQ,GACvBA,EAAK2kC,UAAW,QAGfxG,MAAMhwC,MAAQ1B,KAAKwxC,aAAapkB,KAAI,SAAA7Z,UAAQA,EAAK+iC,SAAOlZ,KAAK,UAE7Dic,WAAW9lC,UAGXi+B,aAAe,CAACj+B,GACrBA,EAAK2kC,UAAW,OAEXxG,MAAMhwC,MAAQ6R,EAAK+iC,WAEnB+C,WAAW9lC,GAEZzT,QACK65C,sBAIR7D,WAAWviC,yCAGNsmC,OACNx2C,EAAQ8B,UAEPgtC,MAAM/uC,MAAK,GAEbpD,KAAKusB,OAAOumB,YACXzvC,EAASrD,KAAKwxC,aAAapkB,KAAI,SAAA7Z,UAAQA,EAAK7R,iBAEzCm4C,GAAQ75C,KAAKusB,OAAOmnB,cAAgB1zC,KAAKkyC,OAAO,MAC5ClyC,KAAKusB,OAAO+nB,UAAat0C,KAAKusB,OAAOkoB,YAAmC,KAArBz0C,KAAK0xC,MAAMhwC,wBAGxD2wC,QAAQjB,SAFb/tC,EAASrD,KAAK0xC,MAAMhwC,WAOpB2B,EADDrD,KAAKwxC,aAAa,GACRxxC,KAAKwxC,aAAa,GAAG9vC,MAI3ByD,OAFHA,EAAenF,KAAK8xC,cAAc,KAEkD,KAAjB3sC,EACtDA,EAEAnF,KAAKusB,OAAO8nB,WAOvB,KAAXhxC,IACCA,EAASrD,KAAKusB,OAAO8nB,iBAGpBhC,QAAQlB,QAAQ9tC,GAElBrD,KAAK+xC,gBACCD,cAAgBzuC,IAAW2P,MAAMC,QAAQ5P,GAAU,CAACA,GAAUA,mBCr9BhE,CACdquC,MCTc,SAAS7uC,EAAMquC,EAAYC,EAASC,EAAQC,OAEtDyI,EAAYj3C,EAAKoC,WACrBysC,EAAQrrC,SAASC,cAAc,YAE/BorC,EAAMlrC,aAAa,OAAQ6qC,EAAa0I,OAAS,SAAW,QAE5DrI,EAAMhrC,MAAM8sC,QAAU,MACtB9B,EAAMhrC,MAAMjC,MAAQ,OACpBitC,EAAMhrC,MAAM+sC,UAAY,aAErBpC,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBACnD,IAAIpyC,KAAOmwC,EAAaiC,kBACR,KAAjBpyC,EAAIu7B,OAAO,IACbv7B,EAAMA,EAAIkiB,MAAM,GAChBsuB,EAAMlrC,aAAatF,EAAKwwC,EAAMmC,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEvFwwC,EAAMlrC,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,aAgBjD84C,EAASntC,GACb,MAACitC,GAA2E,KAAhBpI,EAAMhwC,OAAiBgwC,EAAMhwC,QAAUo4C,EACnG3I,EAAQO,EAAMhwC,SAChBo4C,EAAYpI,EAAMhwC,OAGnB0vC,WAjBFM,EAAMhwC,WAA6B,IAAdo4C,EAA4BA,EAAY,GAE7D5I,GAAW,WACVQ,EAAM3jC,MAAM,CAACmlC,eAAe,IAC5BxB,EAAMhrC,MAAMb,OAAS,OAElBwrC,EAAa4I,gBACfvI,EAAM1P,YAeR0P,EAAM9kC,iBAAiB,SAAUotC,GACjCtI,EAAM9kC,iBAAiB,OAAQotC,GAG/BtI,EAAM9kC,iBAAiB,WAAW,SAASC,UACnCA,EAAEskB,cAEH,GACL6oB,eAGK,GACL5I,eAGK,QACA,GACLvkC,EAAEiB,sBAKDujC,EAAajB,MACfD,GAAUuB,EAAOL,GAGXK,GD5DPwI,SEVc,SAASr3C,EAAMquC,EAAYC,EAASC,EAAQC,OAEvDyI,EAAYj3C,EAAKoC,WACjBk1C,EAAU9I,EAAa4C,oBAAsB,SAC7CvyC,EAAQ+hC,OAAOqW,MAAAA,EAA0DA,EAAY,IAErFpI,IADShwC,EAAMyR,MAAM,oBAAsB,IAAI7P,OACvC+C,SAASC,cAAc,aAC/BuP,EAAe,KAGf67B,EAAMhrC,MAAMI,QAAU,QACtB4qC,EAAMhrC,MAAM8sC,QAAU,MACtB9B,EAAMhrC,MAAMb,OAAS,OACrB6rC,EAAMhrC,MAAMjC,MAAQ,OACpBitC,EAAMhrC,MAAM+sC,UAAY,aACxB/B,EAAMhrC,MAAM0zC,WAAa,WACzB1I,EAAMhrC,MAAMiiB,OAAS,OAElB0oB,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBAChD,IAAIpyC,KAAOmwC,EAAaiC,kBACL,KAAjBpyC,EAAIu7B,OAAO,IACVv7B,EAAMA,EAAIkiB,MAAM,GAChBsuB,EAAMlrC,aAAatF,EAAKwwC,EAAMmC,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEvFwwC,EAAMlrC,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,aAoB1D84C,EAASntC,GAEV,MAACitC,GAA2E,KAAhBpI,EAAMhwC,OAAiBgwC,EAAMhwC,QAAUo4C,GAEhG3I,EAAQO,EAAMhwC,SACbo4C,EAAYpI,EAAMhwC,OAGtB2L,YAAW,WACPxK,EAAKw3C,SAAS57B,oBAChB,MAEF2yB,WA3BRM,EAAMhwC,MAAQA,EAEdwvC,GAAW,WACPQ,EAAM3jC,MAAM,CAACmlC,eAAe,IAC5BxB,EAAMhrC,MAAMb,OAAS,OAErB6rC,EAAM77B,aACN67B,EAAMhrC,MAAMb,OAAS6rC,EAAM77B,aAAe,KAC1ChT,EAAKw3C,SAAS57B,kBAEX4yB,EAAa4I,gBACrBvI,EAAM1P,YAqBL0P,EAAM9kC,iBAAiB,SAAUotC,GACjCtI,EAAM9kC,iBAAiB,OAAQotC,GAE/BtI,EAAM9kC,iBAAiB,SAAS,WAE5B8kC,EAAMhrC,MAAMb,OAAS,OAEjBy0C,EAAY5I,EAAM77B,aAEtB67B,EAAMhrC,MAAMb,OAASy0C,EAAY,KAE9BA,GAAazkC,IACZA,EAAeykC,EACfz3C,EAAKw3C,SAAS57B,sBAItBizB,EAAM9kC,iBAAiB,WAAW,SAASC,UAEhCA,EAAEskB,cACA,GACLigB,eAGK,IACS,UAAX+I,GAAmC,UAAXA,GAAuBzI,EAAM6I,kBACpD1tC,EAAEgpC,2BACFhpC,EAAEiB,8BAKD,IACS,UAAXqsC,GAAmC,UAAXA,GAAuBzI,EAAM6I,iBAAmB7I,EAAMhwC,MAAM4B,UACnFuJ,EAAEgpC,2BACFhpC,EAAEiB,8BAID,QACA,GACLjB,EAAEiB,sBAKPujC,EAAajB,MACZD,GAAUuB,EAAOL,GAGdK,GFpGP8I,OGXW,SAAS33C,EAAMquC,EAAYC,EAASC,EAAQC,OACtDyI,EAAYj3C,EAAKoC,WACrBk1C,EAAU9I,EAAa4C,oBAAsB,SAC7CvC,EAAQrrC,SAASC,cAAc,YAE/BorC,EAAMlrC,aAAa,OAAQ,eAEG,IAApB6qC,EAAahhC,KACtBqhC,EAAMlrC,aAAa,MAAO6qC,EAAahhC,UAGV,IAApBghC,EAAa/gC,KACtBohC,EAAMlrC,aAAa,MAAO6qC,EAAa/gC,UAGT,IAArB+gC,EAAaoJ,MACtB/I,EAAMlrC,aAAa,OAAQ6qC,EAAaoJ,MAIzC/I,EAAMhrC,MAAM8sC,QAAU,MACtB9B,EAAMhrC,MAAMjC,MAAQ,OACpBitC,EAAMhrC,MAAM+sC,UAAY,aAErBpC,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBACnD,IAAIpyC,KAAOmwC,EAAaiC,kBACR,KAAjBpyC,EAAIu7B,OAAO,IACbv7B,EAAMA,EAAIkiB,MAAM,GAChBsuB,EAAMlrC,aAAatF,EAAKwwC,EAAMmC,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEvFwwC,EAAMlrC,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,IAK1DwwC,EAAMhwC,MAAQo4C,MAEVY,EAAW,SAAS7tC,GACvBmtC,cAkBQA,QACJt4C,EAAQgwC,EAAMhwC,MAEduO,MAAMvO,IAAmB,KAATA,IACnBA,EAAQ4hC,OAAO5hC,IAGbA,IAAUo4C,EACT3I,EAAQzvC,KACVo4C,EAAYp4C,GAGb0vC,WA3BFF,GAAW,WAEVQ,EAAMnmB,oBAAoB,OAAQmvB,GAElChJ,EAAM3jC,MAAM,CAACmlC,eAAe,IAC5BxB,EAAMhrC,MAAMb,OAAS,OAGrB6rC,EAAM9kC,iBAAiB,OAAQ8tC,GAE5BrJ,EAAa4I,gBACfvI,EAAM1P,YAqBR0P,EAAM9kC,iBAAiB,WAAW,SAASC,UACnCA,EAAEskB,cACH,GAEL6oB,eAGK,GACL5I,eAGK,QACA,GACS,UAAX+I,IACFttC,EAAEgpC,2BACFhpC,EAAEiB,8BAIE,QACA,GACLjB,EAAEiB,sBAKDujC,EAAajB,MACfD,GAAUuB,EAAOL,GAGXK,GH3FJpQ,MIdW,SAASz+B,EAAMquC,EAAYC,EAASC,EAAQC,OACtDyI,EAAYj3C,EAAKoC,WACrBysC,EAAQrrC,SAASC,cAAc,YAE/BorC,EAAMlrC,aAAa,OAAQ,cAEI,IAApB6qC,EAAahhC,KACvBqhC,EAAMlrC,aAAa,MAAO6qC,EAAahhC,UAGT,IAApBghC,EAAa/gC,KACvBohC,EAAMlrC,aAAa,MAAO6qC,EAAa/gC,UAGR,IAArB+gC,EAAaoJ,MACvB/I,EAAMlrC,aAAa,OAAQ6qC,EAAaoJ,MAIzC/I,EAAMhrC,MAAM8sC,QAAU,MACtB9B,EAAMhrC,MAAMjC,MAAQ,OACpBitC,EAAMhrC,MAAM+sC,UAAY,aAErBpC,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBACnD,IAAIpyC,KAAOmwC,EAAaiC,kBACR,KAAjBpyC,EAAIu7B,OAAO,IACbv7B,EAAMA,EAAIkiB,MAAM,GAChBsuB,EAAMlrC,aAAatF,EAAKwwC,EAAMmC,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEvFwwC,EAAMlrC,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,aAYjD84C,QACJt4C,EAAQgwC,EAAMhwC,MAEduO,MAAMvO,IAAmB,KAATA,IACnBA,EAAQ4hC,OAAO5hC,IAGbA,GAASo4C,EACR3I,EAAQzvC,KACVo4C,EAAYp4C,GAGb0vC,WAnBFM,EAAMhwC,MAAQo4C,EAEd5I,GAAW,WACVQ,EAAM3jC,MAAM,CAACmlC,eAAe,IAC5BxB,EAAMhrC,MAAMb,OAAS,UAoBtB6rC,EAAM9kC,iBAAiB,QAAQ,SAASC,GACvCmtC,OAIDtI,EAAM9kC,iBAAiB,WAAW,SAASC,UACnCA,EAAEskB,cACH,GAEL6oB,eAGK,GACL5I,QAKKM,GJ7DP1P,OKdc,SAASn/B,EAAMquC,EAAYC,EAASC,EAAQC,UAEzDrtC,QAAQC,KAAK,yEAEA,IAAI02C,GAAK36C,KAAM6C,EAAMquC,EAAYC,EAASC,EAAQC,GAEjDK,OLSf9+B,KMfc,SAAS/P,EAAMquC,EAAYC,EAASC,EAAQC,UAC5C,IAAIsJ,GAAK36C,KAAM6C,EAAMquC,EAAYC,EAASC,EAAQC,GAEjDK,ONafgC,aOhBc,SAAS7wC,EAAMquC,EAAYC,EAASC,EAAQC,UAE1DrtC,QAAQC,KAAK,mHAEbotC,EAAaqC,cAAe,EAEd,IAAIiH,GAAK36C,KAAM6C,EAAMquC,EAAYC,EAASC,EAAQC,GAEjDK,OPSfkJ,KQlBc,SAAS/3C,EAAMquC,EAAYC,EAASC,EAAQC,OACtDwJ,EAAO76C,KACX2F,EAAU9C,EAAKN,aACfb,EAAQmB,EAAKoC,WACb61C,EAAWn1C,EAAQo1C,qBAAqB,OAAOz3C,QAAU,EACzD03C,EAAOr1C,EAAQo1C,qBAAqB,OAAO,GAAKp1C,EAAQo1C,qBAAqB,OAAO,GAAGlH,aAAa,SAAW,GAC/GoH,EAAQ,GACRC,EAAc70C,SAASC,cAAc,OACrCs0C,EAAOv0C,SAAS80C,gBAAgB,6BAA8B,gBAIrDC,EAAWxzC,GACnBqzC,EAAMr4C,SAAQ,SAASg4C,EAAMjwC,GACzBA,EAAI/C,GACmB,MAAtBizC,EAAKj7C,MAAMipB,QACb+xB,EAAKp0C,aAAa,QAAS,yBAE3Bo0C,EAAKlzC,UAAU8kB,QAAQ,0BAA2B,yBAGnDouB,EAAK9yC,UAAY,4SAEQ,MAAtB+yC,EAAKj7C,MAAMipB,QACb+xB,EAAKp0C,aAAa,QAAS,2BAE3Bo0C,EAAKlzC,UAAU8kB,QAAQ,wBAAyB,2BAGjDouB,EAAK9yC,UAAY,uTAMXuzC,EAAU1wC,OAEd2wC,EAAcj1C,SAASC,cAAc,QACrCi1C,EAAWX,EAAK/Q,WAAU,GAE9BoR,EAAMn4C,KAAKy4C,GAEXD,EAAW1uC,iBAAiB,cAAc,SAASC,GAClDA,EAAEiB,kBACFjB,EAAEgpC,2BACFuF,EAAWzwC,MAGZ2wC,EAAW1uC,iBAAiB,aAAa,SAASC,GACjDA,EAAEiB,kBACFjB,EAAEgpC,8BAGHyF,EAAW1uC,iBAAiB,SAAS,SAASC,GAC7CA,EAAEiB,kBACFjB,EAAEgpC,2BACF1E,EAAQxmC,GACRhF,EAAQk0C,UAGTyB,EAAWpzC,YAAYqzC,GACvBL,EAAYhzC,YAAYozC,YAKhBE,EAAY5zC,GACpBlG,EAAQkG,EACRwzC,EAAWxzC,MAIZjC,EAAQe,MAAM0zC,WAAa,SAC3Bz0C,EAAQe,MAAM+0C,SAAW,SACzB91C,EAAQe,MAAMg1C,aAAe,WAG7BR,EAAYx0C,MAAMsI,cAAgB,SAClCksC,EAAYx0C,MAAMI,QAAU,eAC5Bo0C,EAAYx0C,MAAM8sC,QAAU,MAG5BoH,EAAKp0C,aAAa,QAASw0C,GAC3BJ,EAAKp0C,aAAa,SAAUw0C,GAC5BJ,EAAKp0C,aAAa,UAAW,eAC7Bo0C,EAAKp0C,aAAa,YAAa,YAC/Bo0C,EAAKl0C,MAAM8sC,QAAU,QAElBnC,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBACnD,IAAIpyC,KAAOmwC,EAAaiC,kBACR,KAAjBpyC,EAAIu7B,OAAO,IACbv7B,EAAMA,EAAIkiB,MAAM,GAChB83B,EAAY10C,aAAatF,EAAKg6C,EAAYrH,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEnGg6C,EAAY10C,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,QAM5D,IAAIyJ,EAAE,EAAEA,GAAImwC,EAASnwC,IACxB0wC,EAAU1wC,UAOXywC,EAHA15C,EAAQwO,KAAKI,IAAI7C,SAAS/L,GAAQo5C,IAKlCI,EAAYtuC,iBAAiB,aAAa,SAASC,GAClDuuC,EAAW,MAGZF,EAAYtuC,iBAAiB,SAAS,SAASC,GAC9CskC,EAAQ,MAGTxrC,EAAQiH,iBAAiB,QAAQ,SAASC,GACzCukC,OAIDzrC,EAAQiH,iBAAiB,WAAW,SAASC,UACrCA,EAAEskB,cACH,GACLqqB,EAAY95C,EAAQ,cAGf,GACL85C,EAAY95C,EAAQ,cAGf,GACLyvC,EAAQzvC,cAGH,GACL0vC,QAKK8J,GR5HPS,SSnBc,SAAS94C,EAAMquC,EAAYC,EAASC,EAAQC,OAQ1DuK,EAAWC,EAPPl2C,EAAU9C,EAAKN,aACnB8N,OAAkC,IAArBghC,EAAahhC,IAAwB1K,EAAQo1C,qBAAqB,OAAO,IAAMp1C,EAAQo1C,qBAAqB,OAAO,GAAGlH,aAAa,QAAW,IAAOxC,EAAahhC,IAC/KC,OAAkC,IAArB+gC,EAAa/gC,IAAwB3K,EAAQo1C,qBAAqB,OAAO,IAAMp1C,EAAQo1C,qBAAqB,OAAO,GAAGlH,aAAa,QAAW,EAAKxC,EAAa/gC,IAC7KwrC,GAAWzrC,EAAMC,GAAO,IACxB5O,EAAQmB,EAAKoC,YAAc,EAC3B3C,EAAS+D,SAASC,cAAc,OAChCy1C,EAAM11C,SAASC,cAAc,gBAIpB01C,QACJt1C,EAAQ0L,OAAO0nB,iBAAiBn0B,EAAS,MAEzCs2C,EAAWH,EAAU5rC,KAAKgsC,MAAMH,EAAI9yC,cAAgBtD,EAAQyK,YAAc3C,SAAS/G,EAAMqjC,iBAAiB,iBAAmBt8B,SAAS/G,EAAMqjC,iBAAiB,mBAAmB,MAASz5B,EAC7L6gC,EAAQ8K,GACRt2C,EAAQa,aAAa,gBAAiBy1C,GACtCt2C,EAAQa,aAAa,aAAc9E,MAIpCY,EAAOoE,MAAMyO,SAAW,WACxB7S,EAAOoE,MAAMW,MAAQ,IACrB/E,EAAOoE,MAAMM,IAAM,IACnB1E,EAAOoE,MAAMO,OAAS,IACtB3E,EAAOoE,MAAMjC,MAAQ,MACrBnC,EAAOoF,UAAUC,IAAI,6BAGrBo0C,EAAIr1C,MAAMI,QAAU,eACpBi1C,EAAIr1C,MAAMyO,SAAW,WAKrB4mC,EAAIr1C,MAAMb,OAAS,OACnBk2C,EAAIr1C,MAAMy1C,gBAAkB,UAC5BJ,EAAIr1C,MAAMyC,SAAW,OACrB4yC,EAAIr1C,MAAMZ,SAAW,KAElBurC,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBACnD,IAAIpyC,KAAOmwC,EAAaiC,kBACR,KAAjBpyC,EAAIu7B,OAAO,IACbv7B,EAAMA,EAAIkiB,MAAM,GAChB24B,EAAIv1C,aAAatF,EAAK66C,EAAIlI,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEnF66C,EAAIv1C,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,WAMxDyE,EAAQe,MAAM8sC,QAAU,UAGxB9xC,EAAQwO,KAAKI,IAAIkzB,WAAW9hC,GAAQ2O,GACpC3O,EAAQwO,KAAKG,IAAImzB,WAAW9hC,GAAQ4O,GAGpC5O,EAAQwO,KAAKgsC,OAAOx6C,EAAQ4O,GAAOwrC,GAEnCC,EAAIr1C,MAAMjC,MAAQ/C,EAAQ,IAE1BiE,EAAQa,aAAa,gBAAiB8J,GACtC3K,EAAQa,aAAa,gBAAiB6J,GAEtC0rC,EAAI7zC,YAAY5F,GAEhBA,EAAOsK,iBAAiB,aAAa,SAASC,GAC7C+uC,EAAY/uC,EAAEuvC,QACdP,EAAiBE,EAAI9yC,eAGtB3G,EAAOsK,iBAAiB,aAAa,WACpCtK,EAAOoE,MAAMitC,OAAS,eAGvBhuC,EAAQiH,iBAAiB,aAAa,SAASC,GAC3C+uC,IACFG,EAAIr1C,MAAMjC,MAASo3C,EAAiBhvC,EAAEuvC,QAAUR,EAAa,SAI/Dj2C,EAAQiH,iBAAiB,WAAW,SAASC,GACzC+uC,IACF/uC,EAAEiB,kBACFjB,EAAEgpC,2BAEF+F,GAAY,EACZC,GAAiB,EAEjBG,QAKFr2C,EAAQiH,iBAAiB,WAAW,SAASC,UACrCA,EAAEskB,cACH,GACLtkB,EAAEyzB,iBACFyb,EAAIr1C,MAAMjC,MAASs3C,EAAI3rC,YAAczK,EAAQyK,YAAY,IAAO,gBAG3D,GACLvD,EAAEyzB,iBACFyb,EAAIr1C,MAAMjC,MAASs3C,EAAI3rC,YAAczK,EAAQyK,YAAY,IAAO,gBAG3D,OACA,GACL4rC,eAGK,GACL5K,QAMFzrC,EAAQiH,iBAAiB,QAAQ,WAChCwkC,OAGM2K,GTxGPM,UUpBc,SAASx5C,EAAMquC,EAAYC,EAASC,EAAQC,OACtD3vC,EAAQmB,EAAKoC,WACjBysC,EAAQrrC,SAASC,cAAc,SAC/Bg2C,EAAWjL,EAAaiL,SACxBC,OAA2D,IAApClL,EAAamL,mBAAqC,KAAOnL,EAAamL,mBAC7FC,GAAgB,EAChBC,EAAelxC,OAAOC,KAAK4lC,GAAcvmB,SAAS,aAClD6xB,EAAgBnxC,OAAOC,KAAK4lC,GAAcvmB,SAAS,iBAEnD4mB,EAAMlrC,aAAa,OAAQ,YAC3BkrC,EAAMhrC,MAAMk2C,UAAY,MACxBlL,EAAMhrC,MAAM+sC,UAAY,aAErBpC,EAAaiC,mBAA8D,UAAzCjgC,EAAOg+B,EAAaiC,uBACnD,IAAIpyC,KAAOmwC,EAAaiC,kBACR,KAAjBpyC,EAAIu7B,OAAO,IACbv7B,EAAMA,EAAIkiB,MAAM,GAChBsuB,EAAMlrC,aAAatF,EAAKwwC,EAAMmC,aAAa3yC,GAAOmwC,EAAaiC,kBAAkB,IAAMpyC,KAEvFwwC,EAAMlrC,aAAatF,EAAKmwC,EAAaiC,kBAAkBpyC,aAwBjDqE,EAASs0C,OACbgD,EAAenL,EAAMoL,eAGxBD,EADEH,GAAgBG,EACHxL,EAAa0L,UACpBJ,IAAkBE,EACXxL,EAAa2L,WAEbH,EAGbP,EACEzC,EAWA4C,EACKF,EAEAM,EAbLnL,EAAMoL,UAAYL,GACpB/K,EAAMoL,SAAU,EAChBpL,EAAMuL,eAAgB,EACtBR,GAAgB,EACTF,IAEPE,GAAgB,EACTI,GAUFA,SAjDTnL,EAAMhwC,MAAQA,GAEX46C,QAA8B,IAAV56C,GAAyBA,IAAU66C,GAA2B,KAAV76C,IAC1E+6C,GAAgB,EAChB/K,EAAMuL,eAAgB,GAGE,WAAtBj9C,KAAKJ,MAAMipB,SACbqoB,GAAW,WACVQ,EAAM3jC,MAAM,CAACmlC,eAAe,OAI9BxB,EAAMoL,QAAUJ,EAAeh7C,IAAU2vC,EAAa0L,WAAuB,IAAVr7C,GAA4B,SAAVA,GAA8B,SAAVA,GAA8B,IAAVA,EAE7HwvC,GAAW,WACVQ,EAAM3jC,WAsCP2jC,EAAM9kC,iBAAiB,UAAU,SAASC,GACzCskC,EAAQ5rC,QAGTmsC,EAAM9kC,iBAAiB,QAAQ,SAASC,GACvCskC,EAAQ5rC,GAAS,OAIlBmsC,EAAM9kC,iBAAiB,WAAW,SAASC,GAC1B,IAAbA,EAAEskB,SACJggB,EAAQ5rC,KAEO,IAAbsH,EAAEskB,SACJigB,OAIKM,IC5FFV,4CAEOpxC,yCACLA,IAED+iC,aAAc,IACdua,YAAa,IACbC,gBAAiB,IACjBC,aAAc,IACdC,YAAc,KAEdC,QAAUtM,EAAKsM,UAEfhpB,qBAAqB,cACrBA,qBAAqB,YACrBA,qBAAqB,kBAErBA,qBAAqB,iBACrBA,qBAAqB,gBACrBA,qBAAqB,uBAErBa,sBAAsB,iBAAkBrrB,EAAKyzC,eAAe/8C,cAC5D20B,sBAAsB,kBAAmBrrB,EAAK0zC,gBAAgBh9C,cAC9D20B,sBAAsB,eAAgBrrB,EAAK2zC,aAAaj9C,cACxD20B,sBAAsB,eAAgBrrB,EAAK4zC,aAAal9C,cACxD20B,sBAAsB,eAAgBrrB,EAAK6zC,aAAan9C,cACxD20B,sBAAsB,gBAAiBrrB,EAAK8zC,cAAcp9C,cAC1D20B,sBAAsB,aAAcrrB,EAAK+zC,WAAWr9C,cACpD20B,sBAAsB,eAAgBrrB,EAAKg0C,aAAat9C,cAExDqnC,0BAA0B,OAAQ,WAAY/9B,EAAKi0C,aAAav9C,cAChEqnC,0BAA0B,OAAQ,cAAe/9B,EAAKk0C,YAAYx9C,cAClEqnC,0BAA0B,OAAQ,OAAQ/9B,EAAKm0C,SAASz9C,cACxDqnC,0BAA0B,OAAQ,aAAc/9B,EAAKo0C,eAAe19C,cAEpEqnC,0BAA0B,OAAQ,eAAgB/9B,EAAK2zC,aAAaj9C,cACpEqnC,0BAA0B,OAAQ,eAAgB/9B,EAAK4zC,aAAal9C,cACpEqnC,0BAA0B,OAAQ,eAAgB/9B,EAAK6zC,aAAan9C,cACpEqnC,0BAA0B,OAAQ,gBAAiB/9B,EAAK8zC,cAAcp9C,cACtEqnC,0BAA0B,OAAQ,aAAc/9B,EAAK+zC,WAAWr9C,cAChEqnC,0BAA0B,OAAQ,eAAgB/9B,EAAKg0C,aAAat9C,kEAIpEQ,UAAU,YAAahB,KAAKm+C,WAAW39C,KAAKR,YAC5CgB,UAAU,cAAehB,KAAKg+C,YAAYx9C,KAAKR,YAC/CgB,UAAU,gBAAiBhB,KAAKokC,sBAAsB5jC,KAAKR,YAC3DgB,UAAU,gBAAiBhB,KAAKo+C,kBAAkB59C,KAAKR,YACvDgB,UAAU,eAAgBhB,KAAKq+C,eAAe79C,KAAKR,YACnDgB,UAAU,kBAAmBhB,KAAKs+C,WAAW99C,KAAKR,YAElDgB,UAAU,sBAAuBhB,KAAKy9C,aAAaj9C,KAAKR,UAAMG,SAC9Da,UAAU,sBAAuBhB,KAAKu+C,uBAAuB/9C,KAAKR,YAClEgB,UAAU,sBAAuBhB,KAAK29C,aAAan9C,KAAKR,UAAMG,SAC9Da,UAAU,uBAAwBhB,KAAK49C,cAAcp9C,KAAKR,UAAMG,SAChEa,UAAU,oBAAqBhB,KAAK69C,WAAWr9C,KAAKR,UAAMG,SAC1Da,UAAU,sBAAuBhB,KAAK89C,aAAat9C,KAAKR,UAAMG,mDAQ7C0M,OAClBhK,EAAO7C,KAAK2iC,YAChB6b,EAASx+C,KAAKyB,QAAQ,gBAEnBoB,IACE7C,KAAK09C,aAAa76C,EAAMgK,IACxB2xC,IACF37C,EAAKN,aAAayF,WAAW6xC,QAG5B2E,GADa,IAAXA,EACOx+C,KAAKJ,MAAMgnB,OAAO,IAEP,mBAAV43B,EACAx+C,KAAKJ,MAAMgnB,OAAO43B,EAAO37C,EAAKuC,IAAIrC,iBAElC/C,KAAKJ,MAAMgnB,OAAOpb,OAAOqG,OAAO,GAAI2sC,KAIxCzsC,MAAK,WACX1E,YAAW,WACVxK,EAAKE,eAAe26C,4DAYb76C,WACFA,EAAKzC,QAAQsiC,MAAQ7/B,EAAKzC,QAAQsiC,KAAK+b,8CAGnC57C,GACXA,IAAS7C,KAAK2iC,iBACX/iC,MAAMQ,QAAQsiC,KAAK4b,aAExBt6C,QAAQC,KAAK,0GAQCtB,cACXA,IACHA,EAAQ3C,KAAKJ,MAAMQ,QAAQsiC,KAAK6a,kBAG7BvqC,MAAMC,QAAQtQ,KACjBA,EAAQ,CAACA,IAGVA,EAAMC,SAAQ,SAACC,GACdgF,EAAKjI,MAAMQ,QAAQsiC,KAAKsb,YAAYn7C,EAAK2Z,0DAKtCkiC,EAAU//B,EADF9b,yDAAO7C,KAAK2iC,YAAa91B,4CAGlChK,EAAK,IAEJgK,GACFA,EAAEyzB,iBAGHoe,EAAW1+C,KAAK29C,sBAGR,MAEPh/B,EAAU3e,KAAKJ,MAAMgJ,WAAWyX,eAAexd,EAAKuC,KAAK,MAGxDs5C,EAAW1+C,KAAK2+C,qBAAqBhgC,EAASA,EAAQhc,MAAMW,gBAG3Do7C,EAAS37C,eAAe2/B,QACjB,SAMJ,6CAIHgc,EAAUhgC,EADF7b,yDAAO7C,KAAK2iC,YAAa91B,4CAGlChK,EAAK,IAEJgK,GACFA,EAAEyzB,iBAGHoe,EAAW1+C,KAAK49C,uBAGR,MAEPl/B,EAAU1e,KAAKJ,MAAMgJ,WAAWwX,eAAevd,EAAKuC,KAAK,MAGxDs5C,EAAW1+C,KAAK2+C,qBAAqBjgC,GAAU,WAG9CggC,EAAS37C,eAAe2/B,QACjB,SAMJ,6CAIH5yB,EAAO4uC,EADC77C,yDAAO7C,KAAK2iC,YAAa91B,kDAGlChK,IAECgK,GACFA,EAAEyzB,iBAGHxwB,EAAQjN,EAAK+7C,WACbF,EAAW1+C,KAAK6+C,qBAAqBh8C,EAAKuC,IAAK0K,OAG9C4uC,EAAS37C,eAAe2/B,QACjB,+CAQL5yB,EAAO4uC,EADE77C,yDAAO7C,KAAK2iC,YAAa91B,kDAGnChK,IAECgK,GACFA,EAAEyzB,iBAGHxwB,EAAQjN,EAAK+7C,WACbF,EAAW1+C,KAAK2+C,qBAAqB97C,EAAKuC,IAAK0K,OAG9C4uC,EAAS37C,eAAe2/B,QACjB,4CAQL5yB,EAAO4O,EADD7b,yDAAO7C,KAAK2iC,YAAa91B,kDAGhChK,IAECgK,GACFA,EAAEyzB,iBAGHxwB,EAAQjN,EAAK+7C,WACblgC,EAAU1e,KAAKJ,MAAMgJ,WAAWyX,eAAexd,EAAKuC,KAAK,OAGxDsZ,EAAQ/b,MAAMmN,GAAO/M,eAAe2/B,QAC7B,8CAQL5yB,EAAO4O,EADC7b,yDAAO7C,KAAK2iC,YAAa91B,kDAGlChK,IAECgK,GACFA,EAAEyzB,iBAGHxwB,EAAQjN,EAAK+7C,WACblgC,EAAU1e,KAAKJ,MAAMgJ,WAAWwX,eAAevd,EAAKuC,KAAK,OAGxDsZ,EAAQ/b,MAAMmN,GAAO/M,eAAe2/B,QAC7B,gDAOWt9B,EAAK0K,OACrB4uC,GAAW,KAEZ5uC,EAAQ1K,EAAIzC,MAAMW,OAAO,MACvB,IAAIqH,EAAImF,EAAM,EAAGnF,EAAIvF,EAAIzC,MAAMW,OAAQqH,IAAI,KAC1C9H,EAAOuC,EAAIzC,MAAMgI,MAElB9H,EAAKhB,OAAOzB,QAAQsiC,MAAQxwB,EAAQsD,UAAU3S,EAAKN,cAAc,KAC/Du8C,GAAY,KAE4B,mBAAlCj8C,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,QAClCD,EAAYj8C,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,MAAMl8C,EAAKE,iBAG9C+7C,EAAU,CACZJ,EAAW77C,iBAOR67C,+CAGat5C,EAAK0K,OACrBkvC,GAAW,KAEZlvC,EAAQ,MACN,IAAInF,EAAImF,EAAM,EAAGnF,GAAK,EAAGA,IAAI,KAC5B9H,EAAOuC,EAAIzC,MAAMgI,GACrBm0C,GAAY,KAETj8C,EAAKhB,OAAOzB,QAAQsiC,MAAQxwB,EAAQsD,UAAU3S,EAAKN,gBACT,mBAAlCM,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,QAClCD,EAAYj8C,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,MAAMl8C,EAAKE,iBAG9C+7C,GAAU,CACZE,EAAWn8C,gBAORm8C,gDAOcn9C,QACkB,IAA7BA,EAAO0F,WAAW0pC,aACtB3U,iBAAiBz6B,6CAINA,GACd7B,KAAK2iC,aAAe3iC,KAAK2iC,YAAY9gC,SAAWA,QAC7Cy8C,oDAIQl5C,GACXpF,KAAK2iC,aAAe3iC,KAAK2iC,YAAYv9B,MAAQA,QAC1Ck5C,sDAKUz8C,OAEhBmW,EAAS,CACRi5B,QAAO,EACPhR,SAAQ,EACR8e,MAAMl9C,EAAO0F,WAAW03C,SACxB1yB,OAAO1qB,EAAO0F,WAAW8pC,cAAgB,aAI5BxvC,EAAO0F,WAAW0pC,aAC1B,SACFjxC,KAAKs9C,QAAQz7C,EAAO0F,WAAW0pC,QACjCj5B,EAAOi5B,OAASjxC,KAAKs9C,QAAQz7C,EAAO0F,WAAW0pC,QAE/CjtC,QAAQC,KAAK,wCAAyCpC,EAAO0F,WAAW0pC,kBAIpE,WACLj5B,EAAOi5B,OAASpvC,EAAO0F,WAAW0pC,iBAG7B,WAC2B,IAA7BpvC,EAAO0F,WAAW0pC,SACsB,mBAAhCpvC,EAAO0F,WAAW2H,UACxBlP,KAAKs9C,QAAQz7C,EAAO0F,WAAW2H,WACjC8I,EAAOi5B,OAASjxC,KAAKs9C,QAAQz7C,EAAO0F,WAAW2H,WAE/C8I,EAAOi5B,OAASjxC,KAAKs9C,QAAL,MAGjBt5C,QAAQC,KAAK,oEAAqEpC,EAAO0F,WAAW2H,YAMpG8I,EAAOi5B,SACTpvC,EAAOzB,QAAQsiC,KAAO1qB,oDAKhBhY,KAAK2iC,aAAc3iC,KAAK2iC,YAAY5/B,mDAGhCquC,OAEX4B,EADInwC,EAAO7C,KAAK2iC,oBAGXya,aAAc,EAEhBv6C,EAAK,UACF8/B,aAAc,EAEnBqQ,EAASnwC,EAAKN,kBAETlB,SAAS,oBAAqBwB,EAAMuuC,GAEzC4B,EAAOtrC,UAAUmN,OAAO,qBAElBm+B,EAAOhrC,YAAYgrC,EAAO/qC,YAAY+qC,EAAOhrC,YAEnDnF,EAAKuC,IAAI7C,aAAamF,UAAUmN,OAAO,kEAKrC7U,KAAK2iC,YAAY,KACf9/B,EAAO7C,KAAK2iC,YACZ58B,EAAY/F,KAAK2iC,YAAY5/B,oBAE5Bm8C,aAAY,GACjBr8C,EAAK2C,eAAe3C,EAAKoC,YACzBpC,EAAK0F,gBAE+B,YAAjC1F,EAAKhB,OAAO0F,WAAW0pC,QAAwBpuC,EAAKhB,OAAO0F,WAAW43C,iBACxEt8C,EAAKuC,IAAIqZ,iBAAgB,GAGvB5b,EAAKhB,OAAO0F,WAAW63C,mBACzBv8C,EAAKhB,OAAO0F,WAAW63C,kBAAkB32C,KAAKzI,KAAKJ,MAAOmG,QAGtD1E,SAAS,iBAAkBwB,QAC3B6F,iBAAiB,oBAAqB3C,uCAKlClD,MACPA,EAAKhB,OAAOzB,QAAQsiC,KAAK,KACvBmY,EAAO76C,KACX2F,EAAU9C,EAAKN,YAAW,GAE1BoD,EAAQa,aAAa,WAAY,GAEjCb,EAAQiH,iBAAiB,SAAS,SAASC,GACtClH,EAAQ+B,UAAU23C,SAAS,sBAC9B15C,EAAQoI,MAAM,CAACmlC,eAAe,OAIhCvtC,EAAQiH,iBAAiB,aAAa,SAASC,GAC7B,IAAbA,EAAEyyC,OACLzyC,EAAEyzB,iBAEFua,EAAKqC,YAAa,KAIpBv3C,EAAQiH,iBAAiB,SAAS,SAASC,GACtCguC,EAAKsC,gBACRtC,EAAKnY,KAAK7/B,EAAMgK,GAAG,gDAMNhK,EAAM4zC,QACjB0G,gBAAiB,EAEjB1G,GAAgC,OAAvBz2C,KAAKJ,MAAMipB,SACxBhmB,EAAKN,aAAawL,MAAM,CAACmlC,eAAe,SAGpCiK,gBAAiB,mCAGdt6C,EAAM08C,QACTC,iBAAiB38C,QACjB6/B,KAAK7/B,GAAM,EAAO08C,6CAGN18C,MAC2B,WAAzC7C,KAAKJ,MAAMgJ,WAAW62C,gBAA6B,KACjDz8B,EAAUhjB,KAAKJ,MAAMgJ,WAAWjD,QAAQmQ,UAC5CmN,EAAajjB,KAAKJ,MAAMgJ,WAAWjD,QAAQiJ,aAAe5O,KAAKJ,MAAMgJ,WAAWjD,QAAQmQ,UACxFlB,EAAQ/R,EAAKuC,IAAI7C,aACRqS,EAAMmB,UAEZnB,EAAMmB,UAAYiN,OACfpjB,MAAMgJ,WAAWjD,QAAQmQ,WAAckN,EAAUpO,EAAMmB,UAEzDnB,EAAMmB,UAAYnB,EAAMrL,aAAgB0Z,SACrCrjB,MAAMgJ,WAAWjD,QAAQmQ,WAAclB,EAAMmB,UAAYnB,EAAMrL,aAAe0Z,OAIjFy8B,EAAW1/C,KAAKJ,MAAMgJ,WAAWjD,QAAQyQ,WAC7CupC,EAAY3/C,KAAKJ,MAAMgJ,WAAWjD,QAAQyK,YAAcpQ,KAAKJ,MAAMgJ,WAAWjD,QAAQyQ,WACtF48B,EAASnwC,EAAKN,aACLywC,EAAOt1B,WAEb1d,KAAKJ,MAAMoyB,UAAU,mBACvB0tB,GAAYjyC,SAASzN,KAAKJ,MAAMQ,QAAQ2lC,cAAc6Z,YACtDD,GAAalyC,SAASzN,KAAKJ,MAAMQ,QAAQ2lC,cAAc8Z,cAGb,YAAxC7/C,KAAKJ,MAAM6B,QAAQuZ,mBACrB0kC,GAAYjyC,SAASzN,KAAKJ,MAAM6D,cAAcoB,SAAS0R,aACvDopC,GAAalyC,SAASzN,KAAKJ,MAAM6D,cAAcoB,SAAS0R,cAGtDy8B,EAAOt1B,WAAagiC,OAEjB9/C,MAAMgJ,WAAWjD,QAAQyQ,YAAespC,EAAW1M,EAAOt1B,WAE5Ds1B,EAAOt1B,WAAas1B,EAAO/pC,YAAe02C,SACvC//C,MAAMgJ,WAAWjD,QAAQyQ,YAAe48B,EAAOt1B,WAAas1B,EAAO/pC,YAAc02C,iCAMrF98C,EAAMgK,EAAG0yC,OAKbO,EAAY/5C,EAAWwmB,EAJnBsuB,EAAO76C,KACX8+C,GAAY,EACZiB,EAAW,aACXp6C,EAAU9C,EAAKN,iBAIZvC,KAAK2iC,gBAqDJ9/B,EAAKhB,OAAOzB,QAAQsiC,KAAKzC,oBAkFvBid,YAAa,EAClBv3C,EAAQk0C,QACD,SAnFJhtC,GACFA,EAAEiB,oBAGWjL,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,YACjC,WACLD,EAAYj8C,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,MAAMl8C,EAAKE,0BAG3C,UACL+7C,EAAYj8C,EAAKhB,OAAOzB,QAAQsiC,KAAKqc,SAInCD,GAAaS,EAAU,IAEzB1E,EAAKyD,aAELzD,EAAKlY,YAAc9/B,OAEdm9C,kBAAkBn9C,GAEvBkD,EAAYlD,EAAKE,eAEd/C,KAAKk9C,kBACFA,YAAa,EAEfr6C,EAAKhB,OAAO0F,WAAW04C,WACzBp9C,EAAKhB,OAAO0F,WAAW04C,UAAUx3C,KAAKzI,KAAKJ,MAAOiN,EAAG9G,IAIpDlD,EAAKhB,OAAO0F,WAAW24C,aACzBr9C,EAAKhB,OAAO0F,WAAW24C,YAAYz3C,KAAKzI,KAAKJ,MAAOmG,QAGhD1E,SAAS,eAAgBwB,QACzB6F,iBAAiB,cAAe3C,GAErCwmB,EAAoD,mBAApC1pB,EAAKhB,OAAOzB,QAAQsiC,KAAKnW,OAAwB1pB,EAAKhB,OAAOzB,QAAQsiC,KAAKnW,OAAOxmB,GAAalD,EAAKhB,OAAOzB,QAAQsiC,KAAKnW,QAKrH,KAHlBuzB,EAAaj9C,EAAKhB,OAAOzB,QAAQsiC,KAAKuO,OAAOxoC,KAAKoyC,EAAM90C,YA9CtCuO,GACnByrC,EAAWzrC,cA1CK5S,MACbm5C,EAAKlY,cAAgB9/B,EAAK,KACxB4/B,EAAQoY,EAAKv5C,MAAM,eAAgB,CAACuB,EAAMnB,IAAQ,GAAM,UAE/C,IAAV+gC,GAAwD,cAAtCoY,EAAKj7C,MAAM6B,QAAQ0+C,gBACvCtF,EAAKqE,cAGDr8C,EAAKzC,QAAQsiC,OAChB7/B,EAAKzC,QAAQsiC,KAAO,IAGrB7/B,EAAKzC,QAAQsiC,KAAK+b,QAAS,GAEW,GAAnC5D,EAAKwC,YAAY3xC,QAAQ7I,IAC3Bg4C,EAAKwC,YAAYv6C,KAAKD,GAGvBA,EAAK0C,SAAS7D,GAAO,IAEJ,IAAV+gC,IAEPoY,EAAKuC,aAAc,EACnBvC,EAAK2E,iBAAiB38C,GAAM,GAC5Bk9C,KACO,kBASNlF,EAAKlY,cAAgB9/B,GACvBg4C,EAAKyD,eAoD2F/xB,WA6B/F5mB,EAAQk0C,QACD,OAzBJiG,aAAsB/3C,aAkBxB/D,QAAQC,KAAK,8EAA+E67C,GAC5Fn6C,EAAQk0C,QACD,MAnBPl0C,EAAQ+B,UAAUC,IAAI,qBACtB9E,EAAKuC,IAAI7C,aAAamF,UAAUC,IAAI,yBAC9BhC,EAAQqC,YAAYrC,EAAQsC,YAAYtC,EAAQqC,YACtDrC,EAAQuC,YAAY43C,GAGpBC,YAGIzgC,EAAW3Z,EAAQ2Z,SAEd3U,EAAI,EAAGA,EAAI2U,EAAShc,OAAQqH,IACpC2U,EAAS3U,GAAGiC,iBAAiB,SAAS,SAASC,GAC9CA,EAAEiB,4BAcC,cAEFovC,YAAa,EAClBv3C,EAAQk0C,QACD,EAnIJ75C,KAAKo9C,kBACHkB,0DA4IHj7C,EAAS,eAERg6C,YAAYz6C,SAAQ,SAACC,GACzBQ,EAAOP,KAAKD,EAAKE,mBAGXM,sCAGIR,OACPu9C,EAEDv9C,EAAKzC,QAAQsiC,MAAQ7/B,EAAKzC,QAAQsiC,KAAK+b,SACzC57C,EAAKzC,QAAQsiC,KAAK+b,QAAS,OAEtBp9C,SAAS,oBAAqBwB,KAGpCu9C,EAAYpgD,KAAKq9C,YAAY3xC,QAAQ7I,KAErB,QACVw6C,YAAYttC,OAAOqwC,EAAW,UAlrBnBhvB,MAurBdoD,WAAa,UAGb8oB,QAAU+C,OC/rBTC,GACL,WAAYv+C,EAAMmB,EAAS6C,EAAWwhC,kBAChCxlC,KAAOA,OACPmB,QAAUA,OACV6C,UAAYA,IAAa,OACzBwhC,OAASA,GAAU,GCLpBgZ,GACL,WAAY7+C,EAAOqE,EAAWtB,EAAOoB,EAAQolC,kBACvCvpC,MAAQA,OACRqE,UAAYA,IAAa,OACzBtB,MAAQA,OACRoB,OAASA,OACTolC,MAAQA,GCDTuV,4CAEO5gD,yCACLA,IAEDoY,OAAS,KACTyoC,iBAAkB,IAClBC,WAAa,KAEbrsB,oBAAoB,oBAAoB,KAExCC,qBAAqB,gBACrBA,qBAAqB,yEAIrBa,sBAAsB,UAAWn1B,KAAK2gD,QAAQngD,KAAKR,kDAYtCgY,EAAQtR,EAAO46B,EAAOof,QACnCD,gBAAkB/5C,OAClBsR,OAASA,GAAU,QACnB0oC,WAAaA,MAEdnjB,GAAwC,IAA9Bv9B,KAAKgY,OAAO4oC,cAA0B5gD,KAAK6gD,oBAAoB7gD,KAAK8gD,8BAAgC,GAC9G3wB,EAAOnwB,KAAK+gD,iBAAiB/gD,KAAKghD,UAAU1f,WAEzC/D,EAAQjgB,OAAO6S,0CAGRnY,EAAQtR,EAAO46B,EAAOof,OAChC9tC,EAAO5S,KAAKwgC,mBAAmBxoB,EAAQtR,EAAO46B,EAAOof,UAElD1gD,KAAKihD,sBAAsBruC,qCAGzB0uB,cACL/wB,EAAO,MAEQ,mBAAT+wB,EACTA,EAAM74B,KAAKzI,KAAKJ,OAAOgD,SAAQ,SAACwC,IAC/BA,EAAMyC,EAAKjI,MAAMgJ,WAAW2X,QAAQnb,KAGnCmL,EAAKzN,KAAKsC,kBAILk8B,QACD,MACA,UACL/wB,EAAOvQ,KAAKJ,MAAMgJ,WAAWmQ,gBAAe,GAAO,aAG9C,MACLxI,EAAOvQ,KAAKJ,MAAMgJ,WAAW2H,eAGxB,WACLA,EAAOvQ,KAAKJ,MAAMQ,QAAQ8gD,UAAUC,uBAG/B,iBAGJ5wC,EADEvQ,KAAKJ,MAAM6B,QAAQikB,WACd1lB,KAAKJ,MAAMgJ,WAAW+L,eAAe3U,KAAKJ,MAAMgJ,WAAWkc,YAAYxhB,OAAS,GAEhFtD,KAAKJ,MAAMgJ,WAAW+L,wBAKzBnJ,OAAOqG,OAAO,GAAItB,mEAIrBlN,EAAS,WAE8B,IAA7BrD,KAAKgY,OAAOopC,aAAyBphD,KAAKJ,MAAM6D,cAAcP,QAAUlD,KAAKJ,MAAM6D,cAAciU,gBAEvG9U,SAAQ,SAACf,OACZw/C,EAAUv0C,EAAKw0C,mBAAmBz/C,GAEnCw/C,GACFh+C,EAAOP,KAAKu+C,MAIPh+C,6CAGWxB,cACdmlC,EAAYnlC,EAAOqB,QACvBq+C,EAAW,EAGPC,EAAY,CACf71C,MAHO9J,EAAO0F,WAAW,SAAWvH,KAAK0gD,WAAWjkB,OAAO,GAAGC,cAAgB18B,KAAK0gD,WAAWt9B,MAAM,MAAQvhB,EAAO0F,WAAWoE,MAI9H9J,OAAOA,EACPopC,MAAM,MAGJjE,EAAU1jC,WACZk+C,EAAUxa,UAAY,GACtBwa,EAAU/8C,MAAQ,EAElBuiC,EAAUpkC,SAAQ,SAAC6+C,OACdC,EAAen0C,EAAK+zC,mBAAmBG,GAExCC,IACFF,EAAU/8C,OAASi9C,EAAaj9C,MAChC+8C,EAAUxa,UAAUlkC,KAAK4+C,GAEtBA,EAAazW,MAAQsW,IACvBA,EAAWG,EAAazW,WAK3BuW,EAAUvW,OAASsW,GAEfC,EAAU/8C,aACN,MAEJ,KACDzE,KAAK2hD,eAAe9/C,UAGf,EAFP2/C,EAAU/8C,MAAQ,SAMb+8C,yCAGO3/C,UACgC,IAAvCA,EAAO0F,WAAWvH,KAAK0gD,cAA0B7+C,EAAOmB,UAAanB,EAAOmB,SAAWnB,EAAO0F,WAAWvH,KAAK0gD,yDAGlGx9C,OACfq6B,EAAU,GACdqkB,EAAc,EACdC,EAAa,YAEJC,EAAiBjgD,EAAQq0B,OAE7B+U,EAAQ2W,EAAc1rB,UAEG,IAAnBqH,EAAQrH,KACjBqH,EAAQrH,GAAS,IAGlBr0B,EAAOgE,OAAShE,EAAOmlC,UAAY,EAAKiE,EAAQppC,EAAOopC,MAAS,EAEhE1N,EAAQrH,GAAOpzB,KAAKjB,GAEjBA,EAAOgE,OAAS,MACd,IAAI8E,EAAI,EAAGA,EAAI9I,EAAOgE,OAAQ8E,SAEA,IAAvB4yB,EAAQrH,EAAQvrB,KACzB4yB,EAAQrH,EAAQvrB,GAAK,IAGtB4yB,EAAQrH,EAAQvrB,GAAG7H,MAAK,MAIvBjB,EAAO4C,MAAQ,MACb,IAAIkG,EAAI,EAAGA,EAAI9I,EAAO4C,MAAOkG,IAChC4yB,EAAQrH,GAAOpzB,MAAK,GAInBjB,EAAOmlC,WACTnlC,EAAOmlC,UAAUpkC,SAAQ,SAAS6+C,GACjCK,EAAiBL,EAAUvrB,EAAM,aAMpChzB,EAAQN,SAAQ,SAASf,GACrBA,EAAOopC,MAAQ2W,IACjBA,EAAc//C,EAAOopC,UAIvB/nC,EAAQN,SAAQ,SAASf,GACxBigD,EAAiBjgD,EAAO,MAGzB07B,EAAQ36B,SAAQ,SAACyoC,OACZnoC,EAAU,GAEdmoC,EAAOzoC,SAAQ,SAACuU,MACZA,EAAI,KACFxL,OAA6B,IAAdwL,EAAIxL,MAAwB,GAAKwL,EAAIxL,MACxDzI,EAAQJ,KAAK,IAAIy9C,GAAa50C,EAAOwL,EAAItV,OAAOkB,eAAgBoU,EAAI1S,MAAO0S,EAAItR,OAAQsR,EAAI8zB,aAE3F/nC,EAAQJ,KAAK,SAIf++C,EAAW/+C,KAAK,IAAIw9C,GAAU,SAAUp9C,OAGlC2+C,2CAGStxC,cAEZrN,EAAU,GACV2+C,EAAa,eAEZjiD,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,GAC5CmM,EAAK2zC,eAAe9/C,IACvBqB,EAAQJ,KAAKjB,EAAOkB,oBAIS,IAA5B/C,KAAKgY,OAAOmtB,aAAyBnlC,KAAKJ,MAAMoyB,UAAU,iBACzDhyB,KAAKJ,MAAMQ,QAAQ+kC,YAAYlB,gBACjC1zB,EAAKiD,QAAQxT,KAAKJ,MAAMQ,QAAQ+kC,YAAY/iB,QAG1CpiB,KAAKJ,MAAMQ,QAAQ+kC,YAAYjB,gBACjC3zB,EAAKzN,KAAK9C,KAAKJ,MAAMQ,QAAQ+kC,YAAYnB,UAI3CzzB,EAAOA,EAAKqa,QAAO,SAACxlB,UACZA,EAAIrD,UACL,eAC4B,IAA1BiM,EAAKgK,OAAO+pC,cAGd,cAC8B,IAA5B/zC,EAAKgK,OAAOmtB,gBAGd,cACIn3B,EAAKpO,MAAM6B,QAAQsjC,WAAqC,IAAzB/2B,EAAKgK,OAAO+sB,UAAsB3/B,EAAIhF,QAAQ2kC,SAASxhC,eAIzF,MAGHX,SAAQ,SAACwC,EAAKuF,OACdqiB,EAAU5nB,EAAIC,QAAQ2I,EAAK0yC,YAC3BsB,EAAa,GACbza,EAAS,SAENniC,EAAIrD,UACL,QACLwlC,EAASniC,EAAI8wB,MACb8rB,EAAWl/C,KAAK,IAAIy9C,GAAan7C,EAAIlE,IAAKkE,EAAIrC,eAAgBG,EAAQI,OAAQ,cAGzE,WACA,MACLJ,EAAQN,SAAQ,SAACuU,GAChB6qC,EAAWl/C,KAAK,IAAIy9C,GAAappC,EAAIrV,QAAQsE,cAAc4mB,GAAU7V,EAAK,EAAG,OAG3EnJ,EAAKpO,MAAM6B,QAAQsjC,WAAqC,IAAzB/2B,EAAKgK,OAAO+sB,WAC7CwC,EAASniC,EAAIhF,QAAQ2kC,SAASj1B,OAKhC+xC,EAAW/+C,KAAK,IAAIw9C,GAAUl7C,EAAIrD,KAAMigD,EAAY58C,EAAIrC,eAAgBwkC,OAGlEsa,gDAGcjvC,cACjBhT,EAAQyG,SAASC,cAAc,SACnC27C,EAAW57C,SAASC,cAAc,SAClC47C,EAAS77C,SAASC,cAAc,SAChC0lC,EAAShsC,KAAKmiD,oBACd/iC,EAAepf,KAAKJ,MAAM6B,QAAQ,gBAAkBzB,KAAK0gD,WAAWjkB,OAAO,GAAGC,cAAgB18B,KAAK0gD,WAAWt9B,MAAM,KACpHg/B,EAAQ,UAERA,EAAMhjC,aAAgC,OAAjBA,EAAwBA,EAAepf,KAAKJ,MAAM6B,QAAQ2d,aAE5Epf,KAAKJ,MAAM6B,QAAQsjC,WAAoC,IAAzB/kC,KAAKgY,OAAO+sB,UAAsB/kC,KAAKJ,MAAMoyB,UAAU,iBACvFowB,EAAMC,iBAAmBriD,KAAKJ,MAAMQ,QAAQ2kC,SAAS4C,cAItDya,EAAM5S,YAAcxvC,KAAKJ,MAAM6B,QAAQ,eAAiBzB,KAAK0gD,WAAWjkB,OAAO,GAAGC,cAAgB18B,KAAK0gD,WAAWt9B,MAAM,KAErHg/B,EAAM5S,cAAgBx8B,MAAMC,QAAQmvC,EAAM5S,eAC5C4S,EAAM5S,YAAc,CAAC4S,EAAM5S,cAG5B5vC,EAAM8H,UAAUC,IAAI,8BAEf26C,iBAAiBtiD,KAAKJ,MAAM6D,cAAcoL,oBAAqBozC,EAAU,CAAC,aAAc,cAAe,eAAgB,gBAAiB,mBAAoB,QAAS,cAAe,cAAe,cAGrMrvC,EAAKtP,OAAS,KAChBU,QAAQC,KAAK,4EAGd2O,EAAKhQ,SAAQ,SAACwC,EAAKuF,UACXvF,EAAIrD,UACL,SACLkgD,EAAS/5C,YAAYmG,EAAKk0C,uBAAuBn9C,EAAKg9C,EAAOpW,cAGxD,QACLkW,EAAOh6C,YAAYmG,EAAKm0C,sBAAsBp9C,EAAKg9C,EAAOpW,cAGrD,OACLkW,EAAOh6C,YAAYmG,EAAKo0C,qBAAqBr9C,EAAKg9C,EAAOpW,cAGpD,UACDp3B,EAAQvG,EAAKq0C,oBAAoBt9C,EAAKg9C,EAAOpW,GACjD39B,EAAKi0C,iBAAmB33C,EAAI,GAAMqhC,EAAO2W,QAAW3W,EAAO2W,QAAU3W,EAAO4W,OAAQhuC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBAC9MstC,EAAOh6C,YAAY0M,OAKlBqtC,EAASn6C,WACXlI,EAAMsI,YAAY+5C,GAGnBriD,EAAMsI,YAAYg6C,QAGbI,iBAAiBtiD,KAAKJ,MAAM+F,QAAS/F,EAAO,CAAC,aAAc,cAAe,eAAgB,kBACxFA,kDAIHosC,EAAS,UAGVhsC,KAAKygD,iBAAmBruC,OAAO0nB,mBACjCkS,EAAO4W,OAAS5iD,KAAKJ,MAAM+F,QAAQ6jB,cAAc,kEACjDwiB,EAAO2W,QAAU3iD,KAAKJ,MAAM+F,QAAQ6jB,cAAc,mEAClDwiB,EAAO6W,QAAU7iD,KAAKJ,MAAM+F,QAAQ6jB,cAAc,kCAClDwiB,EAAO8W,SAAW9iD,KAAKJ,MAAM+F,QAAQ6jB,cAAc,8DACnDwiB,EAAO+W,WAAa/iD,KAAKJ,MAAM+F,QAAQq9C,uBAAuB,mBAAmB,GAE9EhX,EAAO8W,WACT9W,EAAOiX,WAAajX,EAAO8W,SAASE,uBAAuB,kBAC3DhX,EAAOkX,UAAYlX,EAAOiX,WAAW,GACrCjX,EAAOmX,SAAWnX,EAAOiX,WAAWjX,EAAOiX,WAAW3/C,OAAS,KAI1D0oC,iDAGe5mC,EAAKg9C,EAAOpW,cAC9Bp3B,EAAQvO,SAASC,cAAc,aAEnClB,EAAIlC,QAAQN,SAAQ,SAACf,MACjBA,EAAO,KACLmxC,EAAS3sC,SAASC,cAAc,MAChC88C,EAAavhD,EAAOkE,UAAUjE,QAAQyF,WAAWC,SAAW3F,EAAOkE,UAAUjE,QAAQyF,WAAWC,SAASC,MAAM,KAAO,GAE1HurC,EAAO/G,QAAUpqC,EAAO4C,MACxBuuC,EAAO9G,QAAUrqC,EAAOgE,OAExBmtC,EAAOlrC,UAAYjG,EAAOH,MAEvBwP,EAAKuvC,kBACPzN,EAAOtsC,MAAM+sC,UAAY,cAG1B2P,EAAWxgD,SAAQ,SAAS2D,GAC3BysC,EAAOtrC,UAAUC,IAAIpB,MAGtB2K,EAAKoxC,iBAAiBzgD,EAAOkE,UAAUxD,aAAcywC,EAAQ,CAAC,aAAc,aAAc,cAAe,eAAgB,gBAAiB,mBAAoB,QAAS,cAAe,cAAe,cACrM9hC,EAAKoxC,iBAAiBzgD,EAAOkE,UAAUjE,QAAQiI,eAAgBipC,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,mBAErHnxC,EAAOkE,UAAUjE,QAAQkB,QAC3BkO,EAAKoxC,iBAAiBzgD,EAAOkE,UAAUxD,aAAcywC,EAAQ,CAAC,UAE3DnxC,EAAOkE,UAAUjE,QAAQyF,WAAW9C,QACtCuuC,EAAOtsC,MAAMjC,MAAQ5C,EAAOkE,UAAUjE,QAAQyF,WAAW9C,MAAQ,MAIhE5C,EAAOkE,UAAUjE,QAAQyB,QAC3B2N,EAAKoxC,iBAAiBzgD,EAAOkE,UAAUjE,QAAQyB,OAAO2G,aAAc8oC,EAAQ,CAAC,eAG9Ep+B,EAAM1M,YAAY8qC,OAIbp+B,gDAGcxP,EAAKg9C,EAAOpW,OAE7Bp3B,EAAQvO,SAASC,cAAc,MACnC0sC,EAAS3sC,SAASC,cAAc,MAChCwa,EAAQ1b,EAAIlC,QAAQ,UAEpB0R,EAAMlN,UAAUC,IAAI,6BAEjBy6C,EAAM5S,aAAe4S,EAAM5S,YAAYpqC,EAAImiC,QAC7CzmB,EAAMpf,MAAQ0gD,EAAM5S,YAAYpqC,EAAImiC,QAAQzmB,EAAMpf,MAAO0D,EAAIW,UAAU2pC,OAAOC,cAAevqC,EAAIW,UAAU2pC,OAAOrqC,UAAWD,EAAIW,YAExG,IAAtBq8C,EAAM5S,YACR1uB,EAAMpf,MAAQof,EAAMpf,MAEpBof,EAAMpf,MAAQ0D,EAAIW,UAAU2pC,OAAO2T,UAAUviC,EAAMpf,MAAO0D,EAAIW,UAAU2pC,OAAOC,cAAevqC,EAAIW,UAAU2pC,OAAOrqC,UAAWD,EAAIW,WAIpIitC,EAAO/G,QAAUnrB,EAAMrc,MACvBuuC,EAAOlrC,UAAYgZ,EAAMpf,MAEzBkT,EAAMlN,UAAUC,IAAI,+BACpBiN,EAAMlN,UAAUC,IAAI,yBAA2BvC,EAAImiC,QAEhDzmB,EAAM/a,UAAUyzC,aAClB5kC,EAAMlN,UAAUC,IAAI,gCAGhB26C,iBAAiBtW,EAAO+W,WAAYnuC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,0BAC9J0tC,iBAAiBtW,EAAO+W,WAAY/P,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,mBAElGp+B,EAAM1M,YAAY8qC,GAEXp+B,+CAGaxP,EAAKg9C,EAAOpW,OAC5Bp3B,EAAQ5U,KAAK0iD,oBAAoBt9C,EAAKg9C,EAAOpW,UAEjDp3B,EAAMlN,UAAUC,IAAI,oCACf26C,iBAAiBtW,EAAO6W,QAASjuC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBAEzJA,8CAGYxP,EAAKg9C,EAAOpW,cAC3Bp3B,EAAQvO,SAASC,cAAc,aAEnCsO,EAAMlN,UAAUC,IAAI,6BAEpBvC,EAAIlC,QAAQN,SAAQ,SAACuU,MACjBA,EAAI,KACF67B,EAAS3sC,SAASC,cAAc,MACpCzE,EAASsV,EAAIpR,UAAUjE,QACvBgO,EAAQkC,EAAKpS,MAAM6D,cAAc4N,gBAAgBxP,GACjDH,EAAQyV,EAAIzV,MAER4hD,EAAc,CACjBljD,QAAQ,GACR6E,SAAS,kBACDvD,GAERe,SAAS,kBACDZ,EAAO0F,WAAWd,OAE1BlE,WAAW,kBACHywC,GAER4E,UAAU,kBACF/1C,EAAOkB,gBAEfsC,QAAQ,kBACAD,EAAIW,UAAUV,WAEtBg1C,OAAO,kBACCj1C,EAAIW,WAEZhD,aAAa,kBACLugD,GAERzhD,OAAOA,OAGSA,EAAO0F,WAAWC,SAAW3F,EAAO0F,WAAWC,SAASC,MAAM,KAAO,IAE3E7E,SAAQ,SAAS2D,GAC3BysC,EAAOtrC,UAAUC,IAAIpB,MAGnByL,EAAKpS,MAAMoyB,UAAU,YAAyC,IAA5BhgB,EAAKgG,OAAOurC,YAChD7hD,EAAQsQ,EAAKpS,MAAMQ,QAAQsmC,OAAO8c,kBAAkBF,EAAatxC,EAAK0uC,0BAExDh/C,QACR,SACLA,EAAQse,KAAKwd,UAAU97B,aAGlB,gBACA,OACLA,EAAQ,iBAIRA,EAAQA,EAIPA,aAAiBqG,KACnBirC,EAAO9qC,YAAYxG,GAEnBsxC,EAAOlrC,UAAYpG,GAGjBsqC,EAAOiX,WAAWnzC,IAAUk8B,EAAOkX,aACrClxC,EAAKswC,iBAAiBtW,EAAOiX,WAAWnzC,IAAUk8B,EAAOkX,UAAWlQ,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,iBAAkB,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,eAE9PnxC,EAAO0F,WAAWk8C,QACpBzQ,EAAOtsC,MAAMC,UAAY9E,EAAO0F,WAAWk8C,QAI1CzxC,EAAKpS,MAAM6B,QAAQsjC,WAAqC,IAAzB/yB,EAAKgG,OAAO+sB,WACzCqd,EAAMC,kBAAoBD,EAAMC,kBAAoBxgD,EAAO4E,QAAY27C,EAAMC,kBAAyB,GAAL13C,KACjGvF,EAAIW,UAAUoY,KAAK/d,QAAQ2kC,SAAS4E,WACtCqJ,EAAOt4B,aAAatV,EAAIW,UAAUoY,KAAK/d,QAAQ2kC,SAAS4E,UAAUE,WAAU,GAAOmJ,EAAOhrC,YAExF5C,EAAIW,UAAUoY,KAAK/d,QAAQ2kC,SAAS2C,UACtCsL,EAAOt4B,aAAatV,EAAIW,UAAUoY,KAAK/d,QAAQ2kC,SAAS2C,SAASmC,WAAU,GAAOmJ,EAAOhrC,aAK5F4M,EAAM1M,YAAY8qC,GAEfsQ,EAAYljD,QAAQsmC,QAAU4c,EAAYljD,QAAQsmC,OAAO7W,kBAC3DyzB,EAAYljD,QAAQsmC,OAAO7W,mBAGzBuyB,EAAMhjC,eAA4C,IAA5BpN,EAAKgG,OAAOurC,aACpCnB,EAAMhjC,aAAaha,EAAIW,eAKnB6O,6CAGWhC,OACd0Q,EAASjd,SAASC,cAAc,cAEpCgd,EAAOpb,YAAYlI,KAAKihD,sBAAsBruC,IAEvC0Q,EAAOxb,0CAGP9E,EAAS0D,EAAOsR,EAAQ0oC,OAC3B9tC,EAAO5S,KAAKwgC,mBAAmBxoB,GAAUhY,KAAKJ,MAAM6B,QAAQiiD,iBAAkBh9C,EAAO1D,EAAS09C,GAAc,qBAEzG1gD,KAAK2gC,mBAAmB/tB,4CAGfkK,EAAMnZ,EAAIggD,MACvB3jD,KAAKygD,iBAAmB3jC,GAAQnZ,EAAG,KAEjCigD,EAAS,oBACS,wBACX,kBACA,sBACM,2BACA,yBACF,wBACC,yBACA,0BACC,4BACC,8BACC,6BACF,4BACC,8BACC,gCACC,oBAGjBxxC,OAAO0nB,iBAAiB,KACtB+pB,EAAYzxC,OAAO0nB,iBAAiBhd,GAExC6mC,EAAM/gD,SAAQ,SAASkzB,GACtBnyB,EAAG+C,MAAMk9C,EAAO9tB,IAAS+tB,EAAU9Z,iBAAiBjU,eAvlBpC1E,GA8lBrBovB,GAAOhsB,WAAa,gBCnmBL,KAGV,SAASsvB,EAAWC,EAAQ/2B,EAASg3B,UACjCD,GAAUD,OAId,SAASA,EAAWC,EAAQ/2B,EAASg3B,UACjCD,EAASD,QAIZ,SAASA,EAAWC,EAAQ/2B,EAASg3B,UAClCD,GAAUD,OAId,SAASA,EAAWC,EAAQ/2B,EAASg3B,UACjCD,EAASD,QAIZ,SAASA,EAAWC,EAAQ/2B,EAASg3B,UAClCD,GAAUD,QAIb,SAASA,EAAWC,EAAQ/2B,EAASg3B,UAClCD,GAAUD,SAGV,SAASA,EAAWC,EAAQ/2B,EAASg3B,SAErB,iBAAbF,IACTA,EAAY,IAAIG,OAAOH,IAGjBA,EAAUlpB,KAAKmpB,SAIhB,SAASD,EAAWC,EAAQ/2B,EAASg3B,UACxCF,MAAAA,EACKC,IAAWD,EAEf,MAAOC,GACFtgB,OAAOsgB,GAAQruB,cAAchqB,QAAQo4C,EAAUpuB,gBAAkB,YAShE,SAASouB,EAAWC,EAAQ/2B,EAASg3B,OAC3CE,EAAWJ,EAAUpuB,cAAcjuB,WAAwC,IAA3Bu8C,EAAaG,UAA4B,IAAMH,EAAaG,WAChHziD,EAAQ+hC,OAAOsgB,MAAAA,EAAmD,GAAKA,GAAQruB,cAC/E/Y,EAAU,UAEVunC,EAASthD,SAAQ,SAACwhD,GACd1iD,EAAMopB,SAASs5B,IACjBznC,EAAQ7Z,MAAK,MAIRkhD,EAAaK,SAAW1nC,EAAQrZ,SAAW4gD,EAAS5gD,SAAWqZ,EAAQrZ,eAItE,SAASwgD,EAAWC,EAAQ/2B,EAASg3B,UAC1CF,MAAAA,EACKC,IAAWD,EAEf,MAAOC,GACFtgB,OAAOsgB,GAAQruB,cAAcre,WAAWysC,EAAUpuB,qBASrD,SAASouB,EAAWC,EAAQ/2B,EAASg3B,UACxCF,MAAAA,EACKC,IAAWD,EAEf,MAAOC,GACFtgB,OAAOsgB,GAAQruB,cAAc4uB,SAASR,EAAUpuB,mBASrD,SAASouB,EAAWC,EAAQ/2B,EAASg3B,UACtChxC,MAAMC,QAAQ6wC,IACTA,EAAUxgD,QAASwgD,EAAUp4C,QAAQq4C,IAAW,GAEvD//C,QAAQC,KAAK,+CAAgD6/C,IACtD,KCpGJS,4CAEO3kD,yCACLA,IAED4kD,WAAa,KACbnvB,cAAgB,KAChBovB,oBAAsB,KAEtBC,4BAA8B,KAC9BA,4BAA8B,OAE9B77C,SAAU,IACV87C,kBAAmB,IAEnBtwB,oBAAoB,aAAc,WAElCA,oBAAoB,iBAAiB,KACrCA,oBAAoB,uBAAuB,KAC3CA,oBAAoB,8BAA+B,OAEnDC,qBAAqB,kBACrBA,qBAAqB,6BACrBA,qBAAqB,wBACrBA,qBAAqB,4BACrBA,qBAAqB,sBACrBA,qBAAqB,4BACrBA,qBAAqB,4BAErBa,sBAAsB,aAAcrrB,EAAK86C,WAAWpkD,cACpD20B,sBAAsB,aAAcrrB,EAAK+6C,WAAWrkD,cAEpD20B,sBAAsB,YAAarrB,EAAKg7C,cAActkD,cACtD20B,sBAAsB,gBAAiBrrB,EAAKi7C,kBAAkBvkD,cAC9D20B,sBAAsB,YAAarrB,EAAKk7C,cAAcxkD,cACtD20B,sBAAsB,aAAcrrB,EAAKm7C,WAAWzkD,cACpD20B,sBAAsB,uBAAwBrrB,EAAKo7C,yBAAyB1kD,cAC5E20B,sBAAsB,uBAAwBrrB,EAAKq7C,yBAAyB3kD,cAC5E20B,sBAAsB,uBAAwBrrB,EAAKs7C,yBAAyB5kD,cAC5E20B,sBAAsB,mBAAoBrrB,EAAKu7C,iBAAiB7kD,cAChE20B,sBAAsB,eAAgBrrB,EAAKw7C,iBAAiB9kD,cAC5D20B,sBAAsB,cAAerrB,EAAKy7C,gBAAgB/kD,cAC1D20B,sBAAsB,oBAAqBrrB,EAAK07C,sBAAsBhlD,cAEtEqnC,0BAA0B,SAAU,oBAAqB/9B,EAAK27C,qBAAqBjlD,cACnFqnC,0BAA0B,SAAU,qBAAsB/9B,EAAK47C,mBAAmBllD,cAClFqnC,0BAA0B,SAAU,uBAAwB/9B,EAAK67C,qBAAqBnlD,cACtFqnC,0BAA0B,SAAU,uBAAwB/9B,EAAK87C,qBAAqBplD,kEAItFQ,UAAU,cAAehB,KAAK6lD,6BAA6BrlD,KAAKR,YAChEgB,UAAU,0BAA2BhB,KAAK8lD,yBAAyBtlD,KAAKR,YACxEgB,UAAU,yBAA0BhB,KAAK+lD,yBAAyBvlD,KAAKR,YACvEgB,UAAU,cAAehB,KAAKgmD,WAAWxlD,KAAKR,OAEd,WAAlCA,KAAKJ,MAAM6B,QAAQwkD,iBAChBjlD,UAAU,cAAehB,KAAKkmD,mBAAmB1lD,KAAKR,YAGvDmmD,oBAAoBnmD,KAAK4qB,OAAOpqB,KAAKR,MAAO,oDAI9CA,KAAKJ,MAAM6B,QAAQ2kD,oBAChBC,UAAUrmD,KAAKJ,MAAM6B,QAAQ2kD,eAGhCpmD,KAAKJ,MAAM6B,QAAQ6kD,0BAChB1mD,MAAM6B,QAAQ6kD,oBAAoB1jD,SAAQ,SAAC2Q,OAE3C1R,EAASgG,EAAKjI,MAAM6D,cAAcK,WAAWyP,EAAK9M,WAEnD5E,SAGFmC,QAAQC,KAAK,kDAAmDsP,EAAK9M,QAC9D,EAHPoB,EAAK+9C,qBAAqB/jD,EAAQ0R,EAAK7R,eAQrCijD,kBAAmB,6CAGN9kD,EAAMmY,EAAQlY,EAAQysB,UACxCA,EAAO3B,OAAS5qB,KAAKilD,YAAW,GAAM,GAC/B14B,wCAQM9lB,EAAO1E,EAAML,EAAO6qB,QAC5B85B,UAAU5/C,EAAO1E,EAAML,EAAO6qB,QAC9Bg6B,iEAKAA,sDAIQ9/C,EAAO1E,EAAML,EAAO6qB,QAC5Bi6B,UAAU//C,EAAO1E,EAAML,EAAO6qB,QAC9Bg6B,iEAGmB9/C,OACpB5E,EAAS7B,KAAKJ,MAAM6D,cAAcK,WAAW2C,OAE9C5E,SAGFmC,QAAQC,KAAK,wDAAyDwC,IAC/D,OAHFg/C,qBAAqB5jD,oDAOH4E,OACpB5E,EAAS7B,KAAKJ,MAAM6D,cAAcK,WAAW2C,MAE9C5E,SACK7B,KAAK2lD,qBAAqB9jD,GAEjCmC,QAAQC,KAAK,kDAAmDwC,oDAIzCA,EAAO/E,OAC3BG,EAAS7B,KAAKJ,MAAM6D,cAAcK,WAAW2C,OAE9C5E,SAGFmC,QAAQC,KAAK,kDAAmDwC,IACzD,OAHFm/C,qBAAqB/jD,EAAQH,4CAQnB+E,EAAO1E,EAAML,QACxB+kD,aAAahgD,EAAO1E,EAAML,QAC1B6kD,wDAIUG,QACVC,YAAYD,QACZH,qEAKAK,yBACAL,mDAKK9/C,EAAO1E,EAAML,UAChB1B,KAAK+5C,OAAO,OAAQtzC,EAAO1E,EAAML,sCAI9B+E,EAAO1E,EAAML,UAChB1B,KAAK+5C,OAAO,OAAQtzC,EAAO1E,EAAML,wDAOZG,OACxBgI,EAAMhI,EAAO0F,WAEdsC,EAAIg9C,oBAEoC,IAAhCh9C,EAAIkrB,yBAA2ClrB,EAAIpD,YACvD9E,OAAO,YAAYmlD,iCAAiCj9C,EAAIpD,MAAOoD,EAAIkrB,8BAGpEuH,iBAAiBz6B,6CAKPA,EAAQH,OACpBm5C,EAAO76C,KACXyG,EAAQ5E,EAAOY,WA2FfZ,EAAOzB,QAAQwqB,OAAS,CACvBumB,iBAxFgBzvC,OAIhB6yC,EAHIwS,EAA+C,SAAjCllD,EAAOzB,QAAQwqB,OAAOo8B,SAAwD,QAAlCnlD,EAAOzB,QAAQwqB,OAAOq8B,UAAwD,YAAjCplD,EAAOzB,QAAQwqB,OAAOo8B,QAAwB,UAAY,QACrKjlD,EAAO,GACPmlD,EAAoB,WAG4B,IAAtCrlD,EAAOzB,QAAQwqB,OAAOu8B,aAA+BtlD,EAAOzB,QAAQwqB,OAAOu8B,cAAgBzlD,EAAM,IAE1GG,EAAOzB,QAAQwqB,OAAOu8B,YAAczlD,EAEhCG,EAAOzB,QAAQwqB,OAAOw8B,UAAU1lD,UA2D5Bm5C,EAAKxlB,cAAc5uB,OA3DgB,QAC1C5E,EAAOzB,QAAQwqB,OAAOlpB,MAAQA,IAEhBG,EAAO0F,WAAW8/C,uBAC1B,SACF9C,EAAO+C,QAAQzlD,EAAO0F,WAAW8/C,mBACnCtlD,EAAOF,EAAO0F,WAAW8/C,iBACzB9S,EAAa,SAAS10C,OACjB0sB,EAAS1qB,EAAO0F,WAAWggD,wBAA0B,GACrDC,EAAW3lD,EAAOuE,cAAcvG,UAEpC0sB,EAA2B,mBAAXA,EAAwBA,EAAO7qB,EAAO8lD,EAAU3nD,GAAQ0sB,EAEjEg4B,EAAO+C,QAAQzlD,EAAO0F,WAAW8/C,kBAAkB3lD,EAAO8lD,EAAU3nD,EAAM0sB,KAGlFvoB,QAAQC,KAAK,6DAA8DpC,EAAO0F,WAAW8/C,4BAIzF,WAULtlD,EATAwyC,EAAa,SAAS10C,OACjB0sB,EAAS1qB,EAAO0F,WAAWggD,wBAA0B,GACrDC,EAAW3lD,EAAOuE,cAAcvG,UAEpC0sB,EAA2B,mBAAXA,EAAwBA,EAAO7qB,EAAO8lD,EAAU3nD,GAAQ0sB,EAEjE1qB,EAAO0F,WAAW8/C,iBAAiB3lD,EAAO8lD,EAAU3nD,EAAM0sB,QAO/DgoB,SACIwS,OACD,UACLxS,EAAa,SAAS10C,OACjB4nD,EAAS5lD,EAAOuE,cAAcvG,UAE/B,MAAO4nD,GACFhkB,OAAOgkB,GAAQ/xB,cAAchqB,QAAQ+3B,OAAO/hC,GAAOg0B,gBAAkB,GAK9E3zB,EAAO,qBAIPwyC,EAAa,SAAS10C,UACdgC,EAAOuE,cAAcvG,IAAS6B,GAEtCK,EAAO,IAIT84C,EAAKxlB,cAAc5uB,GAAS,CAAC/E,MAAMA,EAAO6vB,KAAKgjB,EAAYxyC,KAAKA,EAAMwqB,OAAiB,IAKxF1qB,EAAOzB,QAAQwqB,OAAOlpB,MAAQA,EAE9BwlD,EAAoBlnC,KAAKwd,UAAUqd,EAAKxlB,eAErCwlB,EAAK6J,8BAAgCwC,IACvCrM,EAAK6J,4BAA8BwC,EAEnCrM,EAAK6M,eACL7M,EAAK0L,wBAIA,GAKPU,UAAS,EACTD,SAAQ,EACRI,WAAU,QAGNO,4BAA4B9lD,uDAGNA,EAAQsD,EAAc6X,OAIjD4qC,EAAe3W,EAAQ4W,EAAevE,EAAawE,EAAaC,EAAex7B,SAH3EsuB,EAAO76C,KACXmxC,EAAUtvC,EAAOzB,QAAQwqB,OAAOumB,QAChC1qC,EAAQ5E,EAAOY,cAGfZ,EAAOzB,QAAQwqB,OAAOlpB,MAAQyD,EAK3BtD,EAAOzB,QAAQwqB,OAAOo9B,eAAiBnmD,EAAOzB,QAAQwqB,OAAOo9B,cAAcv+C,YAC7E5H,EAAOkI,eAAe9B,YAAYpG,EAAOzB,QAAQwqB,OAAOo9B,cAAcv+C,YAGpEhD,EAAM,QAGR5E,EAAOzB,QAAQwqB,OAAOw8B,UAAYvlD,EAAO0F,WAAW0gD,wBAA0B,SAASvmD,UAC9EA,GAAmB,MAAVA,GAA2B,IAAVA,IAGnCkmD,EAAgBvhD,SAASC,cAAc,QACzBoB,UAAUC,IAAI,6BAGd9F,EAAO0F,WAAWs/C,mBAC1B,SACFhM,EAAKj7C,MAAMQ,QAAQsiC,KAAK4a,QAAQz7C,EAAO0F,WAAWs/C,eACpD5V,EAAS4J,EAAKj7C,MAAMQ,QAAQsiC,KAAK4a,QAAQz7C,EAAO0F,WAAWs/C,cAEpB,SAAnChlD,EAAO0F,WAAWs/C,cAA8D,cAAnChlD,EAAO0F,WAAWs/C,cAAkChlD,EAAO0F,WAAW0gD,yBACtHpmD,EAAOzB,QAAQwqB,OAAOw8B,UAAY,SAAS1lD,UACzB,IAAVA,IAA4B,IAAVA,KAI3BsC,QAAQC,KAAK,oEAAqEpC,EAAO0F,WAAW0pC,kBAIhG,WACLA,EAASpvC,EAAO0F,WAAWs/C,uBAGtB,UACFhlD,EAAOzB,QAAQsiC,MAAQ7gC,EAAOzB,QAAQsiC,KAAKuO,OAC7CA,EAASpvC,EAAOzB,QAAQsiC,KAAKuO,OAE1BpvC,EAAO0F,WAAW2H,WAAa2rC,EAAKj7C,MAAMQ,QAAQsiC,KAAK4a,QAAQz7C,EAAO0F,WAAW2H,YACnF+hC,EAAS4J,EAAKj7C,MAAMQ,QAAQsiC,KAAK4a,QAAQz7C,EAAO0F,WAAW2H,WAEvB,SAAhCrN,EAAO0F,WAAW2H,WAAwD,cAAhCrN,EAAO0F,WAAW2H,WAA+BrN,EAAO0F,WAAW0gD,yBAChHpmD,EAAOzB,QAAQwqB,OAAOw8B,UAAY,SAAS1lD,UACzB,IAAVA,IAA4B,IAAVA,KAI3BuvC,EAAS4J,EAAKj7C,MAAMQ,QAAQsiC,KAAK4a,QAAxB,SAMTrM,EAAO,IAETqS,EAAc,CACbr+C,SAAS,uBACuB,IAAjBE,EAA+BA,EAAe,IAE7D1C,SAAS,kBACDZ,EAAO0F,WAAWd,OAE1BlE,WAAW,kBACHqlD,GAERhQ,UAAU,kBACF/1C,EAAOkB,gBAEfs3C,OAAO,iBACC,CACN57B,gBAAgB,gBASnB8N,EAA2B,mBAF3BA,EAAS1qB,EAAO0F,WAAW2gD,oBAAsB,IAET37B,EAAO9jB,KAAKoyC,EAAKj7C,MAAO0jD,GAAe/2B,IAE/Es7B,EAAgB5W,EAAOxoC,KAAKzI,KAAKJ,MAAMQ,QAAQsiC,KAAM4gB,GAAa,cAAcnS,iBAAiB5kB,gBAGhGvoB,QAAQC,KAAK,uCAAyCwC,EAAQ,kDAI1DohD,aAAyB9/C,kBAC7B/D,QAAQC,KAAK,uCAAyCwC,EAAQ,0EAA2EohD,GAKvIphD,EACFo0C,EAAK5sC,SAAS,yBAA2BpM,EAAO0F,WAAWd,OAAO,SAAS/E,GAC1EmmD,EAAcrhD,aAAa,mBAAgC,IAAV9E,GAAyBA,EAAQA,EAAQm5C,EAAKrtB,SAAS,6BAGzGqtB,EAAK5sC,SAAS,yBAAyB,SAASvM,GAC/CmmD,EAAcrhD,aAAa,cAAe9E,MAK5CmmD,EAAcj7C,iBAAiB,SAAS,SAASC,GAChDA,EAAEiB,kBACF+5C,EAAc95C,WAGf85C,EAAcj7C,iBAAiB,SAAS,SAACC,OACpCzF,EAAO0F,EAAKlN,MAAM6D,cAAckC,QAAQyQ,WAIzChP,IAFa0F,EAAKlN,MAAMgJ,WAAWjD,QAAQyQ,WAAa3I,SAASX,EAAKlN,MAAM6D,cAAckC,QAAQe,MAAM2U,cAG1GvO,EAAKlN,MAAMgJ,WAAW+R,iBAAiBvT,GACvC0F,EAAKlN,MAAM6D,cAAckX,iBAAiBvT,OAK5C0gD,GAAc,EAEdC,EAAgB,SAASl7C,GACrBi7C,GACF16C,aAAa06C,GAGdA,EAAcz6C,YAAW,WACxB8jC,EAAQ0W,EAAcnmD,SACrBm5C,EAAKj7C,MAAM6B,QAAQ0mD,8BAGtBtmD,EAAOzB,QAAQwqB,OAAOo9B,cAAgBH,EACtChmD,EAAOzB,QAAQwqB,OAAOq8B,SAAWY,EAAcO,aAAa,QAAUP,EAAchU,aAAa,QAAQne,cAAgB,GACzH7zB,EAAOzB,QAAQwqB,OAAOo8B,QAAUa,EAAc1tB,QAAQzE,eAEN,IAA7C7zB,EAAO0F,WAAW8gD,yBAIiB,iBAAnCxmD,EAAO0F,WAAWs/C,cACiB,cAAnChlD,EAAO0F,WAAWs/C,eACa,iBAA7BhlD,EAAO0F,WAAW0pC,QACU,cAA7BpvC,EAAO0F,WAAW0pC,SACgB,IAAnCpvC,EAAO0F,WAAWs/C,gBAGnBgB,EAAcj7C,iBAAiB,QAASm7C,GACzCF,EAAcj7C,iBAAiB,SAAUm7C,GAIJ,UAAlClmD,EAAOzB,QAAQwqB,OAAOq8B,UACxBY,EAAcj7C,iBAAiB,UAAU,SAASC,GACjDskC,EAAQ0W,EAAcnmD,UAKa,QAAlCG,EAAOzB,QAAQwqB,OAAOq8B,UAA6C,OAAvBjnD,KAAKJ,MAAMipB,SACzDg/B,EAAcrhD,aAAa,OAAQ,WAOA,SAAjC3E,EAAOzB,QAAQwqB,OAAOo8B,SAAuD,UAAjCnlD,EAAOzB,QAAQwqB,OAAOo8B,SAAwD,YAAjCnlD,EAAOzB,QAAQwqB,OAAOo8B,SACjHa,EAAcj7C,iBAAiB,aAAY,SAASC,GACnDA,EAAEiB,sBAKL85C,EAAc1/C,YAAY2/C,GAE1BhmD,EAAOkI,eAAe7B,YAAY0/C,GAE9B5qC,GACH69B,EAAK4J,oBAAoB3hD,KAAKjB,SAIhCmC,QAAQC,KAAK,oEAAqEpC,EAAO0F,WAAWoE,+DAMhG84C,oBAAoB7hD,SAAQ,SAASf,GACtCA,EAAOzB,QAAQwqB,QAAU/oB,EAAOzB,QAAQwqB,OAAOo9B,gBACjDnmD,EAAOzB,QAAQwqB,OAAOo9B,cAActhD,MAAMI,QAAU,mEAOjD29C,oBAAoB7hD,SAAQ,SAASf,GACtCA,EAAOzB,QAAQwqB,QAAU/oB,EAAOzB,QAAQwqB,OAAOo9B,gBACjDnmD,EAAOzB,QAAQwqB,OAAOo9B,cAActhD,MAAMI,QAAU,oDAMlCjF,GACjBA,EAAOzB,QAAQwqB,QAAU/oB,EAAOzB,QAAQwqB,OAAOo9B,cACjDnmD,EAAOzB,QAAQwqB,OAAOo9B,cAAcj6C,QAEpC/J,QAAQC,KAAK,8DAA+DpC,EAAOY,yDAKhEZ,MACjBA,EAAOzB,QAAQwqB,QAAU/oB,EAAOzB,QAAQwqB,OAAOo9B,qBAC1CnmD,EAAOzB,QAAQwqB,OAAOlpB,MAE7BsC,QAAQC,KAAK,wDAAyDpC,EAAOY,yDAK1DZ,EAAQH,GACxBG,IACAA,EAAOzB,QAAQwqB,QAAU/oB,EAAOzB,QAAQwqB,OAAOo9B,oBAC5CL,4BAA4B9lD,EAAQH,GAAO,GAChDG,EAAOzB,QAAQwqB,OAAOumB,QAAQzvC,IAE9BsC,QAAQC,KAAK,wDAAyDpC,EAAOY,wDAK7DZ,GACdA,IACAA,EAAOzB,QAAQwqB,QAAU/oB,EAAOzB,QAAQwqB,OAAOo9B,mBAC5CL,4BAA4B9lD,EAAQA,EAAOzB,QAAQwqB,OAAOlpB,OAAO,GAEtEsC,QAAQC,KAAK,wDAAyDpC,EAAOY,qDAM5EzC,KAAK2kD,mBAC8B,WAAlC3kD,KAAKJ,MAAM6B,QAAQwkD,gBAChBqC,WAAW,MAAM,GAAO,QAExB7e,aAAY,gDAWd5gC,SAAU,OACVxH,SAAS,2DAKVwH,EAAU7I,KAAK6I,oBACdA,SAAU,EACRA,oCAIEpC,EAAO1E,EAAML,EAAO6qB,QACxBi4B,WAAa,GAEdxxC,MAAMC,QAAQxM,KACjBA,EAAQ,CAAC,CAACA,MAAMA,EAAO1E,KAAKA,EAAML,MAAMA,EAAO6qB,OAAOA,UAGlDi6B,UAAU//C,qCAINA,EAAO1E,EAAML,EAAO6qB,cACzB1jB,GAAU,EAEVmK,MAAMC,QAAQxM,KACjBA,EAAQ,CAAC,CAACA,MAAMA,EAAO1E,KAAKA,EAAML,MAAMA,EAAO6qB,OAAOA,KAGvD9lB,EAAM7D,SAAQ,SAACgoB,IACdA,EAASrd,EAAKg7C,WAAW39B,MAGxBrd,EAAKi3C,WAAW1hD,KAAK8nB,GACrB/hB,GAAU,MAITA,QACG6+C,kDAII98B,OACN/oB,KAEDmR,MAAMC,QAAQ2X,UACT5qB,KAAKwoD,eAAe59B,OAGxB2pB,GAAa,QAES,mBAAhB3pB,EAAOnkB,MAChB8tC,EAAa,SAAS10C,UACd+qB,EAAOnkB,MAAM5G,EAAM+qB,EAAO7oB,MAAQ,KAIvCwiD,EAAO+C,QAAQ18B,EAAO7oB,MAKvBwyC,GAHD1yC,EAAS7B,KAAKJ,MAAM6D,cAAck0C,iBAAiB/sB,EAAOnkB,QAG5C,SAAS5G,UACd0kD,EAAO+C,QAAQ18B,EAAO7oB,MAAM6oB,EAAOlpB,MAAOG,EAAOuE,cAAcvG,GAAOA,EAAM+qB,EAAO2B,QAAU,KAGxF,SAAS1sB,UACd0kD,EAAO+C,QAAQ18B,EAAO7oB,MAAM6oB,EAAOlpB,MAAO7B,EAAK+qB,EAAOnkB,OAAQ5G,EAAM+qB,EAAO2B,QAAU,KAM9FvoB,QAAQC,KAAK,uDAAwD2mB,EAAO7oB,MAI9E6oB,EAAO2G,KAAOgjB,IAEP3pB,EAAO2G,MAAO3G,yCAGP08B,cACVjkD,EAAS,UAEbikD,EAAQ1kD,SAAQ,SAACgoB,IAChBA,EAAS5c,EAAKu6C,WAAW39B,KAGxBvnB,EAAOP,KAAK8nB,QAIPvnB,EAAOC,QAASD,qCAIbqjD,EAAK+B,OACXplD,EAAS,UAEVqjD,IACFrjD,EAASrD,KAAKqlD,oBAGZoD,GACFplD,EAAOT,SAAQ,SAAS2Q,GACA,mBAAbA,EAAKxR,OACdwR,EAAKxR,KAAO,eAKfsB,EAASA,EAAOia,OAAOtd,KAAK0oD,eAAe1oD,KAAKwkD,WAAYiE,2CAM9CjE,EAAYiE,cACtBplD,EAAS,UAEbmhD,EAAW5hD,SAAQ,SAACgoB,OACfrX,EAEDP,MAAMC,QAAQ2X,GAChBvnB,EAAOP,KAAKuL,EAAKq6C,eAAe99B,EAAQ69B,KAExCl1C,EAAO,CAAC9M,MAAMmkB,EAAOnkB,MAAO1E,KAAK6oB,EAAO7oB,KAAML,MAAMkpB,EAAOlpB,OAExD+mD,GACqB,mBAAbl1C,EAAKxR,OACdwR,EAAKxR,KAAO,YAIdsB,EAAOP,KAAKyQ,OAIPlQ,iDAKHA,EAAS,OAET,IAAInC,KAAOlB,KAAKq1B,cACnBhyB,EAAOP,KAAK,CAAC2D,MAAMvF,EAAKa,KAAK/B,KAAKq1B,cAAcn0B,GAAKa,KAAML,MAAM1B,KAAKq1B,cAAcn0B,GAAKQ,eAGnF2B,uCAIKoD,EAAO1E,EAAML,cAGrBsR,MAAMC,QAAQxM,KACjBA,EAAQ,CAAC,CAACA,MAAMA,EAAO1E,KAAKA,EAAML,MAAMA,KAGzC+E,EAAM7D,SAAQ,SAACgoB,OACV9a,GAAS,GAGZA,EADyB,UAAvBuD,EAAOuX,EAAOnkB,OACRyK,EAAKszC,WAAWlxC,WAAU,SAAC3N,UAC3BilB,IAAWjlB,KAGXuL,EAAKszC,WAAWlxC,WAAU,SAAC3N,UAC3BilB,EAAOnkB,QAAUd,EAAQc,OAASmkB,EAAO7oB,OAAS4D,EAAQ5D,MAAS6oB,EAAOlpB,QAAUiE,EAAQjE,WAIzF,EACXwP,EAAKszC,WAAWz0C,OAAOD,EAAO,GAG9B9L,QAAQC,KAAK,2DAA4D2mB,EAAO7oB,cAI7E2lD,mDAIMhB,QACNlC,WAAa,GAEfkC,QACGE,yBAGDc,2EAKAryB,cAAgB,QAChBqvB,4BAA8B,UAE9BD,oBAAoB7hD,SAAQ,SAACf,QACS,IAAhCA,EAAOzB,QAAQwqB,OAAOlpB,cACxBG,EAAOzB,QAAQwqB,OAAOlpB,MAE9BG,EAAOzB,QAAQwqB,OAAOu8B,iBAAchnD,EACpC6R,EAAK0zC,mBAAmB7jD,WAGpB6lD,8CAIEiB,EAAYliD,EAAO1E,EAAML,cAC5BkjB,EAAa,GACjB4/B,EAAa,UAETxxC,MAAMC,QAAQxM,KACjBA,EAAQ,CAAC,CAACA,MAAMA,EAAO1E,KAAKA,EAAML,MAAMA,KAGzC+E,EAAM7D,SAAQ,SAACgoB,IACdA,EAAS9Q,EAAKyuC,WAAW39B,KAGxB45B,EAAW1hD,KAAK8nB,WAIbhrB,MAAMgJ,WAAW2H,KAAK3N,SAAQ,SAACwC,OAC/B+N,GAAQ,EAEZqxC,EAAW5hD,SAAQ,SAACgoB,GACf9Q,EAAK8uC,cAAch+B,EAAQxlB,EAAIC,aAClC8N,GAAQ,MAIPA,GACFyR,EAAW9hB,KAAoB,SAAf6lD,EAAwBvjD,EAAIC,QAAQ,QAAUD,EAAIrC,mBAK7D6hB,iCAIDikC,EAASvB,cACX1iC,EAAa,GACjBkkC,EAAsB,UAEnB9oD,KAAK2I,mBAAmB,uBACrBD,iBAAiB,gBAAiB1I,KAAKilD,YAAW,IAGnB,WAAlCjlD,KAAKJ,MAAM6B,QAAQwkD,aAA4BjmD,KAAKwkD,WAAWlhD,QAAUkI,OAAOC,KAAKzL,KAAKq1B,eAAe/xB,QAE3GulD,EAAQjmD,SAAQ,SAACwC,GACbk0C,EAAKyP,UAAU3jD,IACjBwf,EAAW9hB,KAAKsC,MAKlBwf,EAAaikC,EAAQzlC,MAAM,GAGzBpjB,KAAK2I,mBAAmB,kBAE1Bic,EAAWhiB,SAAQ,SAACwC,GACnB0jD,EAAoBhmD,KAAKsC,EAAIrC,wBAGzB2F,iBAAiB,eAAgB1I,KAAKilD,YAAW,GAAO6D,IAGvDlkC,oCAIExf,EAAKkiD,cACVn0C,GAAQ,EACZtT,EAAOuF,EAAIC,cASP,IAAIoB,UAPH+9C,WAAW5hD,SAAQ,SAACgoB,GACpBgvB,EAAKgP,cAAch+B,EAAQ/qB,KAC9BsT,GAAQ,MAKOnT,KAAKq1B,cACjBr1B,KAAKq1B,cAAc5uB,GAAO8qB,KAAK1xB,KAClCsT,GAAQ,UAIHA,wCAGMyX,EAAQ/qB,cACjBsT,GAAQ,SAETH,MAAMC,QAAQ2X,GAChBA,EAAOhoB,SAAQ,SAAComD,GACZC,EAAKL,cAAcI,EAAWnpD,KAChCsT,GAAQ,MAIVA,EAAQyX,EAAO2G,KAAK1xB,GAGdsT,SAn3BYie,GAu3BrBmzB,GAAO/vB,WAAa,SAGpB+vB,GAAO+C,QAAU4B,UCz2BF,CACdC,UCtBc,SAAStmD,EAAMumD,EAAiBlY,UACvClxC,KAAKqpD,aAAarpD,KAAKspD,aAAazmD,EAAKoC,cDsBhDo7B,KEvBc,SAASx9B,EAAMumD,EAAiBlY,UACvCruC,EAAKoC,YFuBZi1C,SGxBc,SAASr3C,EAAMumD,EAAiBlY,UAC9CruC,EAAKN,aAAamE,MAAM0zC,WAAa,WAC9Bp6C,KAAKqpD,aAAarpD,KAAKspD,aAAazmD,EAAKoC,cHuBhDskD,MIzBc,SAAS1mD,EAAMumD,EAAiBlY,OAG9CsJ,EAAQgP,EAASC,EAASC,EAFtBC,EAAWnmB,WAAW3gC,EAAKoC,YAC/B2kD,EAAO,GAGHC,EAAaT,EAAgBK,SAAW,IACxCK,EAAcV,EAAgBW,UAAY,IAC1CC,EAAeZ,EAAgBY,cAAgB,IAC/CpZ,EAASwY,EAAgBxY,QAAU,GACnChtC,IAAUwlD,EAAgBa,YAC1B9mB,OAAiD,IAA9BimB,EAAgBjmB,UAA4BimB,EAAgBjmB,UAAY,KAE5FlzB,MAAM05C,UACD3pD,KAAKqpD,aAAarpD,KAAKspD,aAAazmD,EAAKoC,gBAG9C0kD,EAAW,IACbA,EAAWz5C,KAAK+I,IAAI0wC,GACpBC,EAAOI,GAGRxP,GAAuB,IAAdrX,EAAsBwmB,EAASpmB,QAAQJ,GAAawmB,EAG7DH,GAFAhP,EAAS/W,OAAO+W,GAAQ/yC,MAAM,MAEb,GACjBgiD,EAAUjP,EAAOl3C,OAAS,EAAIumD,EAAarP,EAAO,GAAK,IAEtB,IAA7B4O,EAAgBW,aACnBL,EAAM,eAECA,EAAI9uB,KAAK4uB,IACfA,EAAUA,EAAQh9B,QAAQk9B,EAAK,KAAOI,EAAc,aAI/ClmD,EAAQgmD,EAAOJ,EAAUC,EAAU7Y,EAASgZ,EAAOhZ,EAAS4Y,EAAUC,GJT7ES,KK1Bc,SAASrnD,EAAMumD,EAAiBlY,OAM9CrxC,EALI6B,EAAQmB,EAAKoC,WACjBklD,EAAYf,EAAgBe,WAAa,GACzCrb,EAAWsa,EAAgBta,SAC3BwH,EAAQ50C,EACRwJ,EAAK7E,SAASC,cAAc,QAczB8iD,EAAgBgB,aAClBvqD,EAAOgD,EAAKwC,UACZixC,WAbQ+T,EAAc7+B,EAAM3rB,OAE5B6B,EAAQ7B,EADG2rB,EAAK2C,gBAGb3C,EAAKloB,QAA2B,WAAjB+P,EAAO3R,GACjB2oD,EAAc7+B,EAAM9pB,GAGrBA,EAKC2oD,CAAcjB,EAAgBgB,WAAW3iD,MAAMzH,KAAKJ,MAAM6B,QAAQmK,sBAAuB/L,IAG/FupD,EAAgB9S,eACJ8S,EAAgB9S,YACxB,SACLA,EAAQ8S,EAAgB9S,gBAGnB,WACLA,EAAQ8S,EAAgB9S,MAAMzzC,MAK7ByzC,EAAM,IACL8S,EAAgBkB,WAElB5oD,GADA7B,EAAOgD,EAAKwC,WACC+jD,EAAgBkB,WAG3BlB,EAAgB/rB,aACJ+rB,EAAgB/rB,UACxB,SACL37B,EAAQ0nD,EAAgB/rB,cAGnB,WACL37B,EAAQ0nD,EAAgB/rB,IAAIx6B,UAK9BqI,EAAG1E,aAAa,OAAQ2jD,EAAYzoD,GAEjC0nD,EAAgBlnD,QAClBgJ,EAAG1E,aAAa,SAAU4iD,EAAgBlnD,QAGxCknD,EAAgBta,WAGjBA,EADqB,mBAAZA,EACEA,EAASjsC,IAEI,IAAbisC,EAAoB,GAAKA,EAGrC5jC,EAAG1E,aAAa,WAAYsoC,IAG7B5jC,EAAGpD,UAAY9H,KAAKqpD,aAAarpD,KAAKspD,aAAahT,IAE5CprC,QAEA,ULhDRq/C,MM3Bc,SAAS1nD,EAAMumD,EAAiBlY,OAC1ChmC,EAAK7E,SAASC,cAAc,OAChCkkD,EAAM3nD,EAAKoC,kBAERmkD,EAAgBe,YAClBK,EAAMpB,EAAgBe,UAAYtnD,EAAKoC,YAGrCmkD,EAAgBqB,YAClBD,GAAYpB,EAAgBqB,WAG7Bv/C,EAAG1E,aAAa,MAAOgkD,KAETpB,EAAgBvjD,aACxB,SACLqF,EAAGxE,MAAMb,OAASujD,EAAgBvjD,OAAS,eAGtC,SACLqF,EAAGxE,MAAMb,OAASujD,EAAgBvjD,gBAIrBujD,EAAgB3kD,YACxB,SACLyG,EAAGxE,MAAMjC,MAAQ2kD,EAAgB3kD,MAAQ,eAGpC,SACLyG,EAAGxE,MAAMjC,MAAQ2kD,EAAgB3kD,aAIlCyG,EAAG0B,iBAAiB,QAAQ,WAC3B/J,EAAKw3C,SAAS57B,qBAGRvT,GNVPmxC,UO5Bc,SAASx5C,EAAMumD,EAAiBlY,OAC1CxvC,EAAQmB,EAAKoC,WACjBU,EAAU9C,EAAKN,aACfg3B,EAAQ6vB,EAAgB3U,WACxBiW,EAAStB,EAAgBuB,YACzBjO,EAAelxC,OAAOC,KAAK29C,GAAiBt+B,SAAS,aACrD8/B,OAA8C,IAAhCxB,EAAgByB,YAA8BzB,EAAgByB,YAAc,qkBAC1FC,OAAgD,IAAjC1B,EAAgB2B,aAA+B3B,EAAgB2B,aAAe,msBAEzFrO,GAAgBh7C,IAAU0nD,EAAgBrM,YAAgBL,IAAkBgO,GAAUhpD,IAAqB,IAAVA,GAA4B,SAAVA,GAA8B,SAAVA,GAA8B,IAAVA,GAAyB,MAAVA,IAC7KiE,EAAQa,aAAa,gBAAgB,GAC9BokD,GAAQ,KAEZrxB,GAAoB,SAAV73B,GAA8B,KAAVA,SAAgBA,GAIhDiE,EAAQa,aAAa,gBAAgB,GAC9BskD,GAAS,KAJhBnlD,EAAQa,aAAa,eAAgB,SAC9B,KPcTwkD,SQ7Bc,SAASnoD,EAAMumD,EAAiBlY,OAQzC+Z,EAPDC,EAAK94C,OAAO+4C,UAAYC,MAAMD,SAC9BE,EAAcjC,EAAgBiC,aAAe,sBAC7CC,EAAelC,EAAgBkC,cAAgB,sBAC/CC,OAAwD,IAAvCnC,EAAgBoC,mBAAqCpC,EAAgBoC,mBAAqB,GAC3G9pD,EAAQmB,EAAKoC,mBAED,IAANimD,SAIPD,EADCC,EAAGO,WAAW/pD,GACDA,EACU,QAAhB2pD,EACMH,EAAGQ,QAAQjoB,OAAO/hC,IAElBwpD,EAAGS,WAAWloB,OAAO/hC,GAAQ2pD,IAG9BO,SACXxC,EAAgByC,WAClBZ,EAAcA,EAAYa,QAAQ1C,EAAgByC,WAG5CZ,EAAYc,SAAST,KAEb,IAAZC,GAAqB7pD,EAEI,mBAAZ6pD,EACRA,EAAQ7pD,GAER6pD,EAJA7pD,EAQTsC,QAAQ4N,MAAM,iERJfo6C,aS9Bc,SAAUnpD,EAAMumD,EAAiBlY,OAW1C+Z,EAVDC,EAAK94C,OAAO+4C,UAAYC,MAAMD,SAC9BE,EAAcjC,EAAgBiC,aAAe,sBAC7CE,OAAwD,IAAvCnC,EAAgBoC,mBAAqCpC,EAAgBoC,mBAAqB,GAC3GS,OAA2C,IAA3B7C,EAAgB6C,QAAyB7C,EAAgB6C,OACzE7f,OAAuC,IAAzBgd,EAAgBhd,KAAuBgd,EAAgBhd,KAAO,OAC5E8f,OAA+C,IAA7B9C,EAAgB8C,UAA2B9C,EAAgB8C,SAC7EC,OAAuC,IAAzB/C,EAAgB+C,KAAuB/C,EAAgB+C,KAAOjB,EAAGkB,MAC/E1qD,EAAQmB,EAAKoC,mBAED,IAANimD,SAIPD,EADCC,EAAGO,WAAW/pD,GACDA,EACU,QAAhB2pD,EACMH,EAAGQ,QAAQjoB,OAAO/hC,IAElBwpD,EAAGS,WAAWloB,OAAO/hC,GAAQ2pD,IAG7BO,QACZM,EACKjB,EAAYjyC,KAAKmzC,EAAM/f,GAAMigB,WAAcJ,EAAS,IAAMA,EAAS,IAEnEx+C,SAASw9C,EAAYjyC,KAAKmzC,EAAM/f,GAAMA,KAAU6f,EAAS,IAAMA,EAAS,KAIhE,IAAZV,EACI7pD,EACsB,mBAAZ6pD,EACVA,EAAQ7pD,GAER6pD,EAITvnD,QAAQ4N,MAAM,qETPfgyC,OU/Bc,SAAU/gD,EAAMumD,EAAiBlY,OAC3CxvC,EAAQmB,EAAKoC,uBAEqB,IAA3BmkD,EAAgB1nD,IAC1BsC,QAAQC,KAAK,6BAA+BvC,GACrCA,GAGD0nD,EAAgB1nD,IVwBvBk5C,KWhCc,SAAS/3C,EAAMumD,EAAiBlY,OAC1CxvC,EAAQmB,EAAKoC,WACjBU,EAAU9C,EAAKN,aACfu4C,EAAWsO,GAAmBA,EAAgBnO,MAAQmO,EAAgBnO,MAAQ,EAC9EA,EAAQ50C,SAASC,cAAc,QAC/Bs0C,EAAOv0C,SAAS80C,gBAAgB,6BAA8B,OAK9DF,EAAMv0C,MAAMsI,cAAgB,SAG5B4rC,EAAKp0C,aAAa,QAAS,MAC3Bo0C,EAAKp0C,aAAa,SAAU,MAC5Bo0C,EAAKp0C,aAAa,UAAW,eAC7Bo0C,EAAKp0C,aAAa,YAAa,YAC/Bo0C,EAAKl0C,MAAM8sC,QAAU,QAErB9xC,EAAQA,IAAUuO,MAAMvO,GAAS+L,SAAS/L,GAAS,EAEnDA,EAAQwO,KAAKG,IAAI,EAAGH,KAAKI,IAAI5O,EAAOo5C,QAEhC,IAAInwC,EAAE,EAAEA,GAAImwC,EAASnwC,IAAI,KACxB4wC,EAAWX,EAAK/Q,WAAU,GAC9B0R,EAASzzC,UAAY6C,GAAKjJ,EAnBd,0SACE,0SAoBdu5C,EAAM/yC,YAAYqzC,UAGnB51C,EAAQe,MAAM0zC,WAAa,SAC3Bz0C,EAAQe,MAAM+0C,SAAW,SACzB91C,EAAQe,MAAMg1C,aAAe,WAE7B/1C,EAAQa,aAAa,aAAc9E,GAE5Bu5C,GXHPqR,QYjCc,SAASzpD,EAAMumD,EAAiBlY,OAO9C4K,EAASyQ,EANL7qD,EAAQ1B,KAAKspD,aAAazmD,EAAKoC,aAAe,EAClDiG,EAAK7E,SAASC,cAAc,QAC5B+J,EAAM+4C,GAAmBA,EAAgB/4C,IAAM+4C,EAAgB/4C,IAAM,IACrEC,EAAM84C,GAAmBA,EAAgB94C,IAAM84C,EAAgB94C,IAAM,EACrEk8C,EAASpD,QAAoD,IAA1BA,EAAgBqD,MAAwBrD,EAAgBqD,MAAQ,CAAC,MAAO,SAAU,SACrHA,EAAQ,cAGLx8C,MAAMvO,SAAqC,IAApBmB,EAAKoC,mBAI/BiG,EAAGxD,UAAUC,IAAI,2BAGjB4kD,EAAe/oB,WAAW9hC,IAAU2O,EAAMmzB,WAAW9hC,GAAS2O,EAC9Dk8C,EAAe/oB,WAAW+oB,IAAiBj8C,EAAMkzB,WAAW+oB,GAAgBj8C,EAG5EwrC,GAAWzrC,EAAMC,GAAO,IACxBi8C,EAAer8C,KAAKgsC,OAAOqQ,EAAej8C,GAAOwrC,KAGnC0Q,QACR,SACLC,EAAQD,YAEH,WACLC,EAAQD,EAAO9qD,aAEV,YACFsR,MAAMC,QAAQu5C,GAAQ,KACpBpgB,EAAO,IAAMogB,EAAOlpD,OACpBwM,EAAQI,KAAKC,MAAMo8C,EAAengB,GAEtCt8B,EAAQI,KAAKI,IAAIR,EAAO08C,EAAOlpD,OAAS,GAExCmpD,EAAQD,EADR18C,EAAQI,KAAKG,IAAIP,EAAO,kBAM1B5E,EAAGxE,MAAMy1C,gBAAkBsQ,EAEpBvhD,IZXPywC,SahCc,SAAS94C,EAAMumD,EAAiBlY,OAM9C4K,EAASyQ,EAAcE,EAAOC,EAAQC,EALlCjrD,EAAQ1B,KAAKspD,aAAazmD,EAAKoC,aAAe,EAClDU,EAAU9C,EAAKN,aACf8N,EAAM+4C,GAAmBA,EAAgB/4C,IAAM+4C,EAAgB/4C,IAAM,IACrEC,EAAM84C,GAAmBA,EAAgB94C,IAAM84C,EAAgB94C,IAAM,EACrEs8C,EAAcxD,GAAmBA,EAAgBwD,YAAcxD,EAAgBwD,YAAc,gBAI7FL,EAAe/oB,WAAW9hC,IAAU2O,EAAMmzB,WAAW9hC,GAAS2O,EAC9Dk8C,EAAe/oB,WAAW+oB,IAAiBj8C,EAAMkzB,WAAW+oB,GAAgBj8C,EAG5EwrC,GAAWzrC,EAAMC,GAAO,IACxBi8C,EAAer8C,KAAKgsC,OAAOqQ,EAAej8C,GAAOwrC,KAGnCsN,EAAgBqD,YACxB,SACLA,EAAQrD,EAAgBqD,gBAEnB,WACLA,EAAQrD,EAAgBqD,MAAM/qD,aAEzB,YACFsR,MAAMC,QAAQm2C,EAAgBqD,OAAO,KACnCrgB,EAAO,IAAMgd,EAAgBqD,MAAMnpD,OACnCwM,EAAQI,KAAKC,MAAMo8C,EAAengB,GAEtCt8B,EAAQI,KAAKI,IAAIR,EAAOs5C,EAAgBqD,MAAMnpD,OAAS,GACvDwM,EAAQI,KAAKG,IAAIP,EAAO,GACxB28C,EAAQrD,EAAgBqD,MAAM38C,iBAI/B28C,EAAQ,mBAIKrD,EAAgBsD,aACxB,SACLA,EAAStD,EAAgBsD,iBAEpB,WACLA,EAAStD,EAAgBsD,OAAOhrD,aAE3B,UACLgrD,EAAShrD,gBAGTgrD,GAAS,WAIItD,EAAgBuD,kBACxB,SACLA,EAAcvD,EAAgBuD,sBAEzB,WACLA,EAAcvD,EAAgBuD,YAAYjrD,aAErC,YACFsR,MAAMC,QAAQm2C,EAAgBuD,aAAa,CACzCvgB,EAAO,IAAMgd,EAAgBuD,YAAYrpD,OACzCwM,EAAQI,KAAKC,MAAMo8C,EAAengB,GAEtCt8B,EAAQI,KAAKI,IAAIR,EAAOs5C,EAAgBuD,YAAYrpD,OAAS,GAC7DwM,EAAQI,KAAKG,IAAIP,EAAO,GACxB68C,EAAcvD,EAAgBuD,YAAY78C,iBAI3C68C,EAAc,OAGfhnD,EAAQe,MAAMZ,SAAW,OACzBH,EAAQe,MAAMyO,SAAW,WAEzBxP,EAAQa,aAAa,aAAc+lD,OAE/BM,EAAQxmD,SAASC,cAAc,OACnCumD,EAAMnmD,MAAMI,QAAU,eACtB+lD,EAAMnmD,MAAMyO,SAAW,WACvB03C,EAAMnmD,MAAMjC,MAAQ8nD,EAAe,IACnCM,EAAMnmD,MAAMy1C,gBAAkBsQ,EAC9BI,EAAMnmD,MAAMb,OAAS,OAErBgnD,EAAMrmD,aAAa,WAAY6J,GAC/Bw8C,EAAMrmD,aAAa,WAAY8J,OAE3Bw8C,EAAezmD,SAASC,cAAc,UAC1CwmD,EAAapmD,MAAMyO,SAAW,WAC9B23C,EAAapmD,MAAMjC,MAAQ,OAC3BqoD,EAAapmD,MAAMb,OAAS,OAEzB6mD,EAAO,KACLK,EAAW1mD,SAASC,cAAc,OACtCymD,EAASrmD,MAAMyO,SAAW,WAC1B43C,EAASrmD,MAAMM,IAAM,EACrB+lD,EAASrmD,MAAMU,KAAO,EACtB2lD,EAASrmD,MAAMC,UAAYimD,EAC3BG,EAASrmD,MAAMjC,MAAQ,OACvBsoD,EAASrmD,MAAM+lD,MAAQE,EACvBI,EAASjlD,UAAY4kD,SAGtBxb,GAAW,gBAGLruC,aAAgBkC,GAAe,KAC/BioD,EAAW3mD,SAASC,cAAc,OACtC0mD,EAAStmD,MAAMyO,SAAW,WAC1B63C,EAAStmD,MAAMM,IAAM,MACrBgmD,EAAStmD,MAAMO,OAAS,MACxB+lD,EAAStmD,MAAMU,KAAO,MACtB4lD,EAAStmD,MAAMW,MAAQ,MAEvB1B,EAAQuC,YAAY8kD,GAEpBrnD,EAAUqnD,EAGXrnD,EAAQuC,YAAY4kD,GACpBA,EAAa5kD,YAAY2kD,GAEtBH,GACFI,EAAa5kD,YAAY6kD,MAIpB,IbjGPN,McnCc,SAAS5pD,EAAMumD,EAAiBlY,UAC9CruC,EAAKN,aAAamE,MAAMy1C,gBAAkBn8C,KAAKspD,aAAazmD,EAAKoC,YAC1D,IdkCPgoD,WepCc,SAASpqD,EAAMumD,EAAiBlY,SACvC,skBfoCPgc,YgBrCc,SAASrqD,EAAMumD,EAAiBlY,SACvC,4rBhBqCPic,OiBtCc,SAAStqD,EAAMumD,EAAiBlY,UACvClxC,KAAKJ,MAAMgJ,WAAWgc,WAAWlZ,QAAQ7I,EAAKw3C,SAAS79B,YAAc,GAAK,IjBsCjFla,OkBvCc,SAASO,EAAMumD,EAAiBlY,UAC9CruC,EAAKN,aAAamF,UAAUC,IAAI,wBACzB,oLlBsCPylD,mBmBxCc,SAASvqD,EAAMumD,EAAiBlY,OAE9ChmC,EAAK7E,SAASC,cAAc,OAC5B0R,EAASnV,EAAKw3C,SAASl8B,KAAK/d,QAAQ2xB,0BAO3Bs7B,EAAWC,OACf9lB,EAAaxvB,EAAOrS,QAExBqS,EAAOsuB,KAAOgnB,EAEX9lB,IAECxvB,EAAOsuB,MACTp7B,EAAGxD,UAAUC,IAAI,QACjB6/B,EAAW9gC,MAAMI,QAAU,KAE3BoE,EAAGxD,UAAUmN,OAAO,QACpB2yB,EAAW9gC,MAAMI,QAAU,gBAjB9BoE,EAAGxD,UAAUC,IAAI,wCACjBuD,EAAGpD,UAAY,oIAEfjF,EAAKN,aAAamF,UAAUC,IAAI,wBAmBhCuD,EAAG0B,iBAAiB,SAAS,SAASC,GACrCA,EAAEgpC,2BACFwX,GAAYr1C,EAAOsuB,SAGpB+mB,EAAWr1C,EAAOsuB,MAEXp7B,GnBOPqiD,aoBvCc,SAAS1qD,EAAMumD,EAAiBlY,cAC1Csc,EAAWnnD,SAASC,cAAc,SAClC25B,GAAU,KAEdutB,EAASzrD,KAAO,WAEhByrD,EAAShnD,aAAa,aAAc,cAEjCxG,KAAKJ,MAAMoyB,UAAU,aAAa,MAEpCw7B,EAAS5gD,iBAAiB,SAAS,SAACC,GACnCA,EAAEiB,qBAGsB,mBAAfjL,EAAKw3C,OAAqB,KAC/Bj1C,EAAMvC,EAAKw3C,SAEZj1C,aAAe8Y,GAEjBsvC,EAAS5gD,iBAAiB,UAAU,SAACC,GACU,UAA3C/C,EAAKlK,MAAM6B,QAAQgsD,qBACjBxtB,EAGHA,GAAU,EAGX76B,EAAIsoD,kBAIwC,UAA3C1tD,KAAKJ,MAAM6B,QAAQgsD,qBACrBD,EAAS5gD,iBAAiB,SAAS,SAACC,GACnCozB,GAAU,EACVn2B,EAAKlK,MAAMQ,QAAQ8gD,UAAUyM,sBAAsBvoD,EAAI+Y,KAAMtR,MAI/D2gD,EAAS1Q,QAAU13C,EAAIwoD,YAAcxoD,EAAIwoD,kBACpChuD,MAAMQ,QAAQ8gD,UAAU2M,0BAA0BzoD,EAAKooD,IAE5DA,EAAW,QAGZA,EAAS5gD,iBAAiB,UAAU,SAACC,GACjC/C,EAAKlK,MAAMQ,QAAQ8gD,UAAUC,aAAa79C,OAC5CwG,EAAKlK,MAAMkuD,cAEXhkD,EAAKlK,MAAMshD,UAAUkI,EAAgBppB,kBAIlCpgC,MAAMQ,QAAQ8gD,UAAU6M,6BAA6BP,UAIrDA,ICtDFQ,4CAEOpuD,yCACLA,IAED00B,qBAAqB,eACrBA,qBAAqB,qBAErBA,qBAAqB,oBACrBA,qBAAqB,0BACrBA,qBAAqB,wBACrBA,qBAAqB,8BACrBA,qBAAqB,yBACrBA,qBAAqB,+BACrBA,qBAAqB,oBACrBA,qBAAqB,8EAIrBtzB,UAAU,cAAehB,KAAKiuD,YAAYztD,KAAKR,YAC/CgB,UAAU,gBAAiBhB,KAAKuI,aAAa/H,KAAKR,YAClDgB,UAAU,gBAAiBhB,KAAKs8B,iBAAiB97B,KAAKR,YACtDgB,UAAU,gBAAiBhB,KAAKkuD,aAAa1tD,KAAKR,gDAIvC6B,GAChBA,EAAOzB,QAAQsmC,OAAS1mC,KAAKmuD,gBAAgBtsD,EAAQ,SAEN,IAArCA,EAAO0F,WAAW6mD,iBAC3BvsD,EAAOzB,QAAQsmC,OAAO2nB,MAAQruD,KAAKmuD,gBAAgBtsD,EAAQ,eAGT,IAAzCA,EAAO0F,WAAW+mD,qBAC3BzsD,EAAOzB,QAAQsmC,OAAOxG,UAAYlgC,KAAKmuD,gBAAgBtsD,EAAQ,mBAGZ,IAA1CA,EAAO0F,WAAWgnD,sBAC3B1sD,EAAOzB,QAAQsmC,OAAO8nB,WAAaxuD,KAAKmuD,gBAAgBtsD,EAAQ,uDAIlDA,EAAQE,OACnBiW,EAAS,CAACuU,OAAO1qB,EAAO0F,WAAW,YAAcxF,EAAO,WAAa,IACzEmN,EAAYrN,EAAO0F,WAAW,YAAcxF,YAG9BmN,QACR,SACF8+C,EAAOS,WAAWv/C,GACpB8I,EAAO9I,UAAY8+C,EAAOS,WAAWv/C,IAErClL,QAAQC,KAAK,8CAA+CiL,GAC5D8I,EAAO9I,UAAY8+C,EAAOS,WAAWtF,qBAIjC,WACLnxC,EAAO9I,UAAYA,gBAInB8I,EAAO9I,UAAY8+C,EAAOS,WAAWtF,iBAI/BnxC,uCAGKnV,GACTA,EAAKzC,QAAQsmC,QAAU7jC,EAAKzC,QAAQsmC,OAAO7W,mBAAqBhtB,EAAKzC,QAAQsmC,OAAOqZ,WACtFl9C,EAAKzC,QAAQsmC,OAAO7W,mBACpBhtB,EAAKzC,QAAQsmC,OAAOqZ,UAAW,wCAKpBl+C,EAAQ8J,EAAOT,OACvBgE,EAAWqd,EAAQ2kB,EAAYwd,SAEhC7sD,EAAO0F,WAAWonD,gBACpBz/C,EAAYlP,KAAK2mC,aAAa9kC,EAAO0F,WAAWonD,gBAEhDzd,EAAa,SAAC58B,GACbzS,EAAOyI,uBAAyBgK,GAGjCo6C,EAAW,CACVzpD,SAAS,kBACD0G,GAERpJ,WAAW,kBACH2I,IAMTqhB,EAA2B,mBAF3BA,EAAS1qB,EAAO0F,WAAWqnD,sBAAwB,IAEXriC,IAAWA,EAE5Crd,EAAUzG,KAAKzI,KAAM0uD,EAAUniC,EAAQ2kB,IAEvCvlC,sCAMG9I,OACPkD,EAAYlD,EAAKE,eACrBwpB,EAAsD,mBAAtC1pB,EAAKhB,OAAOzB,QAAQsmC,OAAOna,OAAwB1pB,EAAKhB,OAAOzB,QAAQsmC,OAAOna,OAAOxmB,GAAalD,EAAKhB,OAAOzB,QAAQsmC,OAAOna,cAWtI1pB,EAAKhB,OAAOzB,QAAQsmC,OAAOx3B,UAAUzG,KAAKzI,KAAM+F,EAAWwmB,YAT9CjY,GACfzR,EAAKzC,QAAQsmC,SAChB7jC,EAAKzC,QAAQsmC,OAAS,IAGvB7jC,EAAKzC,QAAQsmC,OAAO7W,iBAAmBvb,EACvCzR,EAAKzC,QAAQsmC,OAAOqZ,UAAW,+CAMfl9C,EAAMd,OAEvBwqB,EADIrd,EAAYrM,EAAKhB,OAAOzB,QAAQsmC,OAAO3kC,MAGxCmN,EAAU,QACZqd,EAAqC,mBAArBrd,EAAUqd,OAAwBrd,EAAUqd,OAAOxmB,WAAamJ,EAAUqd,OAWnFrd,EAAUA,UAAUzG,KAAKzI,KAAM6C,EAAKE,eAAgBwpB,GAT3D,SAAoBjY,GACfzR,EAAKzC,QAAQsmC,SAChB7jC,EAAKzC,QAAQsmC,OAAS,IAGvB7jC,EAAKzC,QAAQsmC,OAAO7W,iBAAmBvb,EACvCzR,EAAKzC,QAAQsmC,OAAOqZ,UAAW,YAMzB//C,KAAKiuD,YAAYprD,wCAIbnB,MACTA,EAAM,KACJmtD,EAAY,KACV,YACA,WACA,WACA,aACA,YACA,aACA,aACA,iBAGCprB,OAAO/hC,GAAO8qB,QAAQ,gBAAgB,SAAU6gB,UAC/CwhB,EAAUxhB,aAGX3rC,uCAIIA,UACLA,MAAAA,GAA4D,KAAVA,EAAe,SAAWA,uCAIvEwN,YAGEA,QACR,SACF8+C,EAAOS,WAAWv/C,GACpBA,EAAY8+C,EAAOS,WAAWv/C,IAE9BlL,QAAQC,KAAK,8CAA+CiL,GAC5DA,EAAY8+C,EAAOS,WAAWtF,qBAI1B,WACLj6C,EAAYA,gBAIZA,EAAY8+C,EAAOS,WAAWtF,iBAIxBj6C,SAnMYkiB,GAuMrB48B,GAAOx5B,WAAa,SAGpBw5B,GAAOS,WAAaK,OC5MdC,4CAEOnvD,yCACLA,IAEDovD,YAAc,KACdC,aAAe,KACfrP,WAAa,IACbC,YAAc,IACdqP,aAAe,IACfC,mBAAqB,SACrBvyC,QAAS,IACTqjB,SAAU,IAEV3L,qBAAqB,2DAKrB66B,mBAAqB,YACrBH,YAAc,QACdC,aAAe,QACfrP,WAAa,OACbC,YAAc,OACdA,YAAc,OACdjjC,QAAS,OAEThd,MAAM6D,cAAc2W,eAAe1T,MAAM2U,WAAa,OACtDzb,MAAM6D,cAAckC,QAAQe,MAAM4R,aAAe,4CAIjDtX,UAAU,cAAehB,KAAKovD,WAAW5uD,KAAKR,YAC9CgB,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,YACpDgB,UAAU,eAAgBhB,KAAKa,OAAOL,KAAKR,YAC3CgB,UAAU,mBAAoBhB,KAAK4oC,UAAUpoC,KAAKR,YAClDgB,UAAU,eAAgBhB,KAAKa,OAAOL,KAAKR,YAC3CgB,UAAU,oBAAqBhB,KAAK2a,iBAAiBna,KAAKR,YAC1DgB,UAAU,oBAAqBhB,KAAK2a,iBAAiBna,KAAKR,YAC1DgB,UAAU,kBAAmBhB,KAAK+gC,MAAMvgC,KAAKR,YAE7CgB,UAAU,aAAchB,KAAKqvD,oBAAoB7uD,KAAKR,YACtDgB,UAAU,gBAAiBhB,KAAKqvD,oBAAoB7uD,KAAKR,YAEzDgB,UAAU,eAAgBhB,KAAKa,OAAOL,KAAKR,YAC3CgB,UAAU,oBAAqBhB,KAAKsvD,YAAY9uD,KAAKR,YACrDgB,UAAU,mBAAoBhB,KAAKuvD,cAAc/uD,KAAKR,kDAItDigC,SAAU,+CAIVA,SAAU,qCAGLp9B,QACLuF,cAAcvF,EAAK8C,QAAS9C,EAAKhB,sEAIjCk/B,aAEAnhC,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,GAChDgG,EAAKy0B,iBAAiBz6B,+CAKPA,OACZmW,EAAS,CAACyK,OAAO,EAAG+sC,MAAK,GAEzB3tD,EAAOoB,UAEPjD,KAAKyvD,YAAY5tD,IAEnBmW,EAAO7C,SAAWnV,KAAKmvD,mBAEO,QAA3BnvD,KAAKmvD,wBACFH,YAAYlsD,KAAKjB,QAEjBotD,aAAaz7C,QAAQ3R,QAGtB+a,QAAS,EAEd/a,EAAOzB,QAAQgX,OAASY,QAEnBm3C,mBAAqB,6CAKjBttD,UACRA,EAAO0B,OAAON,SAAWpB,EAAO0F,WAAW6P,QAC7CpT,QAAQC,KAAK,yGAGXpC,EAAO0B,OAAON,QACTjD,KAAKyvD,YAAY5tD,EAAO0B,QAExB1B,EAAO0F,WAAW6P,kDAQvBpX,KAAK4c,cACF8yC,aAAY,QAEZC,4BAEAC,sBAEAp3C,wDAKKhB,GAEPA,SACEooC,WAAa5/C,KAAK6vD,WAAW7vD,KAAKgvD,YAAahvD,KAAKgvD,YAAY1rD,QAAU,UAC1Eu8C,YAAc7/C,KAAK6vD,WAAW7vD,KAAKivD,aAAcjvD,KAAKivD,aAAa3rD,QAAU,UAC7E1D,MAAMgJ,WAAWwL,aAAa1N,MAAMojC,YAAc9pC,KAAK6/C,kBAIxDqP,aAAelvD,KAAKJ,MAAMgJ,WAAWjD,QAAQyK,YAAcpQ,KAAKJ,MAAM6D,cAAc2S,oDAKtFpW,KAAKJ,MAAMoyB,UAAU,iBACpBhyB,KAAKJ,MAAMQ,QAAQ+kC,YAAYlB,gBAAkBjkC,KAAKJ,MAAMQ,QAAQ+kC,YAAY/iB,aAC7EwmB,UAAU5oC,KAAKJ,MAAMQ,QAAQ+kC,YAAY/iB,QAG5CpiB,KAAKJ,MAAMQ,QAAQ+kC,YAAYjB,gBAAkBlkC,KAAKJ,MAAMQ,QAAQ+kC,YAAYnB,aAC7E4E,UAAU5oC,KAAKJ,MAAMQ,QAAQ+kC,YAAYnB,QAG5ChkC,KAAKJ,MAAMoyB,UAAU,mBAClB89B,iBAAiB9vD,KAAKJ,MAAMQ,QAAQ6lC,UAAUY,uDAKrCO,cAChBA,EAAOxkC,SAAQ,SAACke,GACZA,EAAMnX,MAAM3C,KACd8F,EAAK87B,UAAU9nB,EAAMnX,MAAM3C,KAGzB8Z,EAAMnX,MAAM1C,QACd6F,EAAK87B,UAAU9nB,EAAMnX,MAAM1C,QAGzB6Z,EAAMivC,WAAajvC,EAAMivC,UAAUzsD,QACrCwJ,EAAKgjD,iBAAiBhvC,EAAMivC,WAAajvC,EAAMivC,2DAM7BC,cAChBC,EAAc,GAEdrQ,EAAa,EACbC,EAAc,OAEbjgD,MAAM6D,cAAc2W,eAAe1T,MAAM2U,WAAarb,KAAK4/C,gBAC3DhgD,MAAM6D,cAAckC,QAAQe,MAAM4R,aAAetY,KAAK6/C,iBAEtDmP,YAAYpsD,SAAQ,SAACf,EAAQ8I,MACjC9I,EAAOzB,QAAQgX,OAAO84C,YAActQ,EAAaryC,EAAK3N,MAAM6D,cAAc2S,WAC1EvU,EAAOzB,QAAQgX,OAAOqL,OAAS5gB,EAAOzB,QAAQgX,OAAO84C,YAAc,KAEhEruD,EAAOmB,UACT48C,GAAc/9C,EAAO2C,YAGnBmG,GAAK4C,EAAKyhD,YAAY1rD,OAAS,EACjCzB,EAAOzB,QAAQgX,OAAOo4C,MAAO,EAE7B3tD,EAAOzB,QAAQgX,OAAOo4C,MAAO,EAG3B3tD,EAAO0B,OAAON,QAAQ,KACpB6tB,EAAWvjB,EAAK4iD,yBAAyBtuD,GACzCouD,EAAYnlC,SAASgG,KACxBvjB,EAAKnF,cAAc0oB,EAAUjvB,GAC7BouD,EAAYntD,KAAKguB,IAGfjvB,EAAOzB,QAAQgX,OAAOo4C,MACxB1+B,EAASppB,UAAUC,IAAI,oBAAsB9F,EAAOzB,QAAQgX,OAAOjC,eAGpE5H,EAAKnF,cAAcvG,EAAOU,aAAcV,GAGtCmuD,GACFnuD,EAAOc,MAAMC,SAAQ,SAACC,GACrB0K,EAAKnF,cAAcvF,EAAKN,YAAW,GAAOV,cAKxCotD,aAAarsD,SAAQ,SAACf,EAAQ8I,GAE/B9I,EAAOmB,UACT68C,GAAeh+C,EAAO2C,YAGvB3C,EAAOzB,QAAQgX,OAAO84C,YAAc3iD,EAAK2hD,aAAerP,EACxDh+C,EAAOzB,QAAQgX,OAAOqL,OAAS5gB,EAAOzB,QAAQgX,OAAO84C,YAAc,KAEhEvlD,GAAK4C,EAAK0hD,aAAa3rD,OAAS,EAClCzB,EAAOzB,QAAQgX,OAAOo4C,MAAO,EAE7B3tD,EAAOzB,QAAQgX,OAAOo4C,MAAO,EAI3B3tD,EAAO0B,OAAON,QAChBsK,EAAKnF,cAAcmF,EAAK4iD,yBAAyBtuD,GAASA,GAE1D0L,EAAKnF,cAAcvG,EAAOU,aAAcV,GAGtCmuD,GACFnuD,EAAOc,MAAMC,SAAQ,SAACC,GACrB0K,EAAKnF,cAAcvF,EAAKN,YAAW,GAAOV,0DAMrBA,UACjBA,EAAO0B,OAAON,QAAUjD,KAAKmwD,yBAAyBtuD,EAAO0B,QAAU1B,EAAOU,8CAKlFvC,KAAK4c,SAAW5c,KAAKigC,eAElByvB,mBAGAC,4BAEAn3C,wBAEAo3C,wEAKFj5C,EAAc3W,KAAKJ,MAAMgJ,WAAWmQ,iBACxB/Y,KAAKJ,MAAMgJ,WAAWwe,UAAUwD,QAAO,SAAAxlB,UAAQuR,EAAYmU,SAAS1lB,MAE1ExC,SAAQ,SAACwC,GAClBA,EAAIgrD,kBAGLz5C,EAAY/T,SAAQ,SAACwC,GACJ,QAAbA,EAAIrD,MACNiM,EAAK46B,UAAUxjC,wCAKRA,cAEGA,EAAI7C,aAEVmE,MAAM2R,YAAcrY,KAAK4/C,WAEE,gBAA9B5/C,KAAKJ,MAAM6B,QAAQZ,QAA4Bb,KAAKivD,aAAa3rD,cAC9D1D,MAAMgJ,WAAWynD,kBAAkB3pD,MAAMZ,SAAW,eAAiB9F,KAAK6/C,YAAc,UAGzFmP,YAAYpsD,SAAQ,SAACf,OACrBgB,EAAOuC,EAAIqU,QAAQ5X,GAEpBgB,GACFwL,EAAKjG,cAAcvF,EAAKN,YAAW,GAAOV,WAIvCotD,aAAarsD,SAAQ,SAACf,OACtBgB,EAAOuC,EAAIqU,QAAQ5X,GAEpBgB,GACFwL,EAAKjG,cAAcvF,EAAKN,YAAW,GAAOV,4CAK/B8D,EAAS9D,GAEnBA,EAAOzB,QAAQgX,SACjBzR,EAAQe,MAAMyO,SAAW,WACzBxP,EAAQe,MAAMU,KAAOvF,EAAOzB,QAAQgX,OAAOqL,OAE3C9c,EAAQ+B,UAAUC,IAAI,oBAEnB9F,EAAOzB,QAAQgX,OAAOo4C,MACxB7pD,EAAQ+B,UAAUC,IAAI,oBAAsB9F,EAAOzB,QAAQgX,OAAOjC,8CAK1DjS,EAAS4M,WACfrL,EAAQ,EAEHkG,EAAI,EAAGA,EAAImF,EAAOnF,IACvBzH,EAAQyH,GAAG3H,UACbyB,GAASvB,EAAQyH,GAAGnG,mBAIfC,SAtUmB2sB,GA0U5B29B,GAAcv6B,WAAa,oBC1UrB87B,4CAEO1wD,yCACLA,IAEDkkC,WAAaz9B,SAASC,cAAc,SACpCiK,KAAO,KAGPs3B,0BAA0B,MAAO,SAAU/9B,EAAKymD,UAAU/vD,cAC1DqnC,0BAA0B,MAAO,WAAY/9B,EAAK0mD,YAAYhwD,cAC9DqnC,0BAA0B,MAAO,WAAY/9B,EAAK2mD,YAAYjwD,kEAI9D+P,KAAO,QAEPuzB,WAAWp8B,UAAUC,IAAI,qCAGzB/H,MAAM6D,cAAclB,aAAamY,aAAa1a,KAAK8jC,WAAY9jC,KAAKJ,MAAM6D,cAAc2W,eAAegC,kBAEvGpb,UAAU,eAAgBhB,KAAK0wD,UAAUlwD,KAAKR,YAC9CgB,UAAU,eAAgBhB,KAAK2W,YAAYnW,KAAKR,YAEhDkpC,uBAAuBlpC,KAAKonB,QAAQ5mB,KAAKR,MAAO,wCAG1CoF,UACCpF,KAAKuQ,KAAK7E,QAAQtG,IACd,6CAIPpF,KAAKuQ,KAAKjN,2CAGR4kB,EAAU3X,eAChBA,KAAK3N,SAAQ,SAACwC,GAClBmL,EAAKzN,KAAKsC,MAGJmL,kCAIAA,OAGPlN,EAASkN,EAAK6S,MAAM,eAEf7S,KAAK3N,SAAQ,SAASwC,OACtB0K,EAAQzM,EAAOqI,QAAQtG,GAExB0K,GAAS,GACXzM,EAAO0M,OAAOD,EAAO,MAIhBzM,oCAGE+B,GACLA,EAAIhF,QAAQgX,OAcfpT,QAAQC,KAAK,yCAbbmB,EAAIhF,QAAQgX,QAAS,OAChB0sB,WAAW57B,YAAY9C,EAAI7C,cAChC6C,EAAI6V,aACJ7V,EAAIqZ,uBACC7e,MAAMgJ,WAAW2T,uBAEjBhM,KAAKzN,KAAKsC,QAEVqkC,aAAY,EAAO,gBAEnBknB,iDAOKvrD,GACCpF,KAAKuQ,KAAK7E,QAAQtG,GAE3BA,EAAIhF,QAAQgX,QAEdhS,EAAIhF,QAAQgX,QAAS,OAEhBs5C,UAAUtrD,QAEVxF,MAAMgJ,WAAW2T,uBAEjBktB,aAAY,EAAO,WAErBzpC,KAAKuQ,KAAKjN,aACPqtD,aAIN3sD,QAAQC,KAAK,4EAILmB,OACL0K,EAAQ9P,KAAKuQ,KAAK7E,QAAQtG,MAE3B0K,GAAS,EAAE,KACT8E,EAAQxP,EAAI7C,aAEbqS,EAAMnL,YACRmL,EAAMnL,WAAWxB,YAAY2M,QAGzBrE,KAAKR,OAAOD,EAAO,sCAIhB1K,mBACJmL,KAAK3N,SAAQ,SAACwC,EAAKuF,GACvB9C,EAAKjI,MAAMgJ,WAAWsY,SAAS9b,EAAKuF,aAvHdymB,GA4HzBk/B,GAAW97B,WAAa,iBC7HlBo8B,yBACQ9vC,yBACP4uB,OAAS5uB,OACT/e,KAAO,iBAEL,IAAIC,MAAMhC,KAAM,CACtBiC,IAAK,SAASC,EAAQC,EAAMC,eACC,IAAjBF,EAAOC,GACVD,EAAOC,GAEPD,EAAOwtC,OAAOmhB,aAAajxD,MAAMyC,wBAAwBC,OAAO,MAAOJ,EAAOwtC,OAAQvtC,wDAOzFnC,KAAK0vC,OAAOxuC,8CAIZlB,KAAK0vC,OAAOjpC,kDAIZzG,KAAK0vC,OAAO/pC,iDAIZ3F,KAAK0vC,OAAOtoB,SAAQ,iDAIpBpnB,KAAK0vC,OAAOzI,cAAa,oDAIzBjnC,KAAK0vC,OAAOnsC,QAASvD,KAAK0vC,OAAOnsC,OAAOR,0DAIxC/C,KAAK0vC,OAAO1sC,4CAId0sC,OAAOvsC,2CAIPusC,OAAOtsC,6CAIPssC,OAAOohB,6DAIL9wD,KAAK0vC,iDAIL1vC,KAAK0vC,OAAOmhB,aAAajxD,eC1D5BmxD,yBAEOF,EAActtD,EAAQ2yB,EAAOh1B,EAAKuF,EAAO48C,EAAW2N,kBAC1DH,aAAeA,OACfttD,OAASA,OACTrC,IAAMA,OACNg1B,MAAQA,OACRzvB,MAAQA,OACRwqD,aAAe/6B,EAAS26B,EAAaK,eAAe5tD,OAAS,OAC7DsjB,OAAS5mB,KAAKixD,aAAejxD,KAAKmxD,eAAiBnxD,KAAKoxD,aACxDrvD,KAAO,aACP4V,IAAMq5C,OACNzgD,KAAO,QACP62B,OAAS,QACT2oB,UAAY,QACZ1M,UAAYA,OACZ19C,SAAU,OACV0rD,iBAAkB,OAClBxrD,OAAS,OACTiZ,YAAc,OACdlI,aAAc,OACdjN,MAAQ,QACRiN,aAAc,OACdxW,QAAU,QACVkxD,cAAe,OAEftuD,QAAUguD,EAAWA,EAAShuD,aAAoD,IAAlC6tD,EAAajpB,UAAU1R,GAAyB26B,EAAajpB,UAAU1R,GAAS26B,EAAajpB,UAAU,QAEvJ7hC,UAAY,UAEZwrD,sBACAC,mBAEAC,6DAIFzxD,KAAK+vD,UAAUzsD,YACZysD,UAAUntD,SAAQ,SAASke,GAC/BA,EAAMkF,eAGFzV,KAAK3N,SAAQ,SAACwC,GACfA,EAAIhF,gBACCgF,EAAIhF,QAAQ0gB,cAKjBnb,SAAU,OACV2rD,cAAe,OACfD,iBAAkB,+CAInBK,EAAQrrD,SAASC,cAAc,OACnCorD,EAAMhqD,UAAUC,IAAI,wBAEfhC,QAAUU,SAASC,cAAc,YACjCX,QAAQ+B,UAAUC,IAAI,sBACtBhC,QAAQ+B,UAAUC,IAAI,wBACtBhC,QAAQ+B,UAAUC,IAAI,yBAA2B3H,KAAKk2B,YACtDvwB,QAAQa,aAAa,OAAQ,iBAE7B8qD,aAAejrD,SAASC,cAAc,YACtCgrD,aAAa5pD,UAAUC,IAAI,+BAC3B2pD,aAAappD,YAAYwpD,IAGqB,IAAhD1xD,KAAK6wD,aAAajxD,MAAM6B,QAAQkwD,aAAyB3xD,KAAK6wD,aAAajxD,MAAMoyB,UAAU,iBACxF6+B,aAAajxD,MAAMQ,QAAQwxD,QAAQC,sBAAsB7xD,6DAK3Dk2B,EAAQl2B,KAAKk2B,MAAQ,EACtBl2B,KAAK6wD,aAAaiB,eAAiB9xD,KAAK6wD,aAAaiB,cAAc57B,SAChE26B,aAAaiB,cAAc57B,GAAOtzB,SAAQ,SAAClB,GAC/CoI,EAAKioD,aAAarwD,EAAOw0B,uDAQxBl2B,KAAK6wD,aAAajxD,MAAM6B,QAAQuwD,qBACoC,SAAtDhyD,KAAK6wD,aAAajxD,MAAM6B,QAAQuwD,mBAAgChyD,KAAKsxD,aAAetxD,KAAK2F,SAE3FiH,iBAAiB,SAAS,SAACC,GACxCA,EAAEiB,kBACFjB,EAAEgpC,2BACFhuC,EAAKipD,2DAKKmB,EAAS/7B,OACjBg8B,EAAWh8B,EAAQ,IAAM+7B,EACzBnxC,EAAQ,IAAIiwC,EAAM/wD,KAAK6wD,aAAc7wD,KAAMk2B,EAAO+7B,EAAUjyD,KAAK6wD,aAAaK,eAAeh7B,GAAOzvB,MAAOzG,KAAK6wD,aAAasB,gBAAgBj8B,IAAUl2B,KAAK6wD,aAAasB,gBAAgB,KAAInyD,KAAK2X,KAAM3X,KAAK2X,IAAIyvB,OAAO8qB,SAEvN9qB,OAAO8qB,GAAYpxC,OACnBivC,UAAUjtD,KAAKge,0CAGN1b,OAEV8wB,EAAQl2B,KAAKk2B,MAAQ,KAEtBl2B,KAAKixD,aAAa,KAChBgB,EAAUjyD,KAAK6wD,aAAaK,eAAeh7B,GAAO3E,KAAKnsB,EAAIC,WAC/D6sD,EAAWh8B,EAAQ,IAAM+7B,EAEtBjyD,KAAK6wD,aAAaiB,eAAiB9xD,KAAK6wD,aAAaiB,cAAc57B,GAClEl2B,KAAKonC,OAAO8qB,SACT9qB,OAAO8qB,GAAUtrC,OAAOxhB,IAG1BpF,KAAKonC,OAAO8qB,SACVH,aAAaE,EAAS/7B,QAGvBkR,OAAO8qB,GAAUtrC,OAAOxhB,qCAKxBA,QACFmL,KAAKzN,KAAKsC,GACfA,EAAIhF,QAAQ0gB,MAAQ9gB,uCAGXoF,EAAKzB,EAAIC,OACd/D,EAAOG,KAAKoyD,eAAe,IAE/BhtD,EAAIoZ,WAAW3e,OAEXud,EAAUpd,KAAKuQ,KAAK7E,QAAQ/H,GAE7ByZ,GAAW,EACVxZ,OACG2M,KAAKR,OAAOqN,EAAQ,EAAG,EAAGhY,QAE1BmL,KAAKR,OAAOqN,EAAS,EAAGhY,GAG3BxB,OACG2M,KAAKzN,KAAKsC,QAEVmL,KAAKiD,QAAQpO,GAIpBA,EAAIhF,QAAQ0gB,MAAQ9gB,UAEfqyD,8BAEFryD,KAAK6wD,aAAajxD,MAAMoyB,UAAU,gBAAiE,SAA/ChyB,KAAK6wD,aAAajxD,MAAM6B,QAAQ0jC,kBACjF0rB,aAAajxD,MAAMQ,QAAQ+kC,YAAYa,YAAYhmC,WAGpD6wD,aAAayB,iBAAgB,wCAGtBlrD,GACTpH,KAAKsxD,oBACFA,aAAa5qD,MAAM2U,WAAajU,OAEhC2oD,UAAUntD,SAAQ,SAASiN,GAC/BA,EAAM0iD,aAAanrD,2CAKVhC,2CAGGvF,UACXG,KAAKyG,MACP5G,EAAKG,KAAKyG,OAASzG,KAAKkB,IAExB8C,QAAQC,KAAK,+FAGXjE,KAAKuD,SACP1D,EAAOG,KAAKuD,OAAO6uD,eAAevyD,IAG5BA,oCAGEuF,OACL0K,EAAQ9P,KAAKuQ,KAAK7E,QAAQtG,GAC1B8F,EAAK9F,EAAI7C,aAGVuN,GAAS,QACNS,KAAKR,OAAOD,EAAO,GAGrB9P,KAAK6wD,aAAajxD,MAAM6B,QAAQ+wD,aAAgBxyD,KAAKuQ,KAAKjN,QAU1D4H,EAAGzB,YACLyB,EAAGzB,WAAWxB,YAAYiD,QAGtBmnD,8BAEFryD,KAAK6wD,aAAajxD,MAAMoyB,UAAU,gBAAiE,SAA/ChyB,KAAK6wD,aAAajxD,MAAM6B,QAAQ0jC,kBACjF0rB,aAAajxD,MAAMQ,QAAQ+kC,YAAYa,YAAYhmC,QAhBtDA,KAAKuD,YACFA,OAAOkvD,YAAYzyD,WAEnB6wD,aAAa4B,YAAYzyD,WAG1B6wD,aAAayB,iBAAgB,wCAgBxBxxC,OAEXhR,EADIoiD,EAAWpxC,EAAMoV,MAAQ,IAAMpV,EAAM5f,IAGtClB,KAAKonC,OAAO8qB,YACPlyD,KAAKonC,OAAO8qB,IAEnBpiD,EAAQ9P,KAAK+vD,UAAUrkD,QAAQoV,KAEnB,QACNivC,UAAUhgD,OAAOD,EAAO,GAG1B9P,KAAK+vD,UAAUzsD,SACftD,KAAKuD,YACFA,OAAOkvD,YAAYzyD,WAEnB6wD,aAAa4B,YAAYzyD,kDAMhB0yD,OACbrvD,EAAS,UAEbA,EAAOP,KAAK9C,WAEP2yD,UAEF3yD,KAAKgD,QACJhD,KAAK+vD,UAAUzsD,YACZysD,UAAUntD,SAAQ,SAASke,GAC/Bzd,EAASA,EAAOia,OAAOwD,EAAM8xC,kBAAkBF,SAI5CA,GAAyD,SAA/C1yD,KAAK6wD,aAAajxD,MAAM6B,QAAQ0jC,aAA0BnlC,KAAK6wD,aAAajxD,MAAMoyB,UAAU,gBAAkBhyB,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY0tB,gBACpK7yD,KAAK2J,MAAM3C,WACR2C,MAAM3C,IAAI8rD,qBACVnpD,MAAM3C,IAAIkY,oBAGXvV,MAAM3C,IAAMhH,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY4tB,eAAe/yD,KAAKuQ,MACjFlN,EAAOP,KAAK9C,KAAK2J,MAAM3C,MAGxB3D,EAASA,EAAOia,OAAOtd,KAAKuQ,OAExBmiD,GAAyD,SAA/C1yD,KAAK6wD,aAAajxD,MAAM6B,QAAQ0jC,aAA2BnlC,KAAK6wD,aAAajxD,MAAMoyB,UAAU,gBAAkBhyB,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY6tB,mBACrKhzD,KAAK2J,MAAM1C,cACR0C,MAAM1C,OAAO6rD,qBACbnpD,MAAM1C,OAAOiY,oBAGdvV,MAAM1C,OAASjH,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY8tB,kBAAkBjzD,KAAKuQ,MACvFlN,EAAOP,KAAK9C,KAAK2J,MAAM1C,UAIrBjH,KAAK+vD,UAAUzsD,QAAyD,SAA/CtD,KAAK6wD,aAAajxD,MAAM6B,QAAQ0jC,aAEzDnlC,KAAK6wD,aAAajxD,MAAMoyB,UAAU,kBAEhC0gC,GAAU1yD,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY0tB,gBACtD7yD,KAAK2J,MAAM3C,WACR2C,MAAM3C,IAAI8rD,qBACVnpD,MAAM3C,IAAIkY,eAGblf,KAAK6wD,aAAajxD,MAAM6B,QAAQyxD,4BAC7BvpD,MAAM3C,IAAMhH,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY4tB,eAAe/yD,KAAKuQ,MACjFlN,EAAOP,KAAK9C,KAAK2J,MAAM3C,QAIrB0rD,GAAU1yD,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY6tB,mBACtDhzD,KAAK2J,MAAM1C,cACR0C,MAAM1C,OAAO6rD,qBACbnpD,MAAM1C,OAAOiY,eAGhBlf,KAAK6wD,aAAajxD,MAAM6B,QAAQyxD,4BAC7BvpD,MAAM1C,OAASjH,KAAK6wD,aAAajxD,MAAMQ,QAAQ+kC,YAAY8tB,kBAAkBjzD,KAAKuQ,MACvFlN,EAAOP,KAAK9C,KAAK2J,MAAM1C,WAQrB5D,kCAGAL,EAASob,OACZ/a,EAAS,eAERsvD,YAED3vD,GAAYA,GAAWhD,KAAKgD,eAC1BuN,KAAK3N,SAAQ,SAACwC,GAClB/B,EAAOP,KAAKsC,EAAIC,QAAQ+Y,GAAa,YAIhC/a,4CAIH8vD,EAAQ,SAETnzD,KAAK+vD,UAAUzsD,YACZysD,UAAUntD,SAAQ,SAACke,GACvBqyC,GAASryC,EAAM6uB,iBAGhBwjB,EAAQnzD,KAAKuQ,KAAKjN,OAEZ6vD,6CAIJnzD,KAAKgD,aACFI,YAEAD,2CAKDH,SAAU,EAE0C,WAAtDhD,KAAK6wD,aAAajxD,MAAMgJ,WAAW62C,iBAAiCz/C,KAAK6wD,aAAajxD,MAAM6B,QAAQikB,gBA0BjGmrC,aAAayB,iBAAgB,SAxB7B3sD,QAAQ+B,UAAUmN,OAAO,2BAE3B7U,KAAK+vD,UAAUzsD,YACZysD,UAAUntD,SAAQ,SAACke,GAEZA,EAAM8xC,oBAEZhwD,SAAQ,SAACwC,GACbA,EAAI0tD,2BAKDviD,KAAK3N,SAAQ,SAACwC,OACdwP,EAAQxP,EAAI7C,aAChBqS,EAAMnL,WAAWxB,YAAY2M,WAI1Bi8C,aAAajxD,MAAMgJ,WAAWqf,eAAejoB,KAAK6wD,aAAayB,kBAAmBtyD,KAAK6wD,aAAauC,wBAEpGvC,aAAajxD,MAAMgJ,WAAWyqD,yCAM/BxC,aAAajxD,MAAM4B,eAAeH,SAAS,yBAA0BrB,KAAK+C,gBAAgB,0CAI1FC,SAAU,EAE0C,WAAtDhD,KAAK6wD,aAAajxD,MAAMgJ,WAAW62C,iBAAiCz/C,KAAK6wD,aAAajxD,MAAM6B,QAAQikB,gBA+BjGmrC,aAAayB,iBAAgB,OA/B+E,MAE5G3sD,QAAQ+B,UAAUC,IAAI,+BAEvB2rD,EAAOtzD,KAAKkG,kBAEblG,KAAK+vD,UAAUzsD,YACZysD,UAAUntD,SAAQ,SAACke,GACZA,EAAM8xC,oBAEZhwD,SAAQ,SAACwC,OACTwP,EAAQxP,EAAI7C,aAChB+wD,EAAK7pD,WAAWiR,aAAa9F,EAAO0+C,EAAKl3C,aACzChX,EAAI6V,aACJq4C,EAAO1+C,aAKJrE,KAAK3N,SAAQ,SAACwC,OACdwP,EAAQxP,EAAI7C,aAChB+wD,EAAK7pD,WAAWiR,aAAa9F,EAAO0+C,EAAKl3C,aACzChX,EAAI6V,aACJq4C,EAAO1+C,UAIJi8C,aAAajxD,MAAMgJ,WAAWqf,eAAejoB,KAAK6wD,aAAayB,kBAAmBtyD,KAAK6wD,aAAauC,wBAEpGvC,aAAajxD,MAAMgJ,WAAWyqD,wCAK/BxC,aAAajxD,MAAM4B,eAAeH,SAAS,yBAA0BrB,KAAK+C,gBAAgB,yCAI3FlD,EAAO,GAEe,mBAAhBG,KAAKgD,eAETuN,KAAK3N,SAAQ,SAASwC,GAC1BvF,EAAKiD,KAAKsC,EAAIC,mBAGVrC,QAAUhD,KAAKgD,QAAQhD,KAAKkB,IAAKlB,KAAK2vC,cAAe9vC,EAAMG,KAAK+C,qDAI3DqC,OACP+N,GAAQ,SACTnT,KAAK+vD,UAAUzsD,YACZysD,UAAUntD,SAAQ,SAASke,OAC3Bpc,EAASoc,EAAMolB,YAAY9gC,GAE5BV,IACFyO,EAAQzO,MAIP1E,KAAKuQ,KAAK2G,MAAK,SAAS3D,UACnBA,IAASnO,OAEhB+N,EAAQnT,MAIHmT,uCAGKpN,OACR1C,EAAS,eAER0sD,UAAUntD,SAAQ,SAASiN,GAC/BxM,EAAOP,KAAKiD,EAAY8J,EAAM9M,eAAiB8M,MAGzCxM,kCAGAkwD,OACHlwD,EAAS,eAERkN,KAAK3N,SAAQ,SAASwC,GAC1B/B,EAAOP,KAAKywD,EAAYnuD,EAAIrC,eAAiBqC,MAGvC/B,4DAIHxD,EAAO,YAEN0Q,KAAK3N,SAAQ,SAASwC,GAC1BvF,EAAKiD,KAAKsC,EAAIC,mBAGVgsD,gBAAkBrxD,KAAKqjD,UAAUrjD,KAAKkB,IAAKlB,KAAK2vC,cAAe9vC,EAAMG,KAAK+C,gBAEzE/C,KAAK2F,QAAQqC,iBAAiBrC,QAAQsC,YAAYjI,KAAK2F,QAAQqC,YAElC,iBAAzBhI,KAAKqxD,qBACT1rD,QAAQmC,UAAY9H,KAAKqxD,qBAEzB1rD,QAAQuC,YAAYlI,KAAKqxD,sBAG1B1rD,QAAQ+U,aAAa1a,KAAKsxD,aAActxD,KAAK2F,QAAQqC,kDAGnDwjB,yDAAO,UACdA,EAAKhY,QAAQxT,KAAKkB,KACflB,KAAKuD,aACFA,OAAOiwD,QAAQhoC,GAEdA,8CAMAxrB,KAAKqxD,gBAAkBrxD,KAAK2F,QAAU3F,KAAKkG,iEAI7CsrD,aAAc,OAEdmB,UAEF3yD,KAAKgD,aACF2C,QAAQ+B,UAAUC,IAAI,gCAEtBhC,QAAQ+B,UAAUmN,OAAO,+BAG3B,IAAIlK,EAAI,EAAGA,EAAI3K,KAAK2F,QAAQ8tD,WAAWnwD,SAAUqH,OAC/ChF,QAAQ8tD,WAAW9oD,GAAGlB,WAAWxB,YAAYjI,KAAK2F,QAAQ8tD,WAAW9oD,gBAGtE0nD,8BAIEryD,KAAK2F,gDAIR3F,KAAK2F,SAAW3F,KAAK2F,QAAQ8D,iBAC3B9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,wDAMrC+Z,UAAU1f,KAAK2F,QAAQiJ,iDAGlBvG,GACNrI,KAAK4W,cAAevO,SAClBoW,uBACA7H,aAAc,+CAKfA,aAAc,OACd/Q,OAAS,EAEXqM,EAAQsD,UAAUxV,KAAK2F,eACpBsV,YAAW,qCAIRpV,GACN7F,KAAK6F,QAAUA,SACZA,OAASA,OACTiZ,YAAc9e,KAAK2F,QAAQ4D,yDAM1BvJ,KAAK8e,sDAIL9e,yQAeHA,KAAK+F,iBACHA,UAAY,IAAI6qD,GAAe5wD,OAG9BA,KAAK+F,mBCplBR2tD,4CAEO9zD,yCACLA,IAEDsxD,gBAAiB,IACjBtpB,UAAY,CAAC,kBAAkB,MAC/BuqB,gBAAkB,CAAC,iBAAkB,OACrCpC,UAAY,KACZ+B,eAAgB,IAChB1qB,OAAS,KACT/gB,aAAe,IAEfstC,eAAiB7pD,EAAKsd,QAAQ5mB,aAG9B6zB,oBAAoB,WAAW,KAC/BA,oBAAoB,kBAAkB,KACtCA,oBAAoB,eAAe,KACnCA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,eAAe,KACnCA,oBAAoB,mBAAoB,QACxCA,oBAAoB,uBAAwB,QAC5CA,oBAAoB,wBAAyB,QAC7CA,oBAAoB,sBAAuB,QAC3CA,oBAAoB,qBAAsB,WAC1CA,oBAAoB,wBAAwB,KAG5Cc,sBAAsB,aAAcrrB,EAAK8pD,WAAWpzD,cACpD20B,sBAAsB,iBAAkBrrB,EAAK+pD,eAAerzD,cAC5D20B,sBAAsB,oBAAqBrrB,EAAKgqD,kBAAkBtzD,cAClE20B,sBAAsB,iBAAkBrrB,EAAKiqD,eAAevzD,cAC5D20B,sBAAsB,YAAarrB,EAAKkqD,cAAcxzD,cACtD20B,sBAAsB,iBAAkBrrB,EAAKmqD,mBAAmBzzD,cAGhEqnC,0BAA0B,MAAO,WAAY/9B,EAAKoqD,YAAY1zD,6DAKhER,KAAKJ,MAAM6B,QAAQmjC,UAElB5kC,KAAKJ,MAAM6B,QAAQ0yD,6BAChBnzD,UAAU,qBAAsBhB,KAAKo0D,YAAY5zD,KAAKR,YACtDgB,UAAU,mBAAoBhB,KAAKq0D,mBAAmB7zD,KAAKR,MAAO,SAGnEgB,UAAU,cAAehB,KAAKs0D,oBAAoB9zD,KAAKR,YAEvDgB,UAAU,eAAgBhB,KAAKu0D,YAAY/zD,KAAKR,YAChDgB,UAAU,cAAehB,KAAKqkC,YAAY7jC,KAAKR,YAC/CgB,UAAU,oBAAqBhB,KAAKw0D,cAAch0D,KAAKR,YACvDgB,UAAU,YAAahB,KAAKgmB,KAAKxlB,KAAKR,YACtCgB,UAAU,aAAchB,KAAKqkC,YAAY7jC,KAAKR,YAC9CgB,UAAU,aAAchB,KAAKy0D,UAAUj0D,KAAKR,YAC5CgB,UAAU,mBAAoBhB,KAAK00D,eAAel0D,KAAKR,YAEvDgB,UAAU,cAAehB,KAAK20D,UAAUn0D,KAAKR,YAE7CgB,UAAU,sBAAuBhB,KAAK40D,kBAAkBp0D,KAAKR,YAE7DkpC,uBAAuBlpC,KAAK2zD,eAAgB,SAE5C/8C,aAAc,+DAKjB5W,KAAKJ,MAAM6B,QAAQmjC,QAAQ,KACzBA,EAAU5kC,KAAKJ,MAAM6B,QAAQmjC,QACjCgD,EAAY5nC,KAAKJ,MAAM6B,QAAQozD,eAC/BrlB,EAAcxvC,KAAKJ,MAAM6B,QAAQ+tC,oBAE5BsiB,cAAgB9xD,KAAKJ,MAAM6B,QAAQ+wD,YAErCx/C,MAAMC,QAAQ2xB,IAAY5xB,MAAMC,QAAQu8B,IAAgB5K,EAAQthC,OAASksC,EAAYlsC,QACvFU,QAAQC,KAAK,sFAGTkuD,gBAAkB,CAAC,iBAAkB,UACrCvqB,UAAY,CAAC,kBAAkB,SAE/B35B,SAAS,eAAe,SAAC6mD,EAAWlgC,GACxC/sB,EAAKsqD,gBAAgB,GAAK,SAACzwD,EAAOyxD,EAAOtzD,eACf,IAAV6B,EAAwB,GAAKA,GAAS,UAAYyxD,EAAQ,KAAkB,IAAVA,EAAe2B,EAAYlgC,EAAKwS,OAAO2tB,OAAS,oBAI9H7D,eAAiB,GAEnBl+C,MAAMC,QAAQ2xB,IAAYA,EACzB5kC,KAAKJ,MAAMoyB,UAAU,gBAAoD,SAAlChyB,KAAKJ,MAAM6B,QAAQ0jC,aAA4D,QAAlCnlC,KAAKJ,MAAM6B,QAAQ0jC,kBACpGvlC,MAAMQ,QAAQ+kC,YAAY6vB,sBAG7Bh1D,KAAKJ,MAAMoyB,UAAU,gBAAoD,SAAlChyB,KAAKJ,MAAM6B,QAAQ0jC,YAEjDnlC,KAAKJ,MAAM6D,cAAcwxD,iBAE/BryD,SAAQ,SAACuU,GACVA,EAAI5P,WAAW09B,SACjBp9B,EAAKjI,MAAMQ,QAAQ+kC,YAAYK,mBAG7BruB,EAAI5P,WAAW29B,YACjBr9B,EAAKjI,MAAMQ,QAAQ+kC,YAAYO,yBAM/B1yB,MAAMC,QAAQ2xB,KACjBA,EAAU,CAACA,IAGZA,EAAQhiC,SAAQ,SAACke,EAAOnW,OACnBuqD,EAAYrzD,EAGfqzD,EADkB,mBAATp0C,EACIA,GAEbjf,EAASgG,EAAKjI,MAAM6D,cAAck0C,iBAAiB72B,IAGrC,SAASjhB,UACdgC,EAAOuE,cAAcvG,IAGhB,SAASA,UACdA,EAAKihB,IAKfjZ,EAAKqpD,eAAepuD,KAAK,CACxB2D,MAAwB,mBAAVqa,GAA+BA,EAC7CyQ,KAAK2jC,EACLnqC,SAAOljB,EAAKiqD,eAAgBjqD,EAAKiqD,cAAcnnD,QAI9Ci9B,IACE50B,MAAMC,QAAQ20B,KACjBA,EAAY,CAACA,IAGdA,EAAUhlC,SAAQ,SAACszB,YAId0R,UAAYA,GAGf4H,SACG2iB,gBAAkBn/C,MAAMC,QAAQu8B,GAAeA,EAAc,CAACA,uCAK5Dj/B,EAAM4kD,OACXr0C,EAAQ9gB,KAAK6mC,WAAU,GAAO,UAElCsuB,EAAUryD,KAAKge,EAAMsG,SAAQ,GAAO,IAE7B+tC,kDAIHjqD,EAAKlL,KAAKJ,MAAMgJ,WAAWwL,aAC3B7D,EAAOvQ,KAAKJ,MAAMgJ,WAAWmQ,iBAEjCxI,EAAOA,EAAKqa,QAAO,SAACxlB,SACC,UAAbA,EAAIrD,QAGZmJ,EAAGxE,MAAMZ,SAAYyK,EAAKjN,OAAsD,GAA7CtD,KAAKJ,MAAM6D,cAAce,WAAa,4CAS3DY,EAAK0K,EAAO9I,QACrBouD,iBAAiBhwD,OAElB6gC,EAAY7gC,EAAIhF,QAAQ0gB,MAAMvQ,YAE/B01B,EAAU3iC,OAAS,KACjBwM,GAAUA,IAAsC,GAA7Bm2B,EAAUv6B,QAAQoE,GACrC9I,EACCi/B,EAAU,KAAO7gC,IACnB0K,EAAQm2B,EAAU,QACbrmC,MAAMgJ,WAAWoe,eAAe5hB,EAAIhF,QAAQ0gB,MAAMvQ,KAAMnL,EAAK0K,GAAQ9I,IAGxEi/B,EAAUA,EAAU3iC,OAAQ,KAAO8B,IACrC0K,EAAQm2B,EAAUA,EAAU3iC,OAAQ,QAC/B1D,MAAMgJ,WAAWoe,eAAe5hB,EAAIhF,QAAQ0gB,MAAMvQ,KAAMnL,EAAK0K,GAAQ9I,SAIvEpH,MAAMgJ,WAAWoe,eAAe5hB,EAAIhF,QAAQ0gB,MAAMvQ,KAAMnL,EAAK0K,GAAQ9I,IAIrE8I,8CAIFzO,SAAS,oDAOJ+lC,QACLxnC,MAAM6B,QAAQmjC,QAAUwC,EACzBpnC,KAAK4W,iBAGH09C,2BAFAr5C,kBAKDwuB,mBAEAie,sDAGS8K,QACT5yD,MAAM6B,QAAQ+wD,YAAcA,OAC5B8B,2BACA7qB,mBAEAie,yDAGY38B,QACZnrB,MAAM6B,QAAQozD,eAAiB9pC,OAC/BupC,sBAEFt0D,KAAKJ,MAAM6B,QAAQmjC,cAChB6E,mBAEAie,gBAEL1jD,QAAQC,KAAK,uGAIA8mB,QACTnrB,MAAM6B,QAAQ+tC,YAAczkB,OAC5BupC,sBAEFt0D,KAAKJ,MAAM6B,QAAQmjC,cAChB6E,mBAEAie,gBAEL1jD,QAAQC,KAAK,sGAID8mB,UACN/qB,KAAK6mC,WAAU,uDAKf7mC,KAAKJ,MAAM6B,QAAQmjC,QAC1B5kC,KAAKq1D,iBAAmBr1D,KAAKqF,8CAQlBD,WACJA,EAAIhF,QAAQ0gB,OAAQ1b,EAAIhF,QAAQ0gB,MAAM/d,iDAOpC+Z,EAAMnZ,EAAIC,IACfA,GAASD,aAAcotD,KAC1BptD,EAAK3D,KAAKJ,MAAMgJ,WAAWyX,eAAevD,IAASnZ,OAGhD2xD,EAAU3xD,aAAcotD,GAAQptD,EAAKA,EAAGvD,QAAQ0gB,MAChDy0C,EAAYz4C,aAAgBi0C,GAAQj0C,EAAOA,EAAK1c,QAAQ0gB,MAEzDw0C,IAAYC,OACT31D,MAAMgJ,WAAWoe,eAAesuC,EAAQ/kD,KAAMuM,EAAMnZ,EAAIC,IAE1D2xD,GACFA,EAAUC,UAAU14C,GAGrBw4C,EAAQG,UAAU34C,EAAMnZ,EAAIC,wCAKlBwB,GAERA,EAAIhF,QAAQ0gB,OACd1b,EAAIhF,QAAQ0gB,MAAM00C,UAAUpwD,uCAKlBA,QACNktD,iBAAgB,uCAGVzvD,QACNwxD,mBAAmBxxD,EAAKuC,6CAId0K,QACVuW,aAAevW,mDAIb9P,KAAKqmB,6CAIL9V,UACJvQ,KAAKJ,MAAM6B,QAAQmjC,SAAW5kC,KAAKkxD,eAAe5tD,aAE/CoF,iBAAiB,qBAEjBgtD,eAAenlD,GAEjBvQ,KAAK2I,mBAAmB,qBACrBD,iBAAiB,cAAe1I,KAAK6mC,WAAU,IAG9C7mC,KAAKsyD,mBAGL/hD,EAAK6S,MAAM,qCAIVrd,OACL4vD,EAAkB,eAEjB5F,UAAUntD,SAAQ,SAASke,GAC/B60C,EAAgB7yD,KAAKiD,EAAY+a,EAAM/d,eAAiB+d,MAGlD60C,yCAGO70C,cACV60C,EAAkB,UAElB70C,IACHA,EAAQ9gB,MAGT8gB,EAAMivC,UAAUntD,SAAQ,SAACiN,GACrBA,EAAMkgD,UAAUzsD,OAClBqyD,EAAkBA,EAAgBr4C,OAAOxQ,EAAKq5B,eAAet2B,IAE7D8lD,EAAgB7yD,KAAK+M,MAIhB8lD,sCAIF5F,UAAUntD,SAAQ,SAASke,GAC/BA,EAAMkF,oDAIU+pC,cACb6F,EAAgB,UAEpB7F,EAAUntD,SAAQ,SAACke,OACd0uB,EAAc,CAClBA,MAAoB,EACpBA,SAAuB,EACvBA,cAA4B,IACxBjF,EAAY,GAEZzpB,EAAMmwC,cACT1mB,EAAYh9B,EAAKsoD,kBAAkB/0C,EAAMivC,WAEzCvgB,EAAYtZ,MAAQpV,EAAMoV,MAC1BsZ,EAAYsmB,SAAWvrB,EAAUjnC,OAASwd,EAAMivC,UAAUzsD,OAC1DksC,EAAYumB,cAAgBj1C,EAAMuiC,UAAUviC,EAAM5f,IAAKsuC,EAAYsmB,SAAUh1C,EAAMvQ,KAAMuQ,GAEzF80C,EAAc9yD,KAAK0sC,GACnBomB,EAAgBA,EAAct4C,OAAOitB,KAIrCiF,EAAYtZ,MAAQpV,EAAMoV,MAC1BsZ,EAAYumB,cAAgBj1C,EAAMuiC,UAAUviC,EAAM5f,IAAK4f,EAAMvQ,KAAKjN,OAAQwd,EAAMvQ,KAAMuQ,GACtF0uB,EAAYsmB,SAAWh1C,EAAMsG,UAAU9jB,OAEvCsyD,EAAc9yD,KAAK0sC,GAEnB1uB,EAAMsG,UAAUxkB,SAAQ,SAACwC,GACxBwwD,EAAc9yD,KAAKsC,EAAIC,QAAQ,gBAK3BuwD,kDAKA51D,KAAK61D,kBAAkB71D,KAAK+vD,+CAGxB3qD,OACP+N,GAAQ,SAETnT,KAAKyB,QAAQ,cACf2D,EAAMpF,KAAKJ,MAAMQ,QAAQ2kC,SAAS0F,kBAAkBrlC,SAGhD2qD,UAAUntD,SAAQ,SAACke,OACnBpc,EAASoc,EAAMolB,YAAY9gC,GAE5BV,IACFyO,EAAQzO,MAIHyO,+CAIAnT,KAAK+vD,UAAUzsD,8CAGRiN,cACVylD,EAAYh2D,KAAKonC,YAEhBA,OAAS,QACT2oB,UAAY,GAEd/vD,KAAK8xD,eAAiB9xD,KAAK8xD,cAAc,SACtCA,cAAc,GAAGlvD,SAAQ,SAAClB,GAC9BsM,EAAKioD,YAAYv0D,EAAO,EAAGs0D,MAG5BzlD,EAAK3N,SAAQ,SAACwC,GACb4I,EAAKkoD,yBAAyB9wD,EAAK4wD,OAGpCzlD,EAAK3N,SAAQ,SAACwC,GACb4I,EAAKonD,iBAAiBhwD,EAAK4wD,0CAKlB/D,EAAS/7B,EAAO8/B,OAE3Bl1C,EADIoxC,EAAWh8B,EAAQ,IAAM+7B,EAG7B+D,EAAYA,GAAa,GAEzBl1C,EAAQ,IAAIiwC,GAAM/wD,MAAM,EAAOk2B,EAAO+7B,EAASjyD,KAAKkxD,eAAe,GAAGzqD,MAAOzG,KAAKmyD,gBAAgB,GAAI6D,EAAU9D,SAE3G9qB,OAAO8qB,GAAYpxC,OACnBivC,UAAUjtD,KAAKge,oDAGI1b,EAAK4wD,OAE7B9D,EAAW,KADGlyD,KAAKkxD,eAAe,GAAG3/B,KAAKnsB,EAAIC,WAG3CrF,KAAKonC,OAAO8qB,SACT9qB,OAAO8qB,GAAUtrC,OAAOxhB,4CAIdA,EAAK4wD,OACjB/D,EAAUjyD,KAAKkxD,eAAe,GAAG3/B,KAAKnsB,EAAIC,WAC9C8wD,GAAkBn2D,KAAKonC,OAAO,KAAO6qB,UAElCkE,QACGF,YAAYhE,EAAS,EAAG+D,QAGzB5uB,OAAO,KAAO6qB,GAASrrC,OAAOxhB,IAE3B+wD,6CAGU/wD,MACF,QAAbA,EAAIrD,KAAe,KACjBq0D,EAAchxD,EAAIhF,QAAQ0gB,MAC9Bu1C,EAAeD,EAAY5C,UAC3B8C,EAAet2D,KAAKu2D,gBAAgBnxD,GAIpBixD,EAAa/yD,QAAUgzD,EAAahzD,QAAW+yD,EAAaG,OAAM,SAAC7wD,EAASmK,UACpFnK,IAAY2wD,EAAaxmD,QAKhCsmD,EAAYZ,UAAUpwD,QACjBgwD,iBAAiBhwD,EAAKpF,KAAKonC,aAC3BqC,aAAY,6CAKJrkC,OACXqxD,EAAY,GAAIzpC,EAAU5nB,EAAIC,sBAE7B6rD,eAAetuD,SAAQ,SAAC8zD,GAC5BD,EAAU3zD,KAAK4zD,EAAQnlC,KAAKvE,OAGtBypC,0CAGQpuD,OACXhF,EAAS,eAGR0sD,UAAUntD,SAAQ,SAACke,GACvBzd,EAASA,EAAOia,OAAOwD,EAAM8xC,wBAG3BvqD,QACGohC,aAAY,EAAMzpC,KAAK2zD,gBAGtBtwD,wCAGM+D,GAC8B,YAAxCpH,KAAKJ,MAAM6B,QAAQuZ,mBACrB5T,GAAQpH,KAAKJ,MAAM6D,cAAcoB,SAAS0R,aAG3CnP,GAAc,UAET2oD,UAAUntD,SAAQ,SAACke,GACvBA,EAAMyxC,aAAanrD,0CAIT0Z,OAEXhR,EADIoiD,EAAWpxC,EAAMoV,MAAQ,IAAMpV,EAAM5f,IAGtClB,KAAKonC,OAAO8qB,YACPlyD,KAAKonC,OAAO8qB,IAEnBpiD,EAAQ9P,KAAK+vD,UAAUrkD,QAAQoV,KAEnB,QACNivC,UAAUhgD,OAAOD,EAAO,WA/jBTshB,GAqkBxBsiC,GAAUl/B,WAAa,gBCnkBjBmiC,4CAEO/2D,yCACLA,IAEDg3D,QAAU,KACV9mD,OAAS,IAETukB,oBAAoB,WAAW,oDAIjCr0B,KAAKJ,MAAM6B,QAAQm1D,eAChB51D,UAAU,qBAAsBhB,KAAKo0D,YAAY5zD,KAAKR,YACtDgB,UAAU,cAAehB,KAAK62D,sBAAsBr2D,KAAKR,YACzDgB,UAAU,aAAchB,KAAK82D,WAAWt2D,KAAKR,YAC7CgB,UAAU,YAAahB,KAAK8X,MAAMtX,KAAKR,YACvCgB,UAAU,YAAahB,KAAK+2D,SAASv2D,KAAKR,YAC1CgB,UAAU,WAAYhB,KAAKg3D,SAASx2D,KAAKR,aAG1Cm1B,sBAAsB,OAAQn1B,KAAKi3D,KAAKz2D,KAAKR,YAC7Cm1B,sBAAsB,OAAQn1B,KAAKk3D,KAAK12D,KAAKR,YAC7Cm1B,sBAAsB,qBAAsBn1B,KAAKm3D,mBAAmB32D,KAAKR,YACzEm1B,sBAAsB,qBAAsBn1B,KAAKo3D,mBAAmB52D,KAAKR,YACzEm1B,sBAAsB,eAAgBn1B,KAAK8X,MAAMtX,KAAKR,wCAGnD8c,EAAMnZ,EAAIC,QACb8yB,OAAO,UAAW5Z,EAAM,CAACu6C,QAAQr3D,KAAKJ,MAAMgJ,WAAW0V,eAAexB,GAAOw6C,MAAMt3D,KAAKJ,MAAMgJ,WAAW0V,eAAe3a,GAAKA,GAAGA,EAAIC,MAAMA,qCAGvIwB,EAAKvF,EAAM2mB,EAAK1W,QACnB4mB,OAAO,SAAUtxB,EAAK,CAACvF,KAAKA,EAAM2mB,IAAIA,EAAK1W,MAAMA,uCAG5C1K,OACN0K,EAAOS,EAERvQ,KAAKJ,MAAM6B,QAAQmjC,SAGrB90B,GADAS,EAAOnL,EAAIrC,eAAew0D,WAAWhnD,MACxB7E,QAAQtG,MAGpB0K,EAAQS,EAAKT,EAAM,KAGpBA,EAAQ1K,EAAIxF,MAAMgJ,WAAW+X,YAAYvb,MAGxC0K,EAAQ1K,EAAIxF,MAAMgJ,WAAW2H,KAAKT,EAAM,SAIrC4mB,OAAO,YAAatxB,EAAK,CAACvF,KAAKuF,EAAIC,UAAWmhB,KAAK1W,EAAOA,MAAMA,wCAG1DjN,QACN6zB,OAAO,WAAY7zB,EAAM,CAAC+C,SAAS/C,EAAK+C,SAAU4xD,SAAS30D,EAAKnB,6CAIhEk1D,QAAU,QACV9mD,OAAS,iCAGR/N,EAAMgE,EAAWlG,QAClB+2D,QAAU52D,KAAK42D,QAAQxzC,MAAM,EAAGpjB,KAAK8P,MAAQ,QAE7C8mD,QAAQ9zD,KAAK,CACjBf,KAAKA,EACLgE,UAAUA,EACVlG,KAAKA,SAGDiQ,4DAIE9P,KAAK8P,MAAQ,sDAIb9P,KAAK42D,QAAQtzD,QAAUtD,KAAK8P,MAAQ,iDAGtB/J,OACjB+J,EAAQ9P,KAAK42D,QAAQtjD,WAAU,SAASC,UACpCA,EAAKxN,YAAcA,KAGxB+J,GAAS,SACN8mD,QAAQ7mD,OAAOD,EAAO,GACxBA,GAAS9P,KAAK8P,YACXA,aAGD+mD,sBAAsB9wD,sCAKzB/F,KAAK8P,OAAS,EAAE,KACd4mB,EAAS12B,KAAK42D,QAAQ52D,KAAK8P,cAE/B6mD,EAAQc,QAAQ/gC,EAAO30B,MAAM0G,KAAKzI,KAAM02B,QAEnC5mB,aAEApH,iBAAiB,cAAeguB,EAAO30B,KAAM20B,EAAO3wB,UAAUhD,eAAgB2zB,EAAO72B,OAEnF,SAEPmE,QAAQC,KAAK,iDACN,oCAKLjE,KAAK42D,QAAQtzD,OAAO,EAAItD,KAAK8P,MAAM,MAEhCA,YAED4mB,EAAS12B,KAAK42D,QAAQ52D,KAAK8P,cAE/B6mD,EAAQe,QAAQhhC,EAAO30B,MAAM0G,KAAKzI,KAAM02B,QAEnChuB,iBAAiB,cAAeguB,EAAO30B,KAAM20B,EAAO3wB,UAAUhD,eAAgB2zB,EAAO72B,OAEnF,SAEPmE,QAAQC,KAAK,iDACN,qCAKE0zD,EAAQnZ,QACboY,QAAQh0D,SAAQ,SAAS8zB,MAC1BA,EAAO3wB,qBAAqB6Y,EAC3B8X,EAAO3wB,YAAc4xD,IACvBjhC,EAAO3wB,UAAYy4C,QAEf,GAAG9nB,EAAO3wB,qBAAqBL,GACjCgxB,EAAO3wB,UAAUX,MAAQuyD,EAAO,KAC9BlxD,EAAQiwB,EAAO3wB,UAAUlE,OAAOY,WAEjCgE,IACFiwB,EAAO3wB,UAAYy4C,EAAO/kC,QAAQhT,eArJlB2qB,GA8JtBulC,GAAQniC,WAAa,UAGrBmiC,GAAQc,QCxKO,CACdG,SAAU,SAASlhC,GAClBA,EAAO3wB,UAAUuC,oBAAoBouB,EAAO72B,KAAK+F,UACjD8wB,EAAO3wB,UAAUwC,gBAGlBsvD,OAAQ,SAASnhC,GAChBA,EAAO3wB,UAAU2a,gBAGlBmoB,UAAW,SAASnS,OACf8nB,EAASx+C,KAAKJ,MAAMgJ,WAAW6d,aAAaiQ,EAAO72B,KAAKA,KAAM62B,EAAO72B,KAAK2mB,IAAKkQ,EAAO72B,KAAKiQ,OAE5F9P,KAAKJ,MAAM6B,QAAQmjC,SAAW5kC,KAAKJ,MAAMoyB,UAAU,mBAChDpyB,MAAMQ,QAAQ6lC,UAAUqsB,iBAAgB,QAGzCwF,WAAWphC,EAAO3wB,UAAWy4C,IAGnCuZ,QAAS,SAASrhC,QACZ92B,MAAMgJ,WAAW4X,cAAckW,EAAO3wB,UAAW/F,KAAKJ,MAAMgJ,WAAW2H,KAAKmmB,EAAO72B,KAAKw3D,UAAW3gC,EAAO72B,KAAK+D,YAC/GhE,MAAMgJ,WAAWiT,WDmJxB86C,GAAQe,QEzKO,CACdE,SAAU,SAASlhC,GAClBA,EAAO3wB,UAAUuC,oBAAoBouB,EAAO72B,KAAK23D,UACjD9gC,EAAO3wB,UAAUwC,gBAGlBsvD,OAAQ,SAASnhC,OACZ8nB,EAASx+C,KAAKJ,MAAMgJ,WAAW6d,aAAaiQ,EAAO72B,KAAKA,KAAM62B,EAAO72B,KAAK2mB,IAAKkQ,EAAO72B,KAAKiQ,OAE5F9P,KAAKJ,MAAM6B,QAAQmjC,SAAW5kC,KAAKJ,MAAMoyB,UAAU,mBAChDpyB,MAAMQ,QAAQ6lC,UAAUqsB,iBAAgB,QAGzCwF,WAAWphC,EAAO3wB,UAAWy4C,IAGnC3V,UAAU,SAASnS,GAClBA,EAAO3wB,UAAU2a,gBAGlBq3C,QAAS,SAASrhC,QACZ92B,MAAMgJ,WAAW4X,cAAckW,EAAO3wB,UAAW/F,KAAKJ,MAAMgJ,WAAW2H,KAAKmmB,EAAO72B,KAAKy3D,OAAQ5gC,EAAO72B,KAAK+D,YAC5GhE,MAAMgJ,WAAWiT,eCnBlBm8C,4CAEOp4D,yCACLA,IAEDq4D,WAAa,KACbC,UAAW,wDAIXC,gEAIFn4D,KAAKJ,MAAMk5B,iBAA0D,UAAvC94B,KAAKJ,MAAMk5B,gBAAgBqB,UACxDn6B,KAAKJ,MAAMk5B,gBAAgB26B,WAAWnwD,YACnC80D,aAELp0D,QAAQC,KAAK,iLAMX0B,EAAU3F,KAAKJ,MAAMk5B,gBACzBr3B,EAAUzB,KAAKJ,MAAM6B,QAErB87B,GADU97B,EAAQyB,QACRyC,EAAQo1C,qBAAqB,OACvCxqC,EAAO5K,EAAQo1C,qBAAqB,SAAS,GAC7Cl7C,EAAO,QAGFq4D,UAAW,OAEXxvD,iBAAiB,iBAEtB6H,EAAOA,EAAOA,EAAKwqC,qBAAqB,MAAQ,QAG3Csd,gBAAgB1yD,EAASlE,GAE3B87B,EAAQj6B,YACLg1D,gBAAgB/6B,EAAShtB,QAEzBgoD,sBAAsBh7B,EAAShtB,OAIjC,IAAIT,EAAQ,EAAGA,EAAQS,EAAKjN,OAAQwM,IAAQ,KAE/CnN,EADU4N,EAAKT,GACHirC,qBAAqB,MACjCxnC,EAAO,GAGHvT,KAAKk4D,WACR3kD,EAAK9R,EAAQqO,OAASA,OAGnB,IAAInF,EAAI,EAAGA,EAAIhI,EAAMW,OAAQqH,IAAI,KAChC9H,EAAOF,EAAMgI,QACgB,IAAvB3K,KAAKi4D,WAAWttD,KACzB4I,EAAKvT,KAAKi4D,WAAWttD,IAAM9H,EAAKiF,WAKlCjI,EAAKiD,KAAKyQ,GAGX9R,EAAQ5B,KAAOA,OAEV6I,iBAAiB,wDAIP/C,EAASlE,EAASwQ,OAC7BmoB,EAAaz0B,EAAQy0B,WACrBo+B,EAAavmD,EAAiBzG,OAAOC,KAAKwG,GAAkBzG,OAAOC,KAAKhK,GACxE4J,EAAc,OAMd,IAAIyE,KAJR0oD,EAAW51D,SAAQ,SAAC2Q,GACnBlI,EAAYkI,EAAKmiB,eAAiBniB,KAGlB6mB,EAAW,KAEvBj4B,EADAs2D,EAASr+B,EAAWtqB,GAGrB2oD,GAA2B,UAAjBplD,EAAOolD,IAAsBA,EAAOt2D,MAA8C,IAAtCs2D,EAAOt2D,KAAKuJ,QAAQ,gBAC5EvJ,EAAOs2D,EAAOt2D,KAAKqqB,QAAQ,aAAc,SAET,IAAtBnhB,EAAYlJ,KACrBV,EAAQ4J,EAAYlJ,IAASnC,KAAK04D,aAAaD,EAAO/2D,+CAO7CA,SACC,SAAVA,GAIU,UAAVA,GAIIA,mCAICiK,UACI3L,KAAKJ,MAAM6B,QAAQyB,QAAQgU,MAAK,SAACrV,UACrCA,EAAO8J,QAAUA,OAGT,0CAID4xB,EAAShtB,OACpB,IAAIT,EAAQ,EAAGA,EAAQytB,EAAQj6B,OAAQwM,IAAQ,KAIlDrL,EAHI4mC,EAAS9N,EAAQztB,GACrB6oD,GAAS,EACTxhD,EAAMnX,KAAK44D,SAASvtB,EAAOwtB,aAGxB1hD,EACFwhD,GAAS,EAETxhD,EAAM,CAACxL,MAAM0/B,EAAOwtB,YAAY39B,QAG7B/jB,EAAI1Q,QACP0Q,EAAI1Q,MAAQ4kC,EAAOwtB,YAAY39B,OAAOxF,cAAclJ,QAAQ,IAAK,OAGlE/nB,EAAQ4mC,EAAOwI,aAAa,YAEf18B,EAAI1S,QAChB0S,EAAI1S,MAAQA,QAIR4zD,gBAAgBhtB,EAAQl0B,EAAKnX,KAAKJ,MAAM6D,cAAc4H,YAAYuI,yBAElEqkD,WAAWnoD,GAASqH,EAAI1Q,MAE1B0Q,EAAI1Q,OAASzG,KAAKJ,MAAM6B,QAAQqO,aAC7BooD,UAAW,GAGbS,QACE/4D,MAAM6B,QAAQyB,QAAQJ,KAAKqU,kDAObomB,EAAShtB,OAC1B,IAAIT,EAAQ,EAAGA,EAAQytB,EAAQj6B,OAAQwM,IAAQ,KAC9Cu7B,EAAS9N,EAAQztB,GACrBqH,EAAM,CAACxL,MAAM,GAAIlF,MAAM,MAAQqJ,QAE1BmoD,WAAWnoD,GAASqH,EAAI1Q,UAEzBhC,EAAQ4mC,EAAOwI,aAAa,SAE7BpvC,IACF0S,EAAI1S,MAAQA,QAGR7E,MAAM6B,QAAQyB,QAAQJ,KAAKqU,WA9KLia,GAmL9B4mC,GAAgBxjC,WAAa,yBCnLd,CACdqW,ICJD,SAAqB6G,WACb7xC,EAAO,GACXuF,EAAM,EACN+R,EAAM,EACN2hD,GAAU,EAGDhpD,EAAQ,EAAGA,EAAQ4hC,EAAMpuC,OAAQwM,IAAS,KAC3C+gC,EAAOa,EAAM5hC,GACjBipD,EAAWrnB,EAAM5hC,EAAM,GAGnBjQ,EAAKuF,KACLvF,EAAKuF,GAAO,IAIZvF,EAAKuF,GAAK+R,KACVtX,EAAKuF,GAAK+R,GAAO,IAIT,KAAR05B,GAAeioB,GAAuB,KAAZC,GAC1Bl5D,EAAKuF,GAAK+R,IAAQ05B,EAClB/gC,KAKQ,KAAR+gC,EAMQ,KAARA,GAAgBioB,EAMR,MAARjoB,GAA4B,MAAZkoB,GAAqBD,EAQ5B,MAARjoB,GAAwB,MAARA,GAAkBioB,EAOvCj5D,EAAKuF,GAAK+R,IAAQ05B,GANd15B,EAAM,EACN/R,MATA+R,EAAM,EACN/R,IACA0K,KARAqH,IANA2hD,GAAWA,SA6BZj5D,GDtDV2/B,KELc,SAASkS,cAET1xB,KAAKC,MAAMyxB,GACpB,MAAM7kC,UACJ7I,QAAQC,KAAK,oDAAqD4I,GAC3DkE,QAAQE,YCDjB+nD,4CAEUp5D,yCACFA,IAEDy0B,oBAAoB,kBACpBA,oBAAoB,eAAgB,8DAIpCc,sBAAsB,SAAUn1B,KAAKi5D,eAAez4D,KAAKR,OAE3DA,KAAKJ,MAAM6B,QAAQy3D,oBACbl4D,UAAU,eAAgBhB,KAAKm5D,cAAc34D,KAAKR,MAAO,SACzDgB,UAAU,YAAahB,KAAKo5D,SAAS54D,KAAKR,MAAO,2CAIhDH,SACa,iBAATA,mCAGTA,EAAM0sB,EAAQvU,EAAQlY,EAAQ8+B,UAC5B5+B,KAAKq5D,WAAWr5D,KAAKs5D,iBAAkBz5D,GAC7CkS,KAAK/R,KAAKu5D,cAAc/4D,KAAKR,cACvB,SAACw5D,UACJx1D,QAAQ4N,MAAM,gBAAiB4nD,GAAO,yBAC/BzoD,QAAQE,OAAOuoD,6CAIfN,OACPO,SAEAP,IACAA,EAAel5D,KAAKJ,MAAM6B,QAAQy3D,eAIlCO,EADuB,iBAAjBP,EACKF,EAAOU,UAAUR,GAEjBA,IAIXl1D,QAAQ4N,MAAM,qCAAsCsnD,GAGjDO,yCAGIP,EAAcS,OACrBF,EAAWz5D,KAAKs5D,eAAeJ,MAEhCO,SACQz5D,KAAK45D,SAASD,GACpB5nD,KAAK/R,KAAKq5D,WAAW74D,KAAKR,KAAMy5D,IAChC1nD,KAAK/R,KAAKu5D,cAAc/4D,KAAKR,OAC7B+R,KAAK/R,KAAKgf,QAAQxe,KAAKR,cACjB,SAACw5D,UACJx1D,QAAQ4N,MAAM,gBAAiB4nD,GAAO,yBAC/BzoD,QAAQE,OAAOuoD,uCAKzBK,qBACE,IAAI9oD,SAAQ,SAACC,EAASC,OACrBygC,EAAQrrC,SAASC,cAAc,SACnCorC,EAAM3vC,KAAO,OACb2vC,EAAMooB,OAASD,EAEfnoB,EAAM9kC,iBAAiB,UAAU,SAACC,OAC1BktD,EAAOroB,EAAMsoB,MAAM,GACvBC,EAAS,IAAIC,kBAGNryD,EAAKjI,MAAM6B,QAAQ04D,kBACjB,SACDF,EAAOG,kBAAkBL,aAGxB,SACDE,EAAOI,mBAAmBN,aAGzB,MACDE,EAAOK,cAAcP,aAGpB,eAEDE,EAAOM,WAAWR,GAG1BE,EAAOO,OAAS,SAAC3tD,GACbmE,EAAQipD,EAAOv1D,SAGnBu1D,EAAOQ,QAAU,SAAC5tD,GACd7I,QAAQC,KAAK,yCACbgN,QAIRygC,EAAMxB,8CAIHupB,EAAUzuB,OACbnrC,EAAO45D,EAAShxD,KAAKzI,KAAKJ,MAAOorC,UAElCnrC,aAAgBkR,QACRlR,EAEAA,EAAOkR,QAAQC,QAAQnR,GAAQkR,QAAQE,+CAIxCypD,UAGP1nD,MAAMC,QAAQynD,IAAeA,EAAWp3D,QAAU0P,MAAMC,QAAQynD,EAAW,IACvE16D,KAAKJ,MAAM6B,QAAQokB,YACX7lB,KAAK26D,uBAAuBD,GAE5B16D,KAAK46D,wBAAwBF,GAKjCA,iDAIQA,OACfx3D,EAAUw3D,EAAWvsC,eAEdusC,EAAWttC,KAAI,SAACrC,OACnB3lB,EAAM,UAEVlC,EAAQN,SAAQ,SAAC1B,EAAKyJ,GAClBvF,EAAIlE,GAAO6pB,EAAOpgB,MAGfvF,qDAMSs1D,OAChB76D,EAAO,GACXqD,EAAUlD,KAAKJ,MAAMi7D,oBAGlB33D,EAAQ,IAAMw3D,EAAW,GAAG,IACxBx3D,EAAQ,GAAGV,gBAAgBmJ,QAAU+uD,EAAW,GAAG,IAClDA,EAAWvsC,QAKnBusC,EAAW93D,SAAQ,SAACoqB,OACZ5nB,EAAM,GAEV4nB,EAAQpqB,SAAQ,SAAClB,EAAOoO,OAChBjO,EAASqB,EAAQ4M,GAElBjO,IACCuD,EAAIvD,EAAOY,YAAcf,MAIjC7B,EAAKiD,KAAKsC,MAGPvF,kCAGHA,UACGG,KAAKJ,MAAMof,QAAQnf,UArLbuxB,GAyLrB4nC,GAAOxkC,WAAa,SAGpBwkC,GAAOU,UAAYoB,OC1LbC,4CAEOn7D,yCACLA,IAEDo7D,SAAW,CAEfC,SAAS,YACTC,YAAY,eACZC,WAAW,kBACXC,cAAc,iBACdC,cAAc,iBACdC,aAAa,gBACbC,YAAY,eACZC,aAAa,gBACbC,OAAO,MACPC,UAAU,MACVC,WAAW,MAGX1b,UAAU,aACV2b,aAAa,gBACbC,YAAY,mBACZC,eAAe,kBACfC,eAAe,kBACfC,cAAc,iBACdC,aAAa,gBACbC,cAAc,iBACdC,QAAQ,OACRC,WAAW,OACXC,YAAY,OAGZ1vD,YAAY,eACZI,eAAe,kBACfC,cAAc,qBACdsvD,iBAAiB,oBACjBC,iBAAiB,oBACjBC,gBAAgB,mBAChBC,eAAe,kBACfC,gBAAgB,mBAChBzvD,UAAU,SACVE,aAAa,SACbG,cAAc,SAGdqvD,WAAW,cACXC,cAAc,iBACdC,aAAa,oBACbC,gBAAgB,mBAChBC,gBAAgB,mBAChBC,eAAe,kBACfC,cAAc,iBACdC,eAAe,kBACfC,SAAS,QACTC,YAAY,QACZC,aAAa,WAGTC,YAAc,KAEdC,iBAAmB,KAEnBC,kBAAoB,KAEpBC,cAAgB,CACpBr4D,IAAI,CACHsH,IAAI,KACJgxD,OAAO,KACPjxD,QAAQ,MAET5J,KAAK,CACJ6J,IAAI,KACJgxD,OAAO,KACPjxD,QAAQ,MAET5K,OAAO,CACN6K,IAAI,KACJgxD,OAAO,KACPjxD,QAAQ,MAETqU,MAAM,CACLpU,IAAI,KACJgxD,OAAO,KACPjxD,QAAQ,SAIL6nB,qBAAqB,iBACrBA,qBAAqB,oBACrBA,qBAAqB,mBACrBA,qBAAqB,sBACrBA,qBAAqB,sBACrBA,qBAAqB,qBACrBA,qBAAqB,oBACrBA,qBAAqB,qBACrBA,qBAAqB,eACrBA,qBAAqB,kBACrBA,qBAAqB,mBAErBA,qBAAqB,eACrBA,qBAAqB,kBACrBA,qBAAqB,iBACrBA,qBAAqB,oBACrBA,qBAAqB,oBACrBA,qBAAqB,mBACrBA,qBAAqB,kBACrBA,qBAAqB,mBACrBA,qBAAqB,aACrBA,qBAAqB,gBACrBA,qBAAqB,qEAKrBqpC,gCAEA38D,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,YACpDgB,UAAU,gBAAiBhB,KAAK49D,2BAA2Bp9D,KAAKR,0DAG3C6M,EAAGhK,OAC1B7C,KAAKJ,MAAMoyB,UAAU,SACnBhyB,KAAKJ,MAAMQ,QAAQsiC,KAAKC,cAAgB3iC,MAK7C6M,EAAEyzB,wBAGGj6B,SAASozB,WACR6H,EAAQj7B,SAAS8pB,KAAK2R,mBACpBC,kBAAkB/hC,KAAK2F,SAC7B27B,EAAMU,cACA,GAAI5vB,OAAOknB,aAAc,KAC3BgI,GAAAA,EAAQj7B,SAASq7B,eACfm8B,WAAW79D,KAAK2F,SACtByM,OAAOknB,eAAeE,kBACtBpnB,OAAOknB,eAAeuI,SAASP,IAEhC,MAAMz0B,6DAIH,IAAI3L,KAAOlB,KAAKg7D,cACd8C,2BAA2B58D,EAAKlB,KAAKirB,oBAAoBzqB,KAAKR,KAAMkB,gDAIvDA,EAAKiqB,GAGrBA,EACEnrB,KAAKs9D,YAAYp8D,KACjBlB,KAAKg7D,SAAS95D,GAAK4pB,SAAS,WACzBwyC,YAAYp8D,GAAOlB,KAAKsC,OAAO9B,KAAKR,KAAMkB,QAC1CF,UAAUhB,KAAKg7D,SAAS95D,GAAMlB,KAAKs9D,YAAYp8D,UAE/C68D,qBAAqB78D,IAIzBlB,KAAKg7D,SAAS95D,GAAK4pB,SAAS,MAC3B9qB,KAAKs9D,YAAYp8D,IAASlB,KAAKw9D,kBAAkBt8D,IAAUlB,KAAK2I,mBAAmBzH,UAChFD,YAAYjB,KAAKg7D,SAAS95D,GAAMlB,KAAKs9D,YAAYp8D,WAC/ClB,KAAKs9D,YAAYp8D,SAGpB88D,uBAAuB98D,gDAMVA,OAChBa,EAAO/B,KAAKg7D,SAAS95D,GAErBlB,KAAKu9D,iBAAiBx7D,EAAO,sBAC3Bw7D,iBAAiBx7D,EAAO,eAAiB/B,KAAKi+D,YAAYz9D,KAAKR,KAAM+B,EAAM,cAC3Ew7D,iBAAiBx7D,EAAO,aAAe/B,KAAKi+D,YAAYz9D,KAAKR,KAAM+B,EAAM,YAEzEf,UAAUe,EAAO,cAAe/B,KAAKu9D,iBAAiBx7D,EAAO,qBAC7Df,UAAUe,EAAO,YAAa/B,KAAKu9D,iBAAiBx7D,EAAO,oBAG5Du7D,YAAYp8D,IAAO,iDAGFA,OAClBg9D,GAAU,EACdn8D,EAAO/B,KAAKg7D,SAAS95D,MAElBlB,KAAKs9D,YAAYp8D,KAASlB,KAAK2I,mBAAmBzH,GAAK,KAGrD,IAAIyJ,YAFD3K,KAAKs9D,YAAYp8D,GAEXlB,KAAKg7D,SACdh7D,KAAKg7D,SAASrwD,KAAO5I,GACpB/B,KAAKs9D,YAAY3yD,KACnBuzD,GAAU,GAKVA,SACGj9D,YAAYc,EAAO,cAAe/B,KAAKu9D,iBAAiBx7D,EAAO,qBAC/Dd,YAAYc,EAAO,YAAa/B,KAAKu9D,iBAAiBx7D,EAAO,qBAE3D/B,KAAKu9D,iBAAiBx7D,EAAO,sBAC7B/B,KAAKu9D,iBAAiBx7D,EAAO,wDAKtBF,OACZgI,EAAMhI,EAAO0F,eAEb,IAAIrG,KAAOlB,KAAKg7D,SAChBnxD,EAAI3I,UACD+pB,oBAAoB/pB,GAAK,GAE1BlB,KAAKw9D,kBAAkBt8D,UACrBs8D,kBAAkBt8D,GAAO,SAG1Bs8D,kBAAkBt8D,GAAK4B,KAAKjB,mCAK7B60B,EAAQ7pB,EAAG9G,QACZkjB,cAAcyN,EAAQ7pB,EAAG9G,uCAGnBhE,EAAM20B,EAAQ7pB,EAAG9G,cACxBo4D,EAAWn+D,KAAKy9D,cAAc17D,UAEtB,WAATA,IACFA,EAAO,UAGD20B,OACD,QACLynC,EAASzxD,KAAM,EAEfU,aAAa+wD,EAAS1xD,SAEtB0xD,EAAS1xD,QAAUY,YAAW,WAC7BD,aAAa+wD,EAAS1xD,SACtB0xD,EAAS1xD,QAAU,KAEnB0xD,EAASzxD,IAAM,KACfU,aAAa+wD,EAAST,QACtBS,EAAST,OAAS,KAElB71D,EAAKohB,cAAclnB,EAAO,UAAW8K,EAAI9G,KACvC,eAGE,MACFo4D,EAASzxD,MAEXyxD,EAASzxD,IAAM,UACVuc,cAAclnB,EAAO,MAAO8K,EAAI9G,IAGnCo4D,EAAST,QACXtwD,aAAa+wD,EAAST,QACtBS,EAAST,OAAS,UAEbz0C,cAAclnB,EAAO,SAAU8K,EAAI9G,IAExCo4D,EAAST,OAASrwD,YAAW,WAC5BD,aAAa+wD,EAAST,QACtBS,EAAST,OAAS,OAChB,KAGJtwD,aAAa+wD,EAAS1xD,SACtB0xD,EAAS1xD,QAAU,4CAKPiqB,EAAQ7pB,EAAG9G,OAExBuO,EADI8pD,EAAer4D,EAAUhD,eAG1B/C,KAAKw9D,kBAAkB9mC,KAEtB3wB,aAAqBL,EACvB4O,EAAWvO,EAAUlE,OAAO0F,WAAWmvB,GAC/B3wB,aAAqBvC,IAC7B8Q,EAAWvO,EAAUwB,WAAWmvB,IAG9BpiB,GACFA,EAASzH,EAAGuxD,SAIT11D,iBAAiBguB,EAAQ7pB,EAAGuxD,UA7SThtC,GAiT1B2pC,GAAYvmC,WAAa,kBClTnB6pC,4CAEOz+D,yCACLA,IAED0+D,UAAY,OACZC,YAAc,OACdC,cAAe,IACfC,gBAAiB,IAEjBpqC,oBAAoB,cAAe,MACnCA,oBAAoB,gBAAgB,wDAIrCnI,EAAWlsB,KAAKJ,MAAM6B,QAAQi9D,YAClCC,EAAiB,QAEZL,UAAY,QACZC,YAAc,IAEH,IAAbryC,IACF1gB,OAAOqG,OAAO8sD,EAAgBN,EAAYnyC,UAC1C1gB,OAAOqG,OAAO8sD,EAAgBzyC,QAEzB0yC,YAAYD,QACZE,mBAGD79D,UAAU,gBAAiBhB,KAAK8+D,cAAct+D,KAAKR,2CAG7CksB,yBACHhrB,GACJm9D,EAAYhsB,QAAQnxC,GACnBgrB,EAAShrB,KACiB,WAAzBmS,EAAO6Y,EAAShrB,MAClBgrB,EAAShrB,GAAO,CAACgrB,EAAShrB,KAG3BgrB,EAAShrB,GAAK0B,SAAQ,SAACwzB,IACJpjB,MAAMC,QAAQmjB,GAAYA,EAAU,CAACA,IAE3CxzB,SAAQ,SAAC2Q,GACpB1L,EAAKk3D,WAAW79D,EAAKqS,UAKxBvP,QAAQC,KAAK,sCAAuC/C,QAhBlD,IAAIA,KAAOgrB,IAAPhrB,sCAqBEw1B,EAAQsoC,cACd5oC,EAAU,CACbM,OAAQ2nC,EAAYhsB,QAAQ3b,GAC5BjrB,KAAM,GACNwzD,MAAM,EACN9wC,OAAO,EACP+wC,MAAM,GAGOF,EAAYp9B,WAAWlM,cAAcjuB,MAAM,KAAK21B,KAAK,IAAI31B,MAAM,KAErE7E,SAAQ,SAACguC,UACTA,OACD,OACLxa,EAAQ6oC,MAAO,YAGV,QACL7oC,EAAQjI,OAAQ,YAGX,OACLiI,EAAQ8oC,MAAO,gBAIftuB,EAAS3gC,MAAM2gC,GAAUA,EAAOlU,cAAc6R,WAAW,GAAK9gC,SAASmjC,GACvExa,EAAQ3qB,KAAK3I,KAAK8tC,GAEd9jC,EAAKwxD,UAAU1tB,KAClB9jC,EAAKwxD,UAAU1tB,GAAU,IAG1B9jC,EAAKwxD,UAAU1tB,GAAQ9tC,KAAKszB,gDAM1BykB,EAAO76C,UAENw+D,aAAe,SAAS3xD,OACxBsyD,EAAOtyD,EAAEskB,QACTjF,EAAW2uB,EAAKyjB,UAAUa,GAE3BjzC,IAEF2uB,EAAK0jB,YAAYz7D,KAAKq8D,GAEtBjzC,EAAStpB,SAAQ,SAASwzB,GACzBykB,EAAKukB,aAAavyD,EAAGupB,aAKnBqoC,eAAiB,SAAS5xD,OAC1BsyD,EAAOtyD,EAAEskB,WACE0pB,EAAKyjB,UAAUa,GAElB,KAEPrvD,EAAQ+qC,EAAK0jB,YAAY7yD,QAAQyzD,GAElCrvD,GAAS,GACX+qC,EAAK0jB,YAAYxuD,OAAOD,EAAO,UAK7BlQ,MAAM+F,QAAQiH,iBAAiB,UAAW5M,KAAKw+D,mBAE/C5+D,MAAM+F,QAAQiH,iBAAiB,QAAS5M,KAAKy+D,wDAI/Cz+D,KAAKw+D,mBACF5+D,MAAM+F,QAAQ4lB,oBAAoB,UAAWvrB,KAAKw+D,cAGrDx+D,KAAKy+D,qBACF7+D,MAAM+F,QAAQ4lB,oBAAoB,QAASvrB,KAAKy+D,qDAI1C5xD,EAAGupB,cACXjjB,GAAQ,SAETtG,EAAEwyD,SAAWjpC,EAAQ6oC,MAAQpyD,EAAEyyD,UAAYlpC,EAAQjI,OAASthB,EAAE0yD,SAAWnpC,EAAQ8oC,OACnF9oC,EAAQ3qB,KAAK7I,SAAQ,SAAC1B,IAGR,GAFDqM,EAAKgxD,YAAY7yD,QAAQxK,KAGpCiS,GAAQ,MAIPA,GACFijB,EAAQM,OAAOjuB,KAAKzI,KAAM6M,IAGpB,UA1JgBukB,GAiK1BitC,GAAY7pC,WAAa,cAGzB6pC,GAAYnyC,SCzKG,CACdszC,QAAQ,YACRC,QAAQ,EACRC,MAAM,GACNC,QAAQ,GACRC,aAAa,GACbC,eAAe,GACfC,cAAc,GACdC,YAAY,GACZ9I,KAAK,CAAC,YAAa,aACnBC,KAAK,CAAC,YAAa,aACnB8I,gBAAgB,CAAC,YAAa,cD+J/B3B,GAAYhsB,QE1KG,CACd4tB,SAAS,SAASpzD,GACjBA,EAAEiB,kBACFjB,EAAEyzB,kBAEHs/B,aAAa,SAAS/yD,OACjBjE,EAAa5I,KAAKJ,MAAMgJ,WAC5Bs3D,EAASt3D,EAAWkN,UAAYlN,EAAWjD,QAAQiJ,aACvChG,EAAWjD,QAAQkQ,aAE/BhJ,EAAEyzB,iBAEC13B,EAAWmc,mBACVm7C,GAAU,EACZt3D,EAAWjD,QAAQmQ,UAAYoqD,EAE/Bt3D,EAAWgN,YAAYhN,EAAW+L,iBAAiB,UAIhD/U,MAAM+F,QAAQoI,SAEpB8xD,eAAe,SAAShzD,OACnBjE,EAAa5I,KAAKJ,MAAMgJ,WAC5Bs3D,EAASt3D,EAAWkN,UAAYlN,EAAWjD,QAAQiJ,aACnDuxD,EAAYv3D,EAAWjD,QAAQkQ,aAE/BhJ,EAAEyzB,iBAEC13B,EAAWmc,mBACVm7C,GAAUC,EACZv3D,EAAWjD,QAAQmQ,UAAYoqD,EAE/Bt3D,EAAWgN,YAAYhN,EAAW+L,iBAAiB/L,EAAWmc,iBAAmB,UAI9EnlB,MAAM+F,QAAQoI,SAGpB+xD,cAAc,SAASjzD,OAClBjE,EAAa5I,KAAKJ,MAAMgJ,WAE5BiE,EAAEyzB,iBAEC13B,EAAWmc,kBACbnc,EAAWgN,YAAYhN,EAAW+L,iBAAiB,SAG/C/U,MAAM+F,QAAQoI,SAEpBgyD,YAAY,SAASlzD,OAChBjE,EAAa5I,KAAKJ,MAAMgJ,WAE5BiE,EAAEyzB,iBAEC13B,EAAWmc,kBACbnc,EAAWgN,YAAYhN,EAAW+L,iBAAiB/L,EAAWmc,iBAAmB,SAG7EnlB,MAAM+F,QAAQoI,SAEpByxD,QAAQ,SAAS3yD,QACXxL,SAAS,sBAAuBwL,IAGtC4yD,QAAQ,SAAS5yD,QACXxL,SAAS,sBAAuBwL,IAGtCuzD,QAAQ,SAASvzD,QACXxL,SAAS,sBAAuBwL,IAGtCwzD,SAAS,SAASxzD,QACZxL,SAAS,uBAAwBwL,IAGvC6yD,MAAM,SAAS7yD,QACTxL,SAAS,oBAAqBwL,IAGpC8yD,QAAQ,SAAS9yD,QACXxL,SAAS,sBAAuBwL,IAGtCoqD,KAAK,SAASpqD,GAEV7M,KAAKJ,MAAM6B,QAAQm1D,SAAW52D,KAAKJ,MAAMoyB,UAAU,YAAchyB,KAAKJ,MAAMoyB,UAAU,UAEjFhyB,KAAKJ,MAAMQ,QAAQsiC,KAAKC,cAG9B91B,EAAEyzB,sBACG1gC,MAAMQ,QAAQw2D,QAAQK,UAK9BC,KAAK,SAASrqD,GAEV7M,KAAKJ,MAAM6B,QAAQm1D,SAAW52D,KAAKJ,MAAMoyB,UAAU,YAAchyB,KAAKJ,MAAMoyB,UAAU,UAEjFhyB,KAAKJ,MAAMQ,QAAQsiC,KAAKC,cAG9B91B,EAAEyzB,sBACG1gC,MAAMQ,QAAQw2D,QAAQM,UAK9B8I,gBAAgB,SAASnzD,GACpB7M,KAAKJ,MAAMQ,QAAQsiC,KAAKC,aACxB3iC,KAAKJ,MAAMoyB,UAAU,aAAa,SAC/BpyB,MAAMQ,QAAQ8/B,UAAU9sB,MAAK,GAAO,SCjHvCktD,4CAEO1gE,yCACLA,IAEDiyB,cAAgB,OAChB0uC,iBAAkB,IAElBC,iBAAmB,OACnBC,UAAY,OAEZjD,kBAAoB,KAEpBnpC,oBAAoB,qBAAiBl0B,KAErCk0B,oBAAoB,kBAAkB,KACtCA,oBAAoB,gBAAgB,KACpCA,oBAAoB,oBAAoB,KACxCA,oBAAoB,kBAAkB,KAEtCC,qBAAqB,uBACrBA,qBAAqB,qBACrBA,qBAAqB,gBACrBA,qBAAqB,oBACrBA,qBAAqB,iBACrBA,qBAAqB,mEAKrBosC,wBACAC,6BACAC,+BAEA5/D,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,uDAIV,IAArCA,KAAKJ,MAAM6B,QAAQowB,gBAC5B7tB,QAAQC,KAAK,wGAERrE,MAAM6B,QAAQwuB,eAAiBjwB,KAAKJ,MAAM6B,QAAQowB,+DAKrD7xB,KAAKJ,MAAM6B,QAAQo/D,sBAChB7/D,UAAU,kBAAmBhB,KAAK8gE,cAActgE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQo/D,sBAC9EjhE,MAAMmhE,GAAG,aAAc/gE,KAAK8gE,cAActgE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQo/D,kBAG3E7gE,KAAKJ,MAAM6B,QAAQu/D,mBAChBhgE,UAAU,YAAahB,KAAK8gE,cAActgE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQu/D,iEAK3EhhE,KAAKJ,MAAM6B,QAAQw/D,wBAChBjgE,UAAU,oBAAqBhB,KAAK8gE,cAActgE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQw/D,wBAChFrhE,MAAMmhE,GAAG,eAAgB/gE,KAAK8gE,cAActgE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQw/D,oBAG7EjhE,KAAKJ,MAAM6B,QAAQy/D,qBAChBlgE,UAAU,cAAehB,KAAK8gE,cAActgE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQy/D,0DAIhEr/D,OAEhBgI,EAAMhI,EAAO0F,WAGVsC,EAAIs3D,oBAAsBnhE,KAAKw9D,kBAAkB2D,yBAC9C3D,kBAAkB2D,kBAAoBnhE,KAAKohE,yBAAyB5gE,KAAKR,KAAM,0BAC/EgB,UAAU,qBAAsBhB,KAAKw9D,kBAAkB2D,wBACvDvhE,MAAMmhE,GAAG,gBAAiB/gE,KAAKohE,yBAAyB5gE,KAAKR,KAAM,uBAGtE6J,EAAIw3D,kBAAoBrhE,KAAKw9D,kBAAkB6D,uBAC5C7D,kBAAkB6D,gBAAkBrhE,KAAKohE,yBAAyB5gE,KAAKR,KAAM,wBAC7EgB,UAAU,eAAgBhB,KAAKw9D,kBAAkB6D,kBAGpDx3D,EAAIy3D,iBACDC,2BAA2B1/D,GAI9BgI,EAAI23D,cAAgBxhE,KAAKw9D,kBAAkBgE,mBACxChE,kBAAkBgE,YAAcxhE,KAAKyhE,uBAAuBjhE,KAAKR,KAAM,oBACvEgB,UAAU,mBAAoBhB,KAAKw9D,kBAAkBgE,kBACrD5hE,MAAMmhE,GAAG,cAAe/gE,KAAKyhE,uBAAuBjhE,KAAKR,KAAM,iBAGlE6J,EAAI63D,YAAc1hE,KAAKw9D,kBAAkBkE,iBACtClE,kBAAkBkE,UAAY1hE,KAAKyhE,uBAAuBjhE,KAAKR,KAAM,kBACrEgB,UAAU,aAAchB,KAAKw9D,kBAAkBkE,+DAI3B7/D,OAE1B8/D,SADIC,EAAO//D,EAAO0F,WAAWs6D,gBAG7BF,EAAet7D,SAASC,cAAc,SACzBoB,UAAUC,IAAI,iCAExBi6D,GACiB,mBAATA,IACTA,EAAOA,EAAK//D,EAAOkB,iBAGjB6+D,aAAgBnlD,YAClBklD,EAAaz5D,YAAY05D,GAEzBD,EAAa75D,UAAY85D,GAG1BD,EAAa75D,UAAY,WAG1B65D,EAAa/0D,iBAAiB,SAAS,SAACC,GACvCA,EAAEiB,kBACFjB,EAAEyzB,iBAEFz4B,EAAKi5D,cAAcj/D,EAAO0F,WAAW+5D,WAAYz0D,EAAGhL,MAGrDA,EAAOoI,aAAayQ,aAAainD,EAAc9/D,EAAOoI,aAAajC,2DAG7C6L,EAAQhH,EAAGhK,GAC9BA,EAAKmC,QACPnC,EAAOA,EAAKmC,OAGVnC,EAAKhB,OAAO0F,WAAWsM,SACpBitD,cAAcj+D,EAAKhB,OAAO0F,WAAWsM,GAAShH,EAAGhK,oDAI/BgR,EAAQhH,EAAGhL,GAChCA,EAAOC,UACTD,EAASA,EAAOC,SAGdD,EAAO0F,WAAWsM,SACfitD,cAAcj/D,EAAO0F,WAAWsM,GAAShH,EAAGhL,yCAIrCigE,EAAMj1D,EAAG9G,GACnBA,EAAU2pC,OACZ3pC,EAAYA,EAAU2pC,OACd3pC,EAAUoY,OAClBpY,EAAYA,EAAUoY,MAGvB2jD,EAAsB,mBAARA,EAAqBA,EAAKr5D,KAAKzI,KAAKJ,MAAOiN,EAAG9G,EAAUhD,gBAAkB++D,OAEnFC,SAASl1D,EAAG9G,EAAW+7D,oCAGpBj1D,EAAG9G,EAAW+7D,EAAMhxC,EAAUkxC,OAGtC7vB,SAFI/hB,IAAUvjB,aAAawjB,YAC3BuB,EAASvrB,SAASC,cAAc,UAGhCsrB,EAAOlqB,UAAUC,IAAI,kBAEjByoB,GACHvjB,EAAEyzB,iBAICwhC,GAASA,EAAKx+D,WAIdwtB,EAmBHqhB,EAAQ6vB,EAAYnyD,MAAM+hB,OAnBd,IACT5xB,KAAKugE,oBAEJvgE,KAAKygE,2BAIHF,gBAAkBlzD,YAAW,WACjCP,EAAKyzD,iBAAkB,IACrB,KAGDvgE,KAAKygE,gBACFA,UAAUr9D,YAGXq9D,UAAYtuB,EAAQnyC,KAAKmyC,MAAMvgB,GAMrCkwC,EAAKl/D,SAAQ,SAAC2Q,OACT0uD,EAAS57D,SAASC,cAAc,OACpCgwC,EAAQ/iC,EAAK+iC,MACb4rB,EAAW3uD,EAAK2uD,SAEb3uD,EAAK4wC,UACP8d,EAAOv6D,UAAUC,IAAI,6BAErBs6D,EAAOv6D,UAAUC,IAAI,uBAEF,mBAAT2uC,IACTA,EAAQA,EAAM7tC,KAAKqE,EAAKlN,MAAOmG,EAAUhD,iBAGvCuzC,aAAiBvuC,KACnBk6D,EAAO/5D,YAAYouC,GAEnB2rB,EAAOn6D,UAAYwuC,EAGE,mBAAZ4rB,IACTA,EAAWA,EAASz5D,KAAKqE,EAAKlN,MAAOmG,EAAUhD,iBAG7Cm/D,GACFD,EAAOv6D,UAAUC,IAAI,gCACrBs6D,EAAOr1D,iBAAiB,SAAS,SAACC,GACjCA,EAAEiB,sBAGAyF,EAAKuuD,MAAQvuD,EAAKuuD,KAAKx+D,OACzB2+D,EAAOr1D,iBAAiB,SAAS,SAACC,GACjCA,EAAEiB,kBACFhB,EAAKi1D,SAASl1D,EAAG9G,EAAWwN,EAAKuuD,KAAMG,EAAQ9vB,MAG7C5+B,EAAKmjB,QACPurC,EAAOr1D,iBAAiB,SAAS,SAACC,GACjC0G,EAAKmjB,OAAO7pB,EAAG9G,EAAUhD,mBAM1BwQ,EAAKuuD,MAAQvuD,EAAKuuD,KAAKx+D,QACzB2+D,EAAOv6D,UAAUC,IAAI,gCAIvBiqB,EAAO1pB,YAAY+5D,MAGpBrwC,EAAOhlB,iBAAiB,SAAS,SAACC,GACjCC,EAAK2zD,UAAUr9D,UAGhB+uC,EAAMhvC,KAAK2tB,GAAYjkB,GAEpBslC,IAAUnyC,KAAKygE,iBACZA,UAAU/mB,YAAW,WACzB5sC,EAAK2zD,UAAY,KAEd3zD,EAAK0zD,mBACP1zD,EAAKpE,iBAAiB,aAAcoE,EAAK0zD,iBAAiBz9D,gBAC1D+J,EAAK0zD,iBAAmB,cAIrBA,iBAAmBz6D,OAEnB2C,iBAAiB,aAAc3C,EAAUhD,yBA/Q9BquB,GAoRnBkvC,GAAK9rC,WAAa,WCnRZ2tC,4CAEOviE,yCACLA,IAEDwiE,mBAAqBt4D,EAAKu4D,6BAC1BC,cAAe,IACfC,cAAe,IACfC,YAAc,MACdC,QAAS,IACTC,OAAQ,IACRC,YAAa,IACbC,OAAS,IACTC,iBAAmB,KACnBC,eAAiB,IACjBC,mBAAoB,IACpBC,WAAY,IAEZC,UAAYn5D,EAAKm5D,UAAUziE,aAC3B0iE,QAAUp5D,EAAKo5D,QAAQ1iE,aAEvB6zB,oBAAoB,kBAAkB,sEAIvCnpB,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,iBACjBuD,EAAGxD,UAAUC,IAAI,6BAEVuD,uCAIJlL,KAAKJ,MAAM6B,QAAQ0hE,qBAChBniE,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,gDAI1C6B,OAGhBma,EAFI6+B,EAAO76C,KACXgY,EAAS,GAGLnW,EAAOzB,QAAQgX,QAAWvV,EAAOoB,UACpC+Y,EAAQna,EAAOU,aAEfyV,EAAOorD,UAAY,SAASv2D,GACxBhL,EAAO0B,SAAWs3C,EAAK4nB,OAAOl/D,UAC1Bs3C,EAAKmoB,UAAYn2D,EAAE0jB,QAAQ,GAAGC,MAAQ3jB,EAAE2jB,OAASte,EAAQuD,SAASuG,GAAO5U,KAAQyzC,EAAKj7C,MAAM6D,cAAckC,QAAQyQ,WAAevU,EAAO2C,WAAa,EACvJq2C,EAAK6nB,QAAU7gE,GAAWg5C,EAAK8nB,aACjC3mD,EAAMvS,WAAWiR,aAAamgC,EAAKunB,mBAAoBpmD,EAAMI,aAC7Dy+B,EAAK92C,WAAWlC,GAAQ,KAGtBg5C,EAAK6nB,QAAU7gE,GAAUg5C,EAAK8nB,cAChC3mD,EAAMvS,WAAWiR,aAAamgC,EAAKunB,mBAAoBpmD,GACvD6+B,EAAK92C,WAAWlC,GAAQ,MAI1BrB,KAAKq6C,GAEP7+B,EAAMpP,iBAAiB,aAAa,SAASC,GAC5CguC,EAAKmoB,WAAY,EACF,IAAZn2D,EAAEw2D,QACJxoB,EAAK0nB,aAAel1D,YAAW,WAC9BwtC,EAAKyoB,UAAUz2D,EAAGhL,KAChBg5C,EAAK2nB,iBAIVxmD,EAAMpP,iBAAiB,WAAW,SAASC,GAC3B,IAAZA,EAAEw2D,OACDxoB,EAAK0nB,cACPn1D,aAAaytC,EAAK0nB,iBAKrB1nB,EAAK0oB,gBAAgB1hE,IAGtBA,EAAOzB,QAAQ2D,WAAaiU,0CAGbnW,OAIHqC,EAASE,EAASuvB,EAAc6vC,EAAcC,EAAkBC,SAHxE1nD,EAAQna,EAAOU,aACnBohE,GAAa,EAIb3nD,EAAMpP,iBAAiB,cAAc,SAACC,GACrChF,EAAK06D,aAAel1D,YAAW,WAC9BxF,EAAKm7D,WAAY,EAEjB9+D,EAAUrC,EAAOsC,aACjBwvB,EAAezvB,EAAUA,EAAQM,WAAW,EAAI,EAChDJ,EAAUvC,EAAOwC,aACjBm/D,EAAep/D,EAAUA,EAAQI,WAAW,EAAI,EAChDi/D,EAAmB,EACnBC,EAAmB,EACnBC,GAAa,EAEb97D,EAAKy7D,UAAUz2D,EAAGhL,KAChBgG,EAAK26D,eACN,CAACt1D,SAAS,IAEb8O,EAAMpP,iBAAiB,aAAa,SAACC,OACvBmM,EAAM4qD,EAEhB/7D,EAAK46D,SACP56D,EAAKo7D,UAAUp2D,GAEX82D,IACHA,EAAa92D,EAAE0jB,QAAQ,GAAGC,QAG3BxX,EAAOnM,EAAE0jB,QAAQ,GAAGC,MAAQmzC,GAElB,EACNz/D,GAAW8U,EAAOyqD,EAAmB9vC,IACvCiwC,EAAY1/D,KAEKrC,IAChB8hE,EAAa92D,EAAE0jB,QAAQ,GAAGC,MAC1BozC,EAAUrhE,aAAakH,WAAWiR,aAAa7S,EAAKu6D,mBAAoBwB,EAAUrhE,aAAa6Z,aAC/FvU,EAAK9D,WAAW6/D,GAAW,IAI1Bx/D,IAAY4U,EAAO0qD,EAAoBF,IACzCI,EAAYx/D,KAEKvC,IAChB8hE,EAAa92D,EAAE0jB,QAAQ,GAAGC,MAC1BozC,EAAUrhE,aAAakH,WAAWiR,aAAa7S,EAAKu6D,mBAAoBwB,EAAUrhE,cAClFsF,EAAK9D,WAAW6/D,GAAW,IAK3BA,IAEF1/D,EAAU0/D,EAAUz/D,aACpBs/D,EAAmB9vC,EACnBA,EAAezvB,EAAUA,EAAQM,WAAa,EAAI,EAClDJ,EAAUw/D,EAAUv/D,aACpBq/D,EAAmBF,EACnBA,EAAep/D,EAAUA,EAAQI,WAAa,EAAI,MAGlD,CAAC0I,SAAS,IAEb8O,EAAMpP,iBAAiB,YAAY,SAACC,GAChChF,EAAK06D,cACPn1D,aAAavF,EAAK06D,cAEhB16D,EAAK46D,QACP56D,EAAKq7D,QAAQr2D,wCAKNA,EAAGhL,OACR8D,EAAU9D,EAAOU,aACrBylD,EAAgBhoD,KAAKJ,MAAM6D,cAAclB,aACzC6X,EAAiBpa,KAAKJ,MAAM6D,cAAcoL,yBAErC4zD,OAAS5gE,OACT+gE,QAAU5iE,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGC,MAAQ3jB,EAAE2jB,OAASte,EAAQuD,SAAS9P,GAASyB,UAErFxH,MAAM+F,QAAQ+B,UAAUC,IAAI,+BAG5By6D,mBAAmB17D,MAAMjC,MAAQ5C,EAAO2C,WAAa,UACrD49D,mBAAmB17D,MAAMb,OAAShE,EAAOwa,YAAc,KAE5D1W,EAAQ8D,WAAWiR,aAAa1a,KAAKoiE,mBAAoBz8D,GACzDA,EAAQ8D,WAAWxB,YAAYtC,QAG1B28D,aAAe38D,EAAQkkC,WAAU,QACjCy4B,aAAa56D,UAAUC,IAAI,yBAE3B/H,MAAM6D,cAAclB,aAAa2F,YAAYlI,KAAKsiE,mBAElDA,aAAa57D,MAAMU,KAAO,SAC1Bk7D,aAAa57D,MAAMO,OAAU+gD,EAAcp5C,aAAewL,EAAe7Q,aAAgB,KAE1FvJ,KAAKgjE,iBACHa,iBAELx9D,SAAS8pB,KAAKvjB,iBAAiB,YAAa5M,KAAKijE,WACjD58D,SAAS8pB,KAAKvjB,iBAAiB,UAAW5M,KAAKkjE,eAG3CD,UAAUp2D,iDAIVjN,MAAM6D,cAAciU,eAAe9U,SAAQ,SAASf,GACrDA,EAAOzB,QAAQ2D,WAAWq/D,WAC5BvhE,EAAOU,aAAaqK,iBAAiB,YAAa/K,EAAOzB,QAAQ2D,WAAWq/D,8DAMzExjE,MAAM6D,cAAciU,eAAe9U,SAAQ,SAASf,GACrDA,EAAOzB,QAAQ2D,WAAWq/D,WAC5BvhE,EAAOU,aAAagpB,oBAAoB,YAAa1pB,EAAOzB,QAAQ2D,WAAWq/D,iDAKvEvhE,EAAQ+B,OACdkgE,EAAc9jE,KAAKyiE,OAAOpkD,gBAEzBqkD,MAAQ7gE,OACR8gE,WAAa/+D,EAEfA,EACF/B,EAAOwc,WAAWzb,SAAQ,SAASC,EAAM8H,OACpCqoC,EAASnwC,EAAKN,YAAW,GAE1BywC,EAAOvpC,YAAcq6D,EAAYn5D,IACnCqoC,EAAOvpC,WAAWiR,aAAaopD,EAAYn5D,GAAGpI,aAAcywC,EAAO52B,gBAIrEva,EAAOwc,WAAWzb,SAAQ,SAASC,EAAM8H,OACpCqoC,EAASnwC,EAAKN,YAAW,GAE1BywC,EAAOvpC,YAAcq6D,EAAYn5D,IACnCqoC,EAAOvpC,WAAWiR,aAAaopD,EAAYn5D,GAAGpI,aAAcywC,sCAMxDnmC,IACQ,IAAZA,EAAEw2D,OAAerjE,KAAKgjE,kBACnBe,wBAEA3B,mBAAmB34D,WAAWiR,aAAa1a,KAAKyiE,OAAOlgE,aAAcvC,KAAKoiE,mBAAmBhmD,kBAC7FgmD,mBAAmB34D,WAAWxB,YAAYjI,KAAKoiE,yBAC/CE,aAAa74D,WAAWxB,YAAYjI,KAAKsiE,mBAEzC1iE,MAAM+F,QAAQ+B,UAAUmN,OAAO,0BAEjC7U,KAAK0iE,YACF9iE,MAAM6D,cAAcsZ,iBAAiB/c,KAAKyiE,OAAQziE,KAAK0iE,MAAO1iE,KAAK2iE,iBAGpEF,QAAS,OACTC,OAAQ,OACRC,YAAa,EAEd3iE,KAAKgjE,YACR38D,SAAS8pB,KAAK5E,oBAAoB,YAAavrB,KAAKijE,WACpD58D,SAAS8pB,KAAK5E,oBAAoB,UAAWvrB,KAAKkjE,6CAK3Cr2D,OAITm3D,SAHIC,EAAejkE,KAAKJ,MAAM6D,cAAclB,aAC5C6T,EAAa6tD,EAAa7tD,WAC1B8tD,GAASlkE,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGC,MAAQ3jB,EAAE2jB,OAASte,EAAQuD,SAASwuD,GAAc78D,KAAQgP,OAG5FksD,aAAa57D,MAAMU,KAAQ88D,EAAOlkE,KAAK4iE,OAAU,KAEnDsB,EAAO9tD,EAAapW,KAAK6iE,mBACvB7iE,KAAK+iE,yBACHA,kBAAoB11D,YAAW,WACnC22D,EAAY9zD,KAAKG,IAAI,EAAE+F,EAAW,GAClCtJ,EAAKlN,MAAMgJ,WAAWrG,aAAa6T,WAAa4tD,EAChDl3D,EAAKi2D,mBAAoB,IACvB,KAIF3sD,EAAa6tD,EAAa7zD,YAAc8zD,EAAOlkE,KAAK6iE,mBAClD7iE,KAAK+iE,yBACHA,kBAAoB11D,YAAW,WACnC22D,EAAY9zD,KAAKI,IAAI2zD,EAAa7zD,YAAagG,EAAW,GAC1DtJ,EAAKlN,MAAMgJ,WAAWrG,aAAa6T,WAAa4tD,EAChDl3D,EAAKi2D,mBAAoB,IACvB,YAlSmB3xC,GAwS1B+wC,GAAY3tC,WAAa,iBCxSnB2vC,4CAEOvkE,yCACLA,IAEDwiE,mBAAqBt4D,EAAKu4D,6BAC1BC,cAAe,IACfC,cAAe,IACfC,YAAc,MACdC,QAAS,IACTniD,OAAQ,IACR8jD,YAAa,IACbC,WAAY,IACZC,OAAS,IACT1B,OAAS,IAETK,UAAYn5D,EAAKm5D,UAAUziE,aAC3B0iE,QAAUp5D,EAAKo5D,QAAQ1iE,aACvB+jE,mBAAoB,IAEpBvB,WAAY,IAEZrsC,YAAa,IACb6tC,2BAA4B,IAC5BC,6BAA8B,IAC9BC,mBAAqB,KACrBluC,YAAc,KAEdmuC,gBAAiB,IACjBC,cAAe,IAEfvwC,oBAAoB,eAAe,KACnCA,oBAAoB,8BAA8B,KAClDA,oBAAoB,gCAAgC,KACpDA,oBAAoB,qBAAqB,KACzCA,oBAAoB,sBAAuB,YAE3CC,qBAAqB,gFAItBppB,EAAK7E,SAASC,cAAc,cAEhC4E,EAAGxD,UAAUC,IAAI,iBACjBuD,EAAGxD,UAAUC,IAAI,6BAEVuD,uCAIJlL,KAAKJ,MAAM6B,QAAQkwD,mBAChB6S,0BAA4BxkE,KAAKJ,MAAM6B,QAAQojE,gCAC/CJ,4BAA8BzkE,KAAKJ,MAAM6B,QAAQqjE,kCAEjDnuC,WAAa32B,KAAKwkE,2BAA6BxkE,KAAKykE,iCAEpDzjE,UAAU,YAAahB,KAAK+kE,eAAevkE,KAAKR,YAChDgB,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,YACpDgB,UAAU,WAAYhB,KAAKyY,cAAcjY,KAAKR,sDAI/B8gB,OACjB+5B,EAAO76C,KACXgY,EAAS,GAITA,EAAOgtD,QAAU,SAASn4D,GACzBguC,EAAKoqB,aAAap4D,EAAGzH,MACpB5E,KAAKq6C,GAGP7iC,EAAOorD,UAAY,SAASv2D,OASrB+H,EARD/H,EAAE6jB,MAAQxe,EAAQuD,SAASqL,EAAMnb,SAASqB,IAAO6zC,EAAKj7C,MAAMgJ,WAAWjD,QAAQmQ,UAAcgL,EAAMzE,YAAc,EAClHw+B,EAAKv6B,QAAUQ,GAAU+5B,EAAKupB,cAC5BxvD,EAAQkM,EAAMve,cACZkH,WAAWiR,aAAamgC,EAAKunB,mBAAoBxtD,EAAMwH,aAC7Dy+B,EAAK+W,QAAQ9wC,GAAO,KAGlB+5B,EAAKv6B,QAAUQ,GAAS+5B,EAAKupB,cAC3BxvD,EAAQkM,EAAMve,cACT2iE,kBACRtwD,EAAMnL,WAAWiR,aAAamgC,EAAKunB,mBAAoBxtD,GACvDimC,EAAK+W,QAAQ9wC,GAAO,KAItBtgB,KAAKq6C,GAEP/5B,EAAM1gB,QAAQwxD,QAAU55C,wCAGX5S,OAGbwP,EAFIimC,EAAO76C,KACXgY,EAAS,GAITA,EAAOgtD,QAAU,SAASn4D,GACzBguC,EAAKoqB,aAAap4D,EAAGzH,IACpB5E,KAAKq6C,GAGP7iC,EAAOorD,UAAY,SAASv2D,OACvB+H,EAAQxP,EAAI7C,aAEXsK,EAAE6jB,MAAQxe,EAAQuD,SAASb,GAAO5N,IAAO6zC,EAAKj7C,MAAMgJ,WAAWjD,QAAQmQ,UAAc1Q,EAAIiX,YAAc,EACxGw+B,EAAKv6B,QAAUlb,GAAQy1C,EAAKupB,aAC9BxvD,EAAMnL,WAAWiR,aAAamgC,EAAKunB,mBAAoBxtD,EAAMwH,aAC7Dy+B,EAAK+W,QAAQxsD,GAAK,KAGhBy1C,EAAKv6B,QAAUlb,GAAOy1C,EAAKupB,cAC7BxvD,EAAMnL,WAAWiR,aAAamgC,EAAKunB,mBAAoBxtD,GACvDimC,EAAK+W,QAAQxsD,GAAK,KAGnB5E,KAAKq6C,GAGH76C,KAAKqkE,aAERzvD,EAAQxP,EAAI7C,cAENqK,iBAAiB,aAAa,SAASC,GAC7B,IAAZA,EAAEw2D,QACJxoB,EAAK0nB,aAAel1D,YAAW,WAC9BwtC,EAAKyoB,UAAUz2D,EAAGzH,KAChBy1C,EAAK2nB,iBAIV5tD,EAAMhI,iBAAiB,WAAW,SAASC,GAC3B,IAAZA,EAAEw2D,OACDxoB,EAAK0nB,cACPn1D,aAAaytC,EAAK0nB,sBAKhBgB,gBAAgBn+D,EAAKA,EAAI7C,eAG/B6C,EAAIhF,QAAQwxD,QAAU55C,2CAGNnW,GACbA,EAAO0F,WAAW49D,YAAgD,IAAnCnlE,KAAKJ,MAAM6B,QAAQkwD,mBAC/C0S,WAAY,0CAIJxhE,MACXA,EAAKhB,OAAO0F,WAAW49D,YAAgD,IAAnCnlE,KAAKJ,MAAM6B,QAAQkwD,YAAsB,KAC3E9W,EAAO76C,KACXgzC,EAASnwC,EAAKN,YAAW,GAEzBywC,EAAOpmC,iBAAiB,aAAa,SAASC,GAC9B,IAAZA,EAAEw2D,QACJxoB,EAAK0nB,aAAel1D,YAAW,WAC9BwtC,EAAKyoB,UAAUz2D,EAAGhK,EAAKuC,OACrBy1C,EAAK2nB,iBAIVxvB,EAAOpmC,iBAAiB,WAAW,SAASC,GAC5B,IAAZA,EAAEw2D,OACDxoB,EAAK0nB,cACPn1D,aAAaytC,EAAK0nB,sBAKhBgB,gBAAgB1gE,EAAKuC,IAAK4tC,4CAIjB5tC,EAAKO,OAGR+Y,EAASC,EAASymD,EAAeC,EAAeC,EAAmBC,SAF3EC,GAAa,EAIjB7/D,EAAQiH,iBAAiB,cAAc,SAACC,GACvChF,EAAK06D,aAAel1D,YAAW,WAC9BxF,EAAKm7D,WAAY,EAEjBtkD,EAAUtZ,EAAIsZ,UACd0mD,EAAgB1mD,EAAUA,EAAQrC,YAAY,EAAI,EAClDsC,EAAUvZ,EAAIuZ,UACd0mD,EAAgB1mD,EAAUA,EAAQtC,YAAY,EAAI,EAClDipD,EAAoB,EACpBC,EAAoB,EACpBC,GAAa,EAEb39D,EAAKy7D,UAAUz2D,EAAGzH,KAChByC,EAAK26D,eACN,CAACt1D,SAAS,SACRu1D,OAAQziE,KAAKsgB,MAAOtgB,KAAKokE,WAC9Bz+D,EAAQiH,iBAAiB,aAAa,SAACC,OAEzBmM,EAAMuF,EAEhB1W,EAAK46D,SACP51D,EAAEyzB,iBAEFz4B,EAAKo7D,UAAUp2D,GAEX24D,IACHA,EAAa34D,EAAE0jB,QAAQ,GAAGG,QAG3B1X,EAAOnM,EAAE0jB,QAAQ,GAAGG,MAAQ80C,GAElB,EACN9mD,GAAW1F,EAAOssD,EAAoBF,IACxC7mD,EAAYG,KAEKtZ,IAChBogE,EAAa34D,EAAE0jB,QAAQ,GAAGG,MAC1BnS,EAAUhc,aAAakH,WAAWiR,aAAa7S,EAAKu6D,mBAAoB7jD,EAAUhc,aAAa6Z,aAC/FvU,EAAK+pD,QAAQrzC,GAAW,IAIvBI,IAAY3F,EAAOusD,EAAqBF,IAC1C9mD,EAAYI,KAEKvZ,IAChBogE,EAAa34D,EAAE0jB,QAAQ,GAAGG,MAC1BnS,EAAUhc,aAAakH,WAAWiR,aAAa7S,EAAKu6D,mBAAoB7jD,EAAUhc,cAClFsF,EAAK+pD,QAAQrzC,GAAW,IAKxBA,IAEFG,EAAUH,EAAUG,UACpB4mD,EAAoBF,EACpBA,EAAgB1mD,EAAUA,EAAQrC,YAAc,EAAI,EACpDsC,EAAUJ,EAAUI,UACpB4mD,EAAoBF,EACpBA,EAAgB1mD,EAAUA,EAAQtC,YAAc,EAAI,OAKvD1W,EAAQiH,iBAAiB,YAAY,SAACC,GAClChF,EAAK06D,cACPn1D,aAAavF,EAAK06D,cAEhB16D,EAAK46D,SACP56D,EAAKq7D,QAAQr2D,GACbhF,EAAKm7D,WAAY,oDAMdpjE,MAAMgJ,WAAW+L,iBAAiB/R,SAAQ,SAACwC,IAC9B,QAAbA,EAAIrD,MAA+B,UAAbqD,EAAIrD,OAAqBqD,EAAIhF,QAAQwxD,SAAWxsD,EAAIhF,QAAQwxD,QAAQwR,WAC7Fh+D,EAAI7C,aAAaqK,iBAAiB,YAAaxH,EAAIhF,QAAQwxD,QAAQwR,8DAMhExjE,MAAMgJ,WAAW+L,iBAAiB/R,SAAQ,SAACwC,IAC9B,QAAbA,EAAIrD,MAA+B,UAAbqD,EAAIrD,OAAqBqD,EAAIhF,QAAQwxD,SAAWxsD,EAAIhF,QAAQwxD,QAAQwR,WAC7Fh+D,EAAI7C,aAAagpB,oBAAoB,YAAanmB,EAAIhF,QAAQwxD,QAAQwR,gDAK/Dv2D,EAAGzH,OACRO,EAAUP,EAAI7C,kBAEbkjE,iBAAiB54D,EAAGzH,QAEpBq9D,OAASr9D,OAETxF,MAAM+F,QAAQ+B,UAAUC,IAAI,+BAG5By6D,mBAAmB17D,MAAMjC,MAAQW,EAAIZ,WAAa,UAClD49D,mBAAmB17D,MAAMb,OAAST,EAAIiX,YAAc,KAErDrc,KAAK22B,iBAIH/2B,MAAM+F,QAAQ+B,UAAUC,IAAI,oCAC5B+9D,gBAAgBtgE,KAJrBO,EAAQ8D,WAAWiR,aAAa1a,KAAKoiE,mBAAoBz8D,GACzDA,EAAQ8D,WAAWxB,YAAYtC,SAO3B28D,aAAe38D,EAAQkkC,WAAU,QACjCy4B,aAAa56D,UAAUC,IAAI,oBAE7B3H,KAAK22B,YACPtwB,SAAS8pB,KAAKjoB,YAAYlI,KAAKsiE,mBAC1BA,aAAa57D,MAAMU,KAAO,SAC1Bk7D,aAAa57D,MAAMM,IAAM,SACzBs7D,aAAa57D,MAAMjC,MAAQzE,KAAKJ,MAAM+F,QAAQyK,YAAc,UAC5DkyD,aAAa57D,MAAM0zC,WAAa,cAChCkoB,aAAa57D,MAAM+0C,SAAW,cAC9B6mB,aAAa57D,MAAMi/D,cAAgB,cAEnC/lE,MAAMgJ,WAAWynD,kBAAkBnoD,YAAYlI,KAAKsiE,mBAEpDA,aAAa57D,MAAMU,KAAO,SAC1Bk7D,aAAa57D,MAAMM,IAAM,SAEzB68D,kBAGNx9D,SAAS8pB,KAAKvjB,iBAAiB,YAAa5M,KAAKijE,WACjD58D,SAAS8pB,KAAKvjB,iBAAiB,UAAW5M,KAAKkjE,cAE1Cx6D,iBAAiB,YAAatD,EAAIrC,qBAElCkgE,UAAUp2D,4CAGCA,EAAGzH,OAGnBO,EAASwP,EAFLqb,EAAQxwB,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGC,MAAQ3jB,EAAE2jB,MACpDE,EAAQ1wB,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGG,MAAQ7jB,EAAE6jB,MAGhD/qB,EAAUP,EAAI7C,aACXvC,KAAK22B,YACPxhB,EAAWxP,EAAQmL,6BAEd8xD,OAASztD,EAAS/N,KAAOopB,EAAQpe,OAAOI,iBACxC8xD,OAASnvD,EAASnO,IAAM0pB,EAAQte,OAAOC,kBAEvCiyD,OAAU5zC,EAAQ/qB,EAAQmL,wBAAwB9J,oCAIjD6F,GACHA,GAAiB,IAAZA,EAAEw2D,QAAerjE,KAAKgjE,iBACzBe,mBAED/jE,KAAK22B,kBACHyrC,mBAAmB34D,WAAWiR,aAAa1a,KAAKyiE,OAAOlgE,aAAcvC,KAAKoiE,mBAAmBhmD,kBAC7FgmD,mBAAmB34D,WAAWxB,YAAYjI,KAAKoiE,0BAGhDE,aAAa74D,WAAWxB,YAAYjI,KAAKsiE,mBAEzC1iE,MAAM+F,QAAQ+B,UAAUmN,OAAO,0BAEjC7U,KAAKsgB,WACF1gB,MAAMgJ,WAAWgpD,QAAQ5xD,KAAKyiE,OAAQziE,KAAKsgB,MAAOtgB,KAAKokE,iBAEvD17D,iBAAiB,mBAAoB1I,KAAKyiE,OAAO1/D,qBAGlD0/D,QAAS,OACTniD,OAAQ,OACR8jD,YAAa,EAElB/9D,SAAS8pB,KAAK5E,oBAAoB,YAAavrB,KAAKijE,WACpD58D,SAAS8pB,KAAK5E,oBAAoB,UAAWvrB,KAAKkjE,SAE/CljE,KAAK22B,kBACF/2B,MAAM+F,QAAQ+B,UAAUmN,OAAO,oCAC/B+wD,yDAKAxgE,EAAKxB,QACP0c,MAAQlb,OACRg/D,WAAaxgE,oCAGTiJ,GACN7M,KAAK22B,gBACFkvC,qBAAqBp9D,KAAKzI,KAAM6M,QAEhCi5D,eAAer9D,KAAKzI,KAAM6M,0CAIlBA,OACVk5D,EAAY/lE,KAAKJ,MAAMgJ,WAAWrG,aACtCuT,EAAYiwD,EAAUjwD,UACtBkwD,GAAShmE,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGG,MAAQ7jB,EAAE6jB,OAASq1C,EAAUj1D,wBAAwB9J,IAAO8O,OAG9FwsD,aAAa57D,MAAMM,IAAOg/D,EAAOhmE,KAAKskE,OAAU,kDAGjCz3D,QACfy1D,aAAa57D,MAAMU,KAAQpH,KAAK4iE,QAAU5iE,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGC,MAAQ3jB,EAAE2jB,OAAU,UAC5F8xC,aAAa57D,MAAMM,IAAOhH,KAAKskE,QAAUtkE,KAAKgjE,UAAYn2D,EAAE0jB,QAAQ,GAAGG,MAAQ7jB,EAAE6jB,OAAU,4CAGlF7jB,EAAGlH,EAASP,QACrBsD,iBAAiB,yBAA0BmE,EAAGlH,IAASP,GAAMA,EAAIrC,wDAIvDqC,OACX6gE,SAEDjmE,KAAKwkE,4BACPyB,EAAmBjmE,KAAKkmE,iBAAiBlmE,KAAKwkE,gCAEzC97D,iBAAiB,0BAA2Bu9D,QAE5Ch4B,UAAUjuC,KAAKwkE,0BAA2B,UAAW,UAAW,CACpEp/D,IAAIA,KAIHpF,KAAKykE,mCAEFC,mBAAqB,GAEtB1xD,MAAMC,QAAQjT,KAAKykE,oCACjBA,4BAA8B,CAACzkE,KAAKykE,mCAGrCA,4BAA4B7hE,SAAQ,SAACosB,GACrB,iBAAVA,EACTliB,EAAK43D,mBAAqB53D,EAAK43D,mBAAmBpnD,OAAOtK,MAAM2kB,UAAUvU,MAAM3a,KAAKpC,SAAS6oB,iBAAiBF,KAE9GliB,EAAK43D,mBAAmB5hE,KAAKksB,WAI1B01C,mBAAmB9hE,SAAQ,SAAC+C,OAC5BwgE,EAAY,SAACt5D,GAChBC,EAAKs5D,eAAev5D,EAAGlH,EAASmH,EAAK21D,SAGtC98D,EAAQiH,iBAAiB,UAAWu5D,GACpCxgE,EAAQ0gE,0BAA4BF,EAEpCxgE,EAAQ+B,UAAUC,IAAI,wFAOpBs+D,EAEDjmE,KAAKwkE,4BACPyB,EAAmBjmE,KAAKkmE,iBAAiBlmE,KAAKwkE,gCAEzC97D,iBAAiB,yBAA0Bu9D,QAE3Ch4B,UAAUjuC,KAAKwkE,0BAA2B,UAAW,oBAGtDE,mBAAmB9hE,SAAQ,SAAC+C,GAChCA,EAAQ+B,UAAUmN,OAAO,iCACzBlP,EAAQ4lB,oBAAoB,UAAW5lB,EAAQ0gE,kCACxC1gE,EAAQ0gE,6DAKTzmE,EAAOwF,UACVpF,KAAK2kE,gBAoBR3gE,QAAQC,KAAK,+EAAgFjE,KAAK2kE,iBAC3F,SApBFA,eAAiB/kE,OACjBglE,aAAex/D,OAEfxF,MAAM+F,QAAQ+B,UAAUC,IAAI,sCAE5B/H,MAAMgJ,WAAW+L,iBAAiB/R,SAAQ,SAACwC,GAC/B,QAAbA,EAAIrD,MAAkBqD,EAAIhF,QAAQwxD,SAAWxsD,EAAIhF,QAAQwxD,QAAQoT,SACnE5/D,EAAI7C,aAAaqK,iBAAiB,UAAWxH,EAAIhF,QAAQwxD,QAAQoT,iBAI9DT,kBAAoBvkE,KAAKilE,aAAazkE,KAAKR,WAE3CJ,MAAM+F,QAAQiH,iBAAiB,UAAW5M,KAAKukE,wBAE/C77D,iBAAiB,4BAA6BtD,EAAKxF,IAEjD,sCAQEA,GACPA,IAAUI,KAAK2kE,qBACZA,gBAAiB,OACjBC,cAAe,OAEfhlE,MAAM+F,QAAQ+B,UAAUmN,OAAO,sCAE/BjV,MAAMgJ,WAAW+L,iBAAiB/R,SAAQ,SAACwC,GAC/B,QAAbA,EAAIrD,MAAkBqD,EAAIhF,QAAQwxD,SAAWxsD,EAAIhF,QAAQwxD,QAAQoT,SACnE5/D,EAAI7C,aAAagpB,oBAAoB,UAAWnmB,EAAIhF,QAAQwxD,QAAQoT,iBAIjEplE,MAAM+F,QAAQ4lB,oBAAoB,UAAWvrB,KAAKukE,wBAElD77D,iBAAiB,2BAA4B9I,IAElDoE,QAAQC,KAAK,uGAIFrE,EAAOwF,EAAK+rC,OACpBm1B,GAAS,KAEVn1B,EAAQ,UAEInxC,KAAKJ,MAAM6B,QAAQ8kE,wBAC3B,SACLD,EAAStmE,KAAKwmE,QAAQxmE,KAAKJ,MAAM6B,QAAQ8kE,6BAGpC,WACLD,EAAStmE,KAAKJ,MAAM6B,QAAQ8kE,kBAI1BD,EACFA,EAAO79D,KAAKzI,KAAMA,KAAKyiE,OAAO1/D,eAAgBqC,EAAMA,EAAIrC,oBAAiB5C,EAAWP,GAEjFI,KAAKJ,MAAM6B,QAAQ8kE,mBACrBviE,QAAQC,KAAK,8CAA+CjE,KAAKJ,MAAM6B,QAAQ8kE,wBAI5E79D,iBAAiB,kBAAmB1I,KAAKyiE,OAAO1/D,eAAgBqC,EAAMA,EAAIrC,oBAAiB5C,EAAWP,aAEtG8I,iBAAiB,wBAAyB1I,KAAKyiE,OAAO1/D,eAAgBqC,EAAMA,EAAIrC,oBAAiB5C,EAAWP,QAG7GsjE,+CAGOr2D,EAAGzH,OACXhD,GAAW,EACf+uC,GAAU,SAEVtkC,EAAEgpC,6BAEY71C,KAAKJ,MAAM6B,QAAQglE,0BAC3B,SACLrkE,EAAWpC,KAAK0mE,UAAU1mE,KAAKJ,MAAM6B,QAAQglE,+BAGxC,WACLrkE,EAAWpC,KAAKJ,MAAM6B,QAAQglE,oBAI5BrkE,EACF+uC,EAAU/uC,EAASqG,KAAKzI,KAAMA,KAAK4kE,aAAa7hE,eAAgBqC,EAAMA,EAAIrC,oBAAiB5C,EAAWH,KAAK2kE,gBAE3G3gE,QAAQC,KAAK,gDAAiDjE,KAAKJ,MAAM6B,QAAQglE,qBAG/Et1B,OACGzoC,iBAAiB,sBAAuB1I,KAAK4kE,aAAa7hE,eAAgBqC,EAAMA,EAAIrC,oBAAiB5C,EAAWH,KAAK2kE,qBAErHj8D,iBAAiB,4BAA6B1I,KAAK4kE,aAAa7hE,eAAgBqC,EAAMA,EAAIrC,oBAAiB5C,EAAWH,KAAK2kE,qBAG5H12B,UAAUjuC,KAAK2kE,eAAgB,UAAW,eAAgB,CAC9Dv/D,IAAIA,EACJ+rC,QAAQA,0CAIIvxC,EAAO82B,EAAQ72B,UACrB62B,OACD,iBACE12B,KAAK2mE,QAAQ/mE,EAAOC,EAAKuF,SAG3B,oBACEpF,KAAK4mE,WAAWhnE,OAGlB,sBACEI,KAAK6mE,aAAajnE,EAAOC,EAAKuF,IAAKvF,EAAKsxC,iBAjlB3B/f,GAulBvB+yC,GAASxsC,UAAU+uC,UAAY,CAC9B7jC,OAAO,SAASjH,EAAStb,EAAOwmD,eAC1BlnE,MAAMgnB,OAAOgV,EAAQv2B,eAAWlF,EAAWmgB,IACzC,GAGR3Y,IAAI,SAASi0B,EAAStb,EAAOwmD,eACvBlnE,MAAMgnB,OAAOgV,EAAQv2B,YACnB,GAGRkP,OAAO,SAASqnB,EAAStb,EAAOwmD,WAC5BxmD,IACFA,EAAM/L,OAAOqnB,EAAQv2B,YACd,IAMTmnB,QAAQ,SAASoP,EAAStb,EAAOwmD,WAC7BxmD,SACG1gB,MAAMgnB,OAAOgV,EAAQv2B,eAAWlF,EAAWmgB,GAChDA,YACO,KAOV6jD,GAASxsC,UAAU6uC,QAAU,QACrB,SAAS5qC,EAAStb,EAAOymD,GAC/BnrC,aAIFuoC,GAAS3vC,WAAa,cC3nBhBwyC,4CAEOpnE,yCACLA,IAEDy8B,aAAe,CAAC,GAAI,OAAQ,OAAQ,eACpC4qC,SAAU,IAEV3yC,qBAAqB,aACrBA,qBAAqB,mBACrBA,qBAAqB,iBACrBA,qBAAqB,uBACrBA,qBAAqB,iBACrBA,qBAAqB,uBACrBA,qBAAqB,sBACrBA,qBAAqB,4BACrBA,qBAAqB,oEAIrBtzB,UAAU,sBAAuBhB,KAAKknE,cAAc1mE,KAAKR,YACzDgB,UAAU,qBAAsBhB,KAAKmnE,WAAW3mE,KAAKR,YACrDgB,UAAU,gBAAiBhB,KAAKs8B,iBAAiB97B,KAAKR,YACtDgB,UAAU,uBAAwBhB,KAAK8oC,eAAetoC,KAAKR,YAC3DgB,UAAU,oBAAqBhB,KAAK8oC,eAAetoC,KAAKR,8CAG/CoF,EAAK0a,EAAUF,UACtB5f,KAAKu8B,aAAazc,EAAU,OAAQF,4CAI3B/d,cACZsR,GAAQ,EACZ6E,EAAS,QAEJqkB,aAAaz5B,SAAQ,SAACb,OAE1BygC,EADIthC,EAAM,WAAaa,EAAK06B,OAAO,GAAGC,cAAgB36B,EAAKqhB,MAAM,IAG9DvhB,EAAO0F,WAAWrG,KACpBshC,EAAU36B,EAAKu/D,cAAcvlE,EAAO0F,WAAWrG,OAG9CiS,GAAQ,EAER6E,EAAO9W,GAAO,CACbshC,QAAQA,EACRjW,OAAQ1qB,EAAO0F,WAAWrG,EAAM,WAAa,QAM9CiS,IACFtR,EAAOzB,QAAQkF,OAAS0S,yCAIZtW,OACT8gC,GAAU,WAGA9gC,QACR,SACFslE,EAAQK,SAAS3lE,GACnB8gC,EAAUwkC,EAAQK,SAAS3lE,GAE3BsC,QAAQC,KAAK,oDAAqDvC,aAI9D,WACL8gC,EAAU9gC,SAIJ8gC,uCAIK3iC,EAAMkC,EAAM6d,OAExBle,EADIR,EAAM,WAAaa,EAAK06B,OAAO,GAAGC,cAAgB36B,EAAKqhB,MAAM,WAG9DpjB,KAAKinE,cAEFrnE,MAAM6D,cAAcq5B,UAAS,SAACj7B,OAC9B2gC,EAASjW,EAAQxmB,EAElBlE,EAAOzB,QAAQkF,SACjBk9B,EAAU3gC,EAAOzB,QAAQkF,OAAOpE,IAAQW,EAAOzB,QAAQkF,OAAOk9B,UAAW,KAGxE9gC,EAAQG,EAAOuE,mBAAqC,IAAhBwZ,EAA8BA,EAAc/f,GAErE,QAARkC,QAAmC,IAAVL,IAC3BqE,EAAYlE,EAAOkB,eACnBwpB,EAAmC,mBAAnBiW,EAAQjW,OAAwBiW,EAAQjW,OAAO7qB,EAAO7B,EAAMkC,EAAMgE,GAAay8B,EAAQjW,OACvG1qB,EAAOiH,cAAcjJ,EAAM2iC,EAAQA,QAAQ9gC,EAAO7B,EAAMkC,EAAMwqB,EAAQxmB,SAOpElG,wCAIMgD,EAAMnB,MAChBmB,EAAKhB,OAAOzB,QAAQkF,OAAO,KACzBk9B,EAAU3/B,EAAKhB,OAAOzB,QAAQkF,OAAOgiE,aAAezkE,EAAKhB,OAAOzB,QAAQkF,OAAOk9B,UAAW,EAC9F1iB,EAAW,MAER0iB,SACF1iB,EAAWtU,OAAOqG,OAAOiO,EAAUjd,EAAKuC,IAAIC,WAC5CxC,EAAKhB,OAAOiH,cAAcgX,EAAUpe,GAC7B8gC,EAAQA,QAAQ9gC,EAAOoe,EAAU,OAAQ0iB,EAAQjW,OAAQ1pB,EAAKE,uBAIhErB,qCAGGmB,OACNgoB,EAAQhoB,EAAKhB,OAAO0F,WAAW4/D,WAEhCt8C,IACE7X,MAAMC,QAAQ4X,KACjBA,EAAQ,CAACA,IAGVA,EAAMjoB,SAAQ,SAACsnD,OACVqd,EAAW1kE,EAAKuC,IAAIqU,QAAQywC,GAE7Bqd,GACFA,EAAShiE,SAASgiE,EAAStiE,YAAY,GAAM,6CAO3CgiE,SAAU,yCAIVA,SAAU,SApJK71C,GAwJtB41C,GAAQxyC,WAAa,UAGrBwyC,GAAQK,SC/JO,UCIA,CACd92D,KCLc,SAASi3D,EAAUC,EAAYC,EAAaC,EAAWC,OACjE18D,EAAK7E,SAASC,cAAc,QAChCuhE,EAAYxhE,SAASC,cAAc,QACnCwhE,EAAUzhE,SAASC,cAAc,QACjCyhE,EAAO1hE,SAASC,cAAc,QAC9B0hE,EAAU3hE,SAASC,cAAc,QACjC2hE,EAAS5hE,SAASC,cAAc,oBAE3B1G,MAAMQ,QAAQC,SAAS4N,SAAS,8BAA8B,SAACvM,GACnEmmE,EAAU//D,UAAYpG,UAGlB9B,MAAMQ,QAAQC,SAAS4N,SAAS,yBAAyB,SAACvM,GAC9DqmE,EAAKjgE,UAAYpG,UAGb9B,MAAMQ,QAAQC,SAAS4N,SAAS,2BAA2B,SAACvM,GAChEumE,EAAOngE,UAAYpG,KAGjBimE,GACFG,EAAQhgE,UAAY,IAAM2/D,EAAa,IAAMv3D,KAAKI,IAAKm3D,EAAaD,EAAW,EAAIG,GAAa,IAEhGK,EAAQlgE,UAAY,IAAM6/D,EAAY,IAEtCz8D,EAAGhD,YAAY2/D,GACf38D,EAAGhD,YAAY4/D,GACf58D,EAAGhD,YAAY6/D,GACf78D,EAAGhD,YAAY8/D,GACf98D,EAAGhD,YAAY+/D,KAEfH,EAAQhgE,UAAY,MAEpBoD,EAAGhD,YAAY2/D,GACf38D,EAAGhD,YAAY4/D,GACf58D,EAAGhD,YAAY+/D,IAGT/8D,GDhCPg9D,MENc,SAASV,EAAUC,EAAYC,EAAaC,EAAWC,OAE9D18D,EAAK7E,SAASC,cAAc,QACnCuhE,EAAYxhE,SAASC,cAAc,QACnCwhE,EAAUzhE,SAASC,cAAc,QACjCyhE,EAAO1hE,SAASC,cAAc,QAC9B0hE,EAAU3hE,SAASC,cAAc,QACjC2hE,EAAS5hE,SAASC,cAAc,oBAE3B1G,MAAMQ,QAAQC,SAAS4N,SAAS,8BAA8B,SAACvM,GACnEmmE,EAAU//D,UAAYpG,KAGvBomE,EAAQhgE,UAAY,IAAM4/D,EAAc,SAEnC9nE,MAAMQ,QAAQC,SAAS4N,SAAS,yBAAyB,SAACvM,GAC9DqmE,EAAKjgE,UAAYpG,KAGlBsmE,EAAQlgE,UAAY,IAAM8/D,EAAa,SAElChoE,MAAMQ,QAAQC,SAAS4N,SAAS,4BAA4B,SAACvM,GACjEumE,EAAOngE,UAAYpG,KAGpBwJ,EAAGhD,YAAY2/D,GACf38D,EAAGhD,YAAY4/D,GACf58D,EAAGhD,YAAY6/D,GACf78D,EAAGhD,YAAY8/D,GACf98D,EAAGhD,YAAY+/D,GAER/8D,IC3BFi9D,4CAEOvoE,yCACLA,IAEDw0B,KAAO,UACPg0C,iBAAkB,IAElBziE,QAAU,OACV0iE,mBAAqB,OACrBC,YAAc,OAEdttB,KAAO,IACPutB,KAAO,IACPpV,MAAQ,IACR9iD,IAAM,IAENm4D,uBAAyB,OAEzBniD,aAAe,IAEfoiD,aAAc,IACdC,cAAe,IAEfC,UAAY,KAEZt0C,oBAAoB,cAAc,KAClCA,oBAAoB,iBAAkB,WACtCA,oBAAoB,kBAAkB,KACtCA,oBAAoB,wBAAyB,KAC7CA,oBAAoB,qBAAqB,KACzCA,oBAAoB,4BAA4B,KAChDA,oBAAoB,wBAAyB,KAC7CA,oBAAoB,0BAA0B,KAC9CA,oBAAoB,qBAAqB,KAGzCA,oBAAoB,mBAAoB,UAExCA,oBAAoB,mBAAmB,KACvCA,oBAAoB,uBAAwB,KAC5CA,oBAAoB,8BAA+B,KAEnDc,sBAAsB,aAAcrrB,EAAK8+D,WAAWpoE,cACpD20B,sBAAsB,UAAWrrB,EAAK++D,QAAQroE,cAC9C20B,sBAAsB,eAAgBrrB,EAAKg/D,iBAAiBtoE,cAC5D20B,sBAAsB,cAAerrB,EAAKi/D,gBAAgBvoE,cAC1D20B,sBAAsB,cAAerrB,EAAKk/D,YAAYxoE,cACtD20B,sBAAsB,eAAgBrrB,EAAKm/D,aAAazoE,cACxD20B,sBAAsB,WAAYrrB,EAAKo/D,SAAS1oE,cAChD20B,sBAAsB,UAAWrrB,EAAKq/D,QAAQ3oE,cAC9C20B,sBAAsB,aAAcrrB,EAAKs/D,WAAW5oE,cAGpDqnC,0BAA0B,MAAO,SAAU/9B,EAAKu/D,aAAa7oE,6DAI/DR,KAAKJ,MAAM6B,QAAQikB,iBAChB1kB,UAAU,cAAehB,KAAKqkC,YAAY7jC,KAAKR,YAC/CgB,UAAU,YAAahB,KAAKqkC,YAAY7jC,KAAKR,YAC7CgB,UAAU,iBAAkBhB,KAAKspE,oBAAoB9oE,KAAKR,YAC1DgB,UAAU,cAAehB,KAAKupE,mBAAmB/oE,KAAKR,YACtDgB,UAAU,gBAAiBhB,KAAKwpE,aAAahpE,KAAKR,OAEb,QAAvCA,KAAKJ,MAAM6B,QAAQgoE,uBAChBzoE,UAAU,sBAAuBhB,KAAK0pE,kBAAkBlpE,KAAKR,OAG1B,WAAtCA,KAAKJ,MAAM6B,QAAQkoE,sBAChB3oE,UAAU,cAAehB,KAAK4pE,iBAAiBppE,KAAKR,YACpDgB,UAAU,cAAehB,KAAK6pE,iBAAiBrpE,KAAKR,QAGvDA,KAAKJ,MAAM6B,QAAQ2mE,iBACrBpkE,QAAQ4N,MAAM,iGAGVs3B,uBAAuBlpC,KAAK8pE,mBAAmBtpE,KAAKR,MAAO,SAC3DkpC,uBAAuBlpC,KAAKonB,QAAQ5mB,KAAKR,MAAO,SAEhDuxD,sBACAwY,6BACAC,uBACGhqE,KAAKJ,MAAM6B,QAAQ2mE,uBACtBpnE,UAAU,cAAehB,KAAK4pE,iBAAiBppE,KAAKR,YACpDgB,UAAU,cAAehB,KAAK6pE,iBAAiBrpE,KAAKR,YACpDgB,UAAU,cAAehB,KAAKupE,mBAAmB/oE,KAAKR,YACtDgB,UAAU,iBAAkBhB,KAAKspE,oBAAoB9oE,KAAKR,YAE1DiqE,sBAAsBjqE,KAAKJ,MAAM6B,QAAQ2mE,iBAEJ,WAAvCpoE,KAAKJ,MAAM6B,QAAQ2mE,sBAChBpnE,UAAU,kBAAmBhB,KAAKkqE,eAAe1pE,KAAKR,kDAK5CoF,EAAK4B,OAGtB8I,EAFIlH,EAAa5I,KAAKJ,MAAMgJ,WAC5BuhE,EAAWvhE,EAAW+L,wBAGnB3N,EACCmjE,EAAS7mE,OACXwM,EAAQq6D,EAAS,GAEdvhE,EAAWgc,WAAWthB,SACxBwM,EAAQlH,EAAWgc,WAAWhc,EAAWgc,WAAWthB,OAAO,GAC3D0D,GAAM,GAILmjE,EAAS7mE,SACXwM,EAAQq6D,EAASA,EAAS7mE,OAAS,GACnC0D,IAAMmjE,EAAS7mE,OAAStD,KAAKg7C,OAIxB,CAAClrC,MAAAA,EAAO9I,IAAAA,oDAIXojE,EAAWC,EAEZrqE,KAAKJ,MAAM6B,QAAQ6oE,oBAChBtvB,KAAOh7C,KAAKJ,MAAM6B,QAAQ6oE,iBAE/BF,EAAY/jE,SAASC,cAAc,QACzBoB,UAAUC,IAAI,iBACxByiE,EAAU1jE,MAAMsa,WAAa,UAE7BqpD,EAAahkE,SAASC,cAAc,QACzBoB,UAAUC,IAAI,kBACzB0iE,EAAWviE,UAAY,gBAEvBsiE,EAAUliE,YAAYmiE,QAEjBzqE,MAAMgJ,WAAWynD,kBAAkBnoD,YAAYkiE,QAE/CpvB,KAAO9qC,KAAKC,MAAMnQ,KAAKJ,MAAMgJ,WAAWrG,aAAaqM,aAAew7D,EAAU7gE,mBAE9E3J,MAAMgJ,WAAWynD,kBAAkBpoD,YAAYmiE,SAGhD1hE,iBAAiB,kBAAmB1I,KAAKg7C,WAEzCuvB,gFAIA9B,aAAc,2CAGH5oE,EAAMmY,EAAQlY,EAAQysB,UAClCvsB,KAAKyoE,cACJzoE,KAAKooE,kBAAoBtoE,IAAaE,KAAKooE,kBAAoBpoE,KAAK0oE,oBAClE3nC,OAAM,GAKbxU,EAAOg8C,KAAOvoE,KAAKuoE,KAGhBvoE,KAAKg7C,OACPzuB,EAAOyuB,KAAOh7C,KAAKg7C,MAGbzuB,2CAOSnnB,UACbpF,KAAKJ,MAAM6B,QAAQikB,aACrBtgB,EAAMpF,KAAK4I,WAAW2X,QAAQnb,IAGtBpF,KAAKqpE,aAAajkE,GAIpB2L,QAAQE,iDAGA+pC,WACZh7C,KAAKJ,MAAM6B,QAAQikB,kBAChB8kD,YAAYxvB,GACVh7C,KAAK6oE,QAAQ,2CASP7hE,EAAKyN,OACf9O,EACA8O,GAAQzU,KAAKJ,MAAMK,WAAWqsB,UACjC3mB,EAAU3F,KAAKJ,MAAMgJ,WAAWrG,cACjBsT,aAAelQ,EAAQiJ,aAAe5H,GAC5ChH,KAAKJ,MAAM6B,QAAQgpE,6BAAuD,EAAvB9kE,EAAQiJ,oBAG9Ds6D,kBACE,0DAKS34D,EAAMkV,UACpBA,GACc,UAAdzlB,KAAKo0B,WACF2M,QAIAxwB,6CAIFk5B,aAAY,EAAM,oDAInB6V,OAEC35C,QAAUU,SAASC,cAAc,aACjCX,QAAQ+B,UAAUC,IAAI,4BAEtB+iE,aAAerkE,SAASC,cAAc,aACtCokE,aAAahjE,UAAUC,IAAI,oBAEhC23C,EAASj5C,SAASC,cAAc,WACzBoB,UAAUC,IAAI,kBACrB23C,EAAO94C,aAAa,OAAQ,UAC5B84C,EAAO94C,aAAa,OAAQ,UAC5B84C,EAAO94C,aAAa,aAAc,IAClC84C,EAAO94C,aAAa,QAAS,SAExBmkE,SAAWrrB,EAAOzV,WAAU,QAC5B8gC,SAASnkE,aAAa,YAAa,cAEnCokE,QAAUtrB,EAAOzV,WAAU,QAC3B+gC,QAAQpkE,aAAa,YAAa,aAElCqkE,QAAUvrB,EAAOzV,WAAU,QAC3BghC,QAAQrkE,aAAa,YAAa,aAElCskE,QAAUxrB,EAAOzV,WAAU,QAC3BihC,QAAQtkE,aAAa,YAAa,QAEpCxG,KAAKJ,MAAM6B,QAAQspE,8BAChBC,eAAiB3kE,SAASC,cAAc,eACxC0kE,eAAetjE,UAAUC,IAAI,wFAK/BghE,EAAY,MAEb3oE,KAAKgrE,eAAe,IAEnBh4D,MAAMC,QAAQjT,KAAKJ,MAAM6B,QAAQspE,wBACnCpC,EAAY3oE,KAAKJ,MAAM6B,QAAQspE,4BAC1BpC,UAAYA,GAEwB,GAAtC3oE,KAAK2oE,UAAUj9D,QAAQ1L,KAAKg7C,OAC9B2tB,EAAUn1D,QAAQxT,KAAKg7C,eAIiB,GAAtCh7C,KAAK2oE,UAAUj9D,QAAQ1L,KAAKg7C,MAAY,CAC1C2tB,EAAY,OAEP,IAAIh+D,EAAI,EAAGA,EAAI,EAAGA,IACtBg+D,EAAU7lE,KAAK9C,KAAKg7C,KAAOrwC,QAGvBg+D,UAAYA,OAEjBA,EAAY3oE,KAAK2oE,eAIb3oE,KAAKgrE,eAAehjE,iBAAiBgjE,eAAe/iE,YAAYjI,KAAKgrE,eAAehjE,YAE1F2gE,EAAU/lE,SAAQ,SAAC2Q,OACd0uD,EAAS57D,SAASC,cAAc,UACpC27D,EAAOvgE,MAAQ6R,GAEH,IAATA,EACF1L,EAAKoG,SAAS,kBAAkB,SAASvM,GACxCugE,EAAOn6D,UAAYpG,KAGpBugE,EAAOn6D,UAAYyL,EAKpB1L,EAAKmjE,eAAe9iE,YAAY+5D,WAG5B+I,eAAetpE,MAAQ1B,KAAKg7C,0DAK9BiwB,EAAUjrE,KAAKJ,MAAM6B,QAAQypE,kBACjC5C,EAAc,KAEX2C,KAED3C,EADqB,mBAAZ2C,EACKA,EAEA9C,EAAKgD,aAAaF,UAI3B3C,YAAcA,OAEdD,mBAAqBhiE,SAASC,cAAc,aAC5C+hE,mBAAmB3gE,UAAUC,IAAI,2BAEtC3D,QAAQC,KAAK,kDAAmDgnE,gDAM/CG,OACfC,EAAiBC,SAEjBF,SAIEn9D,SAAS,oBAAoB,SAACvM,GAClCoL,EAAK69D,SAAS7iE,UAAYpG,UAGtBuM,SAAS,0BAA0B,SAACvM,GACxCoL,EAAK69D,SAASnkE,aAAa,aAAc9E,GACzCoL,EAAK69D,SAASnkE,aAAa,QAAS9E,WAGhCuM,SAAS,mBAAmB,SAACvM,GACjCoL,EAAK89D,QAAQ9iE,UAAYpG,UAGrBuM,SAAS,yBAAyB,SAACvM,GACvCoL,EAAK89D,QAAQpkE,aAAa,aAAc9E,GACxCoL,EAAK89D,QAAQpkE,aAAa,QAAS9E,WAG/BuM,SAAS,mBAAmB,SAACvM,GACjCoL,EAAK+9D,QAAQ/iE,UAAYpG,UAGrBuM,SAAS,yBAAyB,SAACvM,GACvCoL,EAAK+9D,QAAQrkE,aAAa,aAAc9E,GACxCoL,EAAK+9D,QAAQrkE,aAAa,QAAS9E,WAG/BuM,SAAS,mBAAmB,SAACvM,GACjCoL,EAAKg+D,QAAQhjE,UAAYpG,UAGrBuM,SAAS,yBAAyB,SAACvM,GACvCoL,EAAKg+D,QAAQtkE,aAAa,aAAc9E,GACxCoL,EAAKg+D,QAAQtkE,aAAa,QAAS9E,WAI/BipE,SAAS/9D,iBAAiB,SAAS,WACvCE,EAAK+7D,QAAQ,WAGT+B,QAAQh+D,iBAAiB,SAAS,WACtCE,EAAKm8D,uBAGD4B,QAAQj+D,iBAAiB,SAAS,WACtCE,EAAKo8D,mBAGD4B,QAAQl+D,iBAAiB,SAAS,WACtCE,EAAK+7D,QAAQ/7D,EAAKuD,QAGhBrQ,KAAKJ,MAAM6B,QAAQ8pE,yBAChB5lE,QAAU3F,KAAKJ,MAAM6B,QAAQ8pE,mBAGhCvrE,KAAKgrE,iBACPK,EAAkBhlE,SAASC,cAAc,cAEpC2H,SAAS,wBAAwB,SAACvM,GACtCoL,EAAKk+D,eAAexkE,aAAa,aAAc9E,GAC/CoL,EAAKk+D,eAAexkE,aAAa,QAAS9E,GAC1C2pE,EAAgBvjE,UAAYpG,UAGxBiE,QAAQuC,YAAYmjE,QACpB1lE,QAAQuC,YAAYlI,KAAKgrE,qBAEzBA,eAAep+D,iBAAiB,UAAU,SAACC,GAC/CC,EAAK09D,YAAyC,QAA7B19D,EAAKk+D,eAAetpE,OAAyBoL,EAAKk+D,eAAetpE,OAClFoL,EAAK+7D,QAAQ,YAKVljE,QAAQuC,YAAYlI,KAAK2qE,eACzBhlE,QAAQuC,YAAYlI,KAAK4qE,cACzBjlE,QAAQuC,YAAYlI,KAAK0qE,mBACzB/kE,QAAQuC,YAAYlI,KAAK6qE,cACzBllE,QAAQuC,YAAYlI,KAAK8qE,SAE1B9qE,KAAKJ,MAAM6B,QAAQ8pE,mBAAsBH,IACzCprE,KAAKJ,MAAM6B,QAAQypE,oBAIlBlrE,KAAKJ,MAAM6B,QAAQ+pE,yBAClBxrE,KAAKJ,MAAM6B,QAAQ+pE,oCAAoC/uD,iBACpD7c,MAAM6B,QAAQ+pE,yBAAyBtjE,YAAYlI,KAAKqoE,oBACE,iBAAhDroE,KAAKJ,MAAM6B,QAAQ+pE,4BAClCF,EAA0BjlE,SAASmjB,cAAcxpB,KAAKJ,MAAM6B,QAAQ+pE,2BAGnEF,EAAwBpjE,YAAYlI,KAAKqoE,oBAEzCrkE,QAAQC,KAAK,wFAAyFjE,KAAKJ,MAAM6B,QAAQ+pE,gCAItHC,aAAazrE,KAAKqoE,0BAKpBoD,aAAazrE,KAAK2F,eAGnB4iE,KAAOvoE,KAAKJ,MAAM6B,QAAQiqE,2BAC1BvY,MAAQnzD,KAAKJ,MAAM6B,QAAQkqE,4BAI5Bv3C,KAAOp0B,KAAKJ,MAAM6B,QAAQkoE,6DAGVv1C,QAChB41C,qBAAoB,QACpB51C,KAAO,eAAiBA,OACxBg0C,iBAAkB,8CAIlB/mE,SAAS,wDAGCyO,QACVuW,aAAevW,mDAIb9P,KAAKqmB,gDAIFyvC,QAIJzlD,IAHFylD,GAGsB,IAAd91D,KAAKg7C,KAAiB,EAAI9qC,KAAKW,KAAKilD,EAAS91D,KAAKg7C,MAFlD,EAKTh7C,KAAKuoE,KAAOvoE,KAAKqQ,WACdk4D,KAAOvoE,KAAKqQ,mCAKbhI,GACDrI,KAAKyoE,cACQ,SAAbzoE,KAAKo0B,MAAmB/rB,UACrBkgE,KAAO,sCAMJl4D,GAEVA,EAAM5C,SAAS4C,QAEVA,IAAMA,GAAO,EAEfrQ,KAAKuoE,KAAOvoE,KAAKqQ,WACdk4D,KAAOvoE,KAAKqQ,SACZu7D,2CAKCrD,UACAA,OACD,eACEvoE,KAAK6oE,QAAQ,OAGf,cACE7oE,KAAKipE,mBAGP,cACEjpE,KAAKkpE,eAGP,cACElpE,KAAK6oE,QAAQ7oE,KAAKqQ,YAI1Bk4D,EAAO96D,SAAS86D,IAEL,GAAKA,GAAQvoE,KAAKqQ,KAAsB,UAAdrQ,KAAKo0B,WACpCm0C,KAAOA,OAEP7gB,eAEE1nD,KAAK4rE,YAEZ5nE,QAAQC,KAAK,4DAA8DjE,KAAKqQ,IAAM,IAAKk4D,GACpFx3D,QAAQE,+CAIJ7L,OAER0K,EADO9P,KAAKJ,MAAMgJ,WAAW+L,eAAe3U,KAAKqmB,aAAe,GACnD3a,QAAQtG,MAEtB0K,GAAS,EAAE,KACTy4D,GAAqB,IAAdvoE,KAAKg7C,KAAgB,EAAI9qC,KAAKW,MAAMf,EAAQ,GAAK9P,KAAKg7C,aAE1Dh7C,KAAK6oE,QAAQN,UAEpBvkE,QAAQC,KAAK,mDACN8M,QAAQE,6CAIL+pC,IACC,IAATA,IACFA,EAAOvtC,SAASutC,IAGdA,EAAO,SACJA,KAAOA,OACPtyC,iBAAiB,kBAAmBsyC,IAGvCh7C,KAAKgrE,qBAEFT,kCAGD7iB,uDAGUigB,EAAW3sB,EAAMysB,OAC5B31C,KAED9xB,KAAKsoE,mBAEU,WAAdtoE,KAAKo0B,OACP4mB,EAAOh7C,KAAKg7C,KACZysB,GAAeznE,KAAKuoE,KAAO,GAAKvoE,KAAKg7C,KAAQ,EAC7C2sB,EAAY3nE,KAAKwoE,0BAGlB12C,EAAU9xB,KAAKsoE,YAAY7/D,KAAKzI,KAAMg7C,EAAMysB,EAAYznE,KAAKuoE,KAAMZ,EAAW3nE,KAAKqQ,WAG7E,YACFyhB,aAAmB/pB,KAAK,MAGpB/H,KAAKqoE,mBAAmBrgE,iBAAiBqgE,mBAAmBpgE,YAAYjI,KAAKqoE,mBAAmBrgE,iBAEjGqgE,mBAAmBngE,YAAY4pB,aAE/Bu2C,mBAAmBvgE,UAAY,GAEtB,MAAXgqB,GACF9tB,QAAQC,KAAK,gKAAiK6tB,aAI3K,gBACA,YACAu2C,mBAAmBvgE,UAAY,sBAG/BugE,mBAAmBvgE,UAAYgqB,qDAOlC+5C,EAAW37D,KAAKC,OAAOnQ,KAAKmzD,MAAM,GAAK,GACvC2Y,EAAY57D,KAAKW,MAAM7Q,KAAKmzD,MAAM,GAAK,GACvC7iD,EAAMtQ,KAAKqQ,IAAMrQ,KAAKuoE,KAAOsD,EAAW,EAAI7rE,KAAKmzD,MAAQnzD,KAAKqQ,IAAIrQ,KAAKmzD,MAAM,EAAGjjD,KAAKG,IAAIrQ,KAAKuoE,KAAKsD,EAAS,GAC5Gx7D,EAAMrQ,KAAKuoE,MAAQuD,EAAW57D,KAAKI,IAAItQ,KAAKmzD,MAAOnzD,KAAKqQ,KAAMH,KAAKI,IAAItQ,KAAKuoE,KAAKuD,EAAW9rE,KAAKqQ,KAE/FrQ,KAAK0qE,aAAa1iE,iBAAiB0iE,aAAaziE,YAAYjI,KAAK0qE,aAAa1iE,YAEpE,GAAbhI,KAAKuoE,WACFoC,SAASzI,UAAW,OACpB0I,QAAQ1I,UAAW,SAEnByI,SAASzI,UAAW,OACpB0I,QAAQ1I,UAAW,GAGtBliE,KAAKuoE,MAAQvoE,KAAKqQ,UACfy6D,QAAQ5I,UAAW,OACnB2I,QAAQ3I,UAAW,SAEnB4I,QAAQ5I,UAAW,OACnB2I,QAAQ3I,UAAW,OAGrB,IAAIv3D,EAAI2F,EAAK3F,GAAK0F,EAAK1F,IACvBA,EAAE,GAAKA,GAAK3K,KAAKqQ,UACdq6D,aAAaxiE,YAAYlI,KAAK+rE,oBAAoBphE,SAIpD6+D,2DAGcjB,cACfjpB,EAASj5C,SAASC,cAAc,iBAEpCg5C,EAAO53C,UAAUC,IAAI,kBAClB4gE,GAAQvoE,KAAKuoE,MACfjpB,EAAO53C,UAAUC,IAAI,UAGtB23C,EAAO94C,aAAa,OAAQ,UAC5B84C,EAAO94C,aAAa,OAAQ,eAEvByH,SAAS,yBAAyB,SAACvM,GACvC49C,EAAO94C,aAAa,aAAc9E,EAAQ,IAAM6mE,GAChDjpB,EAAO94C,aAAa,QAAS9E,EAAQ,IAAM6mE,MAG5CjpB,EAAO94C,aAAa,YAAa+hE,GACjCjpB,EAAOuZ,YAAc0P,EAErBjpB,EAAO1yC,iBAAiB,SAAS,SAACC,GACjCU,EAAKs7D,QAAQN,MAGPjpB,gDAKJt/C,KAAKuoE,KAAO,QACTA,YAEA7gB,eAEE1nD,KAAK4rE,YAGZ5nE,QAAQC,KAAK,8DAA+D,GACrE8M,QAAQE,oDAMbjR,KAAKuoE,KAAOvoE,KAAKqQ,UACdk4D,YAEA7gB,eAEE1nD,KAAK4rE,YAGR5rE,KAAKooE,iBACRpkE,QAAQC,KAAK,sEAAwEjE,KAAKqQ,IAAM,IAAKrQ,KAAKqQ,IAAM,GAE1GU,QAAQE,mDAMTjR,KAAKuoE,iDAKLvoE,KAAKqQ,wCAGD2qC,UACJh7C,KAAKg7C,8CAILh7C,KAAKo0B,qCAILv0B,OAEPwD,EAAQiW,EAAOC,EAAKyyD,EADhBC,EAAoB,EAGpBC,EAAarsE,EAAK+qB,QAAO,SAACxlB,SACT,QAAbA,EAAIrD,WAGI,SAAb/B,KAAKo0B,KAAgB,CACvB/wB,EAAS,QAEJ8oE,WAAWtsE,EAAKyD,SAEJ,IAAdtD,KAAKg7C,MACP1hC,EAAQ,EACRC,EAAM1Z,EAAKyD,QAGXiW,GADAD,EAAQtZ,KAAKg7C,MAAQh7C,KAAKuoE,KAAO,IACnB96D,SAASzN,KAAKg7C,WAGxBoxB,sBAED,IAAIzhE,EAAI2O,EAAO3O,EAAI4O,EAAK5O,IAAI,KAC3BvF,EAAMvF,EAAK8K,GAEZvF,IACF/B,EAAOP,KAAKsC,GAEI,QAAbA,EAAIrD,OACFiqE,IACHA,EAAiB5mE,GAGlB6mE,kBAKEI,gBAAgBH,EAAW5oE,OAAQ2oE,EAAmBD,EAAkBE,EAAWxgE,QAAQsgE,GAAkB,EAAK,GAEhH3oE,cAEF+oE,uBACAC,gBAAgBH,EAAW5oE,QAEzBzD,EAAKujB,MAAM,yCAKfhc,gBAEGpH,KAAKo0B,UACN,eACLhtB,EAAOpH,KAAKJ,MAAMgJ,WAAWwN,gBAExBqzB,mBACA7pC,MAAMgJ,WAAW+R,iBAAiBvT,QAElCsB,iBAAiB,aAAc1I,KAAKmpE,WAElCp4D,QAAQC,cAGV,qBACA03D,cAAe,EACb1oE,KAAKsoD,WAAW,eACd,WACRt6C,EAAK06D,cAAe,SAIhB,uBACA,4BACE1oE,KAAKsoD,WAAW,MAAM,kBAI7BtkD,QAAQC,KAAK,8CAA+CjE,KAAKo0B,MAC1DrjB,QAAQE,mDAIApR,OACA4iB,iBAEa,IAAnB5iB,EAAKysE,WACdtoE,QAAQC,KAAK,uDAAyDjE,KAAKyB,QAAQ,qBAAqB6qE,WAAa,aAAe,cAGlIzsE,EAAKA,KAAK,SACPwQ,IAAM5C,SAAS5N,EAAKysE,YAAc,OAElC9D,4BAAkD,IAAlB3oE,EAAK0sE,SAA2B1sE,EAAK0sE,SAAY1sE,EAAKysE,UAAYtsE,KAAKg7C,MAAQh7C,KAAKuoE,MAAQ1oE,EAAKysE,UAAatsE,KAAKg7C,KAAOn7C,EAAKA,KAAKyD,OAAU,GAEhLtD,KAAKooE,gBAAgB,QAChBpoE,KAAKo0B,UACN,mBAEW,GAAbp0B,KAAKuoE,UACF3oE,MAAMgJ,WAAWoW,QAAQnf,EAAKA,MAAM,EAAoB,GAAbG,KAAKuoE,WAEhD3oE,MAAMgJ,WAAW4yB,QAAQ37B,EAAKA,MAGjCG,KAAKuoE,KAAOvoE,KAAKqQ,KACnBhD,YAAW,WACVgB,EAAK66D,aACHlpE,KAAKJ,MAAM6B,QAAQ+qE,gCAIlB,qBACL3sE,EAAqB,IAAdG,KAAKuoE,KAAa1oE,EAAKA,KAAOG,KAAKJ,MAAMgJ,WAAWvD,UAAUiY,OAAOzd,EAAKA,WAE5ED,MAAMgJ,WAAWoW,QAAQnf,EAAoB,IAAdG,KAAKuoE,KAAyB,GAAbvoE,KAAKuoE,MAE1D9lD,EAASziB,KAAKJ,MAAM6B,QAAQgpE,6BAA6E,EAA7CzqE,KAAKJ,MAAMgJ,WAAWjD,QAAQiJ,aAEvF5O,KAAKJ,MAAMgJ,WAAWjD,QAAQkQ,cAAiB7V,KAAKJ,MAAMgJ,WAAWjD,QAAQiJ,aAAe6T,GAC3FziB,KAAKuoE,KAAOvoE,KAAKqQ,KACnBhD,YAAW,WACVgB,EAAK66D,qBAOF,OAGFxgE,iBAAiB,aAAe1I,KAAKmpE,gBAM3CnlE,QAAQC,KAAK,uDAAyDjE,KAAKyB,QAAQ,qBAAqB5B,MAAQ,QAAU,qBAGpHA,EAAKA,gDAKR4sE,EAASzsE,KAAKJ,MAAMqe,cAAcmL,iBAElClZ,KAAKW,KAAK47D,EAAOr8D,aAAeq8D,EAAOrxD,YAAe,OACpDsvD,aAAahkE,MAAMI,QAAU,aAE7B4jE,aAAahkE,MAAMI,QAAU,GAE9BoJ,KAAKW,KAAK47D,EAAOr8D,aAAeq8D,EAAOrxD,YAAe,SACpDsvD,aAAahkE,MAAMI,QAAU,gBAl3BnBsqB,GAw3BnB+2C,GAAK3zC,WAAa,OAGlB2zC,GAAKgD,aAAeuB,UC93BL,CACdC,MAAM,SAASC,EAAI7qE,OACdlC,EAAOgtE,aAAaC,QAAQF,EAAK,IAAM7qE,WAEpClC,GAAOmgB,KAAKC,MAAMpgB,IAE1BktE,OAAO,SAASH,EAAI7qE,OAInBwX,EAAK1Z,EAHDktE,EAAS1mE,SAAS0mE,OACtB7rE,EAAM0rE,EAAK,IAAM7qE,EACjBirE,EAAYD,EAAOrhE,QAAQxK,EAAM,YAI9B8rE,GAAa,IACfD,EAASA,EAAO3pD,MAAM4pD,IAEtBzzD,EAAMwzD,EAAOrhE,QAAQ,OAEX,IACTqhE,EAASA,EAAO3pD,MAAM,EAAG7J,IAG1B1Z,EAAOktE,EAAOvgD,QAAQtrB,EAAM,IAAK,OAG3BrB,GAAOmgB,KAAKC,MAAMpgB,QCzBZ,CACd8sE,MAAM,SAASC,EAAI7qE,EAAMlC,GACxBgtE,aAAaI,QAAQL,EAAK,IAAM7qE,EAAMie,KAAKwd,UAAU39B,KAEtDktE,OAAO,SAASH,EAAI7qE,EAAMlC,OACrBqtE,EAAa,IAAIz/B,KAErBy/B,EAAWC,QAAQD,EAAWE,UAAY,KAE1C/mE,SAAS0mE,OAASH,EAAK,IAAM7qE,EAAO,IAAMie,KAAKwd,UAAU39B,GAAQ,aAAeqtE,EAAWG,gBCLvFC,4CAEO1tE,yCACLA,IAEDw0B,KAAO,KACPw4C,GAAK,KAELW,iBAAkB,IAClBv1D,OAAS,KACTw1D,UAAW,IACXC,WAAY,IAEZp5C,oBAAoB,eAAe,KACnCA,oBAAoB,gBAAiB,MACrCA,oBAAoB,mBAAmB,KACvCA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,yBAAyB,8DAK7Cq5C,EAAW,6BAGft7D,OAAOy6D,aAAaI,QAASS,EAASA,GACtCt7D,OAAOy6D,aAAac,WAAYD,IACzB,EACN,MAAM7gE,UACA,2CAML7M,KAAKJ,MAAM6B,QAAQmsE,YAAY,KAIjCC,EAFIz5C,EAAOp0B,KAAKJ,MAAM6B,QAAQqsE,gBAC9BlB,EAAK5sE,KAAKJ,MAAM6B,QAAQssE,mBAGnB35C,MAAgB,IAATA,EAAiBA,EAAQp0B,KAAKguE,mBAAqB,QAAU,SAEtEhuE,KAAKJ,MAAM6B,QAAQwsE,sBACkC,mBAA7CjuE,KAAKJ,MAAM6B,QAAQwsE,2BACvBT,SAAWxtE,KAAKJ,MAAM6B,QAAQwsE,sBAEhCX,EAAYY,QAAQluE,KAAKJ,MAAM6B,QAAQwsE,4BACpCT,SAAWF,EAAYY,QAAQluE,KAAKJ,MAAM6B,QAAQwsE,uBAEvDjqE,QAAQC,KAAK,8CAA+CjE,KAAKJ,MAAM6B,QAAQwsE,uBAI9EX,EAAYY,QAAQluE,KAAKo0B,WACtBo5C,SAAWF,EAAYY,QAAQluE,KAAKo0B,MAEzCpwB,QAAQC,KAAK,8CAA+CjE,KAAKo0B,MAIhEp0B,KAAKJ,MAAM6B,QAAQ0sE,sBACkC,mBAA7CnuE,KAAKJ,MAAM6B,QAAQ0sE,2BACvBV,UAAYztE,KAAKJ,MAAM6B,QAAQ0sE,sBAEjCb,EAAYc,QAAQpuE,KAAKJ,MAAM6B,QAAQ0sE,4BACpCV,UAAYH,EAAYc,QAAQpuE,KAAKJ,MAAM6B,QAAQ0sE,uBAExDnqE,QAAQC,KAAK,+CAAgDjE,KAAKJ,MAAM6B,QAAQ0sE,uBAI/Eb,EAAYc,QAAQpuE,KAAKo0B,WACtBq5C,UAAYH,EAAYc,QAAQpuE,KAAKo0B,MAE1CpwB,QAAQC,KAAK,+CAAgDjE,KAAKo0B,WAK/Dw4C,GAAK,cAAgBA,GAAO5sE,KAAKJ,MAAM+F,QAAQkuC,aAAa,OAAS,SAErE77B,OAAS,CACbuP,MAAwC,IAAnCvnB,KAAKJ,MAAM6B,QAAQmsE,aAAwB5tE,KAAKJ,MAAM6B,QAAQmsE,YAAYrmD,KAC/EqD,QAA0C,IAAnC5qB,KAAKJ,MAAM6B,QAAQmsE,aAAwB5tE,KAAKJ,MAAM6B,QAAQmsE,YAAYhjD,OACjF9J,OAAyC,IAAnC9gB,KAAKJ,MAAM6B,QAAQmsE,aAAwB5tE,KAAKJ,MAAM6B,QAAQmsE,YAAY9sD,MAChFynD,MAAwC,IAAnCvoE,KAAKJ,MAAM6B,QAAQmsE,aAAwB5tE,KAAKJ,MAAM6B,QAAQmsE,YAAYrF,KAC/ErlE,SAA2C,IAAnClD,KAAKJ,MAAM6B,QAAQmsE,YAAuB,CAAC,QAAS,QAAS,WAAa5tE,KAAKJ,MAAM6B,QAAQmsE,YAAY1qE,SAI/GlD,KAAKgY,OAAOuwD,OACdsF,EAAgB7tE,KAAKquE,aAAa,gBAGU,IAAjCR,EAAcvD,iBAAwD,IAArBtqE,KAAKgY,OAAOuwD,OAAiBvoE,KAAKgY,OAAOuwD,KAAKvtB,YACnGp7C,MAAM6B,QAAQ6oE,eAAiBuD,EAAcvD,qBAGD,IAAxCuD,EAAcnC,wBAA+D,IAArB1rE,KAAKgY,OAAOuwD,OAAiBvoE,KAAKgY,OAAOuwD,KAAKA,YAC1G3oE,MAAM6B,QAAQiqE,sBAAwBmC,EAAcnC,wBAMzD1rE,KAAKgY,OAAO8I,QACd+sD,EAAgB7tE,KAAKquE,aAAa,iBAGG,IAA1BR,EAAcjpC,UAAkD,IAAtB5kC,KAAKgY,OAAO8I,QAAkB9gB,KAAKgY,OAAO8I,MAAM8jB,eAC9FhlC,MAAM6B,QAAQmjC,QAAUipC,EAAcjpC,cAED,IAAjCipC,EAAchZ,iBAAyD,IAAtB70D,KAAKgY,OAAO8I,QAAkB9gB,KAAKgY,OAAO8I,MAAM+zC,sBACrGj1D,MAAM6B,QAAQozD,eAAiBgZ,EAAchZ,qBAEX,IAA9BgZ,EAAcr+B,cAAsD,IAAtBxvC,KAAKgY,OAAO8I,QAAkB9gB,KAAKgY,OAAO8I,MAAM0uB,mBAClG5vC,MAAM6B,QAAQ+tC,YAAcq+B,EAAcr+B,cAK/CxvC,KAAKgY,OAAO9U,eACTtD,MAAM6B,QAAQyB,QAAUlD,KAAKE,KAAK,UAAWF,KAAKJ,MAAM6B,QAAQyB,cAChElC,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,YACpDgB,UAAU,cAAehB,KAAKsuE,KAAK9tE,KAAKR,KAAM,iBAC9CgB,UAAU,cAAehB,KAAKsuE,KAAK9tE,KAAKR,KAAM,iBAC9CgB,UAAU,eAAgBhB,KAAKsuE,KAAK9tE,KAAKR,KAAM,kBAGhDgB,UAAU,cAAehB,KAAKgmD,WAAWxlD,KAAKR,MAAO,QAErDgB,UAAU,eAAgBhB,KAAKwkC,YAAYhkC,KAAKR,YAEhDgB,UAAU,iBAAkBhB,KAAKuuE,UAAU/tE,KAAKR,KAAM,gBACtDgB,UAAU,eAAgBhB,KAAKuuE,UAAU/tE,KAAKR,KAAM,cACpDgB,UAAU,gBAAiBhB,KAAKuuE,UAAU/tE,KAAKR,KAAM,eACrDgB,UAAU,eAAgBhB,KAAKuuE,UAAU/tE,KAAKR,KAAM,cACpDgB,UAAU,iBAAkBhB,KAAKuuE,UAAU/tE,KAAKR,KAAM,iBACtDgB,UAAU,mBAAoBhB,KAAKuuE,UAAU/tE,KAAKR,KAAM,iBAGzDm1B,sBAAsB,kBAAmBn1B,KAAKwuE,gBAAgBhuE,KAAKR,YACnEm1B,sBAAsB,kBAAmBn1B,KAAKyuE,gBAAgBjuE,KAAKR,yCAG/D+B,GACN/B,KAAKgY,OAAOjW,SACTusE,KAAKvsE,4CAMX2sE,EAASpnB,EADKtnD,KAAKJ,MAAM6B,QAGtBzB,KAAKgY,OAAOuP,OAGE,KAFhBmnD,EAAU1uE,KAAKE,KAAK,gBAGdN,MAAM6B,QAAQktE,YAAcD,GAIhC1uE,KAAKgY,OAAO4S,SAGE,KAFhB08B,EAAUtnD,KAAKE,KAAK,kBAGdN,MAAM6B,QAAQ2kD,cAAgBkB,uCAK1Bj/C,GACRA,GAASrI,KAAKgY,OAAO9U,cAClBorE,KAAK,4DASJtuE,KAAK4uE,aAAa5uE,KAAKJ,MAAM6D,cAAco3D,sDAGnCh6D,eACVjB,MAAM6D,cAAciY,WAAW1b,KAAK6uE,gBAAgB7uE,KAAKJ,MAAM6B,QAAQyB,QAASrC,KAC9E,2CAOSgB,OACZgI,EAED7J,KAAKgY,OAAO9U,eACTqqE,iBAAkB,EAEvB1jE,EAAMhI,EAAOW,kBAEkB,IAAxBxC,KAAKgY,OAAO9U,QAAmBsI,OAAOC,KAAK5B,GAAO7J,KAAKgY,OAAO9U,SAEhEN,SAAQ,SAAC1B,OACTyiD,EAAQn4C,OAAOsjE,yBAAyBjlE,EAAK3I,GAC7CQ,EAAQmI,EAAI3I,GACbyiD,GACFn4C,OAAOujE,eAAellE,EAAK3I,EAAK,CAC/B8tE,IAAK,SAASxX,GACb91D,EAAQ81D,EAEJx3D,KAAKutE,sBACHe,KAAK,WAGR3qB,EAAMqrB,KACRrrB,EAAMqrB,IAAIxX,IAGZv1D,IAAI,kBACA0hD,EAAM1hD,KACR0hD,EAAM1hD,MAEAP,aAMN6rE,iBAAkB,gCAKpBxrE,EAAMktE,OACNpvE,EAAOG,KAAKquE,aAAatsE,UAE1BktE,IACFpvE,EAAOA,EAAOG,KAAK6uE,gBAAgBI,EAASpvE,GAAQovE,GAG9CpvE,uCAIKkC,WACL/B,KAAKwtE,UAAWxtE,KAAKwtE,SAASxtE,KAAK4sE,GAAI7qE,2CAI/BmtE,EAASC,cACpB9rE,EAAS,UAEb8rE,EAAUA,GAAW,IAEbvsE,SAAQ,SAACf,EAAQ8B,OAExB8H,EADIqR,EAAOjV,EAAKunE,YAAYF,EAASrtE,GAGlCib,KACyB,IAAxBjV,EAAKmQ,OAAO9U,SAA2C/C,MAAvB0H,EAAKmQ,OAAO9U,SAC9CuI,EAAQD,OAAOC,KAAKqR,IACfha,KAAK,SAEV2I,EAAO5D,EAAKmQ,OAAO9U,QAGpBuI,EAAK7I,SAAQ,SAAC1B,GACF,YAARA,QAA4C,IAAhBW,EAAOX,KACrC4b,EAAK5b,GAAOW,EAAOX,OAIlB4b,EAAK5Z,UACP4Z,EAAK5Z,QAAU2E,EAAKgnE,gBAAgB/xD,EAAK5Z,QAASrB,EAAOqB,UAG1DG,EAAOP,KAAKga,OAIdoyD,EAAQtsE,SAAQ,SAACf,EAAQ8I,GACb9C,EAAKunE,YAAYD,EAASttE,KAGjCwB,EAAOC,OAAOqH,EAChBtH,EAAO0M,OAAOpF,EAAG,EAAG9I,GAEpBwB,EAAOP,KAAKjB,OAKRwB,sCAIIH,EAASgQ,OAChBnR,EAAOmR,EAAQhQ,QAAU,QAAWgQ,EAAQzM,MAAQ,QAAU,gBAE3DvD,EAAQgU,MAAK,SAASC,UACrBpV,OACD,eACEoV,EAAIxL,QAAUuH,EAAQvH,OAASwL,EAAIjU,QAAQI,SAAW4P,EAAQhQ,QAAQI,WAGxE,eACE6T,EAAI1Q,QAAUyM,EAAQzM,UAGxB,gBACE0Q,IAAQjE,mCAObnR,OACAlC,EAAO,UAEJkC,OACD,UACLlC,EAAOG,KAAK4uE,aAAa5uE,KAAKJ,MAAM6D,cAAco3D,wBAG7C,SACLh7D,EAAOG,KAAKJ,MAAMQ,QAAQwqB,OAAOq6B,uBAG5B,OACLplD,EAAOG,KAAKqvE,gBAAgBrvE,KAAKJ,MAAMQ,QAAQmnB,KAAK+nD,qBAG/C,QACLzvE,EAAOG,KAAKuvE,2BAGP,OACL1vE,EAAOG,KAAKwvE,gBAIVxvE,KAAKytE,gBACFA,UAAUztE,KAAK4sE,GAAI7qE,EAAMlC,2CAMhBA,UACfA,EAAK+C,SAAQ,SAAS2Q,GACrBA,EAAK1R,OAAS0R,EAAK9M,aACZ8M,EAAK9M,SAGN5G,+CAIHA,EAAO,UAERG,KAAKgY,OAAO8I,UACW,IAAtB9gB,KAAKgY,OAAO8I,OAAkB9gB,KAAKgY,OAAO8I,MAAM8jB,WAClD/kC,EAAK+kC,QAAU5kC,KAAKJ,MAAM6B,QAAQmjC,WAGV,IAAtB5kC,KAAKgY,OAAO8I,OAAkB9gB,KAAKgY,OAAO8I,MAAM+zC,kBAClDh1D,EAAKg1D,eAAiB70D,KAAKJ,MAAM6B,QAAQozD,kBAGjB,IAAtB70D,KAAKgY,OAAO8I,OAAkB9gB,KAAKgY,OAAO8I,MAAM0uB,eAClD3vC,EAAK2vC,YAAcxvC,KAAKJ,MAAM6B,QAAQ+tC,cAIjC3vC,8CAIHA,EAAO,UAERG,KAAKgY,OAAOuwD,SACU,IAArBvoE,KAAKgY,OAAOuwD,MAAiBvoE,KAAKgY,OAAOuwD,KAAKvtB,QAChDn7C,EAAKyqE,eAAiBtqE,KAAKJ,MAAMQ,QAAQmoE,KAAKS,iBAGvB,IAArBhpE,KAAKgY,OAAOuwD,MAAiBvoE,KAAKgY,OAAOuwD,KAAKA,QAChD1oE,EAAK6rE,sBAAwB1rE,KAAKJ,MAAMQ,QAAQmoE,KAAKY,YAIhDtpE,uCAKKqD,cACRsY,EAAc,GAClBi0D,EAAe,CAAC,oBAAqB,aAAc,cAAe,oBAElEvsE,EAAQN,SAAQ,SAACf,OAGhB4J,EAFIikE,EAAW,GACfC,EAAS9tE,EAAOW,gBAGbX,EAAOoB,SACTysE,EAAS/jE,MAAQgkE,EAAOhkE,MACxB+jE,EAASxsE,QAAU4J,EAAK8hE,aAAa/sE,EAAOg5D,gBAE5C6U,EAASjpE,MAAQ5E,EAAOY,YAEG,IAAxBqK,EAAKkL,OAAO9U,SAA2C/C,MAAvB2M,EAAKkL,OAAO9U,UAC9CuI,EAAQD,OAAOC,KAAKkkE,IACf7sE,KAAK,SACV2I,EAAK3I,KAAK,YAEV2I,EAAOqB,EAAKkL,OAAO9U,QAGpBuI,EAAK7I,SAAQ,SAAC1B,UACNA,OACD,QACLwuE,EAASjrE,MAAQ5C,EAAO2C,qBAEnB,UACLkrE,EAAS1sE,QAAUnB,EAAOmB,sBAIA,mBAAhB2sE,EAAOzuE,KAAsD,IAA/BuuE,EAAa/jE,QAAQxK,KAC5DwuE,EAASxuE,GAAOyuE,EAAOzuE,SAM3Bsa,EAAY1Y,KAAK4sE,MAGXl0D,SA3biB4V,GA+b1Bk8C,GAAY94C,WAAa,cAEzB84C,GAAYr1C,iBAAmB,GAG/Bq1C,GAAYY,QAAU0B,GACtBtC,GAAYc,QAAUyB,OCxchBvgD,4CAEO1vB,yCACLA,IAED49D,kBAAoB,KAEpBnpC,oBAAoB,mBAAmB,KACvCA,oBAAoB,iBAAiB,KACrCA,oBAAoB,qBAAqB,KACzCA,oBAAoB,mBAAmB,KAEvCC,qBAAqB,wBACrBA,qBAAqB,sBACrBA,qBAAqB,iBACrBA,qBAAqB,qBACrBA,qBAAqB,kBACrBA,qBAAqB,oEAKrBqsC,6BACAC,+BAEA5/D,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,uDAItDA,KAAKJ,MAAM6B,QAAQquE,uBAChB9uE,UAAU,kBAAmBhB,KAAK+vE,eAAevvE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQquE,uBAC/ElwE,MAAMmhE,GAAG,aAAc/gE,KAAK+vE,eAAevvE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQquE,mBAG5E9vE,KAAKJ,MAAM6B,QAAQuuE,oBAChBhvE,UAAU,YAAahB,KAAK+vE,eAAevvE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQuuE,kEAK5EhwE,KAAKJ,MAAM6B,QAAQwuE,yBAChBjvE,UAAU,oBAAqBhB,KAAK+vE,eAAevvE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQwuE,yBACjFrwE,MAAMmhE,GAAG,eAAgB/gE,KAAK+vE,eAAevvE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQwuE,qBAG9EjwE,KAAKJ,MAAM6B,QAAQyuE,sBAChBlvE,UAAU,cAAehB,KAAK+vE,eAAevvE,KAAKR,KAAMA,KAAKJ,MAAM6B,QAAQyuE,2DAIjEruE,OAEhBgI,EAAMhI,EAAO0F,WAGVsC,EAAIsmE,qBAAuBnwE,KAAKw9D,kBAAkB2S,0BAC/C3S,kBAAkB2S,mBAAqBnwE,KAAKowE,0BAA0B5vE,KAAKR,KAAM,2BACjFgB,UAAU,qBAAsBhB,KAAKw9D,kBAAkB2S,yBACvDvwE,MAAMmhE,GAAG,gBAAiB/gE,KAAKowE,0BAA0B5vE,KAAKR,KAAM,wBAGvE6J,EAAIwmE,mBAAqBrwE,KAAKw9D,kBAAkB6S,wBAC7C7S,kBAAkB6S,iBAAmBrwE,KAAKowE,0BAA0B5vE,KAAKR,KAAM,yBAC/EgB,UAAU,eAAgBhB,KAAKw9D,kBAAkB6S,mBAGpDxmE,EAAIymE,kBACDC,4BAA4B1uE,GAI/BgI,EAAI2mE,eAAiBxwE,KAAKw9D,kBAAkBgT,oBACzChT,kBAAkBgT,aAAexwE,KAAKywE,wBAAwBjwE,KAAKR,KAAM,qBACzEgB,UAAU,mBAAoBhB,KAAKw9D,kBAAkBgT,mBACrD5wE,MAAMmhE,GAAG,cAAe/gE,KAAKywE,wBAAwBjwE,KAAKR,KAAM,kBAGnE6J,EAAI6mE,aAAe1wE,KAAKw9D,kBAAkBkT,kBACvClT,kBAAkBkT,WAAa1wE,KAAKywE,wBAAwBjwE,KAAKR,KAAM,mBACvEgB,UAAU,aAAchB,KAAKw9D,kBAAkBkT,iEAI1B7uE,OAE3B8uE,SADI/O,EAAO//D,EAAO0F,WAAWqpE,iBAG7BD,EAAgBtqE,SAASC,cAAc,SACzBoB,UAAUC,IAAI,iCAEzBi6D,GACiB,mBAATA,IACTA,EAAOA,EAAK//D,EAAOkB,iBAGjB6+D,aAAgBnlD,YAClBk0D,EAAczoE,YAAY05D,GAE1B+O,EAAc7oE,UAAY85D,GAG3B+O,EAAc7oE,UAAY,WAG3B6oE,EAAc/jE,iBAAiB,SAAS,SAACC,GACxCA,EAAEiB,kBACFjB,EAAEyzB,iBAEFz4B,EAAKkoE,eAAeluE,EAAO0F,WAAW+oE,YAAazjE,EAAGhL,MAGvDA,EAAOoI,aAAayQ,aAAai2D,EAAe9uE,EAAOoI,aAAajC,4DAG7C6L,EAAQhH,EAAGhK,GAC/BA,EAAKmC,QACPnC,EAAOA,EAAKmC,OAGVnC,EAAKhB,OAAO0F,WAAWsM,SACpBk8D,eAAeltE,EAAKhB,OAAO0F,WAAWsM,GAAShH,EAAGhK,qDAI/BgR,EAAQhH,EAAGhL,GACjCA,EAAOC,UACTD,EAASA,EAAOC,SAGdD,EAAO0F,WAAWsM,SACfk8D,eAAeluE,EAAO0F,WAAWsM,GAAShH,EAAGhL,0CAIrCuM,EAAUvB,EAAG9G,OACvB8pB,EAMD9pB,EAAU2pC,OACZ3pC,EAAYA,EAAU2pC,OACd3pC,EAAUoY,OAClBpY,EAAYA,EAAUoY,MAGvB/P,EAA8B,mBAAZA,EAAyBA,EAAS3F,KAAKzI,KAAKJ,MAAOiN,EAAG9G,EAAUhD,yBAV9DuR,GACnBub,EAAmBvb,KAS6FlG,OAE5GyiE,UAAUhkE,EAAG9G,EAAWqI,EAAUyhB,qCAG9BhjB,EAAG9G,EAAWqI,EAAUyhB,OAEjCihD,EAAY3+B,SADR/hB,IAAUvjB,aAAawjB,YAGxBjiB,aAAoBqO,YACtBq0D,EAAa1iE,GAEb0iE,EAAazqE,SAASC,cAAc,QACzBwB,UAAYsG,EAGxB0iE,EAAWppE,UAAUC,IAAI,mBAEzBmpE,EAAWlkE,iBAAiB,SAAS,SAACC,GACrCA,EAAEiB,qBAGCsiB,GACHvjB,EAAEyzB,iBAGH6R,EAAQnyC,KAAKmyC,MAAM2+B,GAEY,mBAArBjhD,GACTsiB,EAAM4+B,eAAelhD,GAGtBsiB,EAAMhvC,KAAK0J,GAAG6sC,YAAW,WACxB5sC,EAAKpE,iBAAiB,cAAe3C,EAAUhD,wBAK3C2F,iBAAiB,cAAe3C,EAAUhD,uBAzL7BquB,MA6LdoD,WAAa,YC7Lbw8C,4CAEOpxE,yCACLA,IAED+F,SAAU,IACVsrE,aAAc,IAEd58C,oBAAoB,eAAe,KACnCA,oBAAoB,kBAAkB,KACtCA,oBAAoB,eAAe,KACnCA,oBAAoB,eAAe,KACnCA,oBAAoB,eAAe,KACnCA,oBAAoB,gBAAiB,aACrCA,oBAAoB,cAAe,MAEnCC,qBAAqB,WACrBA,qBAAqB,+DAIvBt0B,KAAKJ,MAAM6B,QAAQyvE,cACrB9+D,OAAOxF,iBAAiB,cAAe5M,KAAKmxE,aAAa3wE,KAAKR,OAC9DoS,OAAOxF,iBAAiB,aAAc5M,KAAKoxE,QAAQ5wE,KAAKR,aAGpDm1B,sBAAsB,QAASn1B,KAAKqxE,gBAAgB7wE,KAAKR,8CAY1DA,KAAKixE,mBACHtrE,QAAUU,SAASC,cAAc,YACjCX,QAAQ+B,UAAUC,IAAI,8BAEtBhC,QAAQuC,YAAYlI,KAAKJ,MAAMQ,eAAekxE,eAAetxE,KAAKJ,MAAM6B,QAAQ8vE,YAAavxE,KAAKJ,MAAM6B,QAAQ+vE,YAAaxxE,KAAKJ,MAAM6B,QAAQgwE,cAAe,eAE/J7xE,MAAM+F,QAAQe,MAAMI,QAAU,YAE9BlH,MAAM+F,QAAQ8D,WAAWiR,aAAa1a,KAAK2F,QAAS3F,KAAKJ,MAAM+F,4CAKrEU,SAAS8pB,KAAKzoB,UAAUmN,OAAO,mCAE5B7U,KAAK2F,SAAW3F,KAAK2F,QAAQ8D,kBAC1B9D,QAAQ8D,WAAWxB,YAAYjI,KAAK2F,cACpC/F,MAAM+F,QAAQe,MAAMI,QAAU,4CAIrB9D,EAAS0D,EAAOsR,OAM/B+9C,EAAe2b,EALXC,EAAUv/D,OAAOu/D,QACrBC,EAAUx/D,OAAOw/D,QACjB3vB,EAAW57C,SAASC,cAAc,OAClCurE,EAAWxrE,SAASC,cAAc,OAClCwrE,EAAU9xE,KAAKJ,MAAMQ,eAAekxE,oBAAgC,IAAVt5D,EAAwBA,EAAShY,KAAKJ,MAAM6B,QAAQ8vE,iBAA6B,IAAT7qE,EAAuBA,EAAQ1G,KAAKJ,MAAM6B,QAAQ+vE,YAAaxuE,GAAWhD,KAAKJ,MAAM6B,QAAQgwE,cAAe,cAGzOR,aAAc,OAEdtrE,QAAUU,SAASC,cAAc,YACjCX,QAAQ+B,UAAUC,IAAI,8BAExB3H,KAAKJ,MAAM6B,QAAQswE,cACrB9vB,EAASv6C,UAAUC,IAAI,0BAII,iBAF3BouD,EAAyD,mBAAlC/1D,KAAKJ,MAAM6B,QAAQswE,YAA4B/xE,KAAKJ,MAAM6B,QAAQswE,YAAYtpE,KAAKzI,KAAKJ,OAASI,KAAKJ,MAAM6B,QAAQswE,aAG1I9vB,EAASn6C,UAAYiuD,EAErB9T,EAAS/5C,YAAY6tD,QAGjBpwD,QAAQuC,YAAY+5C,SAGrBt8C,QAAQuC,YAAY4pE,GAEtB9xE,KAAKJ,MAAM6B,QAAQuwE,cACrBH,EAASnqE,UAAUC,IAAI,0BAKI,iBAH3B+pE,EAAyD,mBAAlC1xE,KAAKJ,MAAM6B,QAAQuwE,YAA4BhyE,KAAKJ,MAAM6B,QAAQuwE,YAAYvpE,KAAKzI,KAAKJ,OAASI,KAAKJ,MAAM6B,QAAQuwE,aAI1IH,EAAS/pE,UAAY4pE,EAErBG,EAAS3pE,YAAYwpE,QAGjB/rE,QAAQuC,YAAY2pE,IAG1BxrE,SAAS8pB,KAAKzoB,UAAUC,IAAI,mCAC5BtB,SAAS8pB,KAAKjoB,YAAYlI,KAAK2F,SAE5B3F,KAAKJ,MAAM6B,QAAQwwE,qBAChBryE,MAAM6B,QAAQwwE,eAAejyE,KAAK2F,QAASmsE,GAGjD1/D,OAAOi8C,aAEF+iB,UAELh/D,OAAO8/D,SAASP,EAASC,QAEpBX,aAAc,SApHD7/C,GAwHpB4/C,GAAMx8C,WAAa,YCxHb29C,4CAEOvyE,yCACLA,IAEDC,MAAO,IACPogC,SAAU,IACVmyC,UAAY,KACZC,eAAiB,IAEjBh+C,oBAAoB,gBAAgB,oDAItCr0B,KAAKJ,MAAM6B,QAAQw4B,oBAChBj5B,UAAU,yBAA0BhB,KAAKy2C,MAAMj2C,KAAKR,YACpDgB,UAAU,wBAAyBhB,KAAKsyE,QAAQ9xE,KAAKR,YACrDgB,UAAU,uBAAwBhB,KAAKy2C,MAAMj2C,KAAKR,YAClDgB,UAAU,sBAAuBhB,KAAKsyE,QAAQ9xE,KAAKR,YACnDgB,UAAU,sBAAuBhB,KAAKuyE,SAAS/xE,KAAKR,YACpDgB,UAAU,kBAAmBhB,KAAKwyE,UAAUhyE,KAAKR,YACjDgB,UAAU,gBAAiBhB,KAAKyyE,YAAYjyE,KAAKR,0CAI9CH,OAEC6yE,EADN73B,EAAO76C,UAGNqyE,iBAELK,EAAU1yE,KAAKqyE,oBAEVI,mBAEA5yE,KAAOA,OAGPuyE,UAAUtvE,KAAOjD,EAAKiD,KAE3B0I,OAAOujE,eAAe/uE,KAAKH,KAAM,OAAQ,CACxC8yE,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFwsB,EAAOlb,MAAM8J,KAAKvc,kBAElBs6C,EAAK5a,SAAWyyC,IAAY73B,EAAKw3B,gBACpCnkD,EAAKtrB,SAAQ,SAACiwE,GACbh4B,EAAKj7C,MAAMgJ,WAAW6d,aAAaosD,GAAK,MAInCh4B,EAAKu3B,UAAUtvE,KAAKurB,MAAMxuB,EAAMU,mBAKpC6xE,UAAU5+D,QAAU3T,EAAK2T,QAE9BhI,OAAOujE,eAAe/uE,KAAKH,KAAM,UAAW,CAC3C8yE,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFwsB,EAAOlb,MAAM8J,KAAKvc,kBAElBs6C,EAAK5a,SAAWyyC,IAAY73B,EAAKw3B,gBACpCnkD,EAAKtrB,SAAQ,SAACiwE,GACbh4B,EAAKj7C,MAAMgJ,WAAW6d,aAAaosD,GAAK,MAInCh4B,EAAKu3B,UAAU5+D,QAAQ6a,MAAMxuB,EAAMU,mBAMvC6xE,UAAUjkD,MAAQtuB,EAAKsuB,MAE5B3iB,OAAOujE,eAAe/uE,KAAKH,KAAM,QAAS,CACzC8yE,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACF0D,SAEAy1C,EAAK5a,SAAWyyC,IAAY73B,EAAKw3B,gBACjCx3B,EAAKh7C,KAAKyD,SACZ8B,EAAMy1C,EAAKj7C,MAAMgJ,WAAWkqE,qBAAqBj4B,EAAKh7C,KAAK,MAG1DuF,EAAIsb,eAKAm6B,EAAKu3B,UAAUjkD,MAAM1lB,KAAK5I,WAK9BuyE,UAAUW,IAAMlzE,EAAKkzE,IAE1BvnE,OAAOujE,eAAe/uE,KAAKH,KAAM,MAAO,CACvC8yE,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACF0D,SACAy1C,EAAK5a,SAAWyyC,IAAY73B,EAAKw3B,gBACjCx3B,EAAKh7C,KAAKyD,SACZ8B,EAAMy1C,EAAKj7C,MAAMgJ,WAAWkqE,qBAAqBj4B,EAAKh7C,KAAKg7C,EAAKh7C,KAAKyD,OAAS,MAG7E8B,EAAIsb,eAIAm6B,EAAKu3B,UAAUW,IAAItqE,KAAK5I,WAM5BuyE,UAAUriE,OAASlQ,EAAKkQ,OAE7BvE,OAAOujE,eAAe/uE,KAAKH,KAAM,SAAU,CAC1C8yE,YAAY,EACZC,cAAc,EACdlxE,MAAO,eAKNsxE,EAJI9kD,EAAOlb,MAAM8J,KAAKvc,WACtB+Y,EAAQ4U,EAAK,GAAK,EAAIruB,EAAKyD,OAAS4qB,EAAK,GAAKA,EAAK,GACnD3U,EAAM2U,EAAK,GACXuN,IAAUvN,EAAK,IAAKA,EAAK9K,MAAM,OAG3By3B,EAAK5a,SAAWyyC,IAAY73B,EAAKw3B,eAAe,IAGhD52C,KACFu3C,IAAWnzE,EAAKyZ,IAASuhC,EAAKj7C,MAAMgJ,WAAWkqE,qBAAqBjzE,EAAKyZ,KAGxEmiB,EAAQ74B,SAAQ,SAACoqB,GAChB6tB,EAAKj7C,MAAMgJ,WAAW6d,aAAauG,GAAS,EAAMgmD,GAAU,OAG7Dv3C,EAAUA,EAAQrY,QAAQuD,WAElB/jB,SAAQ,SAACoqB,GAChB6tB,EAAKj7C,MAAMgJ,WAAW6d,aAAauG,GAAS,GAAM,GAAO,OAMjD,IAARzT,EAAU,KACR05D,EAAUpzE,EAAKujB,MAAM9J,OAA0B,IAAZ4U,EAAK,GAAqBA,EAAK,GAAK5U,EAAQC,GAEnF05D,EAAQrwE,SAAQ,SAACoqB,EAASriB,OACrBvF,EAAMy1C,EAAKj7C,MAAMgJ,WAAWkqE,qBAAqB9lD,GAElD5nB,GACFA,EAAIsb,aAAa/V,IAAMsoE,EAAQ3vE,OAAS,OAKxCm4B,GAAmB,IAARliB,IACbshC,EAAKj7C,MAAMgJ,WAAWgd,4BAIjBi1B,EAAKu3B,UAAUriE,OAAOse,MAAMxuB,EAAMU,wDAM1B,IAAdP,KAAKH,SACH,IAAIqB,KAAOlB,KAAKoyE,UACnB5mE,OAAOujE,eAAe/uE,KAAKH,KAAMqB,EAAK,CACrCyxE,YAAY,EACZC,cAAa,EACbM,UAAS,EACTxxE,MAAO1B,KAAKoyE,UAAUlxE,uCAMjBkE,OACJvF,EAAOuF,EAAIC,cAIX,IAAInE,UAFH++B,SAAU,EAEApgC,OACTszE,SAAS/tE,EAAKvF,EAAMqB,GAGvBlB,KAAKJ,MAAM6B,QAAQsjC,eAChBquC,kBAAkBhuE,QAGnB66B,SAAU,4CAGG76B,mBACdiuE,EAAajuE,EAAIC,UAAUrF,KAAKJ,MAAM6B,QAAQ6mC,oBAClD8pC,EAAY,YAEHkB,SACH1zE,MAAMQ,QAAQ2kC,SAAStsB,cAAcrT,QACrCxF,MAAMQ,QAAQ2kC,SAAS6D,UAAUxjC,QACjCxF,MAAMgJ,WAAW6X,kBAAkB,QAAQ,GAAO,GAGrD4yD,IAEFjB,EAAUtvE,KAAOuwE,EAAWvwE,KAE5B0I,OAAOujE,eAAesE,EAAY,OAAQ,CACzCV,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFgD,EAAS0tE,EAAUtvE,KAAKurB,MAAMglD,EAAY9yE,UAE9C+yE,IAEO5uE,KAIT0tE,EAAU5+D,QAAU6/D,EAAW7/D,QAE/BhI,OAAOujE,eAAesE,EAAY,UAAW,CAC5CV,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFgD,EAAU0tE,EAAU5+D,QAAQ6a,MAAMglD,EAAY9yE,UAElD+yE,IAEO5uE,KAIT0tE,EAAUjkD,MAAQklD,EAAWllD,MAE7B3iB,OAAOujE,eAAesE,EAAY,QAAS,CAC1CV,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFgD,EAAU0tE,EAAUjkD,MAAM1lB,KAAK4qE,UAEnCC,IAEO5uE,KAIT0tE,EAAUW,IAAMM,EAAWN,IAE3BvnE,OAAOujE,eAAesE,EAAY,MAAO,CACxCV,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFgD,EAAU0tE,EAAUW,IAAItqE,KAAK4qE,UAEjCC,IAEO5uE,KAIT0tE,EAAUriE,OAASsjE,EAAWtjE,OAE9BvE,OAAOujE,eAAesE,EAAY,SAAU,CAC3CV,YAAY,EACZC,cAAc,EACdlxE,MAAO,eACFgD,EAAU0tE,EAAUriE,OAAOse,MAAMglD,EAAY9yE,UAEjD+yE,IAEO5uE,uCAMFU,EAAKvF,EAAMqB,cACfyiD,EAAQn4C,OAAOsjE,yBAAyBjvE,EAAMqB,GAClDQ,EAAQ7B,EAAKqB,GACbwxE,EAAU1yE,KAAKqyE,eAEf7mE,OAAOujE,eAAelvE,EAAMqB,EAAK,CAChC8tE,IAAK,SAACxX,MACL91D,EAAQ81D,GACJ3vD,EAAKo4B,SAAWyyC,IAAY7qE,EAAKwqE,eAAe,KAC/C99D,EAAS,GACbA,EAAOrT,GAAOs2D,EACdpyD,EAAIoZ,WAAWjK,GAGbovC,EAAMqrB,KACRrrB,EAAMqrB,IAAIxX,IAGZv1D,IAAI,kBAEA0hD,EAAM1hD,KACR0hD,EAAM1hD,MAGAP,wCAKC0D,OACNvF,EAAOuF,EAAIC,cAEX,IAAInE,KAAOrB,EACd2L,OAAOujE,eAAelvE,EAAMqB,EAAK,CAChCQ,MAAM7B,EAAKqB,0CAMR++B,SAAU,yCAIVA,SAAU,SA7UU7O,GAiV3B+gD,GAAa39C,WAAa,mBCjVpB++C,4CAEO3zE,yCACLA,IAED4zE,aAAc,IACd5Q,QAAS,IACT6Q,YAAa,IACbC,SAAU,IACVpxE,OAAS,OACTqxE,kBAAoB,OACpBxvE,WAAa,OAEbyS,aAAc,IACd0d,qBAAqB,aAAa,KAClCD,oBAAoB,sBAAsB,yDAI1CrzB,UAAU,kBAAmBhB,KAAK4zE,mBAAmBpzE,KAAKR,yDAI3DA,KAAK4W,mBAEH5V,UAAU,gBAAiBhB,KAAK6zE,kBAAkBrzE,KAAKR,YACvDgB,UAAU,cAAehB,KAAK8zE,sBAAsBtzE,KAAKR,YAEzDgB,UAAU,cAAehB,KAAK+zE,aAAavzE,KAAKR,YAChDgB,UAAU,eAAgBhB,KAAKg0E,oBAAoBxzE,KAAKR,YAExDgB,UAAU,cAAehB,KAAKi0E,mBAAmBzzE,KAAKR,YACtDgB,UAAU,cAAehB,KAAKg0E,oBAAoBxzE,KAAKR,YACvDgB,UAAU,eAAgBhB,KAAKk0E,mBAAmB1zE,KAAKR,YAEvDgB,UAAU,gBAAiBhB,KAAK8zE,sBAAsBtzE,KAAKR,YAC3DgB,UAAU,gBAAiBhB,KAAK+zE,aAAavzE,KAAKR,YAElD4W,aAAc,6CAKH/T,GACI,QAAlBA,EAAKuC,IAAIrD,YACN+xE,sBAAsBjxE,QACtBy5B,iBAAiB,OAAQz5B,EAAMA,EAAKhB,OAAQgB,EAAK8C,qDAIrC9D,GACfA,EAAO0F,WAAW4sE,iBACfC,+BACAN,sBAAsBjyE,QACtBy6B,iBAAiB,SAAUz6B,EAAQA,EAAQA,EAAO8D,sDAIrC9D,OACfyxD,EAAOzxD,EAAOwC,kBAEbgwE,mBAAmBxyE,GAErByxD,QACG+gB,mBAAmB/gB,8CAIPzxD,cACfA,EAAOzB,QAAQgX,SACdpX,KAAKJ,MAAMQ,QAAQ2lC,cAAcipB,YAAYlkC,SAASjpB,QACnDjC,MAAMQ,QAAQ2lC,cAAcipB,YAAYpsD,SAAQ,SAACuU,GACrDtP,EAAKwsE,mBAAmBl9D,MAEjBnX,KAAKJ,MAAMQ,QAAQ2lC,cAAckpB,aAAankC,SAASjpB,SAC1DjC,MAAMQ,QAAQ2lC,cAAckpB,aAAarsD,SAAQ,SAACuU,GACtDtP,EAAKwsE,mBAAmBl9D,kDAMTtV,OACdyyE,IAAezyE,EAAOzB,QAAQgX,QAAUvV,EAAOzB,QAAQgX,OAAO84C,YAAcruD,EAAO2C,WAAa,KAGpG3C,EAAOc,MAAMC,SAAQ,SAACC,GAClBA,EAAKzC,QAAQuoB,QAAU9lB,EAAKzC,QAAQuoB,OAAO4rD,WAC1CD,IACFzxE,EAAKzC,QAAQuoB,OAAO4rD,SAAS7tE,MAAMU,KAAOktE,GAG3CzxE,EAAK8C,QAAQ/B,MAAMf,EAAKzC,QAAQuoB,OAAO4rD,cAItC1yE,EAAOzB,QAAQuoB,QAAU9mB,EAAOzB,QAAQuoB,OAAO4rD,WAC9CD,IACFzyE,EAAOzB,QAAQuoB,OAAO4rD,SAAS7tE,MAAMU,KAAOktE,GAG7CzyE,EAAO8D,QAAQ/B,MAAM/B,EAAOzB,QAAQuoB,OAAO4rD,oDAI5BxyE,EAAMgE,EAAWlE,EAAQ8D,OACrCk1C,EAAO76C,KAEXo0B,EAAOvyB,EAAO0F,WAAW4sE,UACzBn8D,EAAS,GACTw8D,EAAgB3yE,EAAOwN,mBAGX,WAATtN,IAEFiW,EAAS,CAACmnC,eADsC,YAA/Bt9C,EAAO0F,WAAW2H,WAA2BrN,EAAO0F,WAAW43C,mBAIpE,IAAT/qB,GAAiBA,GAAQryB,IAAS/B,KAAKy0E,mBAAmBD,GAAe,KAExElyE,EAAS+D,SAASC,cAAc,QACpChE,EAAOiE,UAAY,8BAEnBjE,EAAOsK,iBAAiB,SAAS,SAASC,GACzCA,EAAEiB,yBAGC4mE,EAAa,SAAS7nE,GACzBguC,EAAK24B,YAAc3xE,EACnBg5C,EAAK84B,kBAAoB94B,EAAK12C,WAAaqwE,EAAcrwE,aACzD02C,EAAK85B,WAAW9nE,EAAG2nE,EAAelyE,IAGnCA,EAAOsK,iBAAiB,YAAa8nE,GACrCpyE,EAAOsK,iBAAiB,aAAc8nE,EAAY,CAACxnE,SAAS,IAG5D5K,EAAOsK,iBAAiB,YAAY,SAACC,OAChC+nE,EAAWJ,EAAchwE,WAE7BqI,EAAEiB,kBACF0mE,EAAc7vE,mBAAkB,GAE7BiwE,IAAaJ,EAAchwE,aAC7Bq2C,EAAKx5C,SAAS,iBAAkBmzE,GAChC35B,EAAKj7C,MAAM4B,eAAeH,SAAS,gBAAiBmzE,EAAczxE,oBAIjElB,EAAOzB,QAAQgX,SACjB9U,EAAOoE,MAAMyO,SAAW,WACxB7S,EAAOoE,MAAMU,KAAOvF,EAAOzB,QAAQgX,OAAO84C,YAAcruD,EAAO2C,WAAa,MAG7EwT,EAAOu8D,SAAWjyE,EAEfqD,EAAQ8D,YACV9D,EAAQ/B,MAAMtB,GAIhByD,EAAU3F,QAAQuoB,OAAS3Q,6CAGTnW,mBACbiyE,sBAAsBjyE,GAE3BA,EAAOc,MAAMC,SAAQ,SAACC,GACrBiK,EAAKgnE,sBAAsBjxE,oDAIPkD,OACjBwuE,EAEDxuE,EAAU3F,QAAQuoB,SACpB4rD,EAAWxuE,EAAU3F,QAAQuoB,OAAO4rD,WAErBA,EAASM,eACvBN,EAASM,cAAc5sE,YAAYssE,wCAKzBxuE,EAAWF,GACpBE,EAAU3F,QAAQuoB,QAAU5iB,EAAU3F,QAAQuoB,OAAO4rD,WACvDxuE,EAAU3F,QAAQuoB,OAAO4rD,SAAS7tE,MAAMb,OAASA,8CAIhChE,UACXA,EAAO0F,WAAW4sE,6CAGftnE,EAAGhL,EAAQS,OACjBu4C,EAAO76C,cAIF80E,EAAUjoE,OAIlBkoE,EAAeC,EAHX1kD,OAAyB,IAAdzjB,EAAEuvC,QAA0BvvC,EAAE0jB,QAAQ,GAAG6rB,QAAUvvC,EAAEuvC,QACpE64B,EAAY3kD,EAAIuqB,EAAK+nB,OACrBsS,EAAW5kD,EAAIuqB,EAAK64B,WAGpB74B,EAAK64B,QAAUpjD,EAEZuqB,EAAKj7C,MAAMi5B,MACbo8C,GAAaA,EACbC,GAAYA,GAGbH,EAAgBlzE,EAAO4C,OAAS5C,EAAOiE,UAAYjE,EAAO4C,OAAS5C,EAAOsH,SAE1EtH,EAAO+C,SAASi2C,EAAK44B,WAAawB,GAElCD,EAAenzE,EAAO4C,OAAS5C,EAAOiE,UAAYjE,EAAO4C,OAAS5C,EAAOsH,SAEtE+rE,EAAW,IACbr6B,EAAK12C,WAAa02C,EAAK84B,mBAGrB94B,EAAKj7C,MAAM6B,QAAQ0zE,oBAAsBt6B,EAAK12C,cAAgB4wE,IAAiBC,GAAc,KAC3Fl3D,EAAW+8B,EAAK12C,WAAWK,WAE5B0wE,EAAW,GACVp3D,GAAY+8B,EAAK12C,WAAW2B,WAC9B+0C,EAAK12C,WAAa02C,EAAK12C,WAAWA,cAIjC02C,EAAK12C,YACP02C,EAAK12C,WAAWS,SAASi2C,EAAK12C,WAAWK,WAAa0wE,GAIxDr6B,EAAKj7C,MAAM6D,cAAcoB,SAASC,iBAAgB,IAE9C+1C,EAAKj7C,MAAM+4B,aAAe92B,EAAOzB,QAAQuoB,QAAU9mB,EAAOzB,QAAQuoB,OAAOw2B,gBAC5Et9C,EAAOuzE,4BAIAC,EAAQxoE,GAGbguC,EAAK24B,YAAYpzE,QAAQsiC,OAC3BmY,EAAK24B,YAAYpzE,QAAQsiC,KAAKzC,SAAU,GAGtC4a,EAAKj7C,MAAM+4B,aAAe92B,EAAOzB,QAAQuoB,QAAU9mB,EAAOzB,QAAQuoB,OAAOw2B,gBAC3Et9C,EAAOuzE,mBAGR/uE,SAAS8pB,KAAK5E,oBAAoB,UAAW8pD,GAC7ChvE,SAAS8pB,KAAK5E,oBAAoB,YAAaupD,GAE/CxyE,EAAOipB,oBAAoB,YAAaupD,GACxCxyE,EAAOipB,oBAAoB,WAAY8pD,GAEvCx6B,EAAKj7C,MAAM+F,QAAQ+B,UAAUmN,OAAO,0BAEjCgmC,EAAK44B,aAAe5xE,EAAO2C,aAC7Bq2C,EAAKx5C,SAAS,iBAAkBQ,GAChCg5C,EAAKj7C,MAAM4B,eAAeH,SAAS,gBAAiBQ,EAAOkB,iBAnE7D83C,EAAKj7C,MAAM+F,QAAQ+B,UAAUC,IAAI,0BAuEjCkF,EAAEiB,kBAGC+sC,EAAK24B,YAAYpzE,QAAQsiC,OAC3BmY,EAAK24B,YAAYpzE,QAAQsiC,KAAKzC,SAAU,GAGzC4a,EAAK+nB,YAA8B,IAAd/1D,EAAEuvC,QAA0BvvC,EAAE0jB,QAAQ,GAAG6rB,QAAUvvC,EAAEuvC,QAC1EvB,EAAK64B,QAAU74B,EAAK+nB,OACpB/nB,EAAK44B,WAAa5xE,EAAO2C,WAEzB6B,SAAS8pB,KAAKvjB,iBAAiB,YAAakoE,GAC5CzuE,SAAS8pB,KAAKvjB,iBAAiB,UAAWyoE,GAC1C/yE,EAAOsK,iBAAiB,YAAakoE,EAAW,CAAC5nE,SAAS,IAC1D5K,EAAOsK,iBAAiB,WAAYyoE,UA1RVjkD,GA8R5BmiD,GAAc/+C,WAAa,oBC9RrB8gD,4CAEO11E,yCACLA,IAED4zE,aAAc,IACdlP,QAAS,IACTiR,aAAc,IACdjzE,OAAS,OACTkzE,WAAa,OAEbnhD,oBAAoB,iBAAiB,oDAIvCr0B,KAAKJ,MAAM6B,QAAQge,oBAChBze,UAAU,mBAAoBhB,KAAKyY,cAAcjY,KAAKR,6CAI/CoF,OACTy1C,EAAO76C,KACX4U,EAAQxP,EAAI7C,aAERD,EAAS+D,SAASC,cAAc,OACpChE,EAAOiE,UAAY,kCAEfivE,EAAanvE,SAASC,cAAc,OACxCkvE,EAAWjvE,UAAY,mCAEvBjE,EAAOsK,iBAAiB,SAAS,SAASC,GACzCA,EAAEiB,yBAGC4mE,EAAa,SAAS7nE,GACzBguC,EAAKm4B,SAAW5tE,EAChBy1C,EAAK85B,WAAW9nE,EAAGzH,EAAK9C,IAGzBA,EAAOsK,iBAAiB,YAAa8nE,GACrCpyE,EAAOsK,iBAAiB,aAAc8nE,EAAY,CAACxnE,SAAS,IAE5DsoE,EAAW5oE,iBAAiB,SAAS,SAASC,GAC7CA,EAAEiB,yBAGC2nE,EAAkB,SAAS5oE,OAC1B8R,EAAUk8B,EAAKj7C,MAAMgJ,WAAWyX,eAAejb,GAEhDuZ,IACFk8B,EAAKm4B,SAAWr0D,EAChBk8B,EAAK85B,WAAW9nE,EAAG8R,EAAS62D,KAI9BA,EAAW5oE,iBAAiB,YAAY6oE,GACxCD,EAAW5oE,iBAAiB,aAAa6oE,EAAgB,CAACvoE,SAAS,IAEnE0H,EAAM1M,YAAY5F,GAClBsS,EAAM1M,YAAYstE,sCAGR3oE,EAAGzH,EAAK9C,OACdu4C,EAAO76C,cAIF80E,EAAUjoE,GAClBzH,EAAIsa,UAAUm7B,EAAK06B,mBAAqC,IAAd1oE,EAAE6oE,QAA0B7oE,EAAE0jB,QAAQ,GAAGmlD,QAAU7oE,EAAE6oE,SAAW76B,EAAKypB,kBAGvG+Q,EAAQxoE,GAOhBxG,SAAS8pB,KAAK5E,oBAAoB,UAAWupD,GAC7CzuE,SAAS8pB,KAAK5E,oBAAoB,YAAaupD,GAE/CxyE,EAAOipB,oBAAoB,YAAaupD,GACxCxyE,EAAOipB,oBAAoB,WAAY8pD,GAEvCx6B,EAAKj7C,MAAM+F,QAAQ+B,UAAUmN,OAAO,0BAEpCgmC,EAAKnyC,iBAAiB,aAActD,EAAIrC,gBArBzC83C,EAAKj7C,MAAM+F,QAAQ+B,UAAUC,IAAI,0BAwBjCkF,EAAEiB,kBAOF+sC,EAAKypB,YAA8B,IAAdz3D,EAAE6oE,QAA0B7oE,EAAE0jB,QAAQ,GAAGmlD,QAAU7oE,EAAE6oE,QAC1E76B,EAAK06B,YAAcnwE,EAAIiX,YAEvBhW,SAAS8pB,KAAKvjB,iBAAiB,YAAakoE,GAC5CzuE,SAAS8pB,KAAKvjB,iBAAiB,UAAWyoE,GAE1C/yE,EAAOsK,iBAAiB,YAAakoE,EAAW,CAAC5nE,SAAS,IAC1D5K,EAAOsK,iBAAiB,WAAYyoE,UAvGbjkD,GA2GzBkkD,GAAW9gD,WAAa,iBC3GlBmhD,4CAEO/1E,yCACLA,IAEDw2B,SAAU,IACVw/C,UAAW,IACXC,mBAAoB,IAEpBC,YAAc,IACdltD,WAAa,IACbhF,gBAAkB,IAClBmyD,eAAiB,IAEjBC,YAAa,IAEb3hD,oBAAoB,cAAc,kEAIpCr0B,KAAKJ,MAAM6B,QAAQu0E,WAAW,KAEhCC,EADIr2E,EAAQI,KAAKJ,WAGZk2E,YAAcl2E,EAAM+F,QAAQiJ,kBAC5Bga,WAAahpB,EAAM+F,QAAQyK,YAE7BxQ,EAAM+F,QAAQ8D,kBACXma,gBAAkBhkB,EAAM+F,QAAQ8D,WAAWmF,kBAC3CmnE,eAAiBn2E,EAAM+F,QAAQ8D,WAAW2G,aAGnB,oBAAnB8lE,gBAAuE,YAArCt2E,EAAMgJ,WAAW62C,sBAEvDu2B,YAAa,OAEbJ,SAAW,IAAIM,gBAAe,SAACC,OAC/Bv2E,EAAMg5B,eAAkBh5B,EAAMg5B,gBAAiBh5B,EAAMQ,QAAQsiC,KAAKC,YAAa,KAE9EyzC,EAAalmE,KAAKC,MAAMgmE,EAAM,GAAGE,YAAYxwE,QAC7CywE,EAAYpmE,KAAKC,MAAMgmE,EAAM,GAAGE,YAAY5xE,OAE7CoD,EAAKiuE,aAAeM,GAAcvuE,EAAK+gB,YAAc0tD,IACvDzuE,EAAKiuE,YAAcM,EACnBvuE,EAAK+gB,WAAa0tD,EAEf12E,EAAM+F,QAAQ8D,aAChB5B,EAAK+b,gBAAkBhkB,EAAM+F,QAAQ8D,WAAWmF,aAChD/G,EAAKkuE,eAAiBn2E,EAAM+F,QAAQ8D,WAAW2G,aAGhDvI,EAAKjI,MAAM6D,cAAcoB,SAASC,iBAAgB,GAElDlF,EAAMic,mBAMJ+5D,SAASW,QAAQ32E,EAAM+F,SAE5BswE,EAAa7jE,OAAO0nB,iBAAiBl6B,EAAM+F,SAExC3F,KAAKJ,MAAM+F,QAAQ8D,aAAezJ,KAAKJ,MAAMgJ,WAAW8b,cAAgBuxD,EAAWlsC,iBAAiB,eAAiBksC,EAAWlsC,iBAAiB,sBAE9I8rC,kBAAoB,IAAIK,gBAAe,SAACC,OACxCv2E,EAAMg5B,eAAkBh5B,EAAMg5B,gBAAiBh5B,EAAMQ,QAAQsiC,KAAKC,YAAa,KAE9EyzC,EAAalmE,KAAKC,MAAMgmE,EAAM,GAAGE,YAAYxwE,QAC7CywE,EAAYpmE,KAAKC,MAAMgmE,EAAM,GAAGE,YAAY5xE,OAE7CoD,EAAK+b,iBAAmBwyD,GAAcvuE,EAAKkuE,gBAAkBO,IAC/DzuE,EAAK+b,gBAAkBwyD,EACvBvuE,EAAKkuE,eAAiBO,EACtBzuE,EAAKiuE,YAAcl2E,EAAM+F,QAAQiJ,aACjC/G,EAAK+gB,WAAahpB,EAAM+F,QAAQyK,aAGjCxQ,EAAM6D,cAAcoB,SAASC,iBAAgB,GAE7ClF,EAAMic,kBAIHg6D,kBAAkBU,QAAQv2E,KAAKJ,MAAM+F,QAAQ8D,kBAG9CzI,UAAU,eAAgBhB,KAAKw2E,aAAah2E,KAAKR,cAGjDo2B,QAAU,aACVx2B,EAAMg5B,eAAkBh5B,EAAMg5B,gBAAkBh5B,EAAMQ,QAAQsiC,KAAKC,eAEtE/iC,EAAM6D,cAAcoB,SAASC,iBAAgB,GAE7ClF,EAAMic,WAIRzJ,OAAOxF,iBAAiB,SAAU5M,KAAKo2B,eAGnCp1B,UAAU,gBAAiBhB,KAAK8+D,cAAct+D,KAAKR,oDAKpDJ,MAAMgJ,WAAWiT,iDAInB7b,KAAKo2B,SACPhkB,OAAOmZ,oBAAoB,SAAUvrB,KAAKo2B,SAGxCp2B,KAAK41E,eACFA,SAASa,UAAUz2E,KAAKJ,MAAM+F,SAGjC3F,KAAK61E,wBACFA,kBAAkBY,UAAUz2E,KAAKJ,MAAM+F,QAAQ8D,mBAxH7B2nB,GA6H1BukD,GAAYnhD,WAAa,kBC7HnBkiD,4CAEO92E,yCACLA,IAEDsD,QAAU,KACVyzE,cAAgB,KAChBviD,KAAO,KACPtkB,MAAQ,IACR8mE,kBAAoB,KACpBC,mBAAoB,IACpBC,sBAAuB,IAEvBziD,oBAAoB,oBAAoB,KACxCA,oBAAoB,qCAAqC,KACzDA,oBAAoB,yCAAyC,KAC7DA,oBAAoB,qCAAqC,KAEzDC,qBAAqB,+DAQvBt0B,KAAKJ,MAAM6B,QAAQswB,wBAChB/wB,UAAU,gBAAiBhB,KAAKs8B,iBAAiB97B,KAAKR,YACtDgB,UAAU,cAAehB,KAAK+2E,uBAAuBv2E,KAAKR,YAC1DgB,UAAU,cAAehB,KAAK+2E,uBAAuBv2E,KAAKR,YAC1DgB,UAAU,iBAAkBhB,KAAKg3E,uBAAuBx2E,KAAKR,YAC7DgB,UAAU,eAAgBhB,KAAKg3E,uBAAuBx2E,KAAKR,YAC3DgB,UAAU,aAAchB,KAAKg3E,uBAAuBx2E,KAAKR,YACzDgB,UAAU,gBAAiBhB,KAAKg3E,uBAAuBx2E,KAAKR,YAE5DgB,UAAU,kBAAmBhB,KAAKwkC,YAAYhkC,KAAKR,OAEb,aAAxCA,KAAKJ,MAAM6B,QAAQswB,wBAChB/wB,UAAU,WAAYhB,KAAKyY,cAAcjY,KAAKR,YAC9CgB,UAAU,aAAchB,KAAK4oC,UAAUpoC,KAAKR,6CAKxCqI,IACyD,IAAjE,CAAC,aAAc,kBAAkBqD,QAAQ1L,KAAK+d,gBAC5C1V,QACEkM,sEAMHrR,EAAU,QAETkxB,KAAOp0B,KAAKJ,MAAM6B,QAAQswB,sBAC1B6kD,kBAAoB52E,KAAKJ,MAAM6B,QAAQw1E,mCAAqCj3E,KAAKk3E,yBACjFL,kBAAoB72E,KAAKJ,MAAM6B,QAAQ01E,uCACvCR,cAAgB,QAGhB/2E,MAAM6D,cAAciU,eAAe9U,SAAQ,SAACf,EAAQ8I,GACrD9I,EAAOzB,QAAQsyB,YACd7wB,EAAOzB,QAAQsyB,WAAW0kD,OAASv1E,EAAOzB,QAAQsyB,WAAW1vB,UAC/DnB,EAAOzB,QAAQsyB,WAAW5iB,MAAQnF,EAClCzH,EAAQJ,KAAKjB,GAETA,EAAOmB,SAAyB,aAAd6E,EAAKusB,MAC1BvsB,EAAK8uE,cAAc7zE,KAAKjB,OAQ5BqB,GADAA,EAAUA,EAAQyjB,WACAY,MAAK,SAACC,EAAGC,UACfA,EAAErnB,QAAQsyB,WAAW0kD,MAAQ5vD,EAAEpnB,QAAQsyB,WAAW0kD,OAC7C3vD,EAAErnB,QAAQsyB,WAAW5iB,MAAQ0X,EAAEpnB,QAAQsyB,WAAW5iB,cAG9D5M,QAAUA,EAEE,aAAdlD,KAAKo0B,WACFijD,qCAIUr3E,KAAKJ,MAAM6D,cAAciU,+CAAe,KAA/CP,aACuB,sBAA5BA,EAAI5P,WAAW2H,UAAkC,MAC9C4nE,qBAAuB3/D,wCAK3BnX,KAAK82E,uBACJ92E,KAAK22E,cAAcrzE,YAChBwzE,qBAAqB3zE,YAErB2zE,qBAAqB1zE,iDAMZvB,OACZgI,EAAMhI,EAAOW,gBAEjBX,EAAOzB,QAAQsyB,WAAa,CAAC0kD,WAAiC,IAAnBvtE,EAAI6oB,WAA6B,EAAI7oB,EAAI6oB,WAAY1vB,SAAwB,IAAhB6G,EAAI7G,+CAG/FoC,OACT8F,EAEY,SAAb9F,EAAIrD,QACNmJ,EAAK7E,SAASC,cAAc,QACzBoB,UAAUC,IAAI,iCAEjBvC,EAAIhF,QAAQ2xB,iBAAmB,CAC9BpsB,QAAQuF,EACRo7B,KAAKtmC,KAAK62E,mBAGP72E,KAAK62E,oBACR3rE,EAAGxE,MAAMI,QAAU,2CAKZ1B,OACLwP,EAAQxP,EAAI7C,aAEb6C,EAAIhF,QAAQ2xB,mBACdnd,EAAM1M,YAAY9C,EAAIhF,QAAQ2xB,iBAAiBpsB,cAC1C2xE,4BAA4BlyE,mDAKZvD,EAAQ4N,IAC1BA,GAAoB5N,EAAOzB,QAAQsyB,aACtC7wB,EAAOzB,QAAQsyB,WAAW1vB,QAAUnB,EAAOmB,aACtCg0E,6DAIIn1E,OACN01E,EAAWv3E,KAAK22E,cAAcrzE,OAElCzB,EAAOuB,MAAK,GAAO,GAEF,aAAdpD,KAAKo0B,YACFuiD,cAAcnjE,QAAQ3R,QACtBw1E,2BAEFr3E,KAAK82E,uBAAyBS,QAC3BT,qBAAqB3zE,2CAKlBtB,OACNiO,EAEJjO,EAAOsB,MAAK,GAAO,GAEnBtB,EAAO+C,SAAS/C,EAAO2C,YAEN,aAAdxE,KAAKo0B,QACPtkB,EAAQ9P,KAAK22E,cAAcjrE,QAAQ7J,KAEvB,QACN80E,cAAc5mE,OAAOD,EAAO,QAG7BunE,2BAEFr3E,KAAK82E,uBAAyB92E,KAAK22E,cAAcrzE,aAC9CwzE,qBAAqB1zE,iDAOxBy3C,EAAO76C,KACXw3E,GAAU,EAEJA,GAAQ,KAET/yE,EAA+C,cAAvCo2C,EAAKj7C,MAAMQ,QAAQS,OAAOC,UAA4B+5C,EAAKj7C,MAAM6D,cAAcg0E,mBAAqB58B,EAAKj7C,MAAM6D,cAAce,WAErIwU,GAAQ6hC,EAAKj7C,MAAM6B,QAAQyZ,cAAgB2/B,EAAKj7C,MAAM6D,cAAckC,QAAQyK,YAAcyqC,EAAKj7C,MAAM+F,QAAQyK,aAAe3L,KAE7HuU,EAAO,EAAE,KAEPnX,EAASg5C,EAAK33C,QAAQ23C,EAAK/qC,OAE5BjO,GACFg5C,EAAK68B,WAAW71E,GAChBg5C,EAAK/qC,SAEL0nE,GAAU,MAGP,KAGA31E,EAASg5C,EAAK33C,QAAQ23C,EAAK/qC,MAAO,GAEnCjO,GACCmX,EAAO,GACNA,GAAQnX,EAAO2C,YACjBq2C,EAAK88B,WAAW91E,GAChBg5C,EAAK/qC,SAQP0nE,GAAU,EAIR38B,EAAKj7C,MAAMgJ,WAAWic,iBACzBg2B,EAAKj7C,MAAMgJ,WAAW2f,4EAMpBsyB,EAAO76C,KACJA,KAAKJ,MAAMgJ,WAAW+L,iBAExB/R,SAAQ,SAASwC,GACrBy1C,EAAKy8B,4BAA4BlyE,0DAIPA,OACvB8F,EAAIkD,KAELhJ,EAAIhF,QAAQ2xB,iBAAiB,KAC/B7mB,EAAK9F,EAAIhF,QAAQ2xB,iBAAiBpsB,QAE5BuF,EAAGlD,YAAYkD,EAAGjD,YAAYiD,EAAGlD,aAEvCoG,EAAWpO,KAAK42E,kBAAkB52E,KAAK43E,yBAAyBxyE,MAE/D8F,EAAGhD,YAAYkG,qDAKOhJ,OAIxByyE,EAHIh9B,EAAO76C,KACXH,EAAOuF,EAAIC,UACXhC,EAAS,eAGJszE,cAAc/zE,SAAQ,SAASf,OAC/BH,EAAQG,EAAOuE,cAAcvG,MAE9BgC,EAAO0F,WAAWoE,OAAS9J,EAAO4E,SACjC5E,EAAOzB,QAAQsmC,QAAUmU,EAAKj7C,MAAM6B,QAAQq2E,sCAAsC,CAEpFD,EAAoB,CACnBn2E,OAAM,EACN7B,KAAK,GACLoF,SAAS,kBACDvD,GAER2D,QAAQ,kBACAxF,GAER0C,WAAW,kBACH8D,SAASC,cAAc,QAE/B+zC,OAAO,kBACCj1C,EAAIrC,gBAEZ60C,UAAU,kBACF/1C,EAAOkB,iBAQhBM,EAAOP,KAAK,CACX2D,MAAO5E,EAAO4E,MACdkF,MAAO9J,EAAO0F,WAAWoE,MACzBjK,MAAOG,EAAOzB,QAAQsmC,OAAOx3B,UAAUzG,KAAKoyC,EAAKj7C,MAAMQ,QAAQsmC,OAAQmxC,EAAmBh2E,EAAOzB,QAAQsmC,OAAOna,QAPjH,SAAoBjY,GACnBA,cASDjR,EAAOP,KAAK,CACX2D,MAAO5E,EAAO4E,MACdkF,MAAO9J,EAAO0F,WAAWoE,MACzBjK,MAAOA,OAMJ2B,8CAGYxD,OACf+S,EAAOvM,SAASC,cAAc,gBAElCzG,EAAK+C,SAAQ,SAAS2Q,OAIjBwkE,EAHA3yE,EAAMiB,SAASC,cAAc,MAC7B0xE,EAAY3xE,SAASC,cAAc,MACnC2xE,EAAY5xE,SAASC,cAAc,MAGnC4xE,EAAiB7xE,SAASC,cAAc,UAC5C0xE,EAAU9vE,YAAYgwE,QACjBjqE,SAAS,WAAasF,EAAK9M,OAAO,SAASyH,GAC/CgqE,EAAepwE,UAAYoG,GAAQqF,EAAK5H,SAGtC4H,EAAK7R,iBAAiBqG,OACxBgwE,EAAe1xE,SAASC,cAAc,QACzB4B,YAAYqL,EAAK7R,OAC9Bu2E,EAAU/vE,YAAY6vE,IAEtBE,EAAUnwE,UAAYyL,EAAK7R,MAG5B0D,EAAI8C,YAAY8vE,GAChB5yE,EAAI8C,YAAY+vE,GAChBrlE,EAAK1K,YAAY9C,KACfpF,MAEIwL,OAAOC,KAAK5L,GAAMyD,OAASsP,EAAO,UAlVZwe,GAsV/BslD,GAAiBliD,WAAa,uBCtVxB2jD,4CAEOv4E,yCACLA,IAEDw4E,WAAY,IACZC,gBAAiB,IACjBC,WAAa,KACbn3B,aAAe,KACfo3B,sBAAwB,OAExBlkD,oBAAoB,aAAc,eAClCA,oBAAoB,sBAAuB,UAC3CA,oBAAoB,8BAA8B,KAClDA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,mBAAmB,SAASx0B,EAAMuF,UAAY,OAElE+vB,sBAAsB,YAAarrB,EAAK0uE,WAAWh4E,cACnD20B,sBAAsB,cAAerrB,EAAK2uE,aAAaj4E,cACvD20B,sBAAsB,kBAAmBrrB,EAAKk+B,UAAUxnC,cACxD20B,sBAAsB,kBAAmBrrB,EAAK4uE,gBAAgBl4E,cAC9D20B,sBAAsB,kBAAmBrrB,EAAK6uE,gBAAgBn4E,cAG9DqnC,0BAA0B,MAAO,SAAU/9B,EAAK0uE,WAAWh4E,cAC3DqnC,0BAA0B,MAAO,WAAY/9B,EAAK2uE,aAAaj4E,cAC/DqnC,0BAA0B,MAAO,eAAgB/9B,EAAKk+B,UAAUxnC,cAChEqnC,0BAA0B,MAAO,aAAc/9B,EAAK8uE,cAAcp4E,8DAIlC,IAAlCR,KAAKJ,MAAM6B,QAAQo3E,kBAChB73E,UAAU,WAAYhB,KAAKyY,cAAcjY,KAAKR,YAC9CgB,UAAU,eAAgBhB,KAAK82D,WAAWt2D,KAAKR,YAC/CgB,UAAU,YAAahB,KAAK84E,mBAAmBt4E,KAAKR,YACpDgB,UAAU,gBAAiBhB,KAAK+4E,YAAYv4E,KAAKR,OAEnDA,KAAKJ,MAAM6B,QAAQo3E,aAAe74E,KAAKJ,MAAM6B,QAAQu3E,4BAClDh4E,UAAU,kBAAmBhB,KAAKy4E,aAAaj4E,KAAKR,4CAKhD+B,EAAMozD,SACD,aAATpzD,EAAsB/B,KAAKmhD,aAAegU,qCAGvC/vD,QACL6zE,aAAa7zE,GAAK,8CAGLtF,QACbs4E,WAAY,OACZC,gBAAiB,OACjBC,WAAa,QACbn3B,aAAe,IAEN,IAAXrhD,QACGo5E,6DAIO9zE,OACTy1C,EAAO76C,KACX2F,EAAUP,EAAI7C,aAGV42E,EAAY,SAAZA,IAEH9rE,YAAW,WACVwtC,EAAKu9B,WAAY,IACf,IAEH/xE,SAAS8pB,KAAK5E,oBAAoB,UAAW4tD,IAG9C/zE,EAAIhF,QAAQ4hC,OAAS,CAACkW,UAAS,GAG5B2C,EAAKj7C,MAAM6B,QAAQ23E,gBAAgB3wE,KAAKzI,KAAKJ,MAAOwF,EAAIrC,iBAC1D4C,EAAQ+B,UAAUC,IAAI,wBACtBhC,EAAQ+B,UAAUmN,OAAO,0BAEtBgmC,EAAKj7C,MAAM6B,QAAQo3E,YAA+C,aAAjCh+B,EAAKj7C,MAAM6B,QAAQo3E,aACR,UAA3Ch+B,EAAKj7C,MAAM6B,QAAQgsD,oBACrB9nD,EAAQiH,iBAAiB,QAAS5M,KAAK2tD,sBAAsBntD,KAAKR,KAAMoF,KAExEO,EAAQiH,iBAAiB,SAAS,SAASC,GACtCguC,EAAKj7C,MAAMoyB,UAAU,SAAY6oB,EAAKj7C,MAAMQ,QAAQsiC,KAAK22C,kBAC5Dx+B,EAAKj7C,MAAM05E,kBAGRz+B,EAAKu9B,WACRv9B,EAAK7S,UAAU5iC,MAIjBO,EAAQiH,iBAAiB,aAAa,SAASC,MAC3CA,EAAEyyD,gBACJzkB,EAAKj7C,MAAM05E,kBAEXz+B,EAAKu9B,WAAY,EAEjBv9B,EAAKy9B,WAAa,GAElBjyE,SAAS8pB,KAAKvjB,iBAAiB,UAAWusE,GAC1C9yE,SAAS8pB,KAAKvjB,iBAAiB,QAASusE,GAExCt+B,EAAK7S,UAAU5iC,IAER,KAITO,EAAQiH,iBAAiB,cAAc,SAASC,GAC5CguC,EAAKu9B,YACPv9B,EAAKj7C,MAAM05E,kBACXz+B,EAAK7S,UAAU5iC,GAEZy1C,EAAKy9B,WAAW,IAAMlzE,GACxBy1C,EAAK7S,UAAU6S,EAAKy9B,WAAW,QAKlC3yE,EAAQiH,iBAAiB,YAAY,SAASC,GAC1CguC,EAAKu9B,YACPv9B,EAAKj7C,MAAM05E,kBACXz+B,EAAKy9B,WAAW9kE,QAAQpO,WAO5BO,EAAQ+B,UAAUC,IAAI,0BACtBhC,EAAQ+B,UAAUmN,OAAO,uEAILzP,EAAKyH,iBACvBA,EAAEyyD,SAAS,MACR1/D,MAAM05E,uBACNjB,eAAiBr4E,KAAKq4E,gBAAkBjzE,MAEzCm0E,EAAoBv5E,KAAKJ,MAAMgJ,WAAWue,mBAAmBnnB,KAAKq4E,gBAClEmB,EAASx5E,KAAKJ,MAAMgJ,WAAWue,mBAAmB/hB,GAElDq0E,EAAaF,GAAqBC,EAASD,EAAoBC,EAC/DE,EAAWH,GAAqBC,EAASD,EAAoBC,EAG7DG,EADO35E,KAAKJ,MAAMgJ,WAAW+L,iBAAiByO,MAAM,GACjCrT,OAAO0pE,EAAYC,EAAWD,EAAa,GAE/D5sE,EAAEwyD,SAAWxyD,EAAE0yD,SACjBoa,EAAY/2E,SAAQ,SAACg3E,GACjBA,IAAe/xE,EAAKwwE,kBAEe,IAAlCxwE,EAAKjI,MAAM6B,QAAQo3E,YAAwBhxE,EAAK+wE,cAAcxzE,IAC7DyC,EAAKs5C,aAAa79C,OAASuE,EAAKjI,MAAM6B,QAAQo3E,aAIjDhxE,EAAKmgC,UAAU4xC,WAIbvB,eAAiBjzE,SAEjBqzE,kBAAat4E,GAAW,IAEQ,IAAlCH,KAAKJ,MAAM6B,QAAQo3E,YAClBc,EAAYr2E,OAAStD,KAAKJ,MAAM6B,QAAQo3E,aAC1Cc,EAAcA,EAAYv2D,MAAM,EAAGpjB,KAAKJ,MAAM6B,QAAQo3E,kBAInDL,WAAWmB,SAEZ/5E,MAAM05E,uBAEJzsE,EAAEwyD,SAAWxyD,EAAE0yD,cACjBv3B,UAAU5iC,QACVizE,eAAiBjzE,SAEjBqzE,kBAAat4E,GAAW,QACxBq4E,WAAWpzE,QACXizE,eAAiBjzE,qCAKdA,GACNpF,KAAKJ,MAAM6B,QAAQ23E,gBAAgB3wE,KAAKzI,KAAKJ,MAAOwF,EAAIrC,kBACvDqC,EAAIhF,QAAQ4hC,QAAU58B,EAAIhF,QAAQ4hC,OAAOkW,cACtC+gC,aAAa7zE,QAEby0E,WAAWz0E,uCAMRmL,OACNupE,kBAEUvpE,QACR,iBACA3Q,MAAMgJ,WAAW2H,KAAK3N,SAAQ,SAACwC,GACnC0H,EAAK+sE,WAAWz0E,GAAK,GAAM,WAGvB8zE,iCAGA,UAELY,EAAW95E,KAAKJ,MAAMgJ,WAAW2X,QAAQhQ,SAGnCspE,WAAWC,GAAU,GAAM,QAE3Bl6E,MAAMgJ,WAAWwe,QAAQ7W,GAAM3N,SAAQ,SAACwC,GAC5C0H,EAAK+sE,WAAWz0E,GAAK,GAAM,WAIxB8zE,qCAIFlmE,MAAMC,QAAQ1C,IAChBA,EAAK3N,SAAQ,SAACwC,GACb0H,EAAK+sE,WAAWz0E,GAAK,GAAM,WAGvB8zE,6BAEAW,WAAWtpE,GAAM,GAAO,uCAOrBwpE,EAASj6E,EAAQuI,OAIvB4H,MAAMjQ,KAAKJ,MAAM6B,QAAQo3E,cAAiD,IAAlC74E,KAAKJ,MAAM6B,QAAQo3E,aAAwBxwE,GACnFrI,KAAKmhD,aAAa79C,QAAUtD,KAAKJ,MAAM6B,QAAQo3E,WAAW,KACzD74E,KAAKJ,MAAM6B,QAAQu4E,kCAGd,OAFFf,aAAaj5E,KAAKmhD,aAAa,QAOnC/7C,EAAMpF,KAAKJ,MAAMgJ,WAAW2X,QAAQw5D,GAErC30E,GACoC,GAAnCpF,KAAKmhD,aAAaz1C,QAAQtG,KAC5BA,EAAI7C,aAAamF,UAAUC,IAAI,sBAC3BvC,EAAIhF,QAAQ4hC,SACf58B,EAAIhF,QAAQ4hC,OAAS,IAGtB58B,EAAIhF,QAAQ4hC,OAAOkW,UAAW,EAC3B9yC,EAAIhF,QAAQ4hC,OAAOi4C,aACrB70E,EAAIhF,QAAQ4hC,OAAOi4C,WAAWn9B,SAAU,QAGpCqE,aAAar+C,KAAKsC,GAEpBpF,KAAKJ,MAAM6B,QAAQy4E,8BAChBC,kBAAkB/0E,GAAK,QAGxBsD,iBAAiB,cAAetD,EAAIrC,qBAEpCm2E,qBAAqBp5E,IAGvBA,GACHkE,QAAQC,KAAK,2DAA6D81E,yCAK/D30E,UAC8B,IAApCpF,KAAKmhD,aAAaz1C,QAAQtG,wCAIrBmL,EAAMzQ,OAElBg2D,EADIjb,EAAO76C,aAGO,IAARuQ,EAAoB,CAE7BulD,EAAWjb,EAAKsG,aAAa79C,WAEzB,IAAIqH,EAAI,EAAGA,EAAImrD,EAAUnrD,IAC5BkwC,EAAKo+B,aAAap+B,EAAKsG,aAAa,IAAI,GAGtC2U,GACFjb,EAAKq+B,qBAAqBp5E,QAIxBkT,MAAMC,QAAQ1C,IAChBA,EAAK3N,SAAQ,SAASwC,GACrBy1C,EAAKo+B,aAAa7zE,GAAK,MAGxBy1C,EAAKq+B,qBAAqBp5E,IAE1B+6C,EAAKo+B,aAAa1oE,EAAMzQ,wCAMdi6E,EAASj6E,OAGrBgQ,EAFI+qC,EAAO76C,KACXoF,EAAMy1C,EAAKj7C,MAAMgJ,WAAW2X,QAAQw5D,GAGjC30E,GACF0K,EAAQ+qC,EAAKsG,aAAa7tC,WAAU,SAAS8mE,UACrCA,GAAeh1E,OAGX,IAEXA,EAAI7C,aAAamF,UAAUmN,OAAO,sBAC9BzP,EAAIhF,QAAQ4hC,SACf58B,EAAIhF,QAAQ4hC,OAAS,IAGtB58B,EAAIhF,QAAQ4hC,OAAOkW,UAAW,EAC3B9yC,EAAIhF,QAAQ4hC,OAAOi4C,aACrB70E,EAAIhF,QAAQ4hC,OAAOi4C,WAAWn9B,SAAU,GAEzCjC,EAAKsG,aAAapxC,OAAOD,EAAO,GAE7B9P,KAAKJ,MAAM6B,QAAQy4E,8BAChBC,kBAAkB/0E,GAAK,QAGxBsD,iBAAiB,gBAAiBtD,EAAIrC,gBAE3C83C,EAAKq+B,qBAAqBp5E,IAGvBA,GACHkE,QAAQC,KAAK,6DAA+D81E,iDAM1El6E,EAAO,eAENshD,aAAav+C,SAAQ,SAASwC,GAClCvF,EAAKiD,KAAKsC,EAAIC,cAGRxF,gDAKH0Q,EAAO,eAEN4wC,aAAav+C,SAAQ,SAASwC,GAClCmL,EAAKzN,KAAKsC,EAAIrC,mBAGRwN,+CAGazQ,GACjBE,KAAKu4E,wBACyB,IAA7Bv4E,KAAKmhD,aAAa79C,aACfi1E,sBAAsBz7B,SAAU,OAChCy7B,sBAAsBt7B,eAAgB,GAClCj9C,KAAKJ,MAAMgJ,WAAW2H,KAAKjN,SAAWtD,KAAKmhD,aAAa79C,aAC5Di1E,sBAAsBz7B,SAAU,OAChCy7B,sBAAsBt7B,eAAgB,SAEtCs7B,sBAAsBt7B,eAAgB,OACtCs7B,sBAAsBz7B,SAAU,IAInCh9C,QACE4I,iBAAiB,sBAAuB1I,KAAK24E,kBAAmB34E,KAAK04E,qEAIjDtzE,EAAKO,GAC3BP,EAAI+Y,KAAK/d,QAAQ4hC,SACpB58B,EAAI+Y,KAAK/d,QAAQ4hC,OAAS,IAG3B58B,EAAI+Y,KAAK/d,QAAQ4hC,OAAOi4C,WAAat0E,uDAGRA,QACxB4yE,sBAAwB5yE,4CAGZP,EAAK48B,OAClB1iB,EAAWtf,KAAKJ,MAAMQ,QAAQ2kC,SAASkF,YAAY7kC,GAAK,MAEzD48B,EAAO,WACQ1iB,kCAAS,KAAlBzP,eACFgqE,WAAWhqE,GAAO,uCAEpB,WACayP,kCAAS,KAAlBzP,eACFopE,aAAappE,GAAO,2CAxaLuhB,GCDT,YAAS5J,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,OAClD2+B,EAAK94C,OAAO+4C,UAAYC,MAAMD,SAC9BzkB,EAASna,EAAOma,QAAU,sBAC9B6zC,EAAmBhuD,EAAOguD,iBAC1B1hC,EAAa,UAEG,IAANqS,EAAkB,IAEzB1jC,EADC0jC,EAAGO,WAAWjkC,GACXA,EACc,QAAXkf,EACHwkB,EAAGQ,QAAQjoB,OAAOjc,IAElB0jC,EAAGS,WAAWloB,OAAOjc,GAAIkf,GAI7Bjf,EADCyjC,EAAGO,WAAWhkC,GACXA,EACc,QAAXif,EACHwkB,EAAGQ,QAAQjoB,OAAOhc,IAElByjC,EAAGS,WAAWloB,OAAOhc,GAAIif,GAG3Blf,EAAEokC,QAEA,CAAA,GAAInkC,EAAEmkC,eAIJpkC,EAAIC,EAHXoxB,EAAc,OAFdA,EAAcpxB,EAAEmkC,SAAe,EAAL,SASF,QAArB2uB,GAAsC,SAAR9lE,GAAyC,WAArB8lE,GAAyC,QAAR9lE,KACtFokC,IAAe,GAGTA,EAGP70C,QAAQ4N,MAAM,2DDuYhBumE,GAAU3jD,WAAa,mBEtaR,CACdgmB,OCVc,SAAShzB,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,OAClDguD,EAAmBhuD,EAAOguD,iBAC1B9wB,EAAUl9B,EAAOiuD,iBACjBzwB,EAAWx9B,EAAOkuD,kBAClB5hC,EAAa,KAEjBrxB,EAAIic,OAAOjc,GACXC,EAAIgc,OAAOhc,GAERsiC,IACFviC,EAAIA,EAAE/f,MAAMsiD,GAAU3sB,KAAK,IAC3B3V,EAAIA,EAAEhgB,MAAMsiD,GAAU3sB,KAAK,KAGzBqsB,IACFjiC,EAAIA,EAAE/f,MAAMgiD,GAASrsB,KAAK,KAC1B3V,EAAIA,EAAEhgB,MAAMgiD,GAASrsB,KAAK,MAG3B5V,EAAIgc,WAAWhc,GACfC,EAAI+b,WAAW/b,GAGZxX,MAAMuX,GACRqxB,EAAc5oC,MAAMwX,GAAK,GAAK,MACzB,CAAA,IAAGxX,MAAMwX,UAIPD,EAAIC,EAHXoxB,EAAc,SAOU,QAArB0hC,GAAsC,SAAR9lE,GAAyC,WAArB8lE,GAAyC,QAAR9lE,KACtFokC,IAAe,GAGTA,GD1BP6hC,OEXc,SAASlzD,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,OAGlDoI,EAFA4lD,EAAmBhuD,EAAOguD,iBAC1B1hC,EAAa,KAIbrxB,EAEE,CAAA,GAAIC,EAEL,UAEU8E,EAAOoI,aACf,UACFpI,EAAOoI,SACTA,EAAS30B,KAAK26E,wBAGV,SACLhmD,EAASpI,EAAOoI,cAIV8O,OAAOjc,GAAGkO,cAAcklD,cAAcn3C,OAAOhc,GAAGiO,cAAef,GAdtEkkB,EAAc,OAFdA,EAAepxB,GAAS,EAAL,SAoBK,QAArB8yD,GAAsC,SAAR9lE,GAAyC,WAArB8lE,GAAyC,QAAR9lE,KACtFokC,IAAe,GAGTA,GFnBPsT,KGVc,SAAS3kC,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,UAClDA,EAAOma,SACVna,EAAOma,OAAS,cAGVskB,GAASviD,KAAKzI,KAAMwnB,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,IHM1DsuD,KIXc,SAASrzD,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,UAClDA,EAAOma,SACVna,EAAOma,OAAS,SAGVskB,GAASviD,KAAKzI,KAAMwnB,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,IJO1Dy+B,SAASA,WKdK,SAASxjC,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,WACtC,IAAN/E,GAAoB,SAANA,GAAsB,SAANA,GAAsB,IAANA,EAAU,EAAI,KACtD,IAANC,GAAoB,SAANA,GAAsB,SAANA,GAAsB,IAANA,EAAU,EAAI,ILctEqzD,MMhBc,SAAStzD,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,OAGlDxqB,EAAOwqB,EAAOxqB,MAAQ,SACtBw4E,EAAmBhuD,EAAOguD,iBAC1B1hC,EAAa,WAERkiC,EAAKr5E,UAENK,OACD,gBACEL,EAAM4B,WAGR,aACE5B,EAAM0hC,QAAO,SAASkK,EAAG0tC,UACxB1tC,EAAI0tC,SAIP,aACE9qE,KAAKG,IAAIge,MAAM,KAAM3sB,OAGvB,aACEwO,KAAKI,IAAI+d,MAAM,KAAM3sB,OAGvB,aACEA,EAAM0hC,QAAO,SAASkK,EAAG0tC,UACxB1tC,EAAI0tC,KACPt5E,EAAM4B,WAMT0P,MAAMC,QAAQuU,GAEZ,CAAA,GAAIxU,MAAMC,QAAQwU,UAKjBD,EAAIuzD,EAAKvzD,GAAK,IACdC,EAAIszD,EAAKtzD,GAAK,GALpB8yD,EAAmB,OAFnBA,EAAoBvnE,MAAMC,QAAQwU,IAAU,EAAL,SAaf,QAArB8yD,GAAsC,SAAR9lE,GAAyC,WAArB8lE,GAAyC,QAAR9lE,KACtFokC,IAAe,GAGTA,GNtCP8f,OOjBc,SAASnxC,EAAGC,EAAG4yD,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,eAChC,IAAL/E,EAAmB,EAAI,SAClB,IAALC,EAAmB,EAAI,IPgBxCwzD,SQlBc,SAAS3iC,EAAIC,EAAI8hC,EAAMC,EAAMz4E,EAAQ4S,EAAK8X,OACpD/E,EAAGC,EAAG+wB,EAAIC,EAAUC,EAAN/tC,EAAG,EAAMguC,EAAK,eAAgBC,EAAK,KACjD2hC,EAAmBhuD,EAAOguD,iBAC1B1hC,EAAa,KAGbP,GAAY,IAANA,EAEJ,CAAA,GAAIC,GAAY,IAANA,EAEX,IAEDO,SAASR,IAAOQ,SAASP,GAAK,OAAOD,EAAKC,MAC7C/wB,EAAIic,OAAO6U,GAAI5iB,kBACfjO,EAAIgc,OAAO8U,GAAI7iB,eACH,OAAO,MACdkjB,EAAGhe,KAAKpT,KAAMoxB,EAAGhe,KAAKnT,GAAK,OAAOD,EAAIC,EAAI,GAAK,MACpDD,EAAIA,EAAErU,MAAMwlC,GACZlxB,EAAIA,EAAEtU,MAAMwlC,GACZD,EAAIlxB,EAAElkB,OAASmkB,EAAEnkB,OAASmkB,EAAEnkB,OAASkkB,EAAElkB,OACjCqH,EAAI+tC,OACTF,EAAIhxB,EAAE7c,OACN8tC,EAAIhxB,EAAE9c,aAEFmuC,SAASN,IAAOM,SAASL,IACP,MAAjBD,EAAG/b,OAAO,KAAY+b,EAAK,IAAMA,GAChB,MAAjBC,EAAGhc,OAAO,KAAYgc,EAAK,IAAMA,GAC7BD,EAAKC,GAEDD,EAAKC,EAAK,GAAK,SAItBjxB,EAAElkB,OAASmkB,EAAEnkB,OAxBpBu1C,EAAc,OAFdA,EAAeN,GAAY,IAANA,GAAe,EAAL,SA8BP,QAArBgiC,GAAsC,SAAR9lE,GAAyC,WAArB8lE,GAAyC,QAAR9lE,KACtFokC,IAAe,GAGTA,ICtCFqiC,4CAEOt7E,yCACLA,IAEAu7E,SAAW,KACXtyE,SAAU,IAEVwrB,oBAAoB,WAAY,WAEhCA,oBAAoB,eAAe,KACnCA,oBAAoB,yBAAyB,KAC7CA,oBAAoB,oBAAoB,KACxCA,oBAAoB,oBAAqB,yCAEzCC,qBAAqB,YACrBA,qBAAqB,kBAErBA,qBAAqB,cAAc,KACnCA,qBAAqB,2BACrBA,qBAAqB,4EAKrBtzB,UAAU,gBAAiBhB,KAAKs8B,iBAAiB97B,KAAKR,YACtDgB,UAAU,cAAehB,KAAKgmD,WAAWxlD,KAAKR,YAC9CmmD,oBAAoBnmD,KAAKunB,KAAK/mB,KAAKR,MAAO,SAE1Cm1B,sBAAsB,UAAWn1B,KAAKo7E,YAAY56E,KAAKR,YACvDm1B,sBAAsB,aAAcn1B,KAAKsvE,QAAQ9uE,KAAKR,YACtDm1B,sBAAsB,YAAan1B,KAAKq7E,UAAU76E,KAAKR,OAEzB,WAAhCA,KAAKJ,MAAM6B,QAAQ65E,eAChBt6E,UAAU,cAAehB,KAAKu7E,iBAAiB/6E,KAAKR,4CAKvDA,KAAKJ,MAAM6B,QAAQktE,kBAChB6M,QAAQx7E,KAAKJ,MAAM6B,QAAQktE,sDAIjB9uE,EAAMmY,EAAQlY,EAAQysB,OAClCmiD,EAAU1uE,KAAKsvE,iBAEnBZ,EAAQ9rE,SAAQ,SAAC2Q,UACTA,EAAK1R,UAGb0qB,EAAOhF,KAAOmnD,EAEPniD,sCAQG4uD,EAAU1mE,QAChB+mE,QAAQL,EAAU1mE,QAElBgnE,uDAIA3jE,aAEA2jE,uDASW55E,OAEhBma,EACA0/D,SAFIngE,GAAS,WAIC1Z,EAAO0F,WAAWgU,aAC1B,SACF2/D,EAAKxM,QAAQ7sE,EAAO0F,WAAWgU,QACjCA,EAAS2/D,EAAKxM,QAAQ7sE,EAAO0F,WAAWgU,QAExCvX,QAAQC,KAAK,sCAAuCpC,EAAO0F,WAAWgU,kBAIlE,WACLA,EAAS1Z,EAAO0F,WAAWgU,OAI5B1Z,EAAOzB,QAAQmnB,KAAO,CACrBhM,OAAOA,EAAQ9G,IAAI,OACnB8X,OAAO1qB,EAAO0F,WAAWo0E,cAAgB,GACzCC,YAAY/5E,EAAO0F,WAAWs0E,uBAAyB,MACvDv/B,SAAUz6C,EAAO0F,WAAWu0E,qBAGO,IAAjCj6E,EAAO0F,WAAWw0E,cAEpB//D,EAAQna,EAAOU,cAETmF,UAAUC,IAAI,uBAGpB+zE,EAAUr1E,SAASC,cAAc,QACzBoB,UAAUC,IAAI,wBAE4B,UAA/C0L,EAAOrT,KAAKJ,MAAM6B,QAAQu6E,mBAC5BN,EAAQxzE,YAAYlI,KAAKJ,MAAM6B,QAAQu6E,mBAEvCN,EAAQ5zE,UAAY9H,KAAKJ,MAAM6B,QAAQu6E,kBAIxCn6E,EAAOmI,mBAAmB9B,YAAYwzE,GAEtC75E,EAAOzB,QAAQmnB,KAAK5hB,QAAU+1E,EAG9B1/D,EAAMpP,iBAAiB,SAAS,SAACC,OAC5B4H,EAAM,GACVi6D,EAAQ,GACRv7D,GAAQ,KAELtR,EAAOzB,QAAQmnB,KAAK,IACnB1lB,EAAOzB,QAAQmnB,KAAK+0B,SAErB7nC,EAD6B,QAA3B5S,EAAOzB,QAAQmnB,KAAK9S,IAChB5S,EAAOzB,QAAQmnB,KAAKq0D,YAEvB/5E,EAAOzB,QAAQmnB,KAAK9S,KAAO5S,EAAOzB,QAAQmnB,KAAKq0D,YAChB,OAA3B/5E,EAAOzB,QAAQmnB,KAAK9S,IAAe,OAAS,MAE5C,mBAID5S,EAAOzB,QAAQmnB,KAAK9S,SACrB,MACLA,EAAM,iBAGD,OACLA,EAAM,oBAINA,EAAM5S,EAAOzB,QAAQmnB,KAAKq0D,YAKxB/zE,EAAKjI,MAAM6B,QAAQw6E,wBAA0BpvE,EAAEyyD,UAAYzyD,EAAEwyD,WAGhElsD,GAFAu7D,EAAU7mE,EAAKynE,WAECh8D,WAAU,SAACiI,UACnBA,EAAO9U,QAAU5E,EAAOY,gBAGpB,GACXisE,EAAQv7D,GAAOsB,IAAMA,EAElBtB,GAASu7D,EAAQprE,OAAQ,IAC3B6P,EAAQu7D,EAAQ3+D,OAAOoD,EAAO,GAAG,GACvB,QAAPsB,GACFi6D,EAAQ5rE,KAAKqQ,KAIL,QAAPsB,GACFi6D,EAAQ5rE,KAAK,CAACjB,OAAOA,EAAQ4S,IAAIA,IAKnC5M,EAAK2zE,QAAQ9M,IAEH,QAAPj6D,EACF5M,EAAKiQ,QAGLjQ,EAAK2zE,QAAQ35E,EAAQ4S,GAMvB5M,EAAK4zE,yDAO2B,WAAhCz7E,KAAKJ,MAAM6B,QAAQ65E,cAChBhzB,WAAW,MAAM,GAAO,QAExB7e,aAAY,4CAUd5gC,EAAU7I,KAAK6I,oBACdA,SAAU,EACRA,wCAMP6lE,EAAU,UADC1uE,KAGNm7E,SAASv4E,SAAQ,SAAS2Q,GAC3BA,EAAK1R,QACP6sE,EAAQ5rE,KAAK,CAACjB,OAAO0R,EAAK1R,OAAOkB,eAAgB0D,MAAM8M,EAAK1R,OAAOY,WAAYgS,IAAIlB,EAAKkB,SAInFi6D,kCAIAyM,EAAU1mE,OACbomC,EAAO76C,KACXk8E,EAAc,GAEVlpE,MAAMC,QAAQkoE,KACjBA,EAAW,CAAC,CAACt5E,OAAQs5E,EAAU1mE,IAAIA,KAGpC0mE,EAASv4E,SAAQ,SAAS2Q,OACrB1R,GAEJA,EAASg5C,EAAKj7C,MAAM6D,cAAcK,WAAWyP,EAAK1R,UAGjD0R,EAAK1R,OAASA,EACdq6E,EAAYp5E,KAAKyQ,GACjBsnC,EAAKhyC,SAAU,GAEf7E,QAAQC,KAAK,kEAAmEsP,EAAK1R,WAKvFg5C,EAAKsgC,SAAWe,OAEX76E,SAAS,qDAKTm6E,QAAQ,uCAIH35E,OAGHH,EAFH0D,EAAMpF,KAAKJ,MAAMgJ,WAAWgc,WAAW,GAC3CrJ,EAAS,YAGNnW,IACFA,EAAMA,EAAIC,UACFxD,EAAOY,qBAIdf,EAAQG,EAAOuE,cAAchB,SAGvB,YACLmW,EAAS,mBAGJ,UACLA,EAAS,wBAILtL,MAAMvO,IAAoB,KAAVA,EAGhBA,EAAMyR,MAAM,0CACdoI,EAAS,YAHVA,EAAS,gBAWN2/D,EAAKxM,QAAQnzD,gCAIhB1b,OACAg7C,EAAO76C,KACXm7E,EAAWn7E,KAAKJ,MAAM6B,QAAQ06E,iBAAmBthC,EAAKsgC,SAAS/3D,QAAQuD,UAAYk0B,EAAKsgC,SACxFiB,EAAiB,GACjBC,EAAgB,UAGbr8E,KAAK2I,mBAAmB,qBACrBD,iBAAiB,cAAemyC,EAAKy0B,WAG3Cz0B,EAAKyhC,qBAE8B,WAAhCt8E,KAAKJ,MAAM6B,QAAQ65E,UAGrBH,EAASv4E,SAAQ,SAAS2Q,EAAM5I,OAC3B4xE,EAAUhpE,EAAK1R,OAAOzB,QAAQmnB,KAE/BhU,EAAK1R,QAAU06E,IAGbA,EAAQhhE,SACXghE,EAAQhhE,OAASs/B,EAAK2hC,WAAWjpE,EAAK1R,SAGvC0R,EAAKgZ,OAAmC,mBAAnBgwD,EAAQhwD,OAAwBgwD,EAAQhwD,OAAOhZ,EAAK1R,OAAOkB,eAAgBwQ,EAAKkB,KAAO8nE,EAAQhwD,OAEpH6vD,EAAet5E,KAAKyQ,IAGrBsnC,EAAK4hC,gBAAgBlpE,EAAK1R,OAAQ0R,EAAKkB,QAIpC2nE,EAAe94E,QAClBu3C,EAAK6hC,WAAW78E,EAAMu8E,IAIvBjB,EAASv4E,SAAQ,SAAS2Q,EAAM5I,GAC/BkwC,EAAK4hC,gBAAgBlpE,EAAK1R,OAAQ0R,EAAKkB,QAItCzU,KAAK2I,mBAAmB,gBAC1B9I,EAAK+C,SAAQ,SAACwC,GACbi3E,EAAcv5E,KAAKsC,EAAIrC,wBAGnB2F,iBAAiB,aAAcmyC,EAAKy0B,UAAW+M,IAG9Cx8E,oDAKFD,MAAM6D,cAAcwxD,iBAAiBryD,SAAQ,SAASf,GACvDA,EAAOzB,QAAQmnB,OACjB1lB,EAAOzB,QAAQmnB,KAAK9S,IAAM,OAC1B5S,EAAOU,aAAaiE,aAAa,YAAa,oDAMjC3E,EAAQ4S,GACvB5S,EAAOzB,QAAQmnB,KAAK9S,IAAMA,EAC1B5S,EAAOU,aAAaiE,aAAa,YAAaiO,sCAIpC5U,EAAMs7E,cACZwB,EAAcxB,EAAS73E,OAAS,EAEpCzD,EAAK0nB,MAAK,SAACC,EAAGC,WACT/iB,EAEIiG,EAAIgyE,EAAahyE,GAAI,EAAGA,IAAI,KAC/BiyE,EAAWzB,EAASxwE,MAIV,KAFdjG,EAASoI,EAAK+vE,SAASr1D,EAAGC,EAAGm1D,EAAS/6E,OAAQ+6E,EAASnoE,IAAKmoE,EAASrwD,sBAO/D7nB,sCAKA8iB,EAAGC,EAAG5lB,EAAQ4S,EAAK8X,OACvBuwD,EAASC,EAGTC,EAAa,OAAPvoE,EAAe+S,EAAIC,EACzBw1D,EAAa,OAAPxoE,EAAegT,EAAID,SAK7BA,OAAiB,KAHjBA,EAAI3lB,EAAOuE,cAAc42E,EAAI33E,YAGEmiB,EAAI,GACnCC,OAAiB,KAHjBA,EAAI5lB,EAAOuE,cAAc62E,EAAI53E,YAGEoiB,EAAI,GAEnCq1D,EAAUE,EAAIj6E,eACdg6E,EAAUE,EAAIl6E,eAEPlB,EAAOzB,QAAQmnB,KAAKhM,OAAO9S,KAAKzI,KAAMwnB,EAAGC,EAAGq1D,EAASC,EAASl7E,EAAOkB,eAAgB0R,EAAK8X,UAjahF6E,GAqanB8pD,GAAK1mD,WAAa,OAGlB0mD,GAAKxM,QAAUwO,OCzaTC,4CAEOv9E,yCACLA,IAEDw9E,kBAAoB,KACzBtzE,EAAKuzE,iBAAmB,KAExBvzE,EAAKwzE,QAAU,OACVC,cAAgB,OAEhBlpD,oBAAoB,6BAAyBl0B,KAC7Ck0B,oBAAoB,eAAgB,OAEpCC,qBAAqB,aACrBA,qBAAqB,uEAIrBosC,wBAEA1/D,UAAU,cAAehB,KAAKs8B,iBAAiB97B,KAAKR,uDAIF,IAA7CA,KAAKJ,MAAM6B,QAAQ+7E,uBAC5Bx5E,QAAQC,KAAK,qLAIEpC,GACbA,EAAO0F,WAAWk2E,gBAAkBz9E,KAAKq9E,wBACtCA,kBAAmB,OAEnBr8E,UAAU,mBAAoBhB,KAAK09E,eAAel9E,KAAKR,KAAM,uBAC7DgB,UAAU,kBAAmBhB,KAAK29E,cAAcn9E,KAAKR,KAAM,mBAG9D6B,EAAO0F,WAAWq2E,UAAY59E,KAAKo9E,yBAChCA,mBAAoB,OAEpBp8E,UAAU,iBAAkBhB,KAAK09E,eAAel9E,KAAKR,KAAM,iBAC3DgB,UAAU,gBAAiBhB,KAAK29E,cAAcn9E,KAAKR,KAAM,oDAIjD02B,EAAQ7pB,EAAG9G,OACrB63E,EAAqB,YAAXlnD,EAAuB3wB,EAAUlE,OAAO0F,WAAWq2E,QAAU73E,EAAUwB,WAAWk2E,cAE7FG,SACGC,kBACAP,QAAUjwE,WAAWrN,KAAK89E,YAAYt9E,KAAKR,KAAM6M,EAAG9G,EAAW63E,GAAU59E,KAAKJ,MAAM6B,QAAQs8E,qDAIrFrnD,EAAQ7pB,EAAG9G,GACpB/F,KAAKu9E,oBACHM,gDAIInnD,EAAQ7pB,EAAG9G,GACrBqH,aAAapN,KAAKs9E,cACbA,QAAU,KAEZt9E,KAAKu9E,oBACFA,cAAcn6E,2CAITyJ,EAAG9G,EAAW63E,OACrB9M,EAAYjhD,EAAkBkB,SAMZ,mBAAZ6sD,IACTA,EAAUA,EAAQ/wE,EAAG9G,EAAUhD,yBALZuR,GACnBub,EAAmBvb,MAOjBspE,aAAmBnhE,YACrBq0D,EAAa8M,GAEb9M,EAAazqE,SAASC,cAAc,QAErB,IAAZs3E,IACC73E,aAAqBL,EACvBk4E,EAAU73E,EAAUrE,MAEjBqE,EAAUwB,WAAWd,WAClBwH,SAAS,WAAalI,EAAUwB,WAAWd,OAAO,SAAC/E,GACvDovE,EAAWhpE,UAAY81E,EAAUl8E,GAASqE,EAAUwB,WAAWoE,SAGhEiyE,EAAU73E,EAAUwB,WAAWoE,OAKlCmlE,EAAWhpE,UAAY81E,IAGrBA,GAAuB,IAAZA,GAA6B,MAAZA,IAA+B,IAAZA,KACjD9M,EAAWppE,UAAUC,IAAI,qBAEzBmpE,EAAWlkE,iBAAiB,aAAa,SAAAC,UAAKA,EAAEyzB,yBAE3Ci9C,cAAgBv9E,KAAKmyC,MAAM2+B,GAED,mBAArBjhD,QACJ0tD,cAAcxM,eAAelhD,GAGnCkB,EAAS/wB,KAAKu9E,cAActsD,qBAAqBpkB,QAE5C0wE,cAAcp6E,KAAK4tB,EAAOT,EAAI,GAAIS,EAAON,EAAI,IAAIipB,YAAW,WAChE7xC,EAAKa,iBAAiB,gBAAiB3C,EAAUhD,gBACjD8E,EAAK01E,cAAgB,aAGjB70E,iBAAiB,gBAAiB3C,EAAUhD,wBAzH9BquB,GA8HtB+rD,GAAQ3oD,WAAa,iBCjIN,CAEdg1B,QAAS,SAAS3mD,EAAMnB,EAAOs8E,SACjB,KAAVt8E,GAAAA,MAAgBA,GAIK,iBADxBA,EAAQ4hC,OAAO5hC,KACqBo3C,SAASp3C,IAAUwO,KAAKC,MAAMzO,KAAWA,SAIvE,SAASmB,EAAMnB,EAAOs8E,SACf,KAAVt8E,GAAAA,MAAgBA,GAIK,iBADxBA,EAAQ4hC,OAAO5hC,KACqBo3C,SAASp3C,IAAUA,EAAQ,GAAM,GAItEu8E,QAAS,SAASp7E,EAAMnB,EAAOs8E,SACjB,KAAVt8E,GAAAA,MAAgBA,IAGXuO,MAAMvO,IAIfg5E,OAAQ,SAAS73E,EAAMnB,EAAOs8E,SAChB,KAAVt8E,GAAAA,MAAgBA,GAGZuO,MAAMvO,IAId2O,IAAK,SAASxN,EAAMnB,EAAOs8E,SACb,KAAVt8E,GAAAA,MAAgBA,GAGZ8hC,WAAW9hC,IAAUs8E,GAI7B1tE,IAAK,SAASzN,EAAMnB,EAAOs8E,SACb,KAAVt8E,GAAAA,MAAgBA,GAGZ8hC,WAAW9hC,IAAUs8E,GAI7BE,OAAQ,SAASr7E,EAAMnB,EAAOs8E,SAChB,KAAVt8E,GAAAA,MAAgBA,GAGZ+hC,OAAO/hC,GAAOg0B,cAAcre,WAAWosB,OAAOu6C,GAAYtoD,gBAIlEyoD,KAAM,SAASt7E,EAAMnB,EAAOs8E,SACd,KAAVt8E,GAAAA,MAAgBA,GAGZ+hC,OAAO/hC,GAAOg0B,cAAc4uB,SAAS7gB,OAAOu6C,GAAYtoD,gBAKhE0oD,UAAW,SAASv7E,EAAMnB,EAAOs8E,SACnB,KAAVt8E,GAAAA,MAAgBA,GAGZ+hC,OAAO/hC,GAAO4B,QAAU06E,GAIhCK,UAAW,SAASx7E,EAAMnB,EAAOs8E,SACnB,KAAVt8E,GAAAA,MAAgBA,GAGZ+hC,OAAO/hC,GAAO4B,QAAU06E,MAI5B,SAASn7E,EAAMnB,EAAOs8E,SACZ,KAAVt8E,GAAAA,MAAgBA,IAGK,iBAAds8E,IACTA,EAAaA,EAAWv2E,MAAM,MAGd,KAAV/F,GAAgBs8E,EAAWtyE,QAAQhK,IAAU,IAIrD48E,MAAO,SAASz7E,EAAMnB,EAAOs8E,SACf,KAAVt8E,GAAAA,MAAgBA,GAGT,IAAIuiD,OAAO+5B,GAEVpjD,KAAKl5B,IAIjB68E,OAAQ,SAAS17E,EAAMnB,EAAOs8E,MAChB,KAAVt8E,GAAAA,MAAgBA,SACX,MAEJ68E,GAAS,EAETC,EAAW37E,EAAKwC,UAChBxD,EAASgB,EAAK+0C,YAAYp7B,uBAEzB5c,MAAMgJ,WAAW2H,KAAK3N,SAAQ,SAASwC,OACvCvF,EAAOuF,EAAIC,UAEZxF,IAAS2+E,GACR98E,GAASG,EAAOuE,cAAcvG,KAChC0+E,GAAS,MAKLA,GAIRviD,SAAS,SAASn5B,EAAMnB,EAAOs8E,SACb,KAAVt8E,GAAAA,MAAgBA,IC/HnB+8E,4CAEO7+E,yCACLA,IAED8+E,aAAe,KAEfrqD,oBAAoB,iBAAkB,cAEtCC,qBAAqB,eAErBa,sBAAsB,kBAAmBrrB,EAAK60E,gBAAgBn+E,cAC9D20B,sBAAsB,sBAAuBrrB,EAAK80E,wBAAwBp+E,cAC1E20B,sBAAsB,WAAYrrB,EAAK+0E,aAAar+E,cAEpDqnC,0BAA0B,OAAQ,UAAW/9B,EAAKg1E,YAAYt+E,cAC9DqnC,0BAA0B,OAAQ,kBAAmB/9B,EAAKi1E,gBAAgBv+E,cAC1EqnC,0BAA0B,OAAQ,WAAY/9B,EAAKk1E,aAAax+E,cAEhEqnC,0BAA0B,SAAU,WAAY/9B,EAAKm1E,eAAez+E,cACpEqnC,0BAA0B,MAAO,WAAY/9B,EAAKo1E,YAAY1+E,kEAK9DQ,UAAU,cAAehB,KAAK++E,gBAAgBv+E,KAAKR,YACnDgB,UAAU,gBAAiBhB,KAAKokC,sBAAsB5jC,KAAKR,YAE3DgB,UAAU,eAAgBhB,KAAKm/E,aAAa3+E,KAAKR,YACjDgB,UAAU,oBAAqBhB,KAAKo/E,YAAY5+E,KAAKR,YACrDgB,UAAU,oBAAqBhB,KAAKq/E,YAAY7+E,KAAKR,4CAO9C6C,EAAMnB,EAAO49E,cACrB78C,EAA8C,WAAtCziC,KAAKJ,MAAM6B,QAAQ0+C,gBAA8BngD,KAAKu/E,SAAS18E,EAAKhB,OAAOzB,QAAQm/E,SAAU18E,EAAMnB,UAGlG,IAAV+gC,GACFp1B,YAAW,WACVxK,EAAKN,aAAamF,UAAUC,IAAI,6BAChCE,EAAKa,iBAAiB,mBAAoB7F,EAAKE,eAAgBrB,EAAO+gC,MAIjEA,sCAGI5/B,EAAM28E,GACdA,GACC38E,EAAKhB,OAAOzB,QAAQm/E,eACjBP,aAAan8E,GAIpBA,EAAKN,aAAamF,UAAUmN,OAAO,iEAGxBhS,GACRA,EAAKzC,QAAQm/E,WACf18E,EAAKzC,QAAQm/E,SAASh0B,SAAU,uCAQtB1oD,UACJA,EAAKzC,QAAQm/E,UAAY18E,EAAKzC,QAAQm/E,SAASh0B,UAAmB,uCAG7D1oD,UACL7C,KAAKu/E,SAAS18E,EAAKhB,OAAOzB,QAAQm/E,SAAU18E,EAAMA,EAAKoC,mDAOhDpD,cACV0pD,EAAU,UAEd1pD,EAAOc,MAAMC,SAAQ,SAACC,IACU,IAA5BiK,EAAKkyE,aAAan8E,IACpB0oD,EAAQzoD,KAAKD,EAAKE,oBAIbwoD,EAAQjoD,QAASioD,sCAObnmD,cACPmmD,EAAU,UAEdnmD,EAAIzC,MAAMC,SAAQ,SAACC,IACa,IAA5B0K,EAAKyxE,aAAan8E,IACpB0oD,EAAQzoD,KAAKD,EAAKE,oBAIbwoD,EAAQjoD,QAASioD,kDAQD5oD,cACnBA,IACHA,EAAQ3C,KAAK2+E,mBAGV3rE,MAAMC,QAAQtQ,KACjBA,EAAQ,CAACA,IAGVA,EAAMC,SAAQ,SAACC,GACdmL,EAAK+wE,gBAAgBl8E,EAAK2Z,oDAIf7Z,OACRU,EAAS,eAGRzD,MAAMgJ,WAAW2H,KAAK3N,SAAQ,SAACwC,OAG/Bq9B,GAFJr9B,EAAMA,EAAIrC,gBAEMw8E,YAEH,IAAV98C,IACFp/B,EAASA,EAAOia,OAAOmlB,QAIlBp/B,EAAOC,QAASD,gDAOFxB,QACqB,IAAhCA,EAAO0F,WAAWk4E,gBACtBnjD,iBAAiBz6B,4CAKPA,OAGhB49E,EAFI5kC,EAAO76C,KACXgY,EAAS,GAGNnW,EAAO0F,WAAWk4E,YAEjBzsE,MAAMC,QAAQpR,EAAO0F,WAAWk4E,WAClC59E,EAAO0F,WAAWk4E,UAAU78E,SAAQ,SAAC2Q,IACpCksE,EAAY5kC,EAAK6kC,kBAAkBnsE,KAGlCyE,EAAOlV,KAAK28E,OAKdA,EAAYz/E,KAAK0/E,kBAAkB79E,EAAO0F,WAAWk4E,aAGpDznE,EAAOlV,KAAK28E,GAId59E,EAAOzB,QAAQm/E,WAAWvnE,EAAO1U,QAAS0U,6CAI1BtW,OACbK,EAAMwqB,EAAQ/F,WAEJ9kB,QACR,gBACL8kB,EAAM9kB,EAAMgK,QAAQ,OAEV,GACT3J,EAAOL,EAAMi+E,UAAU,EAAEn5D,GACzB+F,EAAS7qB,EAAMi+E,UAAUn5D,EAAI,IAE7BzkB,EAAOL,EAGD1B,KAAK4/E,gBAAgB79E,EAAMwqB,OAG7B,kBACEvsB,KAAK4/E,gBAAgBl+E,OAGvB,gBACE1B,KAAK4/E,gBAAgBl+E,EAAMK,KAAML,EAAMs8E,qDAKhCj8E,EAAMwqB,OAEjBgF,EAAsB,mBAARxvB,EAAqBA,EAAO08E,EAASoB,WAAW99E,UAE9DwvB,EAII,CACNxvB,KAAoB,mBAARA,EAAqB,WAAaA,EAC9CwvB,KAAKA,EACLhF,OAAOA,IANRvoB,QAAQC,KAAK,uDAAwDlC,IAC9D,oCAUA89E,EAAYh9E,EAAMnB,OACtBm5C,EAAO76C,KACX8/E,EAAmB,GACnBC,EAAe//E,KAAK0+E,aAAahzE,QAAQ7I,UAEtCg9E,GACFA,EAAWj9E,SAAQ,SAAC2Q,GACfA,EAAKge,KAAK9oB,KAAKoyC,EAAMh4C,EAAKE,eAAgBrB,EAAO6R,EAAKgZ,SACzDuzD,EAAiBh9E,KAAK,CACrBf,KAAKwR,EAAKxR,KACVi8E,WAAWzqE,EAAKgZ,YAMhB1pB,EAAKzC,QAAQm/E,WAChB18E,EAAKzC,QAAQm/E,SAAW,IAGrBO,EAAiBx8E,QAQpBT,EAAKzC,QAAQm/E,SAASh0B,QAAUu0B,EAES,WAAtC9/E,KAAKJ,MAAM6B,QAAQ0+C,gBACrBt9C,EAAKN,aAAamF,UAAUC,IAAI,8BAGb,GAAjBo4E,QACGrB,aAAa57E,KAAKD,KAdxBA,EAAKzC,QAAQm/E,SAASh0B,SAAU,EAChC1oD,EAAKN,aAAamF,UAAUmN,OAAO,6BAEhCkrE,GAAgB,QACbrB,aAAa3uE,OAAOgwE,EAAc,KAclCD,EAAiBx8E,QAASw8E,gDAI7Bz8E,EAAS,eAERq7E,aAAa97E,SAAQ,SAACC,GAC1BQ,EAAOP,KAAKD,EAAKE,mBAGXM,0CAGQR,OACXk9E,EAEDl9E,EAAKzC,QAAQm/E,UAAY18E,EAAKzC,QAAQm/E,SAASh0B,UAEjD1oD,EAAKN,aAAamF,UAAUmN,OAAO,6BACnChS,EAAKzC,QAAQm/E,SAASh0B,SAAU,GAEhCw0B,EAAe//E,KAAK0+E,aAAahzE,QAAQ7I,KAEtB,QACb67E,aAAa3uE,OAAOgwE,EAAc,WApSpB3uD,GA0SvBqtD,GAASjqD,WAAa,WAGtBiqD,GAASoB,WAAaG,grBC5ShBC,iGAAsB7wD,UAG5B,IAAI0H,EAAampD,GAAe7/E"}