@syncfusion/ej2-querybuilder 30.1.42 → 30.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.isPropChange = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category && columns[i].category !== this.l10n.getConstant('OtherFields')) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n if (column && column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var operVal = this.selectedColumn.operators;\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle' } });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle' } });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate) {\n if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {\n trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (!isNullOrUndefined(prevRule) && isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (!isNullOrUndefined(prevRule) && prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n if (isNullOrUndefined(value)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n }\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n this.isPropChange = true;\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n this.isPropChange = false;\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n window.removeEventListener('resize', this.windowResizeHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = true;\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n //String\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition }], groupId);\n }\n else {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","isPropChange","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","prevRule","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-label","title","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","forEach","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","addEventListener","windowResizeHandler","removeEventListener","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","console","warn","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","substring","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.isPropChange = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\n _this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = _this.l10n.getConstant('OtherFields');\n }\n _this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; i++) {\n if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {\n col[i].field = field ? field + _this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n _this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = _this.customOperators[col[i].type + 'Operator'];\n }\n }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target && target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var _this = this;\n var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';\n var height = isVertical ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n var fragment = document.createDocumentFragment();\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = {\n 'label': column.label,\n 'field': column.field,\n 'type': column.type,\n 'operator': operators[0].value\n };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var actionArgs = {\n requestType: 'template-initialize',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: this.fields,\n rule: passedRule\n };\n this.trigger('actionBegin', actionArgs);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', {\n attrs: { class: 'e-btn-icon e-icons e-delete-icon' }\n });\n element.appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');\n var previousRuleElem = ruleElem.previousElementSibling;\n this.processAdjacentElements(ruleElem, previousRuleElem, rule);\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n var ruleCount = this.rule.rules.length;\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (ruleCount > 20) {\n setTimeout(function () {\n _this.applyFieldComponent(ruleElem, rule, height);\n }, 0);\n }\n else {\n this.applyFieldComponent(ruleElem, rule, height);\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', {\n groupID: trgt.id.replace(this.element.id + '_', ''),\n ruleID: ruleID,\n type: 'insertRule'\n });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n this.processConnectorElements(ruleElem);\n }\n };\n QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {\n if (this.enableSeparateConnector) {\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(previousRuleElem);\n if (this.headerTemplate) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedRuleElement(ruleElem, rule);\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n ruleElem.classList.add('e-joined-rule');\n previousRuleElem.classList.add('e-prev-joined-rule');\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n };\n QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n };\n QueryBuilder.prototype.processConnectorElements = function (ruleElem) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedConnectorElement(ruleElem);\n }\n this.setMultiConnector(ruleElem);\n };\n QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem = group.previousElementSibling.previousElementSibling;\n if (prevElem.classList.contains('e-group-container')) {\n var ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {\n if (this.fieldMode === 'Default') {\n this.applyDropdownListComponent(ruleElem, rule, height);\n }\n else {\n this.applyDropdownTreeComponent(ruleElem, rule, height);\n }\n };\n QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this),\n value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this, true),\n cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: {\n dataSource: this.dummyDropdownTreeDs,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded',\n selectable: 'selectable'\n },\n placeholder: this.l10n.getConstant('SelectField'),\n showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n changeOnBlur: false,\n change: this.changeField.bind(this),\n value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false),\n treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt',\n filtering: this.dropdownTreeFiltering.bind(this),\n close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n if (column && column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var operVal = this.selectedColumn.operators;\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({\n content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n }\n });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_1 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_1);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (!isNullOrUndefined(prevRule) && isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (!isNullOrUndefined(prevRule) && prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = grpElem && this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules && rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = rule && this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n }\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({\n elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values\n });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values\n });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n this.isPropChange = true;\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n this.isPropChange = false;\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n window.removeEventListener('resize', this.windowResizeHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = true;\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';\n if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {\n valueStr = \"\\\"\" + rule.value[0] + \"\\\"\" + ruleCondition + \"\\\"\" + rule.value[1] + \"\\\"\";\n }\n else {\n valueStr = \"\" + rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\n }\n else {\n valueStr = \"(\" + rule.value + \")\";\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr = rule.value ? \"(\\\"\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr = \"\" + rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr = '\"\"';\n }\n else {\n valueStr = \"\\\"\" + rule.value + \"\\\"\";\n }\n }\n }\n var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\n }, '');\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","isPropChange","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","isVertical","displayMode","getColumn","newRule","operator","selectedColumn","passedRule","actionArgs","spanElement","add","previousRuleElem","processAdjacentElements","updateAddedRule","ruleCount","applyFieldComponent","lockRuleTarget","processConnectorElements","ruleContainer","prevRule","headerTemplateFn","handleOrphanedRuleElement","prevElem","prevRuleContainer","notCondition","undefined","handleOrphanedConnectorElement","setMultiConnector","fieldMode","applyDropdownListComponent","applyDropdownTreeComponent","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","dropDownList","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-label","title","role","innerHTML","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_1","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","addEventListener","windowResizeHandler","removeEventListener","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"iFAAA,IAAIA,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAAsC,WAStC,OARAA,EAAWX,OAAOY,QAAU,SAASC,GACjC,IAAK,GAAIC,GAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAAK,CACjDD,EAAIG,UAAUF,EACd,KAAK,GAAIX,KAAKU,GAAOd,OAAOS,UAAUJ,eAAec,KAAKL,EAAGV,KACzDS,EAAET,GAAKU,EAAEV,IAEjB,MAAOS,KAEKO,MAAMb,KAAMU,YAE5BI,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2H3B,GAAvH4B,EAAIT,UAAUC,OAAQS,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOzB,OAAO4B,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIV,GAAIO,EAAWJ,OAAS,EAAGH,GAAK,EAAGA,KAASjB,EAAIwB,EAAWP,MAAIY,GAAKD,EAAI,EAAI5B,EAAE6B,GAAKD,EAAI,EAAI5B,EAAEyB,EAAQC,EAAKG,GAAK7B,EAAEyB,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK3B,OAAO+B,eAAeR,EAAQC,EAAKG,GAAIA,GAuB5DK,EAAyB,SAAUC,GAEnC,QAASD,KACL,MAAkB,QAAXC,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAyC/D,MA3CAX,GAAUoC,EAASC,GAInBZ,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,WAAQ,IAC9BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,aAAU,IAChCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,gBAAa,IACnCY,GACIa,cACDF,EAAQvB,UAAW,mBAAgB,IACtCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,eAAY,IAClCY,GACIa,YAAWC,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,aAClDP,EAAQvB,UAAW,iBAAc,IACpCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,aAAU,IAChCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,WAAQ,IAC9BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,eAAY,IAClCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,cAAW,IAC1BuB,GACTQ,iBAKEC,EAAsB,SAAUR,GAEhC,QAASQ,KACL,MAAkB,QAAXR,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KA6B/D,MA/BAX,GAAU6C,EAAMR,GAIhBZ,GACIa,WAAS,OACVO,EAAKhC,UAAW,gBAAa,IAChCY,GACIqB,gBAAeD,IAChBA,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,WAAQ,IAC3BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,eAAY,IAC/BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,YAAS,IACVO,EAAKhC,UAAW,UAAO,IAC1BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,eAAY,IACxBgC,GACTD,iBAKEG,EAAuB,SAAUV,GAEjC,QAASU,KACL,MAAkB,QAAXV,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAiB/D,MAnBAX,GAAU+C,EAAOV,GAIjBZ,GACIa,WAAS,OACVS,EAAMlC,UAAW,0BAAuB,IAC3CY,GACIa,WAAS,OACVS,EAAMlC,UAAW,uBAAoB,IACxCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,sBAAmB,IACvCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,mBAAgB,IACpCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,uBAAoB,IACjCkC,GACTH,iBAKEI,EAA6B,SAAUX,GAEvC,QAASW,KACL,MAAkB,QAAXX,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAuB/D,MAzBAX,GAAUgD,EAAaX,GAIvBZ,GACIa,YAAS,IACVU,EAAYnC,UAAW,gBAAa,IACvCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,iBAAc,IACxCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,eAAY,IACtCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,gBAAa,IACvCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,iBAAc,IACxCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,kBAAe,IACzCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,kBAAe,IAClCmC,GACTJ,iBAEEK,EAA8B,SAAUZ,GAExC,QAASY,GAAaC,EAASC,GAC3B,GAAIC,GAAQf,EAAOd,KAAKZ,KAAMuC,EAASC,IAAYxC,IAyBnD,OAxBAyC,GAAMC,YAAa,EACnBD,EAAME,QAAWC,KAAM,QAASC,MAAO,SACvCJ,EAAMK,aAAgBC,KAAK,EAAOC,UAAW,MAAOC,UAAU,GAC9DR,EAAMS,UAAW,EACjBT,EAAMU,aAAc,EACpBV,EAAMW,YAAa,EACnBX,EAAMY,cAAe,EACrBZ,EAAMa,kBAAmB,EACzBb,EAAMc,eAAgB,EACtBd,EAAMe,cAAe,EACrBf,EAAMgB,WAAY,EAClBhB,EAAMiB,iBAAkB,EACxBjB,EAAMkB,mBACNlB,EAAMmB,aAAe,EACrBnB,EAAMoB,aACNpB,EAAMqB,YAAc,EACpBrB,EAAMsB,WAAa,EACnBtB,EAAMuB,aAAc,EACpBvB,EAAMwB,kBAAmB,EACzBxB,EAAMyB,eAAgB,EACtBzB,EAAM0B,mBAAoB,EAC1B1B,EAAM2B,cAAe,EACrB3B,EAAM4B,cAAe,EACrBC,cAAYC,OAAOC,qBACZ/B,EA2sOX,MAtuOApD,GAAUiD,EAAcZ,GA6BxBY,EAAapC,UAAUuE,eAAiB,WACpC,MAAOzE,MAAK0E,cAAc,UAO9BpC,EAAapC,UAAUyE,MAAQ,WAC3B3E,KAAK4E,eAAgB,CACrB,IAAIC,GAAW7E,KAAKwC,QAAQsC,cAAc,iBACtCC,EAAgB/E,KAAKwC,QAAQwC,iBAAiB,mBAE9CC,EAAe,EACfC,EAAe,WAEf,IAAK,GADDC,GAAWC,KAAKvD,IAAIoD,EAHZ,GAGsCF,EAAcpE,QACvDH,EAAIyE,EAAczE,EAAI2E,EAAU3E,IAAK,CAC1C,GAAIgC,GAAUuC,EAAcvE,EAC5B,KACI,GAAIgC,EAAQ6C,UAAUC,QAAQ,cAAgB,GACtCC,EAAUC,eAAahD,EAAS,aAEhC+C,EAAQE,cAGX,IAAIjD,EAAQkD,eAAiBlD,EAAQkD,cAAcL,UAAUC,QAAQ,cAAgB,EAAG,CACzF,GAAIC,GAAUC,eAAahD,EAAQkD,cAAe,UAC9CH,IACAA,EAAQE,WAIpB,MAAOE,GACHC,QAAQC,KAAK,4BAA6BF,KAGlDV,EAAeE,GACIJ,EAAcpE,QAC7BmF,sBAAsBZ,GAM9B,IAHIH,EAAcpE,OAAS,GACvBuE,IAEAL,EACAA,EAASkB,YAAc,OAEtB,CACD,GAAIC,GAAWC,SAASC,yBACpBC,EAAenG,KAAKoG,cAAc,OAASC,OAASC,MAAO,uBAC3DC,EAAYvG,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBACxDE,EAAUxG,KAAKoG,cAAc,OAASC,OAASC,MAAO,iBAC1DH,GAAaM,YAAYF,GACzBJ,EAAaM,YAAYD,GACzBR,EAASS,YAAYN,GACrBnG,KAAKwC,QAAQiE,YAAYT,GACzBnB,EAAW7E,KAAKwC,QAAQsC,cAAc,iBAM1C,GAJI9E,KAAK0G,gBAAkB1G,KAAK2G,SAC5B3G,KAAKwC,QAAQuD,YAAc,GAC3B/F,KAAK2G,QAAS,GAEd3G,KAAK4G,mBAEL,IAAK,GADDC,GAAiB7G,KAAKwC,QAAQwC,iBAAiB,gBAC1CxE,EAAI,EAAGA,EAAIqG,EAAelG,OAAQH,IACvCsG,eAAaD,EAAerG,IAAK,kBAGrCqE,IACAA,EAAS4B,YAAYzG,KAAKoG,cAAc,OAASC,OAASC,MAAO,kBAErEtG,KAAK+G,UAAU/G,KAAKwC,QAAQwE,GAAK,YAAc,GAC/ChH,KAAKiH,eAAgBC,MAAQlE,UAAW,MAAOD,KAAK,EAAOoE,YAAe,GACtEtC,GAAYA,EAASa,eACrB1F,KAAKoH,qBAAqBvC,EAASa,gBAG3CpD,EAAapC,UAAUmH,WAAa,WAChC,MAAOrH,MAAKwC,SAEhBF,EAAapC,UAAUoH,cAAgB,WACnC,MAAO,iBAEXhF,EAAapC,UAAUqH,gBAAkB,WACrC,GAAIC,KAKJ,OAJAA,GAAQC,MACJC,OAAQ,gBACRC,MAAO3H,QAEJwH,GAEXlF,EAAapC,UAAU0H,kBAAoB,SAAUC,GACjD,MAAKC,qBAAkBD,GAGhB,GAFI7H,KAAK+H,UAAYF,EAAMG,MAAMhI,KAAK+H,WAAW,GAAKF,GAIjEvF,EAAapC,UAAU+H,WAAa,WAChC,GAAIxF,GAAQzC,IACZ,IAAIA,KAAKkI,SAASvH,OAAQ,CACtB,GAGIwH,GAGAC,EANAC,EAAe5I,OAAO6I,KAAKtI,KAAKkI,SAAS,IACzCK,KACAC,KAEAC,GAAY,EACZC,GAAW,EAEXC,GAAkB/G,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,UAC5D,IAAIhC,KAAK4I,QAAQjI,OACbX,KAAK6I,aACS7I,KAAK4I,QACXE,QAAQ,SAAUC,GACtBtG,EAAMuG,qBAAqBD,EAAQ,WAC9BA,EAAOE,OACJZ,EAAa/C,QAAQyD,EAAOlB,QAAU,IACtCO,EAAU3F,EAAMyF,SAAS,GAAGa,EAAOlB,OAEpB,YADfM,QAAgBC,IAEZM,GAAYQ,MAAMC,KAAKC,MAAMhB,IAEb,WAAXD,IACLO,EAAWN,YAAmBe,QAASD,MAAMd,EAAQiB,WACrDlB,EAAS,UAEbY,EAAOE,KAAOd,EACdO,GAAW,GAEfP,EAAS,UAERY,EAAOO,aACRP,EAAOO,WAAaX,GAEpBI,EAAOQ,SACPd,GAAY,EAGZM,EAAOQ,SAAW9G,EAAM+G,KAAKC,YAAY,eAEzCjB,EAAalD,QAAQyD,EAAOQ,UAAY,GACxCf,EAAaf,KAAKsB,EAAOQ,YAExBR,EAAOW,WACPjH,EAAMS,WAA6D,IAAjDT,EAAMkB,gBAAgB2B,QAAQyD,EAAOlB,UACxDkB,EAAOW,UAAYjH,EAAMkH,gBAAgBZ,EAAOE,KAAO,eAG3DR,IAAcD,EAAa7H,OAAS,GAAK6H,EAAa,KAAOxI,KAAKwJ,KAAKC,YAAY,kBACnFzJ,KAAK2C,QAAWC,KAAM,QAASC,MAAO,QAAS+G,QAAS,aAE5D5J,KAAK6J,2BAA2B7J,KAAK4I,aAEpC,CACD,IAAK,GAAIpI,GAAI,EAAGsJ,EAAMzB,EAAa1H,OAAQH,EAAIsJ,EAAKtJ,IAChD4H,EAAUpI,KAAKkI,SAAS,GAAGG,EAAa7H,IAEzB,YADf2H,QAAgBC,IAEZM,GAAYQ,MAAMC,KAAKC,MAAMhB,IAEb,WAAXD,GAAwB1I,OAAO6I,KAAKF,GAASzH,SAClD+H,EAAWN,YAAmBe,QAASD,MAAMd,EAAQiB,WACrDlB,EAAS,UAEbI,EAAK/H,IACDqH,MAASQ,EAAa7H,GAAIuJ,MAAS1B,EAAa7H,GAAIyI,KAAQP,EAAW,OAASP,EAChFmB,WAAcX,GAElBD,GAAW,EACXH,EAAK/H,GAAGkJ,UAAY1J,KAAK2J,gBAAgBpB,EAAK/H,GAAGyI,KAAO,YACzC,WAAXd,GACAnI,KAAKgK,gBAAgB5B,EAASG,EAAK/H,GAG3CR,MAAK4I,QAAUL,OAGdvI,MAAK4I,SAAW5I,KAAK4I,QAAQjI,SACP,YAAvBX,KAAKiK,eACLjK,KAAK6I,aAET7I,KAAKkK,0BACDlK,KAAK4I,QAAQjI,OAAS,GACtBwJ,WAAW,WACP1H,EAAMoH,2BAA2BpH,EAAMmG,UACxC,GAGH5I,KAAK6J,2BAA2B7J,KAAK4I,SAG7C5I,MAAKoK,QAAQ,aAAenB,KAAM,eAEtC3G,EAAapC,UAAUgK,wBAA0B,WAC7C,GAAIzH,GAAQzC,KACR4I,EAAU5I,KAAK4I,QAEfyB,EAAiB,EACjBnF,EAAe,WAEf,IAAK,GADDoF,GAASlF,KAAKvD,IAAIwI,EAHV,GAGsCzB,EAAQjI,QACjDH,EAAI6J,EAAgB7J,EAAI8J,EAAQ9J,IACjCoI,EAAQpI,GAAG+I,UAAYX,EAAQpI,GAAG+I,WAAa9G,EAAM+G,KAAKC,YAAY,eACtEhH,EAAME,QAAWC,KAAM,QAASC,MAAO,QAAS+G,QAAS,YAGzDhB,EAAQpI,GAAG+I,SAAW9G,EAAM+G,KAAKC,YAAY,eAEjDhH,EAAMuG,qBAAqBJ,EAAQpI,GAAI,aAClCoI,EAAQpI,GAAGkJ,WACXjH,EAAMS,WAAiE,IAArDT,EAAMkB,gBAAgB2B,QAAQsD,EAAQpI,GAAGqH,UAC5De,EAAQpI,GAAGkJ,UAAYjH,EAAMkH,gBAAgBf,EAAQpI,GAAGyI,KAAO,cAGvEoB,EAAiBC,GACI1B,EAAQjI,QACzBmF,sBAAsBZ,GAG9BA,MAEJ5C,EAAapC,UAAU2J,2BAA6B,SAAUU,EAAK1C,GAC/D,GAAI0C,EAAI5J,OAAS,GAEb,WADAX,MAAKwK,qBAAqBD,EAAK1C,EAGnC,KAAK,GAAIrH,GAAI,EAAGA,EAAI+J,EAAI5J,OAAQH,IACL,KAAnBR,KAAK+H,WAAoBwC,EAAI/J,GAAGqH,MAAMvC,QAAQtF,KAAK+H,WAAa,IAChEwC,EAAI/J,GAAGqH,MAAQA,EAAQA,EAAQ7H,KAAK+H,UAAYwC,EAAI/J,GAAGqH,MAAQ0C,EAAI/J,GAAGqH,OAEtE0C,EAAI/J,GAAGkJ,UACP1J,KAAKgJ,qBAAqBuB,EAAI/J,IAEzB+J,EAAI/J,GAAGyI,MAAwB,WAAhBsB,EAAI/J,GAAGyI,OAC3BsB,EAAI/J,GAAGkJ,UAAY1J,KAAK2J,gBAAgBY,EAAI/J,GAAGyI,KAAO,aAEtDsB,EAAI/J,GAAGoI,UACP2B,EAAI/J,GAAGyI,KAAO,SACdjJ,KAAK6J,2BAA2BU,EAAI/J,GAAGoI,QAAS2B,EAAI/J,GAAGqH,SAInEvF,EAAapC,UAAUsK,qBAAuB,SAAUD,EAAK1C,GACzD,GAAIpF,GAAQzC,KACRQ,EAAI,EACJiK,EAAYF,EAAI5J,OAChB+J,EAAmB,WAEnB,IADA,GAAIJ,GAASlF,KAAKvD,IAAIrB,EAAI,GAAIiK,GACvBjK,EAAI8J,EAAQ9J,IACS,KAApBiC,EAAMsF,WAAoBwC,EAAI/J,GAAGqH,MAAMvC,QAAQ7C,EAAMsF,WAAa,IAClEwC,EAAI/J,GAAGqH,MAAQA,EAAQA,EAAQpF,EAAMsF,UAAYwC,EAAI/J,GAAGqH,MAAQ0C,EAAI/J,GAAGqH,OAEvE0C,EAAI/J,GAAGkJ,UACPjH,EAAMuG,qBAAqBuB,EAAI/J,IAE1B+J,EAAI/J,GAAGyI,MAAwB,WAAhBsB,EAAI/J,GAAGyI,OAC3BsB,EAAI/J,GAAGkJ,UAAYjH,EAAMkH,gBAAgBY,EAAI/J,GAAGyI,KAAO,YAG3DzI,GAAIiK,EACJ3E,sBAAsB4E,GAGtBP,WAAW,WACP,IAAK,GAAIQ,GAAI,EAAGA,EAAIF,EAAWE,IACvBJ,EAAII,GAAG/B,UACP2B,EAAII,GAAG1B,KAAO,SACdxG,EAAMoH,2BAA2BU,EAAII,GAAG/B,QAAS2B,EAAII,GAAG9C,SAGjE,GAGX6C,MAEJpI,EAAapC,UAAU8J,gBAAkB,SAAUnH,EAAO0H,EAAKK,GAC3D,GAAIC,EACJN,GAAI3B,UACJ,IAGIK,GACA6B,EAJAC,EAAatL,OAAO6I,KAAKzF,EAK7B+H,GAAOA,GAAc5K,KAAKkI,SAAS,EACnC,KAAK,GAAI1H,GAAI,EAAGsJ,EAAMiB,EAAWpK,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACnD,GAAIwK,GAAYT,EAAI1C,MAAMG,MAAM,IAE5B8C,GADAF,EACSA,EAAKI,EAAUA,EAAUrK,OAAS,IAAIoK,EAAWvK,IAGjDR,KAAKkI,SAAS,GAAGqC,EAAI1C,OAAOkD,EAAWvK,GAEpD,IAAIyK,GAAUL,EAAKL,EAAI1C,MAAMG,MAAMhI,KAAK+H,WAAWwC,EAAI1C,MAAMG,MAAMhI,KAAK+H,WAAWpH,OAAS,GAC5FsI,SAAc6B,GAIdD,GAAYhD,MAHJ0C,EAAI1C,MAAQ7H,KAAK+H,UAAYgD,EAAWvK,GAGtBuJ,MAFlBgB,EAAWvK,GAEqByI,KADxCA,EAAiB,WAATA,GAAsBC,MAAMC,KAAKC,MAAM0B,IAAqB7B,EAAT,QAE9C,WAATA,IACA4B,EAAQnB,UAAY1J,KAAK2J,gBAAgBV,EAAO,aAEpDsB,EAAI3B,QAAQnB,KAAKoD,GACJ,WAAT5B,GACAjJ,KAAKgK,gBAAgBc,EAAQD,EAASI,KAIlD3I,EAAapC,UAAU8I,qBAAuB,SAAUD,EAAQmC,GAC5D,GAAInC,EAAOW,UAAW,CACb1J,KAAKkD,UAAqB,YAATgI,GAAuBpD,oBAAkB9H,KAAK2D,kBAChE3D,KAAK2D,gBAAgB8D,KAAKsB,EAAOlB,MAarC,KAAK,GADDsD,GAASnL,KACJ2K,EAAI,EAAGA,EAAI5B,EAAOW,UAAU/I,OAAQgK,KAX/B,SAAUA,GACpB,GAAIS,GAAS3L,OAAO6I,KAAKS,EAAOW,UAAUiB,IAAIrF,QAAQ,cACtD,IAAI8F,GAAU,EAAG,CACb,GAAIC,GAAatC,EAAOW,UAAUiB,GAC9BW,EAAW7L,OAAO6I,KAAK+C,GACvBE,EAASD,EAASE,IAAI,SAAUvK,GAAO,MAAOoK,GAAW,GAAKpK,KAASwK,KAAK,KAAKzD,MAAM,KACvF0D,EAAWJ,EAAShG,QAAQ,QAChC6F,GAAOzB,UAAU6B,EAAOG,IAAaH,EAAOH,KAKxCT,KAIpBrI,EAAapC,UAAUyL,kBAAoB,SAAUC,GACjD5L,KAAKgB,OAAS4K,EAAM5K,QAExBsB,EAAapC,UAAU2L,kBAAoB,SAAUD,GACjD,GAEIjE,GAFAlF,EAAQzC,KACRgB,EAAS4K,EAAM5K,MAEnBhB,MAAK4E,eAAgB,CACrB,IAAIkH,EAIJ,IAHuB,SAAnB9K,EAAO+K,UACP/K,EAASA,EAAO0E,eAEY,gBAArB1E,GAAOqE,WAA0BrE,EAAOqE,UAAUC,QAAQ,oBAAsB,EAAG,CACtF0G,EAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,GACnDnM,MAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAAS,GAC7DX,KAAKoM,eAET,IAAIC,GAAcpG,SAASqG,eAAetM,KAAKwC,QAAQwE,GAAK,oBACxDuF,EAAcF,EAAYvH,cAAc,kBAC5CkH,GAAUQ,QAAQ,oBAAsBC,KAAM,iBAC1CC,EAAY1M,KAAKwC,QAAQsC,cAAc,uBACjC6H,MAAMC,QAAU,OAC1BL,EAAYxG,YAAc/F,KAAK6M,gBAAgB7M,KAAKkH,MACpDmF,EAAYM,MAAMC,QAAU,QAC5BL,EAAYI,MAAMG,OAASP,EAAYQ,aAAe,KAE1D,GAAuB,WAAnB/L,EAAO+K,SAAoD,gBAArB/K,GAAOqE,WAA0BrE,EAAOqE,UAAUC,QAAQ,eAAiB,EAAG,CACpH,GAAI0G,GAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,GACvD,SAAQ,GACJ,IAAKnL,GAAOqE,UAAUC,QAAQ,iBAAmB,EAC7CtF,KAAKgN,aAAehM,EACpBhB,KAAKiN,WAAWjM,EAChB,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,qBAAuB,EACjDtF,KAAKgN,aAAehM,EACpBhB,KAAKmE,mBAAoB,EACzBnE,KAAKkN,UAAUlM,EACf,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,oBAAsB,EAChDtF,KAAKgN,aAAehM,EACpBhB,KAAKmN,SAASnM,EACd,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,mBAAqB,EAC/CtF,KAAKgN,aAAehM,EACpBhB,KAAKoN,UAAUpM,EACf,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,oBAAsB,EAChDtF,KAAKgN,aAAehM,EACpBhB,KAAKiE,kBAAmB,EACxBjE,KAAKqN,WAAWC,UAAQtM,EAAQ,sBAChC,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,kBAAoB,EAC9CtF,KAAKgN,aAAehM,EACpBhB,KAAKuN,YAAYD,UAAQtM,EAAQ,sBACjC,MACJ,KAAKA,GAAOqE,UAAUC,QAAQ,gBAAkB,EAG5C,GAFA0G,EAAUQ,QAAQ,oBAAsBC,KAAM,gBAC9CxG,SAASqG,eAAetM,KAAKwC,QAAQwE,GAAK,oBAAoB2F,MAAMC,QAAU,OAC1E5M,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAAS,EAAG,CAChEX,KAAKwN,iBAAgB,EAAOxN,KAAKwC,QAASxC,KAAKkH,KAAKlE,WAAW,EAAOhD,KAAKkH,KAAKnE,IAChF,IAAI0K,GAASC,YAAW1N,KAAKkH,SAAU,EACvClH,MAAK2N,cAAcF,GACnBzN,KAAK4N,4BAEJ,CACD,GAAIlB,GAAY1M,KAAKwC,QAAQsC,cAAc,qBACvC4H,GAAU1H,iBAAiB,oBAAoBrE,OAAS,GACxDX,KAAK4N,wBAETlB,EAAUC,MAAMC,QAAU,cAKrC,IAAwB,UAAnB5L,EAAO+K,SAAuB/K,EAAO0E,cAAcL,UAAUC,QAAQ,gBAAkB,GAChE,gBAArBtE,GAAOqE,WAA0BrE,EAAOqE,UAAUC,QAAQ,gBAAkB,EAAI,CACxF,GAAI9C,GAAU8K,UAAQtM,EAAQ,qBAC9B,KAAKhB,KAAK0G,eAAgB,CACtB,GAAImH,GAAa7M,EAAO8M,aAAa,OACjCC,MAAc,EACdF,GACAE,EAAc9H,SAASqG,eAAeuB,GAAYC,aAAa,SAE1D9N,KAAKgO,0BAEND,EADA/M,EAAOiN,UAAUC,SAAS,qBACZ,KAETlN,EAAOiN,UAAUC,SAAS,sBACjB,MAGAlN,EAAO+E,aAG7B+F,EAAUtJ,EAAQwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GACpD,IAAIoH,GAAQpO,KAAKqO,SAASvC,GACtBwC,MAAc,EAClB,IAAItO,KAAK4G,mBACL,GAAI5F,EAAOqE,UAAUC,QAAQ,gBAAkB,EAAG,CAC9C,GAAIiJ,GAAa/L,EAAQgM,uBAAuB,eAAe,EAC3DD,GAAWlJ,UAAUC,QAAQ,oBAAsB,GACnDwB,eAAayH,GAAa,mBAC1BD,GAAc,IAGdG,YAAUF,GAAa,mBACvBD,GAAc,GAElBP,EAAcK,EAAMpL,cAGpBsL,GAAcF,EAAMrL,GAG5B4E,IAASmE,QAASA,EAAS4C,QAAQ,EAAOzF,KAAM,YAAapG,MAAOkL,EAAYY,eAC5E3O,KAAK4G,qBACLe,GACImE,QAASA,EAAS4C,QAAQ,EAAOzF,KAAM,YAAapG,MAAOkL,EAAYY,cACvE5L,IAAOuL,IAIdtO,KAAK4E,cAMN5E,KAAK4O,sBAAsBjH,EAAM3G,GALjChB,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAMmM,sBAAsBC,EAAoB7N,KAMxDhB,KAAKgB,OAASA,IAGtBsB,EAAapC,UAAU0O,sBAAwB,SAAUjH,EAAM3G,GAC3D,GAAI2G,IAASA,EAAK+G,OAAQ,CACtB,GAAIlM,GAAU8K,UAAQtM,EAAQ,sBAC1B8K,EAAUtJ,EAAQwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACpD8H,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACtCA,EAAOlH,KAAKgP,eAAexM,EAC/B,IAAIxC,KAAKgO,wBAAyB,CAS9B,GAAIhH,IANAxE,EAFAsF,oBAAkBwF,UAAQtM,EAAQ,uBAClCwB,EAAQyL,UAAUC,SAAS,qBAC+B,OAAhDlN,EAAO0E,cAAcuJ,uBAC3BjO,EAAO0E,cAAcuJ,uBAAyBzM,EAGxC8K,UAAQtM,EAAQ,sBAEbgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAC/CxE,GAAQyL,UAAUC,SAAS,qBAC3BhH,EAAOlH,KAAKkP,QAAQ1M,IACfQ,UAAY2E,EAAK9E,MAEjBL,EAAQyL,UAAUC,SAAS,wBAChChH,EAAOlH,KAAKqO,SAAS7L,IAChBQ,UAAY2E,EAAK9E,OAEtB7C,KAAK4G,qBACLM,EAAKnE,IAAM4E,EAAK5E,KAEf/C,KAAK4E,eACN5E,KAAKoK,QAAQ,UAAY0B,QAASA,EAASqD,OAAQnI,EAAIiC,KAAM,YAAapG,MAAOqE,EAAKlE,gBAI1FkE,GAAKlE,UAAY2E,EAAK9E,MAClB7C,KAAK4G,qBACLM,EAAKnE,IAAM4E,EAAK5E,KAEf/C,KAAK4E,eACN5E,KAAKoK,QAAQ,UAAY0B,QAASA,EAAS7C,KAAM,YAAapG,MAAOqE,EAAKlE,WAIlF,IADAhD,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,aACzDlH,KAAKgO,wBAAyB,CAC9B,GAAIqB,GAAUrO,EAAO0E,cAAcZ,cAAc,mBAC7CwK,EAAStO,EAAO0E,cAAcZ,cAAc,iBAC5CuK,IAAWC,IACQ,QAAf3H,EAAK9E,OACLwM,EAAQE,SAAU,EAClBD,EAAOC,SAAU,GAEG,OAAf5H,EAAK9E,QACVyM,EAAOC,SAAU,EACjBF,EAAQE,SAAU,OAMtCjN,EAAapC,UAAUsP,UAAY,SAAUxO,EAAQ4K,GAC9B,eAAfA,EAAMa,KACFzM,KAAKyP,YAAYC,aAAe5H,oBAAkB9H,KAAKyP,YAAYC,cAC/D1P,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,QAAUX,KAAK2P,cAAgB,EACnFlB,YAAU7C,EAAMpJ,QAAQsC,cAAc,sBAAsBY,eAAgB,iBAG5EoB,eAAa8E,EAAMpJ,QAAQsC,cAAc,sBAAsBY,eAAgB,iBAE/E1F,KAAK4P,WACLnB,YAAU7C,EAAMpJ,QAAQsC,cAAc,MAAMY,eAAgB,UAIhE+I,YAAU7C,EAAMpJ,QAAQsC,cAAc,sBAAsBY,eAAgB,iBAG3EkG,EAAMpJ,QAAQqN,SAAS,GAAGxK,UAAUC,QAAQ,cAAgB,EACjEtF,KAAK8P,eAAexC,UAAQtM,EAAQ,0BAE/B4K,EAAMpJ,QAAQqN,SAAS,GAAGxK,UAAUC,QAAQ,eAAiB,GAClEtF,KAAKwN,iBAAgB,EAAMF,UAAQtM,EAAQ,sBAAuB,IAAI,IAG9EsB,EAAapC,UAAU6P,eAAiB,SAAU/O,EAAQ+H,EAAQE,EAAM+G,EAAUC,EAAQ/I,GACtF,GAAIgJ,GACAC,EAEAxI,EADAyI,EAAepP,GAAUA,EAAO8D,cAAc,eAElD,IAAa,WAATmE,EACAiH,EAAWG,SAAO,IAAML,EAAUhP,OAEjC,CAGD,IAFAkP,EAAWlQ,KAAKoG,cAAc,OAASC,OAASC,MAAO,uBAC9CgK,aAAa,KAAMtP,EAAOgG,GAAK,QAAUhH,KAAKuQ,eACnDvQ,KAAKyP,YAAYe,WAAaxQ,KAAKmE,kBAAmB,CACtD,GAAInE,KAAK+D,UAAY,EACjBqM,EAAa3J,YAAYyJ,OAGzB,IAAIlQ,KAAKgO,wBAAyB,CAG9B,IAAK,GAFDyC,IAAS,EACTC,EAAgB1Q,KAAK+D,UAAY,EAC5BvD,EAAI,EAAGA,EAAIkQ,GACZlQ,IAAM4P,EAAaP,SAASlP,OADDH,IAI3B4P,EAAaP,SAASrP,GAAGyN,UAAUC,SAAS,sBAC5CwC,IACAD,IAGRL,GAAaO,aAAaT,EAAUE,EAAaP,SAAS7P,KAAK+D,UAAY0M,EAAQ,QAGnFL,GAAaO,aAAaT,EAAUE,EAAaP,SAAS7P,KAAK+D,UAAY,GAGnF/D,MAAKmE,mBAAoB,MAGzBiM,GAAa3J,YAAYyJ,EAE7BlQ,MAAKuQ,gBAET,GAAIxH,GAAUA,EAAO6H,cAAgB1J,EAAM,CACvCS,GAASkJ,YAAa,sBAAuB1B,OAAQe,EAASlJ,GAAIiJ,OAAQA,EAAQtN,OAAQ3C,KAAK2C,OAAQuE,KAAMA,GAC7GlH,KAAKoK,QAAQ,cAAezC,GAC5B3H,KAAK8Q,eAAiB9Q,KAAK+Q,eAAehI,EAAO6H,aACjD,IAAII,GAAahR,KAAKwC,QAAQwE,GAAK+B,EAAOlB,KAU1C,IARAF,EAAKhF,OAAS3C,KAAK2C,OACnBgF,EAAKiB,QAAU5I,KAAK4I,QACD,KAAf1B,EAAKW,QACLX,EAAKW,MAAQkB,EAAOlB,OAExBF,EAAK+B,UAAY1J,KAAKiR,aAAa/J,EAAKW,OACxCF,EAAKuJ,gBAAmBtO,KAAM,MAAOC,MAAO,SAExC7C,KAAKmR,SAELhB,EADWnQ,KAAK8Q,eAAenJ,EAAM3H,KAAMkQ,EAASlJ,GAAIgK,GAAY,IAE/D3L,WAAa,gBAClB6K,EAASzJ,YAAY0J,OAGpB,IAAInQ,KAAKoR,UAAW,CACrB,GAAIC,GAAerR,KAAK8Q,eAAenJ,EAAM3H,KAAMkQ,EAASlJ,GAAIgK,IAEhEb,EADyC,IAA7BkB,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,IAExEhM,WAAa,gBAClB6K,EAASzJ,YAAY0J,OAGhBnQ,MAAKuR,QAEVpB,EADWnQ,KAAK8Q,eAAenJ,EAAM3H,KAAM,WAAYgR,GAGvDQ,SAAOrB,EAAMD,GACTA,EAASL,SAASlP,SAClBuP,EAASL,SAASK,EAASL,SAASlP,OAAS,GAAG0E,WAAa,oBAKjE8K,EADWnQ,KAAK8Q,eAAenJ,EAAM3H,KAAM,WAAYgR,GAAY,IAE9D3L,WAAa,gBAClB6K,EAASzJ,YAAY0J,QAIzBA,GAAOnQ,KAAKkQ,SAASpL,cAAc,iBAAiB2M,WAAU,GAC9DvB,EAASzJ,YAAY0J,EAuBzB,OArBInQ,MAAKyP,YAAYiC,WACjB5K,cAAYoJ,EAASlL,iBAAiB,mBAAoB,iBAE1DhF,KAAKyP,YAAYkC,UACjB7K,cAAYoJ,EAASlL,iBAAiB,oBAAqB,iBAE3DhF,KAAKyP,YAAYmC,YACjB9K,cAAYoJ,EAASlL,iBAAiB,oBAAqB,iBAE3DhF,KAAKyP,YAAYe,WACjB1J,cAAYoJ,EAASlL,iBAAiB,qBAAsB,iBAE5DhF,KAAKyP,YAAYoC,YACjB/K,cAAYoJ,EAASlL,iBAAiB,mBAAoB,iBAE1DhF,KAAK8R,kBACLhL,cAAYoJ,EAASlL,iBAAiB,mBAAoB,YAE1D+D,GAAUA,EAAO6H,cAAgB1J,GACjClH,KAAK+R,uBAEF7B,GAEX5N,EAAapC,UAAU4P,eAAiB,SAAU9O,EAAQkG,EAAM6B,EAAQkH,EAAQD,EAAUgC,GACtF,GAAIvP,GAAQzC,IACZ,IAAKgB,EAAL,CAGA,GAAI2G,IAASmE,QAAS9K,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAK0H,QAAQ,EAAOzF,KAAM,aACpFjJ,MAAK4E,eAAkB5E,KAAKiS,eAAkBjS,KAAKkS,eAMpDlS,KAAKiS,eAAgB,EACrBjS,KAAKmS,uBAAuBxK,EAAM3G,EAAQkG,EAAM6B,EAAQkH,EAAQD,EAAUgC,IAN1EhS,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAM0P,uBAAuBtD,EAAoB7N,EAAQkG,EAAM6B,EAAQkH,EAAQD,EAAUgC,OAQrG1P,EAAapC,UAAUiS,uBAAyB,SAAUxK,EAAMyK,EAAMlL,EAAMqD,EAAK8H,EAAKC,EAAKC,GACvF,GAGIpD,GAEAzF,EAEAwG,EAPAzN,EAAQzC,KACRwS,EAAaxS,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAKyS,YACrE3F,EAAS0F,EAAa,QAAU,QAEhCzJ,EAAU7B,GAAQA,EAAKW,MAAS7H,KAAK0S,UAAUxL,EAAKW,OAAS0C,GAAYvK,KAAK4I,QAAQ,GAItF+J,GAAY5I,MAAS,GAAIlC,MAAS,GAAIoB,KAAQ,GAAI2J,SAAY,GAClE,KAAKjL,EAAK+G,OAAQ,CACCzI,SAASC,wBACxB,IAAI6C,GAAUA,EAAO6H,cAAgB1J,EAAKW,MAAO,CAC7C7H,KAAK6S,eAAiB9J,EACtBW,EAAY1J,KAAK6S,eAAenJ,UAChCiJ,GACI5I,MAAShB,EAAOgB,MAChBlC,MAASkB,EAAOlB,MAChBoB,KAAQF,EAAOE,KACf2J,SAAYlJ,EAAU,GAAG7G,MAE7B,IAAIiQ,GAAarT,OAAO6I,KAAKpB,GAAMvG,OAASuG,EAAOyL,EAE/CI,GACAlC,YAAa,sBACb1B,QAHJe,EAAWlQ,KAAK+P,eAAeqC,EAAMrJ,EAAQsJ,EAAKC,EAAK,QAASQ,IAG3C9L,GACjBiJ,OAAQ,cACRtN,OAAQ3C,KAAK2C,OACbuE,KAAM4L,EAEV9S,MAAKoK,QAAQ,cAAe2I,OAE3B,EACD7C,EAAWlQ,KAAK+P,eAAeqC,EAAMrJ,EAAQsJ,EAAKC,EAAK,UAC9CxN,cAAc,mBAAmBwL,aAAa,KAAMJ,EAASlJ,GAAK,aAC3E,IAAIxE,GAAU0N,EAASpL,cAAc,iBACrC,IAAI9E,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAKyS,YACxDjQ,EAAQuD,YAAc/F,KAAKwJ,KAAKC,YAAY,UAC5CgF,YAAUjM,GAAU,UACpBiM,YAAUjM,GAAU,iBAEnB,CACDiM,YAAUjM,GAAU,WACpBiM,YAAUjM,GAAU,cACpBA,EAAQ8N,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,cACpD,IAAIuJ,GAAchT,KAAKoG,cAAc,QACjCC,OAASC,MAAO,qCAEpB9D,GAAQiE,YAAYuM,GAEnBhT,KAAKyP,YAAYoC,YAClBrP,EAAQyL,UAAUgF,IAAI,iBAG9B/C,EAAS7K,UAAY,qBAAuBmN,EAAa,kBAAoB,oBAC7E,IAAIU,GAAmBhD,EAASjB,sBAChCjP,MAAKmT,wBAAwBjD,EAAUgD,EAAkBhM,GACpDlH,KAAK4E,eACN5E,KAAKoT,gBAAgBhB,EAAMlL,EAAMyL,EAASJ,EAASD,IAAKtS,KAAKgO,yBAAiC,KAElG,IAAIqF,GAAYrT,KAAKkH,KAAKC,MAAMxG,MAYhC,IAXKoI,KAAWA,GAAWA,EAAO6H,eAAkB1J,EAAKW,QACjDwL,EAAY,GACZlJ,WAAW,WACP1H,EAAM6Q,oBAAoBpD,EAAUhJ,EAAM4F,IAC3C,GAGH9M,KAAKsT,oBAAoBpD,EAAUhJ,EAAM4F,IAGjDqC,EAASe,EAASlJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAChDE,GAAQA,EAAKjE,SAAU,CACvB,GAAIsQ,GAAiBrD,EAASpL,cAAc,mBAC5C9E,MAAKmN,SAASoG,GAEbvT,KAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,UACT0B,QAASsG,EAAKpL,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAChDmI,OAAQA,EACRlG,KAAM,eAIdjJ,KAAKgO,yBAA2BlG,oBAAkBZ,EAAKlE,YAAcmM,IACrEjI,EAAOlH,KAAKkP,QAAQC,IAEpBnP,KAAKgO,yBACLhO,KAAKwT,yBAAyBtD,IAGtC5N,EAAapC,UAAUiT,wBAA0B,SAAUjD,EAAUgD,EAAkBhM,GACnF,GAAIlH,KAAKgO,wBAAyB,CAC9B,GAAIkF,GAAoBA,EAAiBjF,UAAUC,SAAS,qBAAsB,CAC9E,GAAIuF,GAAgBP,EAAiBlO,iBAAiB,oBACtDkO,GAAmBO,EAAcA,EAAc9S,OAAS,GAE5D,GAAIuS,GAAoBA,EAAiBjF,UAAUC,SAAS,oBAAqB,CAC7E,GAAIwF,GAAW1T,KAAKkP,QAAQgE,EACxBlT,MAAK0G,gBACL1G,KAAK2T,iBAAiBT,GAAkB,EAAOQ,EAAS1Q,UAAW0Q,EAAUR,EAAiBlM,QAG7Fc,qBAAkBoL,IAAqBhD,EAASlJ,KAAOhH,KAAKwC,QAAQwE,GAAK,iBAC9EhH,KAAK4T,0BAA0B1D,EAAUhJ,OAIzCgM,IAAoBA,EAAiB7N,UAAUC,QAAQ,qBAAuB,IAC9E4K,EAASjC,UAAUgF,IAAI,iBACvBC,EAAiBjF,UAAUgF,IAAI,sBAGnCC,IAAoBA,EAAiB7N,UAAUC,QAAQ,sBAAwB,GAC/E4K,EAAS7K,UAAUC,QAAQ,mBAAqB,IAChD4K,EAAS7K,WAAa,qBAG9B/C,EAAapC,UAAU0T,0BAA4B,SAAU1D,EAAUhJ,GACnE,GAAIkH,GAAQ8B,EAAS5C,QAAQ,qBAC7B,IAAIc,GAASA,EAAMa,uBAAwB,CACvC,GAAI4E,GAAWzF,EAAMa,uBACjB6E,EAAoBD,EAAS7O,iBAAiB,oBAIlD,IAHI6O,EAAS5F,UAAUC,SAAS,uBAC5B2F,EAAWC,EAAkBA,EAAkBnT,OAAS,IAExDkT,EAAS5F,UAAUC,SAAS,oBAAqB,CACjD,GAAIwF,GAAW1T,KAAKkP,QAAQ2E,EAC5B7T,MAAK2T,iBAAiBE,GAAU,EAAOH,EAAS1Q,UAAW0Q,EAAUG,EAAS7M,IAAI,QAItFhH,MAAK2T,iBAAiBzD,GAAU,EAAOhJ,EAAKlE,UAAWkE,EAAMgJ,EAASlJ,IAAI,IAGlF1E,EAAapC,UAAUsT,yBAA2B,SAAUtD,GAGxD,IAFA,GACIuD,GADAI,EAAW3D,EAASjB,uBAEjB4E,IAAaA,EAAS5F,UAAUC,SAAS,qBAAqB,CACjE,GAAI2F,EAAS5F,UAAUC,SAAS,qBAAsB,CAElD2F,GADAJ,EAAgBI,EAAS7O,iBAAiB,sBACjByO,EAAc9S,OAAS,EAChD,OAEJkT,EAAWA,EAAS5E,uBAExB,GAAIjP,KAAK0G,gBAAkBmN,EAAU,CACjC,GAAIH,GAAW1T,KAAKkP,QAAQ2E,GACxBlM,GACAkJ,YAAa,uBACb1B,OAAQ0E,EAAS7M,GACjBhE,UAAW0Q,EAAS1Q,UACpB+Q,eAAc/T,KAAK4G,wBAA4BoN,GAEnDhU,MAAKoK,QAAQ,cAAezC,OAEvBG,qBAAkB+L,IAAa3D,EAASlJ,KAAOhH,KAAKwC,QAAQwE,GAAK,iBACtEhH,KAAKiU,+BAA+B/D,EAExClQ,MAAKkU,kBAAkBhE,IAE3B5N,EAAapC,UAAU+T,+BAAiC,SAAU/D,GAC9D,GAAI9B,GAAQ8B,EAAS5C,QAAQ,qBAC7B,IAAIc,GAASA,EAAMa,wBAA0Bb,EAAMa,uBAAuBA,uBAAwB,CAC9F,GAAI4E,GAAWzF,EAAMa,uBAAuBA,sBAC5C,IAAI4E,EAAS5F,UAAUC,SAAS,qBAAsB,CAClD,GAAIuF,GAAgBI,EAAS7O,iBAAiB,oBAC9C6O,GAAWJ,EAAcA,EAAc9S,OAAS,GAEpD,GAAIkT,EAAS5F,UAAUC,SAAS,oBAAqB,CACjD,GAAIwF,GAAW1T,KAAKkP,QAAQ2E,GACxBlM,GACAkJ,YAAa,uBACb1B,OAAQ0E,EAAS7M,GACjBhE,UAAW0Q,EAAS1Q,UACpB+Q,eAAc/T,KAAK4G,wBAA4BoN,GAEnDhU,MAAKoK,QAAQ,cAAezC,MAIxCrF,EAAapC,UAAUoT,oBAAsB,SAAUpD,EAAUhJ,EAAM4F,GAC5C,YAAnB9M,KAAKmU,UACLnU,KAAKoU,2BAA2BlE,EAAUhJ,EAAM4F,GAGhD9M,KAAKqU,2BAA2BnE,EAAUhJ,EAAM4F,IAGxDxK,EAAapC,UAAUkU,2BAA6B,SAAUlE,EAAUhJ,EAAM4F,GAC1E,GAAIwH,GACAC,CAEAA,GADAvU,KAAK+H,WAAab,EAAKW,MACZ7H,KAAK4H,kBAAkBV,EAAKW,OAElC7H,KAAKwU,gBACCxU,KAAK4H,kBAAkBV,EAAKW,OAG5B7H,KAAK4E,cAAgB5E,KAAK4H,kBAAkBV,EAAKW,OAASX,EAAKW,MAE9EyM,GACIG,WAAYzU,KAAK4I,QACjBjG,OAAQ3C,KAAK2C,OACb+R,YAAa1U,KAAKwJ,KAAKC,YAAY,eACnCkL,YAAe3U,KAAK4I,QAAQjI,OAAS,EAAKmM,EAAS,OACnD8H,MAAO5U,KAAK6U,WAAWC,KAAK9U,KAAMkQ,EAASlJ,GAAK,cAChD+N,OAAQ/U,KAAKgV,YAAYF,KAAK9U,MAC9B6C,MAAOqE,EAAOqN,EAAW,KACzBU,KAAMjV,KAAKkV,UAAUJ,KAAK9U,MAAM,GAChCmV,SAAU,mBAEVnV,KAAKoV,aACLd,EAAWlU,KAAakU,EAAUtU,KAAKoV,YAE3C,IAAIC,GAAe,GAAIC,gBAAahB,EACpCe,GAAaE,SAAS,IAAMrF,EAASlJ,GAAK,aAC1C,IAAIwO,EAEAA,GADAxV,KAAK+H,WAAab,EAAKW,MACd7H,KAAK4H,kBAAkBV,EAAKW,OAG5B7H,KAAK4E,cAAgB5E,KAAK4H,kBAAkBV,EAAKW,OAASwN,EAAaxS,MAEpF7C,KAAK6S,eAAiBwC,EAAaI,eAAeD,GAC9C/V,OAAO6I,KAAKpB,GAAMvG,QAClBX,KAAK0V,WAAWxO,GACZ1E,QAAS6S,EAAa7S,QACtBmT,SAAU3V,KAAK6S,kBAI3BvQ,EAAapC,UAAUmU,2BAA6B,SAAUnE,EAAUhJ,EAAM4F,GAC1E,GAAIwH,GACAC,GAAWvU,KAAK4E,cAAgBsC,EAAKW,MACzC7H,MAAK4V,oBAAsBlI,YAAW1N,KAAK4I,YAAa,GACxD5I,KAAK6V,qBAAqB7V,KAAK4V,qBAC/BtB,GACI3R,QACI8R,WAAYzU,KAAK4V,oBACjB/S,MAAO,QACPD,KAAM,QACNkT,MAAO,UACPC,SAAU,WACVC,WAAY,cAEhBtB,YAAa1U,KAAKwJ,KAAKC,YAAY,eACnCwM,iBAAiB,EACjBtB,YAAe3U,KAAK4I,QAAQjI,OAAS,EAAKmM,EAAS,OACnDoJ,cAAc,EACdnB,OAAQ/U,KAAKgV,YAAYF,KAAK9U,MAC9B6C,MAAQiF,oBAAkByM,GAAyB,MAAZA,GACvCU,KAAMjV,KAAKkV,UAAUJ,KAAK9U,MAAM,GAChCmW,cAAgBC,SAAU,SAC1BjB,SAAU,WACVkB,UAAWrW,KAAKsW,sBAAsBxB,KAAK9U,MAC3C4U,MAAO5U,KAAKuW,kBAAkBzB,KAAK9U,OAEnCA,KAAKoV,aACLd,EAAWlU,KAAakU,EAAUtU,KAAKoV,YAE3C,IAAIoB,GAAe,GAAIC,gBAAanC,EAEpC,IADAkC,EAAajB,SAAS,IAAMrF,EAASlJ,GAAK,eACrCc,oBAAkB0O,EAAa3T,OAAQ,CACxC,GAAIA,GAAQ7C,KAAK0W,mBAAmBF,EAAa3T,MAAM,GACvD2T,GAAahU,QAAQK,MAAQA,EAEjC,GAAI2S,GAAU1N,oBAAkBZ,EAAKW,OACI2O,EAAa3T,MAAlD7C,KAAK4H,kBAAkBV,EAAKW,MAChC7H,MAAK6S,eAAiB7S,KAAK0S,UAAU8C,GACjC/V,OAAO6I,KAAKpB,GAAMvG,QAClBX,KAAK0V,WAAWxO,GACZ1E,QAASgU,EAAahU,QACtBmT,SAAU3V,KAAK6S,kBAI3BvQ,EAAapC,UAAUoW,sBAAwB,SAAU3O,GACrD,GAAIlF,GAAQzC,KAER2W,EAAQ3W,KACR4W,EAAa,GACbC,EAAalP,EAAKiE,MAAMiL,UAG5BD,IAFkBC,EAAW5I,UAAUC,SAAS,gBAClB2I,EAAWnR,cAAcZ,cAAc,cAAgB+R,GAC9D7P,GAAGgB,MAAM,cAAc,EAC9C,IAAIkI,GAAWjK,SAASqG,eAAesK,EACvC5W,MAAK8W,OAAStR,eAAa0K,EAASpL,cAAc,wBAAyB,eAC3E,IAAIiS,GAAmBrJ,YAAW1N,KAAK4I,YAAa,EAEpD,IADAjB,EAAK+G,QAAS,EACI,KAAd/G,EAAK/E,KACL5C,KAAKgX,iBAAiBD,OAErB,CACD,GAAIE,GAAoBF,EACnBvL,IAAI,SAAUZ,GAAQ,MAAOnI,GAAMyU,kBAAkBvP,EAAK/E,KAAMgI,KAChEuM,OAAO,SAAUC,GAAiB,MAAyB,QAAlBA,GAC9CpX,MAAKgX,iBAAiBC,GACtB9M,WAAW,WACFrC,oBAAkB6O,EAAMG,SAAYhP,oBAAkB6O,EAAMG,OAAOO,UACpEV,EAAMG,OAAOO,QAAQC,aAE1B,OAGXhV,EAAapC,UAAU8W,iBAAmB,SAAUpM,GAChD5K,KAAK6V,qBAAqBjL,GAC1B5K,KAAK8W,OAAOO,QAAQ1U,QAChB8R,WAAY7J,EACZ/H,MAAO,QACPD,KAAM,QACNkT,MAAO,UACPC,SAAU,YAEd/V,KAAK8W,OAAOO,QAAQE,WAExBjV,EAAapC,UAAUgX,kBAAoB,SAAUrU,EAAO2U,GACxD,GAAI/U,GAAQzC,KACR6P,EAAW2H,EAAKxX,KAAK8W,OAAOnU,OAAOmT,MACvC,KAAKjG,EACD,MAAO7P,MAAKyX,cAAc5U,EAAO2U,GAAQA,EAAO,IAEpD,IAAIE,GAAkB7H,EACjBrE,IAAI,SAAUsK,GAAS,MAAOrT,GAAMyU,kBAAkBrU,EAAOiT,KAC7DqB,OAAO,SAAUC,GAAiB,MAAyB,QAAlBA,GAC9C,OAAIM,GAAgB/W,QAChB6W,EAAKxX,KAAK8W,OAAOnU,OAAOmT,OAAS4B,EAC1BF,IAGPA,EAAKxX,KAAK8W,OAAOnU,OAAOmT,OAASjG,EAC1B7P,KAAKyX,cAAc5U,EAAO2U,GAAQA,EAAO,OAGxDlV,EAAapC,UAAUuX,cAAgB,SAAU5U,EAAO2U,GACpD,GAAIG,GAAaH,EAAKxX,KAAK8W,OAAOnU,OAAOC,MAAM+L,aAE/C,OADA9L,GAAQA,EAAQA,EAAM8L,cAAgB,IACA,IAA/BgJ,EAAWrS,QAAQzC,IAE9BP,EAAapC,UAAUqW,kBAAoB,WACnCvW,KAAK8W,QACL9W,KAAKgX,iBAAiBtJ,YAAW1N,KAAK4I,YAAa,IAEvD5I,KAAK8W,OAAS,MAElBxU,EAAapC,UAAU2V,qBAAuB,SAAUjN,GACpD,IAAK,GAAIpI,GAAI,EAAGA,EAAIoI,EAAQjI,OAAQH,IACiB,WAA7CoI,EAAQgP,SAASpX,EAAEqX,WAAY,KAAK5O,MAEhCjJ,KAAKoR,WAAaxI,EAAQgP,SAASpX,EAAEqX,WAAY,KAAKC,gBAC/ClP,GAAQgP,SAASpX,EAAEqX,WAAY,KAAKC,SAE/ClP,EAAQgP,SAASpX,EAAEqX,WAAY,KAAK7B,YAAa,EACjDhW,KAAK6V,qBAAqBjN,EAAQgP,SAASpX,EAAEqX,WAAY,KAAKjP,UAGzD5I,KAAKoR,WAAaxI,EAAQgP,SAASpX,EAAEqX,WAAY,KAAKC,gBACpDlP,GAAQgP,SAASpX,EAAEqX,WAAY,KAAKC,UAIvDxV,EAAapC,UAAUkT,gBAAkB,SAAUpS,EAAQkG,EAAMyL,EAASX,EAAgBM,EAAKyF,GAC3F,GAAI7H,GAEAxD,EACAvF,EAFAsJ,EAAQ,CAGZ,IAAIuB,EAAgB,CAIhB,IAHA9B,EAAWG,SAAO,IAAMiC,EAAKtR,GAC7B0L,EAAYY,UAAQtM,EAAQ,sBAC5BmG,EAAQnH,KAAKgP,eAAetC,GACrBwD,GAAgD,OAApCA,EAASjB,wBAAiC,CACzDiB,EAAWA,EAASjB,sBACpB,IAAI+I,GAA0BhY,KAAKgO,2BAA8BhO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBAChHlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBACjDgC,EAASjC,UAAUC,SAAS,sBAC/BlO,MAAKgO,0BAA2BgK,GACjCvH,IAGRtJ,EAAMA,MAAMsJ,GAASvJ,MAEpB,CACDwF,EAAYY,UAAQtM,EAAQ,sBAC5BmG,EAAQnH,KAAKgP,eAAetC,EAE5B,IAAIuL,GAAS/Q,EAAK+Q,MACdxY,QAAO6I,KAAKpB,GAAMvG,OACdX,KAAK+D,UAAY,GACjBoD,EAAMA,MAAMM,MACRI,MAASX,EAAKW,MAAOoB,KAAQ/B,EAAK+B,KAAMc,MAAS7C,EAAK6C,MAAO6I,SAAY1L,EAAK0L,SAAU/P,MAAOqE,EAAKrE,QAEpGoV,IAEA9Q,EAAMA,MAAMA,EAAMA,MAAMxG,OAAS,GAAGsX,OAASA,GAE7CjY,KAAKgO,0BACL7G,EAAMA,MAAMA,EAAMA,MAAMxG,OAAS,GAAGqC,UAAYkE,EAAKlE,UAAYkE,EAAKlE,UAAY2P,EAAQ3P,aAI9FmE,EAAMA,MAAM+Q,OAAOlY,KAAK+D,UAAY,EAAG,GACnC8D,MAASX,EAAKW,MAAOoB,KAAQ/B,EAAK+B,KAAMc,MAAS7C,EAAK6C,MAAO6I,SAAY1L,EAAK0L,SAAU/P,MAAOqE,EAAKrE,QAEpGoV,IAEA9Q,EAAMA,MAAMnH,KAAK+D,UAAY,GAAGkU,OAASA,GAEzCjY,KAAKgO,0BACL7G,EAAMA,MAAMnH,KAAK+D,UAAY,GAAGf,UAAYkE,EAAKlE,UAAYkE,EAAKlE,UAAY2P,EAAQ3P,aAK1FiV,IAEAtF,EAAQsF,OAASA,GAEjBjY,KAAKwU,kBACLtN,EAAKW,MAAQ8K,EAAQ9K,MAAQ7H,KAAKkH,KAAKC,MAAM,GAAGU,OAEpDV,EAAMA,MAAMM,KAAKkL,IAGzB3S,KAAKoH,qBAAqBpG,EAAQmG,EAAO4Q,IAE7CzV,EAAapC,UAAUiY,mBAAqB,SAAUpP,EAAQvG,GAC1D,IAAIuG,IAAUA,EAAO6H,aAArB,CAII,GAAIwH,GAAc9K,UAAQ9K,EAAS,sBAC/BwN,EAAW1C,UAAQ9K,EAAS,qBAAqBwE,EAKrD,IAJIhH,KAAKqY,gBAAkBrY,KAAKqY,eAAezH,eAC3C0H,SAAO9V,EAAQ8K,QAAQ,QAAU0C,EAAW,MAAMlL,cAAc,kBAChE9E,KAAKuY,iBAAiBvI,KAEtBjH,EAAQ,CACR,GAAIyP,GAAUxY,KAAK6S,eAAenJ,UAC9BxC,GAASW,MAAOkB,EAAOlB,MAAOkC,MAAOhB,EAAOgB,MAAO6I,SAAU4F,EAAQ,GAAG3V,MAAOA,MAAO,GAC1F7C,MAAK8P,eAAesI,EAAalR,EAAM6B,EAAQ,SAAUiH,GAAU,OAElE,CACG9I,GAASW,MAAO,GAAIkC,MAAO,GAAI6I,SAAU,GAAI/P,MAAO,GACxD7C,MAAK8P,eAAesI,EAAalR,EAAM6B,EAAQ,SAAUiH,GAAU,MAI/E1N,EAAapC,UAAUuY,cAAgB,SAAUjW,GAC7C,GAAI+C,GAAU,GAAImT,YACdC,QAAS3Y,KAAKwJ,KAAKC,YAAY,qBAAsBmP,UAAU,EAC/DC,SAAU,eAAgB1D,SAAU,uBAAwB2D,WAAY,WACpEvT,EAAQE,WACTsT,WAAY,SAAUpR,GACrB,GAAIqR,GAAsBrR,EAAKnF,QAAQsC,cAAc,mBACjDkU,KACAA,EAAoBrM,MAAMC,QAAU,UAIhDrH,GAAQgQ,SAAS/S,GACjB+C,EAAQ0P,KAAKzS,IAOjBF,EAAapC,UAAU+Y,eAAiB,WACpC,GACIC,GADAC,GAAU,CAEd,IAAInZ,KAAKoZ,gBAAiB,CACtB,GAAIC,IAAe,SAAU,YAAa,UAAW,cACjD7Y,MAAI,GACJsJ,MAAM,GACNwP,MAAY,GACZC,MAAY,GACZC,KACA9M,MAAY,GACZ+D,MAAQ,GACRgJ,MAAc,GACdC,MAAW,GACXxS,MAAO,GACPyS,EAAc3Z,KAAKwC,QAAQwC,iBAAiB,oBAChD,KAAKxE,EAAI,EAAGsJ,EAAM6P,EAAYhZ,OAAQH,EAAIsJ,EAAKtJ,IAAK,CAChD,GAAIoZ,OAAe,EAoBnB,IAnBAlN,EAAYY,UAAQqM,EAAYnZ,GAAI,sBACpC0G,EAAOlH,KAAKgP,eAAetC,GAC3B+D,EAAQ,EACR8I,EAAYG,EAAWC,EAAYnZ,GACZ,iBAAnBR,KAAKmU,WACL+E,EAAkB1T,eAAamU,EAAYnZ,GAAGsE,cAAc,uCAAwC,kBAC7EoU,EAAgBrW,OAASqW,EAAgBrW,MAAMlC,SAClEX,KAAK6S,eAAiB7S,KAAK0S,UAAUwG,EAAgBrW,MAAM,IAC3D+W,EAAe5Z,KAAK6S,eAAevJ,aAIvCmQ,EAAcjU,eAAamU,EAAYnZ,GAAGsE,cAAc,uCAAwC,kBAC7E2U,EAAY5W,QAC3B7C,KAAK6S,eAAiB4G,EAAYhE,eAAegE,EAAY5W,OAC7D+W,GAAgB9R,oBAAkB2R,EAAY5W,QAAU7C,KAAK6S,eAAevJ,YAGpFgQ,EAAYI,EAAS5U,cAAc,iCAC/B8U,GAAgBA,EAAahY,WAAY,CACzC,KAAO2X,GAAkD,OAArCA,EAAUtK,wBAAiC,CAC3DsK,EAAYA,EAAUtK,sBACtB,IAAI4K,GAAoB7Z,KAAKgO,2BAA8BhO,KAAK0G,iBAAmB6S,EAAUtL,UAAUC,SAAS,gBAC3GlO,KAAK0G,iBAAmB6S,EAAUtL,UAAUC,SAAS,qBAAuBqL,EAAUtL,UAAUC,SAAS,sBACzGlO,MAAKgO,0BAA2B6L,GACjCpJ,IAaR,GAVA6I,EAAYI,EAAS5U,cAAc,+BAC9BoC,EAAKC,MAAMsJ,GAAOmC,WACf0G,EAAU5T,cAAcL,UAAUC,QAAQ,aAAe,GAAKgU,EAAUjU,UAAUC,QAAQ,aAAe,GACzGtF,KAAKyY,cAAca,EAAU5T,eAEjCyT,GAAU,GAEVjS,EAAKC,MAAMsJ,GAAO5N,gBAAiBjD,SACnC4Z,EAAWtS,EAAKC,MAAMsJ,GAAO5N,OAE7BwW,EAAY/T,QAAQ4B,EAAKC,MAAMsJ,GAAOmC,WAAa,GAClD9K,oBAAkBZ,EAAKC,MAAMsJ,GAAO5N,QACN,SAA3BqE,EAAKC,MAAMsJ,GAAOxH,MAAgD,KAA5B/B,EAAKC,MAAMsJ,GAAO5N,OAA4C,OAA5BqE,EAAKC,MAAMsJ,GAAO5N,OAC7FqE,EAAKC,MAAMsJ,GAAO5N,gBAAiBjD,QAAS4Z,EAAS7Y,OAAS,EAAI,CAC/DmZ,EAAUJ,EAAS1U,iBAAiB,2BACpCqU,GAAY/T,QAAQ4B,EAAKC,MAAMsJ,GAAOmC,UAAY,IAClDuG,GAAU,EAEd,KAAK,GAAIxO,GAAI,EAAGoP,EAAOD,EAAQnZ,OAAQgK,EAAIoP,EAAMpP,IAAK,CAClD,GAAInI,GAAUsX,EAAQnP,GAClBwF,MAAO,EACP3N,GAAQkD,cAAcL,UAAUC,QAAQ,eAAiB,GACzD6K,EAAO7C,UAAQ9K,EAAS,4BACf6C,UAAUC,QAAQ,aAAe,GACtCtF,KAAKyY,cAActI,GAGlB2J,EAAQnP,GAAGjF,cAAcL,UAAUC,QAAQ,aAAe,GAAKwU,EAAQnP,GAAGtF,UAAUC,QAAQ,aAAe,GAChHtF,KAAKyY,cAAcqB,EAAQnP,GAAGjF,eAElCiF,SAIH,IAA+B,SAA3BzD,EAAKC,MAAMsJ,GAAOxH,OAAgD,OAA5B/B,EAAKC,MAAMsJ,GAAO5N,OAAkBqE,EAAKC,MAAMsJ,GAAO5N,MAAMyC,QAAQ,OAAS,GAAI,CAC5H,GAAIwU,GAAUJ,EAAS1U,iBAAiB,2BACpCqU,GAAY/T,QAAQ4B,EAAKC,MAAMsJ,GAAOmC,UAAY,IAClDuG,GAAU,EAEd,KAAK,GAAIxO,GAAI,EAAGoP,EAAOD,EAAQnZ,OAAQgK,EAAIoP,EAAMpP,IACzCmP,EAAQnP,GAAGjF,cAAcL,UAAUC,QAAQ,aAAe,GAAKwU,EAAQnP,GAAGtF,UAAUC,QAAQ,aAAe,IAAMwC,oBAAkBZ,EAAKC,MAAMsJ,GAAO5N,QAAwC,MAA9BqE,EAAKC,MAAMsJ,GAAO5N,MAAM8H,KACvL3K,KAAKyY,cAAcqB,EAAQnP,GAAGjF,qBAKpC+T,GAAeA,EAAYjX,SAAWsF,oBAAkB2R,EAAY5W,QACzEqW,GAAmBA,EAAgB1W,UAAYsF,oBAAkBoR,EAAgBrW,QAC9EqW,EAAgBrW,MAAMlC,OAAS,MAC/B2Y,EAAU5T,cAAcL,UAAUC,QAAQ,aAAe,GACzDtF,KAAKyY,cAAca,EAAU5T,eAEjCyT,GAAU,IAItB,MAAOA,IAEX7W,EAAapC,UAAU8Z,iBAAmB,WACtCha,KAAK+G,YACL,IAAI2F,GAAY1M,KAAKwC,QAAQsC,cAAc,qBAC3C,IAAI4H,EAAW,CACX1M,KAAK+G,UAAU2F,EAAU1F,KAAO,EAChC,IAAIiT,IAAQC,aAAcxN,EAAWyN,OAAQ,GAC7Cna,MAAKoa,aAAaH,KAG1B3X,EAAapC,UAAUka,aAAe,SAAUH,GAC5C,GACII,GAEA7Z,EAHA8Z,EAAWL,EAAIC,aAAapV,cAAc,gBAAgB+K,SAE1DnD,EAAYuN,EAAIC,aAEhBK,EAAOD,EAAS3Z,OAChB6Z,EAAa,CACjB,KAAKha,EAAI,EAAGA,EAAI+Z,EAAM/Z,KAClB6Z,EAAYC,EAAS9Z,IACP6E,UAAUC,QAAQ,sBAAwB,IACpD2U,EAAIE,MAAM1S,KAAK+S,GACfxa,KAAK+G,UAAUsT,EAAUrT,IAAMiT,EAAIE,MAAMM,QACzCD,IACAP,EAAIC,aAAeG,EACnBJ,EAAMja,KAAKoa,aAAaH,GAGhC,IAAI7J,GAAe9C,UAAQZ,EAAW,eAGtC,OAFAuN,GAAIC,aAAe9J,EAAe9C,UAAQ8C,EAAc,sBAAwB1D,EAChFuN,EAAIE,MAAQna,KAAK+G,UAAUkT,EAAIC,aAAalT,IAAIyT,QACzCR,GAEX3X,EAAapC,UAAUwa,cAAgB,SAAUC,GAC7C,GAAIC,GACAC,EACAC,EACAC,EACAC,EACAC,EACAvO,EAAY1M,KAAKoG,cAAc,OAASC,OAASC,MAAO,uBACxD4U,EAAelb,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBAC3D6U,EAAcnb,KAAKoG,cAAc,OAASC,OAASC,MAAO,kBAC1D8U,EAAYpb,KAAKoG,cAAc,OAASC,OAASC,MAAO,gBAI5D,IAHAoG,EAAUjG,YAAYyU,GACtBC,EAAY1U,YAAY2U,GACxB1O,EAAUjG,YAAY0U,IACjBnb,KAAK0G,eAAgB,CAElBoU,EADA9a,KAAK8R,iBACS,yBAGA,iCAElB,IAAIuJ,GAAkBrb,KAAKoG,cAAc,QACrCC,OACIC,MAAOwU,EAAaQ,aAAc,cAClCC,MAAO,gBAGfL,GAAazU,YAAY4U,EACzB,IAAIhW,GAAYrF,KAAKgO,0BAA4B2M,EAAc,oCAAsC,mBACrGC,GAAW5a,KAAKoG,cAAc,OAASC,OAASC,MAAOjB,EAAWmW,KAAM,WACpExb,KAAKgO,yBACL4M,EAAS3M,UAAUgF,IAAI,qBAEvBjT,KAAK4G,qBAEDiU,EADA7a,KAAKgO,wBACOhO,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,WAAY3C,MAAO,iBAGhEtG,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,iBAE/EsU,EAASnU,YAAYoU,IAEzBA,EAAY7a,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,QAAS3C,MAAO,iBAAkBzD,MAAO,SAClG+X,EAASnU,YAAYoU,GACrBE,EAAY/a,KAAKoG,cAAc,SAC3BC,OAASC,MAAO,0CAChBmV,UAAWzb,KAAKwJ,KAAKC,YAAY,SAErCmR,EAASnU,YAAYsU,GACrBF,EAAY7a,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,QAAS3C,MAAO,gBAAiBzD,MAAO,QACjG+X,EAASnU,YAAYoU,GACrBE,EAAY/a,KAAKoG,cAAc,SAC3BC,OAASC,MAAO,yCAChBmV,UAAWzb,KAAKwJ,KAAKC,YAAY,QAErCmR,EAASnU,YAAYsU,GACrBG,EAAazU,YAAYmU,GACzBI,EAAahb,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBACrDtG,KAAKgO,yBACLiN,EAAWjb,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,yBAC1E0U,EAAWvU,YAAYwU,GACvBA,EAAWjb,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,qBAC1E0U,EAAWvU,YAAYwU,KAGvBA,EAAWjb,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,eAC1E0U,EAAWvU,YAAYwU,IAE3BC,EAAazU,YAAYuU,GAE7B,MAAOtO,IAEXpK,EAAapC,UAAU0Q,aAAe,WAClC,GAAI8I,GACAgC,EACAC,EACAC,EACAd,EACA5K,EAAWlQ,KAAKoG,cAAc,OAC9BkT,EAAYtZ,KAAKoG,cAAc,OAASC,OAASC,MAAO,iBAC5DoT,GAAW1Z,KAAKoG,cAAc,OAASC,OAASC,MAAO,mBAEnDwU,EADA9a,KAAK8R,iBACS,yBAGA,iCAElB,IAAIuJ,GAAkBrb,KAAKoG,cAAc,QACrCC,OACIC,MAAOwU,EAAaQ,aAAc,cAClCC,MAAO,gBAGfjC,GAAU7S,YAAY4U,EACtB,IAAIQ,GAAa7b,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQ3C,MAAO,mBAC7EoT,GAASjT,YAAYoV,GACrBvC,EAAU7S,YAAYiT,GACtBA,EAAW1Z,KAAKoG,cAAc,OAASC,OAASC,MAAO,qBACvDgT,EAAU7S,YAAYiT,GACtBA,EAAW1Z,KAAKoG,cAAc,OAASC,OAASC,MAAO,kBACvDgT,EAAU7S,YAAYiT,GACtBA,EAAW1Z,KAAKoG,cAAc,OAASC,OAASC,MAAO,yBAEnDqV,EADA3b,KAAKyP,YAAYe,UACF,uEAGA,qFAGfoL,EADA5b,KAAKyP,YAAYkC,SACH,6EAGA,0FAElB,IAAImK,GAAmB9b,KAAKoG,cAAc,UAAYC,OAASkV,MAAOvb,KAAKwJ,KAAKC,YAAY,aAAcR,KAAM,SAAU3C,MAAOqV,KAC7H3I,EAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,8BAC/DwV,GAAiBrV,YAAYuM,EAC7B,IAAI+I,GAAmB/b,KAAKoG,cAAc,UAAYC,OAASkV,MAAOvb,KAAKwJ,KAAKC,YAAY,YAAaR,KAAM,SAAU3C,MAAOsV,IAChI5I,GAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,iCAC3DyV,EAAiBtV,YAAYuM,GAEzB0I,EADA1b,KAAKyP,YAAYoC,YAAc/J,oBAAkB9H,KAAKyP,YAAYoC,YACxD,iDAGA,8DAEd,IAAImK,GAAahc,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAOoV,IAMhF,OALAhC,GAASjT,YAAYqV,GACrBpC,EAASjT,YAAYsV,GACrBrC,EAASjT,YAAYuV,GACrB1C,EAAU7S,YAAYiT,GACtBxJ,EAASzJ,YAAY6S,GACdpJ,GAEX5N,EAAapC,UAAUsN,gBAAkB,SAAUyO,EAASjb,EAAQgC,EAAWkZ,EAAYnZ,EAAK4D,EAAQO,GACpG,GAAIzE,GAAQzC,KACR2H,GAASmE,QAAS9K,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAK0H,QAAQ,EAAOzF,KAAM,cACpFjJ,MAAK4E,eAAkB5E,KAAKiS,eAAkBjS,KAAKkS,eAMpDlS,KAAKiS,eAAgB,EACrBjS,KAAKmc,gBAAgBxU,EAAMsU,EAASjb,EAAQgC,EAAWkZ,EAAYnZ,EAAK4D,EAAQO,IANhFlH,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAM0Z,gBAAgBtN,EAAoBoN,EAASjb,EAAQgC,EAAWkZ,EAAYnZ,EAAK4D,EAAQO,MAQ3G5E,EAAapC,UAAUic,gBAAkB,SAAUxU,EAAMsU,EAASG,EAAapZ,EAAWkZ,EAAYnZ,EAAK4D,EAAQO,GAC/G,GAAIzE,GAAQzC,IACZ,KAAK2H,EAAK+G,QAAW1O,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,QAAUX,KAAK2P,cAAgB,CACpG,GAAI3O,GAASob,EACTC,MAAc,GACdvQ,EAAU,EAEVA,GADA9K,EAAOqE,UAAUC,QAAQ,qBAAuB,EACtCtE,EAAO8D,cAAc,uBAAyB9D,EAAO8D,cAAc,sBAAsBkC,GAGzFhG,EAAOgG,GAEjBhH,KAAKgO,0BACLhO,KAAK0M,UAAY1M,KAAK0a,gBAE1B,IAAIhO,GAAY1M,KAAK0M,UAAU+E,WAAU,EAoBzC,IAnBA/E,EAAU4D,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,SAAWhH,KAAKsc,gBACnC,IAAxBtc,KAAKsc,gBAAwBtc,KAAK8R,kBAAoBpF,EAAU5H,cAAc,qBAC1E4H,GAAaA,EAAUmD,SAAS,IAChCnD,EAAUmD,SAAS,GAAG5B,UAAUgF,IAAI,mBAExCxE,YAAU/B,EAAU5H,cAAc,oBAAqB,aAEvD9E,KAAK0G,iBACDC,GACAsV,GAAU,EACVvP,EAAU4D,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,WAC/ChH,KAAK2T,iBAAiBjH,EAAW3J,EAAKC,EAAWkE,EAAM4E,GACvD9L,KAAKsc,eAAiB,GAGtBtc,KAAK2T,iBAAiBjH,EAAW3J,EAAKC,EAAWkE,EAAM4E,IAG/D9L,KAAKsc,kBACAtc,KAAK0G,eAAgB,CACtB,GAAI6V,GAAa7P,EAAU5H,cAAc,mBACrC0X,EAAY9P,EAAU5H,cAAc,kBACpC2X,EAAa/P,EAAU5H,cAAc,uBACrC4X,EAAYhQ,EAAU5H,cAAc,qBACxCyX,GAAWjM,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAK2c,YAC9DH,EAAUlM,aAAa,KAAMtQ,KAAKwC,QAAQwE,GAAK,MAAQhH,KAAK2c,YAC5DJ,EAAWjM,aAAa,OAAQtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAK2c,YAChEH,EAAUlM,aAAa,OAAQtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAK2c,YAC/DF,EAAWnM,aAAa,MAAOtQ,KAAKwC,QAAQwE,GAAK,OAAShH,KAAK2c,YAC/DD,EAAUpM,aAAa,MAAOtQ,KAAKwC,QAAQwE,GAAK,MAAQhH,KAAK2c,YAC7D3c,KAAK2c,aAET,GAAIV,EAAS,CACT,GAAIP,OAAU,EAEVA,GADA1b,KAAKyP,YAAYmN,aAAe9U,oBAAkB9H,KAAKyP,YAAYmN,aACzD,gBAGA,8BAEdP,EAAcrc,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAOoV,KAChE,GAAImB,WAASC,QAAS,wBAAyB3H,SAAU,oBAC/DI,SAAS8G,GAChBA,EAAY/L,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,gBACxDsT,eAAaV,GAAeW,SAAU,gBAItC,KAAK,GAHD1C,GAAWtZ,EAAO8D,cAAc,gBAChCmY,EAAa3C,EAASzK,SACtBqN,EAAS,EACJvS,EAAI,EAAGoP,EAAOkD,EAAWtc,OAAQgK,EAAIoP,EAAMpP,IAC5CsS,EAAWtS,GAAGtF,UAAUC,QAAQ,sBAAwB,IACxD4X,GAAU,EAGlB,IAAIld,KAAKyP,YAAYmC,YAAc5R,KAAKiE,iBACpC,GAAIjE,KAAK8D,aAAgBmZ,EAAWtc,OAAS,EACzC2Z,EAAS7T,YAAYiG,GACrB1M,KAAKgE,aAAc,MAElB,CACD,GAAIhE,KAAKgO,wBAAyB,CAG9B,IAAK,GAFDyC,GAAQ,EACR0M,EAAiBnd,KAAK8D,WAAa,EAC9BtD,EAAI,EAAGA,EAAI2c,EAAgB3c,IAC5Byc,EAAWzc,GAAGyN,UAAUC,SAAS,sBACjCiP,IACA1M,IAGJA,GAAQ,GACRA,IAGJwM,EADIG,EAAMpd,KAAK8D,WAAa2M,EAAQ,GACpB4M,WAAW1M,aAAajE,EAAWuQ,EAAWG,QAE7D,CACD,GAAIA,GAAMpd,KAAK8D,WAAa,CAC5BmZ,GAAWG,GAAKC,WAAW1M,aAAajE,EAAWuQ,EAAWG,IAElEpd,KAAKkE,eAAgB,MAIzBoW,GAAS7T,YAAYiG,EAEzB,IAAIyN,GAAQna,KAAK+G,UAAU/F,EAAOgG,IAAIyT,MAAM,EAc5C,IAbAN,EAAM1S,KAAKyV,GACXld,KAAK+G,UAAU2F,EAAU1F,IAAMmT,EAC3Bna,KAAK8D,YAAc,GACnB9D,KAAKga,mBAEJha,KAAK4E,gBACN5E,KAAKqD,cAAe,EACpBrD,KAAKsd,aAActc,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAC5DhH,KAAKqD,cAAe,EAChB6Y,GAAclc,KAAKud,oBACnBvd,KAAK8P,eAAepD,QAGvB1M,KAAK0G,eAAgB,CAClBkV,EAAc,EAEdA,GADA5b,KAAKyP,YAAYmC,WACH,iEAGA,8EAElB,IAAI4L,GAAexd,KAAKoG,cAAc,UAAYC,OAASkV,MAAOvb,KAAKwJ,KAAKC,YAAY,cAAeR,KAAM,SAAU3C,MAAOsV,KAC1H5I,EAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,8BAC/DkX,GAAa/W,YAAYuM,GACzBtG,EAAU5H,cAAc,mBAAmB2B,YAAY+W,GAEnD5B,EADA5b,KAAKyP,YAAYiC,UACH,gEAGA,6EAElB,IAAI+L,GAAczd,KAAKoG,cAAc,UAAYC,OAASkV,MAAOvb,KAAKwJ,KAAKC,YAAY,aAAcR,KAAM,SAAU3C,MAAOsV,KACxH8B,EAAkB1d,KAAKoG,cAAc,QAAUC,OAASC,MAAO,gCACnEmX,GAAYhX,YAAYiX,GACxBhR,EAAU5H,cAAc,mBAAmB2B,YAAYgX,GACvD/Q,EAAU5H,cAAc,mBAAmB2B,YAAY4V,QAG1D,CACD,IAAKrc,KAAK0G,eAAgB,CACtB,GAAIkV,GAAc,EAEdA,GADA5b,KAAKyP,YAAYiC,UACH,gEAGA,6EAElB,IAAI+L,GAAczd,KAAKoG,cAAc,UAAYC,OAASkV,MAAOvb,KAAKwJ,KAAKC,YAAY,aAAcR,KAAM,SAAU3C,MAAOsV,KACxH5I,EAAchT,KAAKoG,cAAc,QAAUC,OAASC,MAAO,gCAC/DmX,GAAYhX,YAAYuM,GACxBtG,EAAU5H,cAAc,mBAAmB2B,YAAYgX,GAE3Dzc,EAAOyF,YAAYiG,GACnB1M,KAAK+G,UAAU2F,EAAU1F,KAAO,GAEpC,GAAIhH,KAAK4G,qBACA5G,KAAK0G,eAAgB,CACtB,GAAIiX,GAAUjR,EAAU5H,cAAc,iBAGlC9E,KAAKgO,wBACI,GAAI4P,aAAW7T,MAAO/J,KAAKwJ,KAAKC,YAAY,OAAQ0L,SAAU,gBAG9D,GAAI0H,WAASlE,QAAS3Y,KAAKwJ,KAAKC,YAAY,OAAQ0L,SAAU,mBAEpEI,SAASoI,GAChBjR,EAAU5H,cAAc,uBAAuBmJ,UAAUgF,IAAI,SACzDjT,KAAK8C,aAAe9C,KAAK8C,YAAYC,KACrC0L,YAAUkP,GAAU,mBAIhC,GAAI3d,KAAKgO,0BAA4BhO,KAAK0G,eAAgB,CAItD,IAAK,GAHD2I,GAAU3C,EAAU5H,cAAc,mBAClCwK,EAAS5C,EAAU5H,cAAc,kBACjC+Y,EAAWnR,EAAU5H,cAAc,gBAC9BtE,EAAI,EAAGA,EAAIqd,EAASC,WAAWnd,OAAQH,IAC4C,QAApFkM,EAAU5H,cAAc,gBAAgBgZ,WAAWtd,GAAGuF,YAAY4I,eAC7D3O,KAAK4G,mBAINiX,EAASC,WAAWtd,GAAGyN,UAAUgF,IAAI,oBAIzC4K,EAASC,WAAWtd,GAAGmM,MAAMC,QAAU,MAI/C,IADkBF,EAAUuC,yBAEpBnH,oBAAkB9H,KAAK0G,kBACvBgG,EAAUhH,cAAciL,aAAa3Q,KAAK0a,eAAc,GAAM5V,cAAc,gBAAiB4H,IACzFiR,EAAUjR,EAAUuC,uBAAuB6O,WAAW,IAC9C7P,UAAUC,SAAS,iBAC3ByP,EAAQhR,MAAMC,QAAU,UAG3B5M,KAAK4E,eAAe,CACrB,GAAIsV,GAAexN,EAAUuC,uBACzB8O,EAAa7D,EAAapV,cAAc,mBACxCkZ,EAAY9D,EAAapV,cAAc,iBAC3C,IAAKuK,EAAQE,SAAYD,EAAOC,QASvBvP,KAAKgO,0BACNqB,EAAQE,UACRwO,EAAWxO,SAAU,GAErBD,EAAOC,UACPyO,EAAUzO,SAAU,QAda,CACrC,GAAI0O,GAAcvR,EAAUwR,kBACxBD,IAAeA,EAAYhQ,UAAUC,SAAS,iBAC9CmB,EAAU4O,EAAYnZ,cAAc,mBACpCwK,EAAS2O,EAAYnZ,cAAc,kBACnCiZ,EAAWxO,QAAUF,EAAQE,QAC7ByO,EAAUzO,QAAUD,EAAOC,WAe/C,GADAvP,KAAK8C,YAAc,KACf9C,KAAK0G,eAAgB,CACrB,GAAIyX,IACAtN,YAAa,yBAA0B1B,OAAQzC,EAAU1F,GAAIhE,UAAWA,EACxE+Q,aAAc/T,KAAK4G,mBAAqB7D,MAAMiR,GAElDhU,MAAKoK,QAAQ,cAAe+T,OAG5B,IAAIne,KAAKgO,wBAAyB,CAC9B,GAAIoQ,GAAiB1R,EAAU5H,cAAc,yBACzCuZ,EAAS,GAAIxB,WAAS1H,SAAUnV,KAAKwC,QAAQwE,GAAK,mBAAoB2R,QAAS3Y,KAAKwJ,KAAKC,YAAY,mBAClG8L,SAAS6I,GAChBC,EAAO7b,QAAQ8b,QAAU,WACrB7b,EAAMqN,eAAexC,UAAQ8Q,EAAgB,0BAEjD,IAAIG,GAAa7R,EAAU5H,cAAc,qBACzCuZ,EAAS,GAAIxB,WAAS1H,SAAUnV,KAAKwC,QAAQwE,GAAK,eAAgB2R,QAAS3Y,KAAKwJ,KAAKC,YAAY,eAC1F8L,SAASgJ,GAChBF,EAAO7b,QAAQ8b,QAAU,WACrB7b,EAAM+K,iBAAgB,EAAMF,UAAQiR,EAAY,sBAAuB,IAAI,QAG9E,CACD,GAAItD,GAAWvO,EAAU5H,cAAc,cACnCuZ,EAAS,GAAIG,mBACbC,MAAOze,KAAKye,MACZtJ,SAAU,8CACV2H,QAAS,qBACT/D,WAAY/Y,KAAKwP,UAAUsF,KAAK9U,KAAMib,GACtC5K,OAAQrQ,KAAKwP,UAAUsF,KAAK9U,KAAMib,IAEtCoD,GAAO9I,SAAS0F,GAChBA,EAAS3K,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,cAG7D,IAAKzJ,KAAK4E,gBAAkB5E,KAAKkS,cAAe,CAC5C,GAAIwM,GAAQ1d,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACjD2X,EAAUjS,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAC1DhH,MAAKoK,QAAQ,UAAY0B,QAAS4S,EAAOzV,KAAM,cAAe2V,aAAcD,OAIxFrc,EAAapC,UAAUgU,kBAAoB,SAAU9B,GACjD,GAAIpS,KAAKgO,0BAA4BhO,KAAK0G,gBAAkB0L,EAAKnD,uBAAwB,CACrF,GAAI4P,GAAe7e,KAAK0a,eAAc,GAAM5V,cAAc,eAC1D,IAAI+Z,EAAc,CACdzM,EAAK1M,cAAciL,aAAakO,EAAczM,EAC9C,IAAIuL,GAAUvL,EAAKnD,uBAAuB6O,WAAW,EACjDH,GAAQ1P,UAAUC,SAAS,iBAC3ByP,EAAQhR,MAAMC,QAAU,QAE5B5M,KAAK8e,aAAa1M,MAI9B9P,EAAapC,UAAU4e,aAAe,SAAU3O,GAC5C,GAAIuD,GACAG,EAAW1D,EAAKlB,uBAAuBA,sBAC3C,IAAI4E,EAAU,CAENH,EADAG,EAAS7M,GAAG1B,QAAQ,SAAW,EACpBtF,KAAKkP,QAAQ2E,GAGb7T,KAAKqO,SAASwF,IAExB/L,oBAAkB4L,IAAa5L,oBAAkB4L,EAAS1Q,aAC3D0Q,EAAS1Q,UAAY,MAEzB,IAAIsM,GAASa,EAAKlB,uBAAuBnK,cAAc,kBACnDuK,EAAUc,EAAKlB,uBAAuBnK,cAAc,kBACxDwK,GAAOyP,UAAW,EAClB1P,EAAQ0P,UAAW,EACdjX,oBAAkB4L,IAAoC,OAAvBA,EAAS1Q,UAIzCqM,EAAQE,SAAU,EAHlBD,EAAOC,SAAU,IAO7BjN,EAAapC,UAAUyT,iBAAmB,SAAUjH,EAAW3J,EAAKC,EAAWkE,EAAM4E,EAASkT,GAC1F,GAAIlH,GAEAnQ,EADAqJ,EAAahR,KAAKwC,QAAQwE,GAAK,UAE/BiY,EAAWvS,EAAU5H,cAAc,kBAIvC,IAHI9E,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,UACrD2Z,EAAWvS,GAEX1M,KAAK0G,eAAgB,CAYrB,GAXAiB,GACIkJ,YAAa,6BAA8B1B,OAAQzC,EAAU1F,GAC7D+M,aAAc/T,KAAK4G,mBAAqB7D,MAAMiR,GAC9ChR,UAAWA,EAAWkE,KAAMlH,KAAKkf,kBAAkBhY,GAAM,GAAQ4E,QAASA,GAE9E9L,KAAKoK,QAAQ,cAAezC,GACxB3H,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,UACrDqC,EAAKkJ,YAAc,wBAEvB7Q,KAAKmf,SAAWnf,KAAK+Q,eAAe/Q,KAAK0G,gBAErC1G,KAAKmR,QACL2G,EAAW9X,KAAKmf,SAASxX,EAAM3H,KAAM0M,EAAU1F,GAAIgK,GAAY,GAC3DhR,KAAKgO,yBAA2BgR,EAChChf,KAAKof,mCAAmC1S,EAAWoL,GAE9C9X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1D2Z,EAASvZ,cAAciL,aAAamH,EAAUmH,EAASf,oBAGvDe,EAASxY,YAAYqR,OAIxB,IAAI9X,KAAKoR,UAAW,CACrB,GAAIC,GAAerR,KAAKmf,SAASxX,EAAM3H,KAAM0M,EAAU1F,GAAIgK,EAC3D8G,GAAyC,IAA7BzG,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,GACzErR,KAAKgO,yBAA2BgR,EAChChf,KAAKof,mCAAmC1S,EAAWoL,GAE9C9X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1D2Z,EAASvZ,cAAciL,aAAamH,EAAUmH,EAASf,oBAGvDe,EAASxY,YAAYqR,OAIxB,IAAI9X,KAAKuR,OAAQ,CAElB,GADAuG,EAAW9X,KAAKmf,SAASxX,EAAM3H,KAAM0M,EAAU1F,GAAIgK,GAC/ChR,KAAKgO,0BAA4BgR,IAAmD,IAAlCtS,EAAU1F,GAAG1B,QAAQ,SAEvE,IAAK,GAAI9E,GAAI,EAAGA,EAAIsX,EAASnX,OAAQH,IAEjC,GAA6B,QAAzBsX,EAAStX,GAAG6e,SAAoB,CAEhCvH,EAAWA,EAAStX,EACpB,OAIRR,KAAKgO,yBAA2BgR,EAChChf,KAAKof,mCAAmC1S,EAAWoL,GAE9C9X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1D2Z,EAASvZ,cAAciL,aAAamH,EAAUmH,EAASf,oBAIvD1M,SAAOsG,EAAUmH,OAIrBnH,GAAW9X,KAAKmf,SAASxX,EAAM3H,KAAM,WAAYgR,GAAY,GACzDhR,KAAKgO,yBAA2BgR,EAChChf,KAAKof,mCAAmC1S,EAAWoL,GAE9C9X,KAAKgO,0BAA6D,IAAlCtB,EAAU1F,GAAG1B,QAAQ,QAC1D2Z,EAASvZ,cAAciL,aAAamH,EAAUmH,EAASf,oBAGvDe,EAASxY,YAAYqR,EAG7B9X,MAAK+R,uBAET,MAAOrF,IAEXpK,EAAapC,UAAUkf,mCAAqC,SAAU1S,EAAWoL,GAC7E,GACI1J,IADO1B,EAAUwR,mBAAqBxR,EAAUwR,mBAAqBxR,GACxDY,QAAQ,uBACpBZ,EAAUwR,oBAAsB9P,IACjCA,EAAQA,EAAM8P,mBAAqB9P,EAAM8P,mBAAqB9P,GAE9DA,GACAA,EAAM1I,cAAciL,aAAamH,EAAU1J,IAWnD9L,EAAapC,UAAUof,aAAe,SAAUzc,EAAOL,EAASyG,GAC5D,GAAIsW,GAAajS,UAAQ9K,EAAS,sBAC9B2E,EAAQnH,KAAKgP,eAAeuQ,GAC5BC,EAAclS,UAAQ9K,EAAS,qBAC/BiO,EAAQ,CACZ,IAAa,QAATxH,EAEA,YADA9B,EAAMpE,IAAMF,EAGhB,IAAa,cAAToG,EAcA,YAbIjJ,KAAKgO,0BACLwR,EAAchd,EAAQkD,cAAcuJ,yBACjBuQ,EAAYvR,UAAUC,SAAS,uBAC9CsR,EAAcA,EAAYxa,iBAAiB,qBAAqBwa,EAAYxa,iBAAiB,qBAAqBrE,OAAS,IAE3H6e,GAAeA,EAAYvR,UAAUC,SAAS,sBAC9C/G,EAAQnH,KAAKkP,QAAQsQ,IAEzBrY,EAAMnE,UAAYH,GAGlBsE,EAAMnE,UAAYH,EAI1B,MAAO2c,GAAsD,OAAvCA,EAAYvQ,wBAC9BuQ,EAAcA,EAAYvQ,yBACrBjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmB8Y,EAAYvR,UAAUC,SAAS,gBACtDlO,KAAK0G,iBAAmB8Y,EAAYvR,UAAUC,SAAS,qBACnDsR,EAAYvR,UAAUC,SAAS,yBACvCuC,GAGR,IAAIvJ,GAAOC,EAAMA,MAAMsJ,GACnB1H,EAAS/I,KAAK0S,UAAUxL,EAAKW,OAC7B4X,EAASzf,KAAK0f,UAAU3W,EAAO0W,OACnC,IAAoB,SAAhB1W,EAAOE,KACP,GAAIpG,YAAiBsG,MACjBtG,EAAQ7C,KAAK2f,KAAKC,WAAW/c,EAAO4c,OAEnC,IAAI5c,YAAiBjD,OACtB,IAAK,GAAIY,GAAI,EAAGA,EAAIqC,EAAMlC,OAAQH,IAC1BqC,EAAMrC,IAAMqC,EAAMrC,YAAc2I,QAChCtG,EAAMrC,GAAKR,KAAK2f,KAAKC,WAAW/c,EAAMrC,GAAIif,GAKtD1W,GAAO6H,aACP5Q,KAAK6f,eAAerd,EAASK,EAAOoG,IAGpCjJ,KAAKoD,YAAa,EAClBpD,KAAK8f,YAAYtd,EAASK,GAC1B7C,KAAKoD,YAAa,IAG1Bd,EAAapC,UAAU2f,eAAiB,SAAUrd,EAASK,EAAOoG,GAC9D,GACI8W,GADAC,EAAU1S,UAAQ9K,EAAS,sBAE3B2E,EAAQ6Y,GAAWhgB,KAAKgP,eAAegR,GACvC9P,EAAW5C,UAAQ9K,EAAS,qBAC5BiO,EAAQ,CAIZ,KAHIzQ,KAAKoZ,iBACLpZ,KAAKigB,cAAc9Y,EAAO+I,GAEvBA,GAAgD,OAApCA,EAASjB,wBACxBiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,IAAIvJ,GAAOC,GAASA,EAAMA,MAAMsJ,EACnB,WAATxH,EACAjJ,KAAK6S,eAAiB7S,KAAK0S,UAAU7P,GAEhCqE,IACLlH,KAAK6S,eAAiB7S,KAAK0S,UAAUxL,EAAKW,OAE9C,IAAI2Q,EACJxY,MAAKqY,eAAiBnR,GAAQlH,KAAK0S,UAAUxL,EAAKW,MAClD,IAAIiH,GAAc9O,KAAK+O,cAAc/O,KAAKkH,KACtClH,MAAK6S,iBAED2F,EADAxY,KAAK6S,eAAenJ,UACV1J,KAAK6S,eAAenJ,UAGpB1J,KAAK2J,gBAAgB3J,KAAK6S,eAAe5J,KAAO,YAGlE,IACIiX,GADAC,GAAW,KAAM,QAAS,UAAW,aAEzC,QAAQlX,GACJ,IAAK,QACD,GAAInB,oBAAkBjF,GAAQ,CAC1B,GAAKiF,oBAAkBZ,GAQnB,MAPAA,GAAKW,MAAQ,GACbX,EAAK6C,MAAQ,GACb7C,EAAK+B,KAAO,GACZ/B,EAAKrE,MAAQ,GACbqE,EAAK0L,SAAW,OAOpB1L,GAAKW,MAAQhF,EACbqE,EAAK6C,MAAQ/J,KAAK6S,eAAe9I,MACjC7C,EAAK+B,KAAOjJ,KAAK6S,eAAe5J,KAChC/B,EAAKrE,MAAQ,GACbqE,EAAK0L,SAAW4F,EAAQ,GAAG3V,KAE/B,MACJ,KAAK,WACDqd,EAAWhZ,EAAK0L,SAChB1L,EAAK0L,SAAW/P,EACZsd,EAAQ7a,QAAQ4B,EAAK0L,WAAa,EAClC1L,EAAKrE,SAEAsd,EAAQ7a,QAAQ4a,IAAa,IAClChZ,EAAKrE,MAAQ,GAEjB,MACJ,KAAK,QACDqE,EAAKrE,MAAQA,EAIrB,GAFA7C,KAAKmY,mBAAmBnY,KAAK6S,eAAgBrQ,GAC7CxC,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO+B,GACzDjJ,KAAK6S,gBAAkB7S,KAAK6S,eAAejC,eAC9B,UAAT3H,GAA6B,aAATA,GAAqB,CACzC,GAAImX,GAAS9S,UAAQ9K,EAAS,oBAC9BxC,MAAKqgB,gBAAgBD,GAAQ,GAC7B9H,SAAO8H,EAAOtb,cAAc,iBAC5B,IAAI0a,GAAcxf,KAAK+P,eAAezC,UAAQ8S,EAAQ,sBAAuBpgB,KAAK6S,eAAgB,SAAUuN,EAAOpZ,GAAIiC,EAAM/B,EACpG,cAArBlH,KAAKyS,aAA8BzS,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EACjFka,EAAYna,UAAY,mCAGxBma,EAAYna,UAAY,qCAEvBrF,KAAKgO,yBACFwR,EAAYvQ,wBAA0BuQ,EAAYvQ,uBAAuB5J,UAAUC,QAAQ,qBAAuB,IAC9Gka,EAAYna,UAAUC,QAAQ,iBAAmB,IACjDka,EAAYna,WAAa,kBAEzBma,EAAYvQ,uBAAuB5J,UAAUC,QAAQ,sBAAwB,IAC7Eka,EAAYvQ,uBAAuB5J,WAAa,wBAIxDma,EAAYvQ,wBAA0BuQ,EAAYvQ,uBAAuB5J,UAAUC,QAAQ,sBAAwB,GACnHka,EAAYna,UAAUC,QAAQ,mBAAqB,IACnDka,EAAYna,WAAa,mBAE7B,IAAIsC,IACAkJ,YAAa,kBAAmBZ,OAAQhH,EAAMkG,OAAQiR,EAAOpZ,GAC7DrE,OAAQ3C,KAAK2C,OAAQuE,KAAMA,EAE/B6Y,IACIjU,QAASkU,EAAQhZ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAAKmI,OAAQiR,EAAOpZ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACzGnE,MAAOqE,EAAKW,MAAOoB,KAAM,SAE7BjJ,KAAKoK,QAAQ,cAAezC,GAC5B3H,KAAKoK,QAAQ,SAAU2V,KAInCzd,EAAapC,UAAUogB,YAAc,SAAU9f,EAAGmH,GAC9C,GACInF,GADAC,EAAQzC,IAGZ,IAAKA,KAAKugB,YAAoC,gBAAf5Y,GAAK9E,OAAsC,UAAd8E,EAAKsB,MAAoBtB,EAAK3G,QAAU2G,EAAK3G,OAAOiN,UAAUC,SAAS,qBAC3HlO,KAAK6S,eAAevJ,aAAetJ,KAAK6S,eAAevJ,WAAWxH,MAAQC,OAAOC,WAAahC,KAAK6S,eAAevJ,WAAWzH,IAAM,GAEvI,YADA7B,KAAKugB,YAAa,EAoBtB,IAdI/d,EAFAmF,EAAKnF,SAAWmF,EAAKnF,QAAQyL,UAAUC,SAAS,iBAC1BvG,EACInF,QAErBmF,EAAKiE,MACAjE,EAAKiE,MAAM5K,OAGF,UAAd2G,EAAKsB,MAAoBtB,EAAK3G,QAAU2G,EAAK3G,OAAOiN,UAAUC,SAAS,oBAElEvG,EAAK6Y,cAIL7Y,EAAKnF,QAEnB,EAGIA,EAAQ6C,UAAUC,QAAQ,UAAY,GAAK9C,EAAQ6C,UAAUC,QAAQ,YAAc,GAAK9C,EAAQ6C,UAAUC,QAAQ,WAAa,KAE/H9C,EADmBmF,EACInF,QAE3B,IAKIiX,GALA/M,EAAYY,UAAQ9K,EAAS,sBAC7B0N,EAAW5C,UAAQ9K,EAAS,qBAC5BsJ,EAAUY,GAAaA,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACnEmI,EAASe,EAASlJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACpDyZ,EAAc9Y,CAEd8Y,GAAYje,SAAWie,EAAYje,QAAQ6C,UAAUC,QAAQ,iBAAmB,IAChF9C,EAAUie,EAAYje,SACtBiX,EAAcjU,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,mBAE/F9E,KAAK6S,eAAiB4G,EAAYhE,eAAegE,EAAY5W,SAEjE4W,EAAcjU,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,mBAE/F9E,KAAK6S,eAAiB7S,KAAK0S,UAAU+G,EAAY5W,MAAM,KAG/D,IAAIA,GACA6d,CACJ,IAAIle,EAAQ6C,UAAUC,QAAQ,YAAc,EACxCob,EAAU9I,SAASpV,EAAQwE,GAAGgB,MAAM,YAAY,GAAI,IAC7B,YAAnBhI,KAAKmU,WACLsF,EAAcjU,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,gBACnG9E,KAAK6S,eAAiB4G,EAAYhE,eAAegE,EAAY5W,OACzD7C,KAAK6S,eAAejK,UACpB6Q,EAAcjU,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,sCAAuC,gBACtH9E,KAAK6S,eAAiB7S,KAAK0S,UAAU+G,EAAY5W,UAIrD4W,EAAcjU,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAoB,gBACnG9E,KAAK6S,eAAiB7S,KAAK0S,UAAU+G,EAAY5W,MAAM,KAGvDA,EADA7C,KAAK6S,eAAetH,OACZvL,KAAK6S,eAAetH,OAAOmV,KAGpB,GAAM,GACLA,OAGnB,IAAIle,EAAQ6C,UAAUC,QAAQ,kBAAoB,EACnDzC,EAAQ2C,eAAahD,EAAS,eAAeK,UAK7C,IAFAA,EAAQ8E,EAAK9E,MAEK,UAAd8E,EAAKsB,MAAoBtB,EAAK3G,QAAU2G,EAAK3G,OAAOiN,UAAUC,SAAS,oBAAqB,CAE5FrL,EAAQd,OAAO4F,EAAK6Y,cAAc3d,MAElC,IAAIsN,GAAOxI,EAAK6Y,cACZG,EAAoBC,cAAYzQ,EAAM0Q,kBACtCC,EAAmBC,WAAS,UAAWC,mBAAiBhhB,KAAKihB,QAC7D/X,OAAMrG,KAAoD,IAA1CsN,EAAKtN,MAAMyC,QAAQwb,KACnCje,EAAQ7C,KAAK2f,KAAKuB,iBAAkBzB,OAAQ,MAAOtP,EAAKtN,QAEvDqG,MAAMrG,KACP8d,EAAkB9d,MAAQA,GAE9B7C,KAAKugB,YAAa,EAGR,UAAd5Y,EAAK8E,MAAoBzM,KAAKmhB,oBAC9BC,OAAOC,cAAcrhB,KAAKshB,OAC1BthB,KAAKshB,MAAQF,OAAOG,YAAY,WAAc9e,EAAM+e,YAAY1V,EAASqD,EAAQtM,EAAOrC,EAAGgC,IAAaxC,KAAKmhB,qBAG7GnhB,KAAKwhB,YAAY1V,EAASqD,EAAQtM,EAAOrC,EAAGgC,KAGpDF,EAAapC,UAAUshB,YAAc,SAAUC,EAAMC,EAAM7e,EAAOrC,EAAGmhB,GACjE,GAAIlf,GAAQzC,KACR+f,GAAejU,QAAS2V,EAAMtS,OAAQuS,EAAM7e,MAAOA,EAAO6L,QAAQ,EAAOzF,KAAM,QACnFmY,QAAOC,cAAcrhB,KAAKshB,OACrBthB,KAAK4E,cAMN5E,KAAK4hB,2BAA2B7B,EAAY4B,EAAKnhB,EAAGihB,EAAMC,GAL1D1hB,KAAKoK,QAAQ,eAAgB2V,EAAY,SAAUlR,GAC/CpM,EAAMmf,2BAA2B/S,EAAoB8S,EAAKnhB,EAAGihB,EAAMC,MAO/Epf,EAAapC,UAAU0hB,2BAA6B,SAAUja,EAAMnF,EAAShC,EAAGsL,EAASqD,GAChFxH,EAAK+G,SACN1O,KAAK8f,YAAYtd,EAASmF,EAAK9E,MAAOrC,GACjCR,KAAK4E,eACN5E,KAAKoK,QAAQ,UAAY0B,QAASA,EAASqD,OAAQA,EAAQtM,MAAO8E,EAAK9E,MAAO6L,QAAQ,EAAOzF,KAAM,YAI/G3G,EAAapC,UAAU2U,WAAa,SAAU7N,GAC1C,IAAIhH,KAAKuD,gBAAiBvD,KAAKyD,UAA/B,CAGAzD,KAAKwD,cAAe,CAEpB,IAAIqe,GAAMrc,eAAawB,EAAI,gBACvB8a,EAAOD,EAAIE,UAAYF,EAAIE,SAASvf,QAAQsC,cAAc,aAC1D6Q,EAAWkM,EAAIG,aACnBH,GAAIhf,MAAQ8S,EAAS9S,KACrB,IAAIof,IACAzf,QAASqf,EAAIrf,QAASK,MAAO8S,EAAS9S,MAAOqf,cAAc,EAC3DC,iBAAkBniB,KAAKoiB,aAAcC,aAAc,KAAMP,KAAMA,EAAMnM,SAAUA,EAAU/J,MAAO,KAAMjG,EAAG,KAEzGkc,GAAIS,gBAAkBT,EAAIhf,OAC1B7C,KAAKgV,YAAYiN,GAErBjiB,KAAKuD,eAAgB,IAEzBjB,EAAapC,UAAU8U,YAAc,SAAUrN,GAC3C,GAAIA,EAAKua,aAAc,CACnB,GAAIpa,oBAAkBH,EAAK9E,OACvB,MAEJ7C,MAAKuD,eAAgB,EACrBvD,KAAKoiB,aAAeza,EAAKgO,QACzB,IAAI2D,GAAYhM,UAAQ3F,EAAKnF,QAAS,mBAAqB8K,UAAQ3F,EAAKnF,QAAS,sBAC7EuG,EAA4B,iBAAnB/I,KAAKmU,UAA+BnU,KAAK0S,UAAU/K,EAAK9E,MAAM,IAAM7C,KAAK0S,UAAU/K,EAAK9E,MACrG,IAAuB,iBAAnB7C,KAAKmU,WAA8C,OAAdmF,EAAoB,CACzD,GAAIiJ,GAAUjJ,EAAUxU,cAAc,6BAClC0d,EAAMhd,eAAa+c,EAAS,eAChC,KAAIxZ,EA2BA,MA1BA,IAAoB,WAAhBA,EAAOE,KAAmB,CAK1B,GAHAuZ,EAAI3f,MAAQ8E,EAAK8a,SACjBD,EAAIE,WAEA5a,oBAAkBH,EAAK8a,UACvBF,EAAQ1f,MAAQ,OAEf,CAEGiI,EAAS9K,KAAK0W,mBAAmB/O,EAAK8a,SAAS,GACnDF,GAAQ1f,MAAQiI,EAEpB,OAGA,IAAKhD,oBAAkBH,EAAK9E,MAAM,IAAK,CAEnC2f,EAAI3f,MAAQ8E,EAAK9E,MAAM,GACvB2f,EAAIE,UACJ,IAAI5X,GAAS9K,KAAK0W,mBAAmB/O,EAAK9E,MAAM,GAChD0f,GAAQ1f,MAAQiI,GAWhC,GAHA9K,KAAK2iB,iBAAiBrJ,GACtBtZ,KAAK4iB,aAAe,KACpB5iB,KAAKsD,kBAAmB,EACpByF,GAAUA,EAAO6H,aACjB5Q,KAAK6f,eAAelY,EAAKnF,QAASuG,EAAOlB,MAAO,aAE/C,IAAIkB,GAAUA,EAAOH,SAAWG,EAAOH,QAAQ,GAAGgI,aACnD5Q,KAAK6f,eAAelY,EAAKnF,QAASuG,EAAOH,QAAQ,GAAGf,MAAO,aAE1D,CAKD,IAJA,GAAI6E,GAAYY,UAAQ3F,EAAKnF,QAAS,sBAClC2E,EAAQnH,KAAKgP,eAAetC,GAC5BwD,EAAW5C,UAAQ3F,EAAKnF,QAAS,qBACjCiO,EAAQ,EACLP,GAAgD,OAApCA,EAASjB,wBACxBiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGRtJ,GAAMA,MAAMsJ,GAAO5N,MAAQ,GAC3B7C,KAAK0V,WAAWvO,EAAMA,MAAMsJ,GAAQ9I,MAIhDrF,EAAapC,UAAUwV,WAAa,SAAUxO,EAAM2b,GAChD,IAAKA,EAAQlN,SAAU,CACnB,GAAuB,iBAAnB3V,KAAKmU,UAOL,MALA,IAAiB,MADP3O,eAAaqd,EAAQrgB,QAAS,gBAChCK,MACJ,OAOZ,GAAIigB,MACAjH,EAAavO,UAAQuV,EAAQrgB,QAAS,iBAC1CqZ,GAAaA,GAA0BvO,UAAQuV,EAAQrgB,QAAS,qBAChE,IAAIugB,GAASvd,eAAaqd,EAAQrgB,QAAS,eACpB,kBAAnBxC,KAAKmU,WAA+C,OAAf0H,IACrCkH,EAASvd,eAAaqd,EAAQrgB,QAAS,gBAE3C,IACIsJ,GADUwB,UAAQuV,EAAQrgB,QAAS,sBACjBwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GACxDhH,MAAKgjB,aAAanH,EAAYkH,EAAQjX,EAAS5E,EAAM4b,EAAUD,IAEnEvgB,EAAapC,UAAU8iB,aAAe,SAAUC,EAAKC,EAAIzB,EAAM0B,EAAIC,EAAOC,GACtE,GAAI5gB,GAAQzC,IACZ,IAAIijB,EAAK,CAEL,GAAI1O,OAAW,EAEXA,GADmB,iBAAnBvU,KAAKmU,UACO+O,EAAGrgB,MAAM,GAGV7C,KAAK4E,cAAgB5E,KAAK4H,kBAAkBsb,EAAGrgB,OAASqgB,EAAGrgB,MAE1E7C,KAAK6S,eAAiB7S,KAAK0S,UAAU6B,EACrC,IAEIwL,IACAjU,QAAS2V,EAAMtS,OAHJ7B,UAAQ2V,EAAK,qBACNjc,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAErBsc,cAAkC,iBAAnBtjB,KAAKmU,UAC/C+O,EAAGrgB,MAAM,GAAKqgB,EAAGrgB,MAAO6L,QAAQ,EAAOzF,KAAM,QAEhDjJ,MAAK4E,eAAkB5E,KAAKkS,cAM7BlS,KAAKujB,mBAAmBxD,EAAYqD,EAAOH,EAAKE,EAAIE,GALpDrjB,KAAKoK,QAAQ,eAAgB2V,EAAY,SAAUlR,GAC/CpM,EAAM8gB,mBAAmB1U,EAAoBuU,EAAOH,EAAKE,EAAIE,SAOpE,CACD,GAAIG,GAAelW,UAAQ+V,EAAK7gB,QAAS,mBACzCxC,MAAKyjB,eAAeR,EAAKO,EAAcN,EAAIzB,EAAM0B,EAAIC,EAAOC,KAGpE/gB,EAAapC,UAAUujB,eAAiB,SAExCR,EAAKS,EAAKR,EAAIzB,EAAM0B,EAAIC,EAAOC,GAC3B,GAGItD,GAHAtd,EAAQzC,IAIR0jB,IAGA3D,GAAejU,QAAS2V,EAAMtS,OAFnB7B,UAAQoW,EAAK,qBACN1c,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACN2c,cAAeT,EAAGzS,MAAO/B,QAAQ,EAAOzF,KAAM,YACvFjJ,KAAK4E,cAMN5E,KAAK4jB,sBAAsB7D,EAAYkD,EAAKG,EAAOD,EAAIE,GALvDrjB,KAAKoK,QAAQ,eAAgB2V,EAAY,SAAUlR,GAC/CpM,EAAMmhB,sBAAsB/U,EAAoBoU,EAAKG,EAAOD,EAAIE,MAQxErjB,KAAK6jB,iBAAiBZ,EAAKE,EAAIC,EAAOC,IAG9C/gB,EAAapC,UAAUqjB,mBAAqB,SAAU5b,EAAMmb,EAAUjH,EAAY3U,EAAM2b,GAOpF,IAAK,GAND3S,GAAW5C,UAAQuO,EAAY,qBAC/B2H,EAAelW,UAAQuV,EAAQrgB,QAAS,oBAExCsJ,EADUwB,UAAQuV,EAAQrgB,QAAS,sBACjBwE,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACpD+b,EAASvd,eAAaqd,EAAQrgB,QAAS,gBACvCshB,EAAc5T,EAASlL,iBAAiB,4BACnCxE,EAAI,EAAGA,EAAIsjB,EAAYnjB,OAAQH,IACpCgF,eAAase,EAAYtjB,GAAI,WAAWiF,SAE5C,IAAKkC,EAAK+G,OAoBN1O,KAAKyjB,eAAe5H,EAAY2H,EAAcT,EAAQjX,EAAS5E,EAAM4b,EAAUD,OApBjE,CACd,GAAI/a,oBAAkB9H,KAAK6S,gBACvB,MAMJ,IAJAiQ,EAAS7Z,KAAOjJ,KAAK6S,eAAe5J,KAChCiH,EAASpL,cAAc,iBACvBoC,EAAKrE,MAAQ,IAEgB,WAA7B7C,KAAK6S,eAAe5J,MAAwC,YAAnBjJ,KAAKmU,UAE9C,IADA2O,EAAS7Z,KAAOjJ,KAAK6S,eAAejK,QAAQ,GAAGK,KACxCjJ,KAAK6S,eAAejK,SACvB5I,KAAK+jB,gBAAgBlI,EAAY3U,EAAM4b,EAAUD,OAIrD7iB,MAAK2iB,iBAAiB9G,GACtB7b,KAAKyjB,eAAe5H,EAAY2H,EAAcT,EAAQjX,EAAS5E,EAAM4b,EAAUD,KAO3FvgB,EAAapC,UAAUyiB,iBAAmB,SAAU9G,GAChD,KAAOA,GAAcA,EAAWqC,mBAAmBjQ,UAAUC,SAAS,sBAClElO,KAAKqgB,gBAAgBxE,GACrBA,EAAWqC,mBAAmB8F,UAGtC1hB,EAAapC,UAAU6jB,gBAAkB,SAAUlI,EAAY3U,EAAM4b,EAAUD,GAC3E,GAAIoB,IAAgB,EAChB3K,EAAYhM,UAAQuO,EAAY,iBAChCnC,EAAW1Z,KAAKoG,cAAc,OAASC,OAASC,MAAO,oBAAqBU,GAAI,YAAchH,KAAKkkB,mBACvG5K,GAAU3I,aAAa+I,EAAUJ,EAAUxU,cAAc,oBACzD,IAAIqf,GAAS7W,UAAQoM,EAAU,qBAAqB1S,GAChD4b,EAAe5iB,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQjC,GAAImd,EAAS,gBAAkBnkB,KAAKkkB,mBAC5GxK,GAASjT,YAAYmc,EACrB,IACItO,GADAxH,EAAU9M,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EAAK,QAAU,OAE3EgP,IACIG,WAAYzU,KAAK6S,eAAejK,QAChCjG,OAAQ3C,KAAK2C,OACb+R,YAAa1U,KAAKwJ,KAAKC,YAAY,eACnCkL,YAAe3U,KAAK6S,eAAejK,QAAQjI,OAAS,EAAKmM,EAAS,OAClEiI,OAAQ/U,KAAKgV,YAAYF,KAAK9U,MAC9ByQ,MAAO,EACPwE,KAAMjV,KAAKkV,UAAUJ,KAAK9U,MAAM,IAEhCA,KAAKoV,aACLd,EAAWlU,KAAakU,EAAUtU,KAAKoV,YAE3C,IAAIC,GAAe,GAAIC,gBAAahB,EAEpC,IADAe,EAAaE,SAAS,IAAM4O,EAAS,gBAAkBnkB,KAAKkkB,kBACxDlkB,KAAK4E,eAAkB5E,KAAKqY,gBAAkBrY,KAAKqY,eAAezH,cAClE5Q,KAAK4H,kBAAkBV,EAAKW,SAAW7H,KAAK4H,kBAAkB5H,KAAKqY,eAAexQ,OAElF,IAAK,GADDuc,GAAWpkB,KAAK6S,eAAejK,QAC1BpI,EAAI,EAAGA,EAAI4jB,EAASzjB,OAAQH,IACjC,GAAI0G,EAAKW,QAAUuc,EAAS5jB,GAAGqH,OAASX,EAAKW,MAAMvC,QAAQ8e,EAAS5jB,GAAGqH,MAAQ7H,KAAK+H,YAAc,EAAG,CACjGsN,EAAaxS,MAAQuhB,EAAS5jB,GAAGqH,MACjC7H,KAAK6S,eAAiBuR,EAAS5jB,GAC/ByjB,GAAgB,CAChB,OAIZjkB,KAAKkkB,mBACLlkB,KAAK4iB,aAAeA,EAEpBC,EAAQlN,SAAWkN,EAAQlN,UACtBsO,GAAiBjkB,KAAK6S,eAAejK,WACjCqb,GAAiBjkB,KAAK4E,gBACvByQ,EAAaxS,MAAQ,MAEzB7C,KAAK6S,eAAiB7S,KAAK6S,eAAejK,QAAQ,IAEtD5I,KAAKqY,eAAiBrY,KAAK6S,eACtB7S,KAAK6S,eAAejK,SACrB5I,KAAK6jB,iBAAiBnK,EAAUxS,EAAM4b,EAAUD,IAGxDvgB,EAAapC,UAAU0jB,sBAAwB,SAAU7D,EAAYlE,EAAYiH,EAAU5b,EAAM2b,GAC7F,IAAK9C,EAAWrR,OAAQ,CACpB,GAAI8U,GAAelW,UAAQuV,EAAQrgB,QAAS,oBACxCsX,EAAU0J,EAAatF,mBACvBzE,EAAcjU,eAAaqd,EAAQrgB,QAAS,gBAC5C0d,EAAWhZ,EAAK0L,SAAW1L,EAAK0L,SAASiF,WAAWlJ,cAAgB,EACxEmU,GAASlQ,SAAW6G,EAAY5W,MAAMgV,UACtC,IAAIwM,GAAWvB,EAASlQ,SAASjE,aAYjC,IAXImU,EAASlQ,SAASjE,cAAcrJ,QAAQ,YAAc,GAAMwd,EAASlQ,SAASjE,cAAcrJ,QAAQ,OAAS,GAC1Gwd,EAASlQ,SAASjE,cAAcrJ,QAAQ,YAAc,GACzDuW,EAAa2H,EAAavU,uBAC1B6T,EAAS7Z,KAAO/B,EAAK+B,MACjB6Z,EAASlQ,SAASjE,cAAcrJ,QAAQ,MAAQ,GAAK4a,EAAS5a,QAAQ,MAAQ,KAC9E4B,EAAKrE,WAGkB,gBAAfqE,GAAKrE,OAAqC,OAAfqE,EAAKrE,QAC5CqE,EAAKrE,MAAQqE,EAAKrE,MAAMlC,OAAS,EAAIuG,EAAKrE,MAAM,GAAmB,WAAdqE,EAAK+B,KAAoB,EAAI,IAElF4Z,EAAQV,iBAAkB,CAC1B,GAAImC,GAAYzB,EAAQV,iBAAiBtf,MAAMgV,WAAWlJ,eACrD2V,EAAUhf,QAAQ,YAAc,IAAMgf,EAAUhf,QAAQ,OAAS,GAAMgf,EAAUhf,QAAQ,SAAW,GACjGgf,EAAUhf,QAAQ,UAAY,IAAOgf,EAAUhf,QAAQ,YAAc,KACzEuW,EAAa2H,EAAavU,uBAC1B6T,EAAS7Z,KAAO/B,EAAK+B,MAO7B,GAJKiX,EAAS5a,QAAQ,OAAS,GAAK4a,EAAS5a,QAAQ,MAAQ,GAAO+e,EAAS/e,QAAQ,OAAS,GACvF+e,EAAS/e,QAAQ,MAAQ,IAC5BuW,EAAa,MAEbiH,EAASlQ,SAAStN,QAAQ,SAAW,GAAMwd,EAASlQ,SAAStN,QAAQ,UAAY,EAAI,CACrF,GAAIif,GAAaf,EAAa9d,cAAcZ,cAAc,iBACtDgf,EAAcS,EAAWzf,cAAc,2BACvCgf,GACAte,eAAase,EAAa,WAAWre,UAEhCya,EAAS5a,QAAQ,OAAS,IAC/Bwe,EAAcS,EAAWzf,cAAc,gBAEnCU,eAAase,EAAa,WAAWre,UAG7CqB,eAAayd,GAAa,UAC1B9V,YAAU8V,GAAa,UAEvBzK,GAAW9Z,KAAK0S,UAAUxL,EAAKW,OAAOiQ,WACtC+D,EAAa2H,EAAavU,wBAEE,IAA5B6K,EAAQjK,SAASlP,SACjBkb,EAAa2H,EAAavU,wBAE9BjP,KAAK6jB,iBAAiBhI,EAAY3U,EAAM4b,EAAUD,KAG1DvgB,EAAapC,UAAU2jB,iBAAmB,SAAUhI,EAAY3U,EAAM4b,EAAUD,GAC5E,GAEIE,GACAyB,EACAC,EAJAjB,EAAelW,UAAQuV,EAAQrgB,QAAS,mBAK5C,IAAIqZ,EAQA,GAPA2H,EAAe3H,EAAWqC,mBACtBrC,EAAW5N,UAAUC,SAAS,uBAC9B4U,EAAS7Z,KAAOjJ,KAAK6S,eAAe5J,KAEpCua,EADQA,EAAavV,UAAUC,SAAS,qBACjBsV,EAAatF,mBAAqBsF,GAE7D/U,YAAU+U,GAAe,cACrBA,EAAakB,kBAAmB,CAChC3B,EAASvd,eAAage,EAAa1e,cAAc,mBAAoB,gBACrEge,EAASlQ,SAAWmQ,EAAOlgB,KAC3B,IAAI8hB,OAAW,EAEXA,GADmB,iBAAnB3kB,KAAKmU,UACM3O,eAAaqW,EAAW/W,cAAc,mBAAoB,gBAG1DU,eAAaqW,EAAW/W,cAAc,mBAAoB,gBAEzEge,EAAS7Z,KAA0B,iBAAnBjJ,KAAKmU,UAA+BnU,KAAK0S,UAAUiS,EAAS9hB,MAAM,IAAIoG,KAClFjJ,KAAK0S,UAAUiS,EAAS9hB,OAAOoG,IACnC,IAAI0M,GAAWkN,EAAQlN,QACF,MAAjBoN,EAAOlgB,OACP7C,KAAK4kB,aAAapB,EAAc7N,EAAUkN,EAAQV,kBAAkB,EAAMjb,EAAM4b,EAAUD,EAAQrgB,aAGrG,CACD,GAAI2hB,GAAS7W,UAAQkW,EAAc,qBAAqBxc,EACxDyd,GAAUzkB,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQjC,GAAImd,EAAS,kBAC5EX,EAAa/c,YAAYge,GACrBzkB,KAAK6S,eAAenJ,UACpB8a,EAAexkB,KAAK6S,eAAenJ,UAE9BmZ,EAAQlN,WACb6O,EAAexkB,KAAK2J,gBAAgB3J,KAAK6S,eAAe5J,KAAO,YAEnE,IACI4b,GADA/X,EAAU9M,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EAAK,QAAU,OAEvE4B,GAAK0L,UACL4R,EAAa1b,QAAQ,SAAUmR,GACvB,SAAWA,IAA4B,gBAAdA,GAAIpX,OAAsBoX,EAAIpX,MAAM8L,gBAAkBzH,EAAK0L,SAASjE,gBAC7FkW,EAAa5K,EAAIpX,QAI7B,IAAIA,GAAQgiB,GAA0BL,EAAa,GAAG3hB,MAClDiiB,EAAS,CACR9kB,MAAK+kB,qBACNliB,EAAQ,GACRiiB,GAAU,IAEV9kB,KAAK4E,eAAkB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKkS,iBAC3ErP,EAAQqE,GAAQA,EAAK0L,SAAW1L,EAAK0L,SAAoB/P,EAE7D,IAAImiB,OAAc,EAClBA,IACIvQ,WAAY+P,EACZ7hB,QAAUC,KAAM,MAAOC,MAAO,SAC9B6R,YAAa1U,KAAKwJ,KAAKC,YAAY,kBACnCkL,YAAe6P,EAAa7jB,OAAS,EAAKmM,EAAS,OACnDiI,OAAQ/U,KAAKgV,YAAYF,KAAK9U,MAC9ByQ,MAAOqU,EACPjiB,MAAOA,EACPoS,KAAMjV,KAAKkV,UAAUJ,KAAK9U,MAAM,IAEhCA,KAAKilB,gBACLD,EAAc5kB,KAAa4kB,EAAahlB,KAAKilB,gBAE9B,GAAI3P,gBAAa0P,GACvBzP,SAAS,IAAM4O,EAAS,gBACrCrB,EAASlQ,SAAY1L,GAA0B,KAAlBA,EAAK0L,WAAoB9K,oBAAkBZ,EAAK0L,UAAa1L,EAAK0L,SAAW4R,EAAa,GAAG3hB,MACtH7C,KAAK4E,gBACLke,EAAS7Z,KAAOjJ,KAAK6S,eAAe5J,KACpC6Z,EAASlQ,SAAW1L,EAAK0L,UAExB9K,oBAAkBjF,IAAoB,KAAVA,EAGxB7C,KAAKwU,iBAAmBxU,KAAK+kB,oBAClC/kB,KAAK4kB,aAAapB,EAAcxjB,KAAK6S,eAAgBgQ,EAAQV,kBAAkB,EAAOjb,EAAM4b,EAAUD,EAAQrgB,SAH9GxC,KAAK4kB,aAAapB,EAAcxjB,KAAK6S,eAAgBgQ,EAAQV,kBAAkB,EAAOjb,EAAM4b,EAAUD,EAAQrgB,SAOrHxC,KAAK4E,eACN5E,KAAK8f,YAAY+C,EAAQrgB,QAASqgB,EAAQf,OAGlDxf,EAAapC,UAAUgV,UAAY,SAAUgQ,EAASvd,GAC9C3H,KAAK4P,WACLnB,YAAU9G,EAAKwd,MAAM3iB,SAAU,SAE/B0iB,IACAllB,KAAKwD,cAAe,IAG5BlB,EAAapC,UAAUmgB,gBAAkB,SAAUrf,EAAQgR,GAKvD,IAAK,GAJDxP,GAAUwP,EAAiBhR,EAASA,EAAOkd,mBAC3CkH,EAAe5iB,EAAQwC,iBAAiB,mBACxCqgB,EAAa7iB,EAAQwC,iBAAiB,gCACtC4D,EAAU5I,KAAK4I,QACVpI,EAAI,EAAGsJ,EAAMsb,EAAazkB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACrD,GAAI4kB,EAAa5kB,GAAGyN,UAAUC,SAAS,aACnC1I,eAAa4f,EAAa5kB,GAAI,WAAWiF,UACzC6S,SAAOjI,SAAO,SAAW+U,EAAa5kB,GAAGwG,GAAIxE,QAE5C,IAAI4iB,EAAa5kB,GAAGyN,UAAUC,SAAS,kBACpClO,KAAKoZ,iBAAmBgM,EAAa5kB,GAAGkF,cAAcL,UAAUC,QAAQ,cAAgB,GACxFE,eAAa4f,EAAa5kB,GAAGkF,cAAe,WAAWD,UAE3DD,eAAa4f,EAAa5kB,GAAI,gBAAgBiF,cAE7C,IAAI2f,EAAa5kB,GAAGyN,UAAUC,SAAS,WACxC1I,eAAa4f,EAAa5kB,GAAI,SAASiF,cAEtC,IAAI2f,EAAa5kB,GAAGyN,UAAUC,SAAS,oBACxC1I,eAAa4f,EAAa5kB,GAAI,kBAAkBiF,UAChD6S,SAAOjI,SAAO,SAAW+U,EAAa5kB,GAAGwG,GAAIxE,QAE5C,IAAI4iB,EAAa5kB,GAAGyN,UAAUC,SAAS,gBACxC1I,eAAa4f,EAAa5kB,GAAI,cAAciF,cAE3C,IAAI2f,EAAa5kB,GAAGyN,UAAUC,SAAS,iBACxC1I,eAAa4f,EAAa5kB,GAAI,eAAeiF,cAE5C,IAAI2f,EAAa5kB,GAAG6E,UAAUC,QAAQ,eAAiB,EAExD,IAAK,GADDoW,GAAU0J,EAAa5kB,GAAG6E,UACrBsF,EAAI,EAAGoP,EAAOnR,EAAQjI,OAAQgK,EAAIoP,EAAMpP,IAC7C,GAAI/B,EAAQ+B,GAAGmN,UAAY4D,EAAQpW,QAAQsD,EAAQ+B,GAAG9C,QAAU,EAAG,CAC/D7H,KAAKslB,gBAAgB1c,EAAQ+B,GAAIya,EAAa5kB,GAAGwG,GACjD,OAIRf,SAASqG,eAAe8Y,EAAa5kB,GAAGwG,KACxCsR,SAAO8M,EAAa5kB,IAG5B,IAAK,GAAIA,GAAI,EAAGsJ,EAAMub,EAAW1kB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACnD,GAAI6kB,EAAW7kB,GAAG6E,UAAUC,QAAQ,eAAiB,EAEjD,IAAK,GADDoW,GAAU2J,EAAW7kB,GAAG6E,UACnBsF,EAAI,EAAGoP,EAAOnR,EAAQjI,OAAQgK,EAAIoP,EAAMpP,IAC7C,GAAI/B,EAAQ+B,GAAGmN,UAAY4D,EAAQpW,QAAQsD,EAAQ+B,GAAG9C,QAAU,EAAG,CAC/D7H,KAAKslB,gBAAgB1c,EAAQ+B,GAAI0a,EAAW7kB,GAAGwG,GAC/C,OAIZsR,SAAO+M,EAAW7kB,IAGtB,IAAK,GADD+kB,GAAkB/iB,EAAQwC,iBAAiB,+BACtCxE,EAAI,EAAGsJ,EAAMyb,EAAgB5kB,OAAQH,EAAIsJ,EAAKtJ,IACnD8X,SAAOiN,EAAgB/kB,KAG/B8B,EAAapC,UAAUolB,gBAAkB,SAAUvc,EAAQyc,GACvD,GAAI1N,EACJ,IAA+B,gBAApB/O,GAAO+O,cAAqD9D,KAA5BjL,EAAO+O,SAASrS,QAA3D,CAMA,GAAIggB,IALA3N,EAAW/O,EAAO+O,UAKFrS,OACpB,IAAIqS,EAASrS,QAAS,CAClB,GAAIigB,OAAmB,EACnBzf,UAASqG,eAAekZ,KACxBE,EAAmBpY,UAAQrH,SAASqG,eAAekZ,GAAS,iBAAiBxgB,iBAAiB,gBAE9E,gBAATygB,IACPA,EAAO1E,WAAS0E,EAAMrE,UACfvZ,MAAOkB,EAAOlB,MAAO8d,UAAWH,EAAQI,SAAUF,IAGzD5N,EAASrS,SAAUoC,MAAOkB,EAAOlB,MAAO8d,UAAWH,EAAQI,SAAUF,OAUjFpjB,EAAapC,UAAU2lB,UAAY,SAAUhe,GACzC,GAEIhF,GAFAijB,KACAhb,KAEAib,IACA/lB,MAAK+H,UAAUpH,OAAS,IACxBolB,EAAYle,EAAMG,MAAMhI,KAAK+H,WAEjC,IAAI0M,GAAazU,KAAKkI,QACtB,IAAIlI,KAAKkI,SAAS,GACd,IAAK,GAAI1H,GAAI,EAAG+Z,EAAO9F,EAAW9T,OAAQH,EAAI+Z,EAAM/Z,IAAK,CACrD,GAAIoK,KACJ,IAAImb,EAAUplB,OAAS,EAGnB,IAAK,GAFDqlB,GAAUvR,EAAWjU,GACrBylB,MAAW,GACNtb,EAAI,EAAGoP,EAAOgM,EAAUplB,OAAQgK,EAAIoP,EAAMpP,IAC/Csb,EAAWF,EAAUpb,GACjBob,EAAUplB,SAAYgK,EAAI,GAC1B9H,EAAQmjB,EAAQ,GAAKC,GACjBlkB,OAAOikB,EAAQ,GAAKC,MAAeD,EAAQ,GAAKC,IAAaD,EAAQ,GAAKC,GAAY,GAAM,IAC5FpjB,EAAQmjB,EAAQ,GAAKC,GAAUpO,aAInCmO,EAAUA,EAAQ,GAAKC,OAK/BpjB,GAAQ4R,EAAWjU,GAAG,GAAKqH,GACvB9F,OAAO0S,EAAWjU,GAAG,GAAKqH,MAAY4M,EAAWjU,GAAG,GAAKqH,IAAU4M,EAAWjU,GAAG,GAAKqH,GAAS,GAAM,IACrGhF,EAAQ4R,EAAWjU,GAAG,GAAKqH,GAAOgQ,WAGpChV,KAASijB,KACXA,EAAS,GAAKjjB,GAAS,EACnBkjB,EAAUplB,OAAS,EACnBX,KAAKkmB,mBAAmBtb,EAAMmb,EAAWljB,GAGzC+H,EAAK,GAAK/C,GAAShF,EAEvBiI,EAAOrD,KAAKmD,IAIxB,MAAOE,IAEXxI,EAAapC,UAAUgmB,mBAAqB,SAAUjM,EAAK8L,EAAWljB,GAGlE,IAAK,GAFD5B,GACAklB,EAAYJ,EAAUplB,OAAS,EAC1BylB,EAAI,EAAGA,EAAID,IAAaC,GAC7BnlB,EAAM8kB,EAAUK,KACHnM,KACTA,EAAI,GAAKhZ,OAEbgZ,EAAMA,EAAI,GAAKhZ,EAEnBgZ,GAAI8L,EAAUI,IAActjB,GAEhCP,EAAapC,UAAUmmB,kBAAoB,SAAU5R,EAAY5M,GAuC7D,IAAK,GAtCDie,MACAhb,KACAwb,KACAzjB,EAAQ,GACR0jB,EAAW1e,EAAMvC,QAAQtF,KAAK+H,WAiC9Bye,EAASxmB,KACJQ,EAAI,EAAG+Z,EAAO9F,EAAW9T,OAAQH,EAAI+Z,EAAM/Z,KAjCtC,SAAUA,EAAG+Z,GACvB1X,EAAQ,GACS,IAAb0jB,EACA1jB,EAAQ4R,EAAWjU,GAAG,GAAKqH,IAG3Bye,EAAOze,EAAMG,MAAMwe,EAAOze,YAErBe,QAAQ,SAAUtG,GAEfK,EADAA,EACQA,EAAM,GAAKL,GAGXiS,EAAWjU,GAAG,GAAKgC,KAInCT,OAAO0S,EAAWjU,GAAG,GAAKqH,MAAY4M,EAAWjU,GAAG,GAAKqH,IAAU4M,EAAWjU,GAAG,GAAKqH,GAAS,GAAM,IACrGhF,EAAQ4R,EAAWjU,GAAG,GAAKqH,GAAOgQ,WAEtC,IAAIjN,KACE/H,KAASijB,KACXA,EAAS,GAAKjjB,GAAS,EACN,IAAb0jB,EACA3b,EAAK,GAAK/C,GAAShF,EAGnB+H,EAAK0b,EAAKA,EAAK3lB,OAAS,IAAMkC,EAElCiI,EAAOrD,KAAKmD,KAKRpK,EAEZ,OAAOsK,IAEXxI,EAAapC,UAAUumB,kBAAoB,SAAUvf,EAAM8I,EAAUxP,EAAGkmB,EAAenb,GACnF,GACIob,GADAC,GAAY,EAEZC,GAAW,CACf7mB,MAAK0D,iBAAkB,EACnB1D,KAAKkI,SAAS,IACVzI,OAAO6I,KAAKtI,KAAKkI,SAAS,IAAI5C,QAAQ4B,EAAKW,QAAU,IACrD+e,GAAY,EACZD,EAAK3mB,KAAKqmB,kBAAkBrmB,KAAKkI,SAAUhB,EAAKW,QAGxD+e,GAAY1f,EAAK0B,SAAkBge,GAC9B5mB,KAAKkI,SAASvH,QAAU4K,EAAO5K,SAChCkmB,GAAW,EAEf,IAAIC,EACJA,IACIrS,WAAYoS,EAAWtb,EAAUqb,EAAYD,EAAK3mB,KAAK+mB,YACvDC,MAAO,GAAIC,UAAO/f,EAAKW,QACvBlF,QAAUC,KAAM5C,KAAKknB,aAAarf,MAAOhF,MAAO7C,KAAKknB,aAAarf,OAClE6M,YAAa1U,KAAKwJ,KAAKC,YAAY,eACnC5G,MAAO6jB,EACPS,KAAM,WACNC,MAAO,OACPrS,OAAQ/U,KAAKsgB,YAAYxL,KAAK9U,KAAMQ,GACpCoU,MAAO5U,KAAKqnB,WAAWvS,KAAK9U,KAAMQ,GAClC8mB,YAAatnB,KAAKunB,gBAAgBzS,KAAK9U,KAAMgQ,EAAW,YAAcxP,GACtEyU,KAAMjV,KAAKkV,UAAUJ,KAAK9U,MAAM,IAEhCA,KAAKwnB,YAAcxnB,KAAKwnB,WAAWC,mBACnCX,EAAmB1mB,KAAa0mB,EAAkB9mB,KAAKwnB,WAAWC,kBAEtE,IAAIC,GAAiB,GAAIpjB,eAAYwiB,EACrCY,GAAenS,SAAS,IAAMvF,EAAW,YAAcxP,GACvDR,KAAK8f,YAAY4H,EAAellB,QAASkkB,EAAe,IAE5DpkB,EAAapC,UAAUqnB,gBAAkB,SAAUvX,EAAUrI,GACzD,GAAI3H,KAAKyU,qBAAsBkT,eAAa,CACxC,GAAInlB,GAAUyD,SAASqG,eAAe0D,GAClCyJ,EAAcjU,eAAa8H,UAAQ9K,EAAS,qBAAqBsC,cAAc,mBAAuC,iBAAnB9E,KAAKmU,UAA+B,eAAiB,eACrI,kBAAnBnU,KAAKmU,UACLnU,KAAK6S,eAAiB7S,KAAK0S,UAAU+G,EAAY5W,MAAM,IAGvD7C,KAAK6S,eAAiB4G,EAAYhE,eAAegE,EAAY5W,MAEjE,IAAIA,GAAQ7C,KAAK6S,eAAehL,MAC5B+e,GAAY,CACZ5mB,MAAKkI,SAAS,KACVzI,OAAO6I,KAAKtI,KAAKkI,SAAS,IAAI5C,QAAQzC,IAAU,IAChD+jB,GAAY,GAGD,IADF/jB,EAAMyC,QAAQtF,KAAK+H,YACZ/H,KAAK0D,kBACrBkjB,GAAY,IAGfA,IACDjf,EAAK+G,QAAS,EACd1O,KAAK4nB,oBAAoBplB,EAASK,MAI9CP,EAAapC,UAAU0nB,oBAAsB,SAAUplB,EAASK,GAC5D7C,KAAK6nB,mBAAmBrlB,EAASK,IAErCP,EAAapC,UAAU2nB,mBAAqB,SAAUrlB,EAASK,GAC3D,GACIilB,GADArlB,EAAQzC,KAER+nB,EAAW,GAAIC,YACfpd,EAAO5K,KAAK+mB,YAAYkB,cAAa,GAAIhB,UAAQ5W,OAAOxN,IACxDqlB,EAAiB1iB,eAAahD,EAAS,cAC3C0lB,GAAeC,cACfnoB,KAAKooB,cAAc9a,UAAQ9K,EAAS,2BAA2BkD,eAC/D2iB,cAAY/a,UAAQ9K,EAAS,2BAA2BkD,eACxDkF,EAAK0d,KAAK,SAAU3iB,GAEZmiB,EADAniB,EAAE4iB,QAAU5iB,EAAE4iB,OAAOzd,OACTnF,EAAE4iB,OAAOzd,OAGTnF,EAAEmF,OAElBrI,EAAMyF,SAAWwF,SAAOjL,EAAMyF,SAAU4f,MAAe,GACvDI,EAAezT,WAAahS,EAAM4jB,kBAAkB5jB,EAAMyF,SAAUrF,GACpEJ,EAAMiB,iBAAkB,EACxBykB,cAAY7a,UAAQ9K,EAAS,2BAA2BkD,iBACzD8iB,MAAM,SAAU7iB,GACfoiB,EAASU,OAAO9iB,MAGxBrD,EAAapC,UAAUkoB,cAAgB,SAAU5lB,GAC7C,GAAIkmB,GAAc1oB,KAAKoG,cAAc,QAAUC,OAASC,MAAO,iBAC/D9D,GAAQiE,YAAYiiB,GACpBN,iBAAgBpnB,OAAQ0nB,EAAatB,MAAOuB,UAAQC,SAAW,OAAS,UAE5EtmB,EAAapC,UAAUmnB,WAAa,SAAU7mB,EAAGmH,GAC7C,GAAInF,GAAUyD,SAASqG,eAAe3E,EAAKwd,MAAM3iB,QAAQwE,GAAGmH,QAAQ,SAAU,IAC9E,IAAI3L,EAAS,CACT,GAAIqmB,GAAKrjB,eAAahD,EAAS,cAC/B,IAAIqmB,EAAI,CACJ,GAAIhmB,GAAQgmB,EAAGhmB,KACf7C,MAAK8f,YAAYtd,EAASK,EAAOrC,MAI7C8B,EAAapC,UAAU4oB,gBAAkB,SAAU9nB,EAAQ2U,EAAUzO,EAAM4b,GACvE,GAAIiG,GAAYzb,UAAQtM,EAAQ,qBAC5BgoB,EAAeD,EAAU/jB,iBAAiB,eAC1C6W,EAAakN,EAAUjkB,cAAc,kCACrCie,EAA4B,iBAAnB/iB,KAAKmU,UAA+B3O,eAAaqW,EAAY,gBACpErW,eAAaujB,EAAUjkB,cAAc,kCAAmC,gBAC1EiE,EAA4B,iBAAnB/I,KAAKmU,UAA+BnU,KAAK0S,UAAUqQ,EAAOlgB,MAAM,IAAM7C,KAAK0S,UAAUqQ,EAAOlgB,MACzG,IAAiC,gBAAtB8S,GAASmC,cAAqD9D,KAA5B2B,EAASmC,SAASmR,MAAqB,CAChF,GAAIthB,IACAT,KAAMA,EAAMiI,OAAQ4Z,EAAU/hB,GAAI4L,SAAUkQ,EAASlQ,SAAU/K,MAAOkB,EAAOlB,MAC7EgJ,YAAa,wBAEjB7Q,MAAKoK,QAAQ,cAAezC,OAE3B,CACD,GAAImQ,GAAWnC,EAASmC,QACM,iBAAnBA,GAASmR,MAChBlI,WAASjJ,EAASmR,MAAO7H,SACrBwE,SAAUoD,EAAaroB,OAAS,EAAIqoB,EAAeA,EAAa,GAAIzd,OAAQrE,EAAKrE,MACjF+P,SAAUkQ,EAASlQ,SAAU/K,MAAOkB,EAAOlB,MAAO4M,WAAY1L,EAAOwC,SAGvC,kBAAtBoK,GAASmC,UACrBnC,EAASmC,SAASmR,OACdrD,SAAUoD,EAAaroB,OAAS,EAAIqoB,EAAeA,EAAa,GAChEzd,OAAQrE,EAAKrE,MAAO+P,SAAUkQ,EAASlQ,SAAU/K,MAAOkB,EAAOlB,MAAO4M,WAAY1L,EAAOwC,WAKzGjJ,EAAapC,UAAU8hB,YAAc,SAAUhS,GAC3C,GAAI2U,GAAWnf,eAAaS,SAASqG,eAAe0D,EAAW,cAAe,gBAC1EkZ,EAAiBlpB,KAAKwC,QAAQsC,cAAc,IAAMkL,EACtD,IAAuB,iBAAnBhQ,KAAKmU,UACLwQ,EAAWnf,eAAaS,SAASqG,eAAe0D,EAAW,cAAe,oBAEzE,IAAIkZ,EAAgB,CACrB,GAAIC,GAAkBD,EAAelkB,iBAAiB,qBACtD,IAAImkB,EAAgBxoB,OAAS,EAAG,CAC5B,GAAIyoB,GAAkBD,EAAgBA,EAAgBxoB,OAAS,GAAGmE,cAAc,kBAChF6f,GAAWnf,eAAa4jB,EAAiB,iBAGjD,MAA0B,iBAAnBppB,KAAKmU,UAA+BnU,KAAK0S,UAAUiS,EAAS9hB,MAAM,IAAM7C,KAAK0S,UAAUiS,EAAS9hB,QAE3GP,EAAapC,UAAUmpB,gBAAkB,SAAUrZ,EAAUsZ,EAAaC,GACtE,GAAI5T,GAAW3V,KAAKgiB,YAAYhS,EAChC,IAAIlI,oBAAkB6N,EAAS9S,OAC3B,MAAO0mB,GAAWD,GAAe,EAAG,GAAK,EAAIA,KAAmB,EAEpE,IAAIA,GACA,KAAM3T,EAAS9S,gBAAiBjD,QAC5B,OAAQ+V,EAAS9S,WAIrB,IAAI8S,EAAS9S,gBAAiBjD,OAC1B,MAAO+V,GAAS9S,MAAM,EAG9B,OAAO8S,GAAS9S,OAEpBP,EAAapC,UAAUspB,kBAAoB,SAAUxZ,EAAU9I,EAAM0L,EAAUwK,EAAKqM,GAChF,GAAIC,GAEAhD,EADAiD,EAAa3pB,KAAKgiB,YAAYhS,GAE9B4Z,EAA6C,gBAAxBD,GAAW7R,QAOpC,IALI4O,EADA1mB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAK6pB,UAAYD,GAA6B,KAAf1iB,EAAKrE,MACzFqE,EAAKrE,MAGL7C,KAAKqpB,gBAAgBrZ,GAAU,GAAO,GAExC,OAAb4C,GAAkC,UAAbA,IAA0B5S,KAAKkI,SAASvH,SAAUgpB,EAAWpe,OAYlF,CACgB,OAAbqH,GAAkC,UAAbA,IAGrB8T,GAFAgD,EAAe1pB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKoD,EAAKrE,MACrF7C,KAAKqpB,gBAAgBrZ,GAAU,GAAM,IACbvE,KAAK,MAEpB,YAAbmH,GAAuC,eAAbA,GACtB8T,EAAc/lB,OAAS,IACvB+lB,EAAgBA,EAActJ,GAGtC,IAAI0M,OAAS,EACbA,IACIpV,YAAa1U,KAAKwJ,KAAKC,YAAY,eACnCsgB,MAAO/pB,KAAKsgB,YAAYxL,KAAK9U,KAAMod,IAEnCpd,KAAKwnB,YAAcxnB,KAAKwnB,WAAWwC,eACnCF,EAAS1pB,KAAa0pB,EAAQ9pB,KAAKwnB,WAAWwC,cAElD,IAAIC,GAAW,GAAIC,WAAQJ,EAC3BG,GAAS1U,SAAS,IAAMvF,EAAW,YAAcoN,GACjD6M,EAASpnB,MAAQ6jB,EACjBuD,EAASvH,eAjCTgH,GAAe1pB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAK6pB,SAAY3iB,EAAKrE,MACtG7C,KAAKqpB,gBAAgBrZ,GAAU,GAAM,GACzChQ,KAAKymB,kBAAkBkD,EAAY3Z,EAAUoN,EAAKsM,EAAaC,EAAWpe,QACjD,aAArBvL,KAAKyS,aAA8BzS,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,EACjFmkB,EAAY9c,MAAMya,MAAQ,QAG1BqC,EAAY9c,MAAMya,MAAQ,KAC1BqC,EAAY9c,MAAMwd,SAAW,UA4BzC7nB,EAAapC,UAAUkqB,kBAAoB,SAAUpa,EAAU9I,EAAM0L,EAAUwK,EAAKqM,EAAa9T,EAAUhV,GACvG,GAAIgpB,GAAa3pB,KAAKgiB,YAAYhS,GAC9B4Z,EAA6C,gBAAxBD,GAAW7R,SAChC4R,EAAe1pB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAK6pB,UAAYD,GAC/E,gBAAf1iB,GAAKrE,MAAsBqE,EAAKrE,MAAQ7C,KAAKqpB,gBAAgBrZ,GAAU,GAAO,EACzF,IAAkB,OAAb4C,GAAkC,UAAbA,IAA0B5S,KAAKkI,SAASvH,SAAUgpB,EAAWpe,OAYlF,GAAiB,OAAbqH,GAAkC,UAAbA,EAAsB,CAGhD,GAAIyX,IAFJX,EAAe1pB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKoD,EAAKrE,MACrF7C,KAAKqpB,gBAAgBrZ,GAAU,GAAM,IAChBvE,KAAK,KAC1B6e,MAAS,EACbA,IACI5V,YAAa1U,KAAKwJ,KAAKC,YAAY,eACnCsgB,MAAO/pB,KAAKsgB,YAAYxL,KAAK9U,KAAMod,IAEnCpd,KAAKwnB,YAAcxnB,KAAKwnB,WAAWwC,eACnCM,EAASlqB,KAAakqB,EAAQtqB,KAAKwnB,WAAWwC,cAElD,IAAID,GAAQ,GAAIG,WAAQI,EACxBP,GAAMxU,SAAS,IAAMvF,EAAW,YAAcoN,GAC9C2M,EAAMlnB,MAAQwnB,EACdN,EAAMrH,eAEL,CAED,GAAI7gB,IADJ8T,EAAWgU,GACSrgB,YAAcqM,EAASrM,WAAWzH,IAAO8T,EAASrM,WAAWzH,IAAM,EACnFC,EAAO6T,EAASrM,YAAcqM,EAASrM,WAAWxH,IAAO6T,EAASrM,WAAWxH,IAAMC,OAAOC,UAC1Fyd,EAAS9J,EAAS8J,OAAS9J,EAAS8J,OAAS,GAC7C9e,GAAS,GAAKuG,IACdwiB,EAAcxiB,EAAKrE,MAAMua,GAAOlW,EAAKrE,MAAMua,GAAOpd,KAAKqpB,gBAAgBrZ,GAAU,GAAM,GAE3F,IAAIua,OAAa,EACjBA,IACI1nB,MAAQ6mB,YAAuB9pB,OAAS8pB,EAAYtM,GAAOsM,EAC3DjK,OAAQA,EAAQ5d,IAAKA,EAAKC,IAAKA,EAAKslB,MAAO,OAC3CoD,KAAM7U,EAAS6U,KAAO7U,EAAS6U,KAAO,EACtCzV,OAAQ/U,KAAKsgB,YAAYxL,KAAK9U,KAAMod,IAEpCpd,KAAKwnB,YAAcxnB,KAAKwnB,WAAWiD,sBACnCF,EAAanqB,KAAamqB,EAAYvqB,KAAKwnB,WAAWiD,qBAE1D,IAAIC,GAAU,GAAI7J,kBAAe0J,EACjCG,GAAQnV,SAAS,IAAMvF,EAAW,YAAcoN,GAChDsN,EAAQloB,QAAQ8N,aAAa,aAAcqF,EAAS5L,MAAQ,UAC5D2gB,EAAQloB,QAAQmoB,QAAU3qB,KAAKsgB,YAAYxL,KAAK9U,KAAMod,OAjDtDsM,GAAe1pB,KAAK4E,eAAiB5E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAK6pB,SAAY3iB,EAAKrE,MACtG7C,KAAKqpB,gBAAgBrZ,GAAU,GAAM,GACzChQ,KAAKymB,kBAAkBkD,EAAY3Z,EAAUoN,EAAKsM,EAAaC,EAAWpe,QACtEvL,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAKyS,YACxDgX,EAAY9c,MAAMya,MAAQ,QAG1BqC,EAAY9c,MAAMwd,SAAW,QAC7BV,EAAY9c,MAAMya,MAAQ,OA4CtC9kB,EAAapC,UAAU0qB,mBAAqB,SAAU/nB,EAAOoG,GACzD,GAAI4hB,MACAC,EAASjoB,EAAMmF,MAAM,IACzB,IAAa,WAATiB,EACA,MAAO6hB,EAGP,KAAK,GAAI1E,GAAI,EAAG2E,EAAOD,EAAOnqB,OAAQylB,EAAI2E,EAAM3E,IAC5CyE,EAAOpjB,KAAK1F,OAAO+oB,EAAO1E,IAE9B,OAAOyE,IAGfvoB,EAAapC,UAAU8qB,UAAY,SAAUnoB,EAAO4c,GAChD,GAAIwL,GACAvE,CACJ,IAAIjH,EAAQ,CACR,GAAIyL,GAAUlrB,KAAK2f,KAAKwL,eAAgBC,SAAU,OAAQniB,KAAM,YAChEgiB,GAAYjrB,KAAK0f,UAAUD,GAC3BiH,EAAgBwE,EAAQroB,GACpBiF,oBAAkB4e,KAClBA,EAAgB1mB,KAAK2f,KAAKqL,UAAUnoB,EAAOooB,QAI/CvE,GAAgB,GAAIvd,MAAKtG,EAE7B,OAAO6jB,IAEXpkB,EAAapC,UAAUmrB,eAAiB,SAAUrqB,EAAQ2U,EAAUzO,EAAM4b,EAAUwI,GAIhF,GAHA7c,YAAUzN,EAAO0E,cAAcZ,cAAc,kBAAmB,WAChEgC,eAAa9F,EAAO0E,cAAcZ,cAAc,kBAAmB,UACnE2J,YAAUzN,EAAO0E,cAAcZ,cAAc,kBAAmB,UAC5D6Q,EAASmC,WAAanC,EAASmC,SAAS3X,QAAUmrB,GAClDtrB,KAAK8oB,gBAAgB9nB,EAAQ2U,EAAUzO,EAAM4b,OAE5C,CACD,GAAIyI,EAEAA,GADkB,YAAlBzI,EAAS7Z,KACEjJ,KAAK6S,eAAetH,OAASvL,KAAK6S,eAAetH,OAAO5K,OAAS,EAGjEmiB,EAASlQ,UAAYkQ,EAASlQ,SAASiF,WAAWlJ,cAAcrJ,QAAQ,YAAc,EAAI,EAAI,CAE7G,IAAI0K,GAAW1C,UAAQtM,EAAQ,qBAAqBgG,GAChDyiB,MAAc,GACd7W,EAAWkQ,EAASlQ,SAASiF,UACjC,IAAI7W,EAAOqE,UAAUC,QAAQ,oBAAsB,GAAKtE,EAAOqE,UAAUC,QAAQ,kBAAoB,EAAG,CACpGmkB,EAAczoB,EAAO0E,cAAcZ,cAAc,iBAC7C9E,KAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAKyS,YACxDgX,EAAY9c,MAAMya,MAAQ,OAGT,OAAbxU,GAAkC,UAAbA,EACrBnE,YAAUgb,GAAc,kBAGxB3iB,eAAa2iB,GAAc,iBAGnC,KAAK,GAAIjpB,GAAI,EAAGA,EAAI+qB,EAAU/qB,IAC1B,OAAQsiB,EAAS7Z,MACb,IAAK,SAEGjJ,KAAKwpB,kBAAkBxZ,EAAU9I,EAAM0L,EAAUpS,EAAGipB,EAExD,MACJ,KAAK,SAEGzpB,KAAKoqB,kBAAkBpa,EAAU9I,EAAM0L,EAAUpS,EAAGipB,EAAa9T,EAAU4V,EAE/E,MACJ,KAAK,UACDvrB,KAAKwrB,kBAAkB7V,EAAUzO,EAAM8I,EAAUxP,EACjD,MACJ,KAAK,OAEG,GAAIkmB,GAAgB,GAAIvd,MACpBkhB,MAAS,GACTthB,MAAS,GACT0W,EAAS9J,EAAS8J,OAClBgM,MAAW,GACXC,MAAa,GACbC,EAAQ3rB,KAAKwJ,KAAKC,YAAY,eAC9BmgB,EAA2C,gBAAtBjU,GAASmC,QA6BlC,IA5BI5Q,EAAKrE,QAAUiF,oBAAkB2X,KACjC4K,EAAUkB,EAAW,EAAKrkB,EAAKrE,MAAMrC,GAAK0G,EAAKrE,MAC/C6jB,EAAgB1mB,KAAKgrB,UAAUX,EAAQ5K,IAAW,GAAItW,OAGrDwM,EAAS9N,OAAU8N,EAAS1U,MAAO0U,EAAS9S,QAEzC6jB,EADA/Q,EAAS9S,gBAAiBsG,MACVwM,EAAS9S,MAGT7C,KAAKgrB,UAAUrV,EAAS9S,MAAO8S,EAAS8J,UAG3D9J,EAAS8J,QAAUvY,GAAuB,KAAfA,EAAKW,QAEjC4X,GADA1W,EAAS/I,KAAK0S,UAAUxL,EAAKW,QACb4X,SAEfzf,KAAK4E,eAAiB5E,KAAK6pB,UAAYD,IAAe1iB,IAEvDuY,GADA1W,EAAS/I,KAAK0S,UAAUxL,EAAKW,QACb4X,OACZvY,EAAKrE,OACLwnB,EAAUkB,EAAW,EAAKrkB,EAAKrE,MAAMrC,GAAK0G,EAAKrE,MAC/C6jB,EAAgB1mB,KAAKgrB,UAAUX,EAAQthB,EAAO0W,SAG9CiH,EAAgBxf,EAAKrE,OAGzB4c,EAAQ,CACR,GAAImM,GAAY5rB,KAAK0f,UAAUD,EAC3BmM,GAAUR,UACVM,GACIzK,OAAQjhB,KAAK6rB,YAAahpB,MAAO6jB,EACjChS,YAAaiX,EAAOlM,OAAQmM,EAAW7W,OAAQ/U,KAAKsgB,YAAYxL,KAAK9U,KAAMQ,IAE3ER,KAAKwnB,YAAcxnB,KAAKwnB,WAAWsE,kBACnCJ,EAAatrB,KAAasrB,EAAY1rB,KAAKwnB,WAAWsE,kBAE1DL,EAAW,GAAIM,cAAWL,KAG1BA,GACI7oB,MAAO6jB,EAAezF,OAAQjhB,KAAK6rB,YAAanX,YAAaiX,EAC7DlM,OAAQmM,EAAUnM,OAAQ1K,OAAQ/U,KAAKsgB,YAAYxL,KAAK9U,KAAMQ,IAE9DR,KAAKwnB,YAAcxnB,KAAKwnB,WAAWsE,kBACnCJ,EAAatrB,KAAasrB,EAAY1rB,KAAKwnB,WAAWsE,kBAE1DL,EAAW,GAAIM,cAAWL,QAI9BA,IACIzK,OAAQjhB,KAAK6rB,YAAahpB,MAAO6jB,EACjChS,YAAaiX,EAAO5W,OAAQ/U,KAAKsgB,YAAYxL,KAAK9U,KAAMQ,IAExDR,KAAKwnB,YAAcxnB,KAAKwnB,WAAWsE,kBACnCJ,EAAatrB,KAAasrB,EAAY1rB,KAAKwnB,WAAWsE,kBAE1DL,EAAW,GAAIM,cAAWL,EAG9B,IADAD,EAASlW,SAAS,IAAMvF,EAAW,YAAcxP,IAC5C0G,EAAKrE,MAAO,CACb,GAAIsN,GAAOlK,SAASqG,eAAe0D,EAAW,YAAcxP,EAC5DR,MAAK8f,YAAY3P,EAAMuW,EAAe,KAAM1mB,KAAKsD,kBACjDtD,KAAKsD,kBAAmB,OASxDhB,EAAapC,UAAUsrB,kBAAoB,SAAU7V,EAAUzO,EAAM8I,EAAUxP,GAC3E,GACIqC,GACAmpB,EAFAC,GAAU,CAGVnkB,qBAAkBZ,EAAK+B,OAAS0M,IAChCzO,EAAK+B,KAAO0M,EAAS1M,KAEzB,IAAIc,EACJ,IAAI4L,EAASpK,OAAQ,CACbA,EAASoK,EAASpK,MACJ,aAAdrE,EAAK+B,MAAuBnB,oBAAkBZ,EAAKrE,OAG9C8S,EAAS9S,MACdopB,EAAU1gB,EAAO/K,GAAGmO,gBAAkBgH,EAAS9S,MAAMgV,WAAWlJ,cAErD,IAANnO,IACLyrB,GAAU,GANVA,EAAU1gB,EAAO/K,GAAGmO,gBAAkBzH,EAAKrE,MAAMgV,WAAWlJ,cAQhEqd,EAAWnpB,EAAQkH,EAAQwB,EAAO/K,OAEjC,CACD,GAAI+K,KAAU,GAAM,EACF,aAAdrE,EAAK+B,MAAuBnB,oBAAkBZ,EAAKrE,OAG9C8S,EAAS9S,MACdopB,EAAU1gB,EAAO/K,GAAGqX,WAAWlJ,gBAAkBgH,EAAS9S,MAAMgV,WAAWlJ,cAEhE,IAANnO,IAEDyrB,EADsB,iBAAf/kB,GAAKrE,SACFqE,EAAKrE,OAPnBopB,EAAU1gB,EAAO/K,GAAGqX,WAAWlJ,gBAAkBzH,EAAKrE,MAAMgV,WAAWlJ,cAajD,iBAAfzH,GAAKrE,OAA6B,IAANrC,IACnCyrB,GAAW/kB,EAAKrE,OAEpBA,EAAQ0I,EAAO/K,GAAGqX,WAClBmU,EAAWzgB,EAAO/K,GAClBuJ,EAAQ/J,KAAKwJ,KAAKC,aAAa,OAAQ,SAASjJ,IAEpD,GAAI0rB,EACJA,IACIniB,MAAOA,EAAO0C,KAAMuD,EAAW,UAAWT,QAAS0c,EAASppB,MAAOA,EACnEkS,OAAQ/U,KAAKsgB,YAAYxL,KAAK9U,KAAMQ,IAEpCR,KAAKwnB,YAAcxnB,KAAKwnB,WAAW2E,mBACnCD,EAAW9rB,KAAa8rB,EAAUlsB,KAAKwnB,WAAW2E,kBAEtD,IAAIC,GAAc,GAAIC,eAAYH,EAClCE,GAAY7W,SAAS,IAAMvF,EAAW,YAAcxP,GAChDyrB,GACAjsB,KAAK8f,YAAYsM,EAAY5pB,QAASwpB,EAAU,GAAG,IAG3D1pB,EAAapC,UAAUosB,iBAAmB,SAAUvJ,EAAQ7b,GACxD,GAAI1G,GAEAsJ,EADaiZ,EAAOtO,WACH9T,MACrB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjB,GAAI0G,EAAK0L,WAAamQ,EAAOtO,WAAWjU,GAAGqC,MACvC,MAAOrC,EAGf,OAAO,IAEX8B,EAAapC,UAAUqsB,oBAAsB,SAAUnK,EAAcrZ,GAQjE,MAPI/I,MAAKwD,cAAgB4e,IAErBA,EAAepiB,KAAK0S,UAAU0P,EAAavf,MAAQuf,EAAavf,MAAQuf,EAAava,QAErFkB,GAAUA,EAAO+O,UAAYsK,GAAgB3iB,OAAO6I,KAAK8Z,GAAczhB,OAAS,IAChFyhB,EAAatK,SAAW/O,EAAO+O,UAE5BsK,GAEX9f,EAAapC,UAAU0kB,aAAe,SAAU5jB,EAAQ2U,EAAUyM,EAAcoK,EAAUtlB,EAAM4b,EAAUtgB,GACtG,GACIiqB,GADazrB,EAAOiO,uBACEyd,qBAAqB,SAAS,GACpDC,EAA6B,iBAAnB3sB,KAAKmU,UAA+B3O,eAAainB,EAAU,gBACnEjnB,eAAainB,EAAU,gBACzB1jB,EAA4B,iBAAnB/I,KAAKmU,UAA+BnU,KAAK0S,UAAUia,EAAQ9pB,MAAM,IAExE7C,KAAK0S,UAAUia,EAAQ9pB,MAC7B7C,MAAKknB,aAAene,CACpB,IAAIga,GAASvd,eAAaxE,EAAO8D,cAAc,SAAU,eACrD0nB,KACA7W,EAAWnT,EAAQwE,GAAG1B,QAAQ,aAAe,EAAIqQ,EAAW3V,KAAKknB,cACpDxd,YACTqZ,EAAOlgB,MAAQ,KACfkgB,EAAOL,WACPK,EAAOtO,WAAakB,EAASjM,UAC7BqZ,EAAOtS,MAAQzQ,KAAKssB,iBAAiBvJ,EAAQ7b,GAC7C6b,EAAOlgB,MAAQigB,EAASlQ,SAAWmQ,EAAOtO,WAAWsO,EAAOtS,OAAO5N,MAC9D7C,KAAK+kB,mBAKNhC,EAAOL,YAJPK,EAAOtS,OAAS,EAChBqS,EAASlQ,SAAWmQ,EAAOlgB,MAAQ,IAO/C,IAAI+P,GAAWkQ,EAASlQ,SAASiF,WAC7B+U,GAAiB,CACrB,IAAMha,EAAStN,QAAQ,SAAW,GAAKsN,EAAStN,QAAQ,YAAc,GAAKsN,EAAStN,QAAQ,eAAiB,GAyErGif,EAAavjB,EAAO0E,cAAcZ,cAAc,oBAEhDgC,eAAayd,GAAa,UAC1B9V,YAAU8V,GAAa,eA5EkF,CAC7G,GAAIvU,GAAW1C,UAAQtM,EAAQ,qBAAqBgG,EAUpD,IATAob,EAAepiB,KAAKusB,oBAAoBnK,EAAcrZ,GAClDqZ,OAA0CpO,KAA1BoO,EAAatK,SACzBsK,EAAaxZ,UACbwZ,EAAepiB,KAAK0S,UAAUxL,EAAKW,QAGf,iBAAnB7H,KAAKmU,eAAiDH,KAAjBoO,IAC1CA,EAAepiB,KAAK0S,UAAUxL,EAAKW,QAEnCua,GAAgBA,EAAatK,SAAU,CACvC9X,KAAKslB,gBAAgBlD,EAAcpS,EAAW,aAC9C,IAAIG,GAAOE,SAAO,IAAML,EAAW,aAAchP,EAAOkd,mBACpD/N,KAASA,EAAKlC,UAAUC,SAAS,cACjCoK,SAAOjI,SAAO,IAAML,EAAW,aAAchP,EAAOkd,qBAEnB,gBAA1BkE,GAAatK,cAA0D9D,KAAjCoO,EAAatK,SAAS3X,SAC/Da,EAAOkd,mBAAmBjQ,UAAUC,SAAS,qBAC7ClO,KAAKuY,iBAAiBvI,IAE1BhP,EAAOkd,mBAAmBzC,UAAY,IAGtCzb,KAAKoR,YAActJ,oBAAkBsa,EAAanhB,MAA2B,iBAAnBjB,KAAKmU,iBACxDiO,GAAatK,SAO5B,GAJI0U,IACAxsB,KAAKigB,cAAc/Y,EAAMoG,UAAQtM,EAAQ,sBACzChB,KAAKqgB,gBAAgBrf,IAErBhB,KAAK4E,eAAkBme,GAA2B,KAAjBA,EAAOlgB,MAAe,CAUvD,GATIkG,IACA4M,EAASmC,SAAW/O,EAAO+O,UAE3BnC,EAASmC,WACTrJ,YAAUzN,EAAOkd,oBAAqB,oBACtCvI,EAASmC,SAAW/O,EAAO+O,SAC3B8U,EAAiB5sB,KAAK6sB,kBAAkBlX,EAAU3F,EAAUjH,EAAOlB,MAAO8N,EAAS9S,OAC/E+P,EAAU5R,EAAQkG,IAEtB0lB,EAAgB,CAChB,GAAIrI,GAAavjB,EAAO0E,cAAcZ,cAAc,gBAChD9E,MAAKwC,QAAQ6C,UAAUC,QAAQ,aAAe,GAA0B,aAArBtF,KAAKyS,YACxD8R,EAAW5X,MAAMya,MAAQ,OAGzB7C,EAAW5X,MAAMya,MAAQ,YAG5B,CACDtgB,eAAa9F,EAAOkd,oBAAqB,mBACzC,IAAI4O,GAAW,CAEXA,GADkB,YAAlBhK,EAAS7Z,KACEjJ,KAAK6S,eAAetH,OAASvL,KAAK6S,eAAetH,OAAO5K,OAAS,EAGhEiS,GAAYA,EAASjE,cAAcrJ,QAAQ,YAAc,EAAK,EAAI,CAElF,KAAK,GAAI9E,GAAI,EAAGA,EAAIssB,EAAUtsB,IAAK,CAC/B,GAAIsZ,GAAU9Z,KAAKoG,cAAc,SAAWC,OAAS4C,KAAM,OAAQjC,GAAIgJ,EAAW,YAAcxP,IAChGQ,GAAOkd,mBAAmBzX,YAAYqT,IAG9C9Z,KAAKqrB,eAAerqB,EAAQ2U,EAAUzO,EAAM4b,EAAU8J,GAElD5sB,KAAKoR,YAActJ,oBAAkB6N,EAAS1U,MAAQ0U,EAASmC,UAA+B,iBAAnB9X,KAAKmU,iBACzEwB,GAASmC,YAYhCxV,EAAapC,UAAU2sB,kBAAoB,SAAUlX,EAAUxG,EAAQtH,EAAO+K,EAAU5R,EAAQkG,GAC5F,GACIS,GADAlF,EAAQzC,KAERsrB,GAAa,CACjB,IAAK3V,EAASmC,SAGT,CACD,GAAiC,gBAAtBnC,GAASmC,cAAsD9D,KAA7B2B,EAASmC,SAAS3X,OAQ3D,MAPAwH,IACIkJ,YAAa,4BAA6B1B,OAAQA,EAAQtH,MAAOA,EAAO+K,SAAUA,EAAU1L,KAAMA,EAClG6lB,gBAAgB,GAEpB/sB,KAAKoK,QAAQ,cAAezC,EAAM,SAAUqlB,GACxC1B,EAAa7oB,EAAMwqB,2BAA2BD,EAAoBrX,EAAUxG,EAAQtH,EAAO7G,KAExFsqB,CAGP,IAAIxR,OAAU,GACVhC,EAAWnC,EAASmC,QAOxB,KALIgC,EAD2B,gBAApBhC,GAAS3X,OACN4gB,WAASjJ,EAAS3X,OAAQihB,SAAUvZ,MAAOA,EAAO+K,SAAUA,IAG5DkF,EAAS3X,QAAS0H,MAAOA,EAAO+K,SAAUA,cAEjCsa,SACnBpT,EAAQ9S,GAAKmI,EAAS,aACtBV,YAAUqL,GAAU,cACpB9Y,EAAOkd,mBAAmBzX,YAAYqT,GAClCjS,EAAMvC,QAAQ,KAAO,GACrBmJ,YAAUqL,GAAU,KAAOjS,OAG9B,IAAIiS,YAAmBla,OAAO,CAC/B6O,WAASqL,EAAS,aAClB,KAAK,GAAItZ,GAAI,EAAG+Z,EAAOT,EAAQnZ,OAAQH,EAAI+Z,EAAM/Z,IAC7CsZ,EAAQtZ,GAAGwG,GAAKmI,EAAS,YAAc3O,EACvCQ,EAAOkd,mBAAmBzX,YAAYqT,EAAQtZ,IAItD,MADAiO,aAAUzN,EAAOkd,oBAAqB,qBAC/B,EAtCX,OAAO,GA0Cf5b,EAAapC,UAAU+sB,2BAA6B,SAAUtlB,EAAMgO,EAAUxG,EAAQtH,EAAO7G,GACzF,GAAI2G,EAAKolB,eAAgB,CACrB,GAAIjT,OAAU,EACd9Z,MAAKmtB,iBAAmBntB,KAAK+Q,gBAAsB4E,EAASmC,SAA0BnC,EAASmC,UAC/F,IAAI9G,GAAahR,KAAKwC,QAAQwE,GAAKa,CAEnC,IAAI7H,KAAKmR,QACL2I,EAAU9Z,KAAKmtB,iBAAiBxlB,EAAM3H,KAAMmP,EAAQ6B,GAAY,GAChEhQ,EAAOkd,mBAAmBzX,YAAYqT,OAErC,IAAI9Z,KAAKoR,UAAW,CACrB,GAAIgc,GAAcptB,KAAKmtB,iBAAiBxlB,EAAM3H,KAAMmP,EAAQ6B,EAC5D8I,GAAuC,IAA5BsT,EAAY,GAAG9b,SAAkB8b,EAAY,GAAKA,EAAY,GACzEpsB,EAAOkd,mBAAmBzX,YAAYqT,OAEjC9Z,MAAKuR,QACVuI,EAAU9Z,KAAKmtB,iBAAiBxlB,EAAM3H,KAAM,WAAYgR,GAExDQ,SAAOsI,EAAS9Y,EAAOkd,sBAGvBpE,EAAU9Z,KAAKmtB,iBAAiBxlB,EAAM3H,KAAM,WAAYgR,GAAY,GACpEhQ,EAAOkd,mBAAmBzX,YAAYqT,GAI1C,OAFArL,aAAUzN,EAAOkd,oBAAqB,oBACtCle,KAAK+R,wBACE,EAGP,OAAO,GAGfzP,EAAapC,UAAUmtB,aAAe,SAAU7qB,EAAS0E,GACrD,GAAIkW,GAAM,CACN5a,GAAQ6C,UAAUC,QAAQ,eAAiB,IAC3C8X,EAAM,EAEV,IAEIrU,GACA0W,EACA6N,EACAzqB,EACA0qB,EAEAC,EARAC,EAAcjrB,EAAQ6C,UAAU2C,MAAM,OAAOoV,GAC7C5c,EAAIoX,SAASpV,EAAQwE,GAAGyT,OAAO,GAAI,EAQvC,QAAQgT,GACJ,IAAK,WACD5qB,EAAQ2C,eAAahD,EAASirB,GAAa5qB,MAC3CqE,EAAKrE,MAAmB,KAAVA,EAAgBA,MAAQmR,EACtC,MACJ,KAAK,UACDwZ,EAAehoB,eAAahD,EAASirB,GAAa5qB,MAC9CqE,EAAK0L,SAAStN,QAAQ,YAAc,GACV,gBAAf4B,GAAKrE,QACZqE,EAAKrE,UAETqE,EAAKrE,MAAMrC,GAAKgtB,IAEV,KAAM,SAASE,KAAK,SAAUC,GAAM,OAAsC,IAA/BzmB,EAAK0L,SAAStN,QAAQqoB,OAC7B,IAAvCzmB,EAAK0L,SAAStN,QAAQ,YACzB4B,EAAKrE,MAAQ2qB,EACM,WAAdtmB,EAAK+B,KAAoBukB,EAAaxlB,MAAM,KAAKwD,IAAI,SAAUoiB,GAAO,MAAOA,GAAIC,SAC9EL,EAAaxlB,MAAM,KAAKwD,IAAIzJ,WAGpCmF,EAAKrE,MAAQ2qB,CAEjB,MACJ,KAAK,eACDtmB,EAAKrE,MAAQ2C,eAAahD,EAASirB,GAAa5qB,KAChD,MACJ,KAAK,SACD0qB,EAAc/nB,eAAahD,EAASirB,IACpBle,UACc,iBAAfrI,GAAKrE,MACZqE,EAAKrE,MAA8B,SAAtB0qB,EAAY1qB,MAGrB7C,KAAK0S,UAAUxL,EAAKW,OAAO0D,OAC3BrE,EAAKrE,MAAQ0qB,EAAY1qB,MAGzBqE,EAAKrE,MAA8B,SAAtB0qB,EAAY1qB,OAIrC0qB,EAAYhW,SACZ,MACJ,KAAK,iBACGrQ,EAAK0L,SAAStN,QAAQ,YAAc,GACV,gBAAf4B,GAAKrE,QACZqE,EAAKrE,UAETqE,EAAKrE,MAAMrC,GAAKgF,eAAahD,EAASirB,GAAa5qB,OAGnDqE,EAAKrE,MAAQ2C,eAAahD,EAASirB,GAAa5qB,KAEpD,MACJ,KAAK,aACDkG,EAAS/I,KAAK0S,UAAUxL,EAAKW,OAC7B4X,EAASzf,KAAK0f,UAAU3W,EAAO0W,QAC/B6N,EAAe9nB,eAAahD,EAASirB,GAAa5qB,MAC9CqE,EAAK0L,SAAStN,QAAQ,YAAc,GACV,gBAAf4B,GAAKrE,QACZqE,EAAKrE,UAETqE,EAAKrE,MAAMrC,GAAKR,KAAK2f,KAAKC,WAAW0N,EAAc7N,IAE9C3X,oBAAkB2X,EAAOA,SAAW6N,EACzCpmB,EAAKrE,MAAQ7C,KAAK2f,KAAKC,WAAW0N,GAGlCpmB,EAAKrE,MADAyqB,EACQttB,KAAK2f,KAAKC,WAAW0N,EAAc7N,GAGnC6N,CAEjB,MACJ,KAAK,cACDpmB,EAAKrE,MAAQ2C,eAAahD,EAASirB,GAAa5qB,QAI5DP,EAAapC,UAAU4f,YAAc,SAAU9e,EAAQ0lB,EAAelmB,EAAGstB,GASrE,IARA,GAIIrU,GACAsG,EALArT,EAAYY,UAAQtM,EAAQ,sBAC5BkG,EAAOlH,KAAKgP,eAAetC,GAC3BwD,EAAW5C,UAAQtM,EAAQ,qBAC3ByP,EAAQ,EAGR3E,EAAUY,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACtD8H,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACnCgJ,GAAgD,OAApCA,EAASjB,wBACxBiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,IAAImC,GAAW1L,EAAKC,MAAMsJ,GAAOmC,SAAW1L,EAAKC,MAAMsJ,GAAOmC,SAASiF,WAAa,GAEhF1I,GADJe,EAAW5C,UAAQtM,EAAQ,sBACLgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GACxD,IAAIsG,UAAQtM,EAAQ,mBAAqBsM,UAAQtM,EAAQ,sBAAuB,CACxEhB,KAAK4iB,eACL5hB,EAAShB,KAAK4iB,cAElBnJ,EAAiC,iBAAnBzZ,KAAKmU,UAA+B3O,eAAaxE,EAAQ,gBACnEwE,eAAaxE,EAAQ,eAEzB,IAAI+H,GAA4B,iBAAnB/I,KAAKmU,UAA+BnU,KAAK0S,UAAU+G,EAAY5W,MAAM,IAE5E7C,KAAK0S,UAAU+G,EAAY5W,QAC5B7C,KAAK4E,eAAiBsC,EAAKC,MAAMsJ,GAAO5I,OACzCX,EAAKC,MAAMsJ,GAAO5I,MAAM8G,gBAAkB5F,EAAOlB,MAAM8G,iBACjDuB,EAASlL,iBAAiB,kBAAqB4N,EAAStN,QAAQ,SAAW,IACzEsN,EAAStN,QAAQ,UAAY,KACjC4B,EAAKC,MAAMsJ,GAAO5N,MAAQ,IAGlC7C,KAAK6S,eAAiB7S,KAAK0S,UAAU1S,KAAK6S,eAAehL,OACzDX,EAAKC,MAAMsJ,GAAO5I,MAAQ7H,KAAK6S,eAAehL,MAC9CX,EAAKC,MAAMsJ,GAAOxH,KAAOjJ,KAAK6S,eAAe5J,KAC7C/B,EAAKC,MAAMsJ,GAAO1G,MAAQ/J,KAAK6S,eAAe9I,KAC9C,IAAIyV,GAAclS,UAAQtM,EAAQ,kBAE9BwB,GADJgd,EAAcA,GAA4BlS,UAAQtM,EAAQ,uBAChCkd,mBAAmBpZ,cAAc,kBAC3DtC,GAAUA,GAAoBgd,EAAYtB,mBAAmBA,mBAAmBpZ,cAAc,mBAC9F8N,EAAWpN,eAAahD,EAAS,gBAAgBK,MAAMgV,WACvD3Q,EAAKC,MAAMsJ,GAAOmC,SAAWA,CAC7B,IAAImb,GAAiBvO,EAAYtB,mBAAmBA,mBAChD8P,EAAaD,EAAe/oB,iBAAiB,kBAC7CgpB,GAAWrtB,OAAS,IACpBqtB,EAAaD,EAAe/oB,iBAAiB,kBAE7CgpB,EAAWrtB,OAAS,IACpBqtB,EAAaD,EAAe/oB,iBAAiB,gBAEjD+a,GAAejU,QAASA,EAASqD,OAAQA,EAAQtM,MAAOqE,EAAKC,MAAMsJ,GAAO5I,MAAOoB,KAAM,QACvF,KAAK,GAAIglB,GAAM,EAAGA,EAAMD,EAAWrtB,OAAQstB,IACnCrb,EAAStN,QAAQ,SAAW,GAAKsN,EAAStN,QAAQ,UAAY,EAC9D4B,EAAKC,MAAMsJ,GAAO5N,MAAQ,KAG9B7C,KAAKqtB,aAAaW,EAAWC,GAAM/mB,EAAKC,MAAMsJ,GAE7CzQ,MAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,SAAU2V,GAEvB/f,KAAKoZ,iBAAmBlS,EAAKC,MAAMsJ,GAAO5I,OAAS7G,EAAO0E,cAAcL,UAAUC,QAAQ,cAAgB,GAC1GE,eAAaxE,EAAO0E,cAAe,WAAWD,UAElDzF,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,aAE5D,IAAIoG,UAAQtM,EAAQ,oBAAqB,CAC1CyY,EAAcjU,eAAaxE,EAAQ,gBACnCkG,EAAKC,MAAMsJ,GAAOmC,SAAW6G,EAAY5W,MAAMgV,UAC/C,IAAIgD,GAAY3K,EAASlL,iBAAiB,gCAC1C+a,IAAejU,QAASA,EAASqD,OAAQA,EAAQtM,MAAO4W,EAAY5W,MAAOoG,KAAM,YAC7EjJ,KAAKoZ,iBAAmBlS,EAAKC,MAAMsJ,GAAOmC,UAAY5R,EAAO0E,cAAcL,UAAUC,QAAQ,cAAgB,GAC7GE,eAAaxE,EAAO0E,cAAe,WAAWD,UAE9CoV,EAAUla,OAAS,KAAOka,EAAU,GAAGxV,UAAUC,QAAQ,eAAiB,KAC1E4B,EAAKC,MAAMsJ,GAAO5N,SAEtB,KAAK,GAAIqrB,GAAM,EAAGA,EAAMrT,EAAUla,OAAQutB,IAClChnB,EAAKC,MAAMsJ,GAAOmC,SAAStN,QAAQ,SAAW,GAAK4B,EAAKC,MAAMsJ,GAAOmC,SAAStN,QAAQ,UAAY,EAClG4B,EAAKC,MAAMsJ,GAAO5N,MAAQ,KAGrBgY,EAAUqT,GAAKjgB,UAAUC,SAAS,eAG3ClO,KAAKqtB,aAAaxS,EAAUqT,GAAMhnB,EAAKC,MAAMsJ,GAE5CzQ,MAAK4E,eACN5E,KAAKoK,QAAQ,SAAU2V,GAE3B/f,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,gBAExDoG,WAAQtM,EAAQ,mBACrBhB,KAAKmuB,gBAAgBntB,EAAQ0lB,EAAexf,EAAMuJ,EAAO/D,EAAWwD,EAAU1P,GACzEstB,GACD9tB,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,WAIzE5E,EAAapC,UAAUkP,YAAc,SAAUgf,EAAYC,EAAWplB,GAC9CqlB,KAAKC,WAAYvrB,UAAWorB,EAAWprB,UAAWD,IAAKqrB,EAAWrrB,IAAKmE,KAAMknB,EAAWjnB,UACzFmnB,KAAKC,WAAYvrB,UAAWqrB,EAAUrrB,UAAWD,IAAKsrB,EAAUtrB,IAAKmE,KAAMmnB,EAAUlnB,UAE/FnH,KAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,cAAgBokB,aAAcJ,EAAYlnB,KAAMmnB,EAAWplB,KAAMA,MAI1F3G,EAAapC,UAAUiuB,gBAAkB,SAAUntB,EAAQ0lB,EAAexf,EAAMuJ,EAAO/D,EAAWwD,EAAU1P,GACxG,GAAIuf,GACA0O,EACAC,GAAe,KAAM,UAAW,QAAS,aAI7C,IAHIxnB,EAAKC,MAAMsJ,GAAOmC,WAClB6b,EAAOvnB,EAAKC,MAAMsJ,GAAOmC,SAASiF,WAAWlJ,eAE3B,OAAlB+X,EAAwB,CACxB,GAAI1lB,EAAOqE,UAAUC,QAAQ,kBAAoB,GAAgC,WAA3B4B,EAAKC,MAAMsJ,GAAOxH,OACnEjJ,KAAKoD,WAAY,CAGlB,IAAK,GAFDinB,MACAsE,EAAmBjI,EACdN,EAAI,EAAG2E,EAAO4D,EAAiBhuB,OAAQylB,EAAI2E,EAAM3E,IACnB,gBAAxBuI,GAAiBvI,IACxBiE,EAAO5iB,KAAKmnB,WAAWD,EAAiBvI,IAG5CiE,GAAO1pB,SACP+lB,EAAgB2D,GAGxB,GAAIrqB,KAAKoD,WACL8D,EAAKC,MAAMsJ,GAAO5N,MAAQ6jB,EAC1B3G,GAAejU,QAASY,EAAU1F,GAAImI,OAAQe,EAASlJ,GAAInE,MAAOqE,EAAKC,MAAMsJ,GAAO5N,MAAOoG,KAAM,SAC5FjJ,KAAK4E,eACN5E,KAAKoK,QAAQ,SAAU2V,OAG1B,IAAI/e,EAAOqE,UAAUC,QAAQ,WAAa,GAAKtE,EAAOqE,UAAUC,QAAQ,cAAgB,EACrFopB,EAAYppB,QAAQmpB,IAAS,EAC7BvnB,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAKkmB,EAG7Bxf,EAAKC,MAAMsJ,GAAO5N,MAAQ6jB,MAG7B,IAAI1lB,EAAOqE,UAAUC,QAAQ,YAAc,EAC5C4B,EAAKC,MAAMsJ,GAAO5N,MAAQ6jB,MAEzB,IAAI1lB,EAAOqE,UAAUC,QAAQ,kBAAoB,EAClD4B,EAAKC,MAAMsJ,GAAO5N,MAAQ6jB,MAEzB,IAAI1lB,EAAOqE,UAAUC,QAAQ,cAAgB,EACjC,OAATmpB,GAA0B,UAATA,GACbvnB,EAAKC,MAAMsJ,GAAOxH,KAClB/B,EAAKC,MAAMsJ,GAAO5N,MAAQ7C,KAAK4qB,mBAAmBlE,EAAexf,EAAKC,MAAMsJ,GAAOxH,OAMzE,YAATwlB,GAA+B,eAATA,GACY,gBAA5BvnB,GAAKC,MAAMsJ,GAAO5N,QACzBqE,EAAKC,MAAMsJ,GAAO5N,UAEtBqE,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAKkmB,GAG7Bxf,EAAKC,MAAMsJ,GAAO5N,MAAQ6jB,MAG7B,IAAI1lB,EAAOqE,UAAUC,QAAQ,iBAAmB,EAAG,CACpD,GAAIma,GAASzf,KAAK0f,UAAU1f,KAAK0S,UAAU1S,KAAK6S,eAAehL,OAAO4X,OAClEA,GAAOxW,OACHylB,EAAYppB,QAAQmpB,IAAS,GACU,gBAA5BvnB,GAAKC,MAAMsJ,GAAO5N,QACzBqE,EAAKC,MAAMsJ,GAAO5N,UAEtBqE,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAKR,KAAK2f,KAAKC,WAAW8G,EAAejH,IAGjEvY,EAAKC,MAAMsJ,GAAO5N,MAAQ7C,KAAK2f,KAAKC,WAAW8G,EAAejH,IAI1Ezf,KAAKigB,cAAc/Y,EAAMgJ,EAAUO,OAG/BzP,GAAOqE,UAAUC,QAAQ,iBAAmB,GACxCopB,EAAYppB,QAAQmpB,IAAS,GACU,gBAA5BvnB,GAAKC,MAAMsJ,GAAO5N,QACzBqE,EAAKC,MAAMsJ,GAAO5N,UAEtBqE,EAAKC,MAAMsJ,GAAO5N,MAAMrC,GAAKkmB,GAOjCxf,EAAKC,MAAMsJ,GAAO5N,MAAQ6jB,GAItCpkB,EAAapC,UAAU+f,cAAgB,SAAU/Y,EAAMgJ,EAAUO,GAC7D,IAAI3I,oBAAkBZ,KAASY,oBAAkBoI,GAAjD,CAGKpI,oBAAkB2I,KACnBvJ,EAAOA,EAAKC,MAAMsJ,GAEtB,IAAIoe,GAAmC,gBAAhB3nB,QACvB,IAAIlH,KAAKoZ,kBAAoBtR,oBAAkB2I,KAAWoe,EAAW3nB,EAAKrE,MAAMlC,OAAS,EAAIuG,EAAKrE,QAAS,CACvG,GAAIiX,GAAU5J,EAASlL,iBAAiB,2BACpC8U,GAAQnZ,OAAS,IACbmZ,EAAQ,GAAGzU,UAAUC,QAAQ,cAAgB,EAC7CE,eAAasU,EAAQ,GAAI,WAAWrU,UAE/BqU,EAAQ,GAAGpU,cAAcL,UAAUC,QAAQ,cAAgB,GAChEE,eAAasU,EAAQ,GAAGpU,cAAe,WAAWD,UAElDqU,EAAQ,IAAMA,EAAQ,GAAGpU,cAAcL,UAAUC,QAAQ,cAAgB,GACzEE,eAAasU,EAAQ,GAAGpU,cAAe,WAAWD,UAElDqU,EAAQ,IAAMA,EAAQ,GAAGpU,cAAcL,UAAUC,QAAQ,cAAgB,GACzEE,eAAasU,EAAQ,GAAGpU,cAAe,WAAWD,cAKlEnD,EAAapC,UAAUwf,UAAY,SAAUD,GACzC,GAAIqP,EAmBJ,OAlBIrP,GACwB,oBACpBqP,GAAkB7lB,KAAM,YACT,UAAXwW,GAAiC,QAAXA,GACtBqP,EAAc7lB,KAAO,OACrB6lB,EAAc1D,SAAW3L,GAGzBqP,EAAcrP,OAASA,GAI3BqP,GAAkB7lB,KAAM,WAAYmiB,SAAU3L,EAAO2L,UAIzD0D,GAAkB7lB,KAAM,OAAQmiB,SAAU,OAEvC0D,GAEXxsB,EAAapC,UAAU6uB,eAAiB,SAAUC,EAAU9nB,EAAMP,GAC9D,GAAIsoB,GAAW/nB,EAAKC,MAChB+nB,IACJ,KAAKvoB,EAAQ,CACT,IAAK,GAAIgE,GAAI,EAAGoP,EAAOkV,EAAStuB,OAAQgK,EAAIoP,EAAMpP,KAC9CzD,EAAO+nB,EAAStkB,IACPxD,OACL+nB,EAAYznB,KAAKP,EAGzB,OAAOgoB,GAAYF,GAEvB,MAAO9nB,IASX5E,EAAapC,UAAUuF,QAAU,WAG7B,GAFAzF,KAAKyD,WAAY,EACEzD,KAAKwC,QACxB,CAGA,GAAIA,GACAhC,EACAsJ,EACAvE,CAIJ,KAHA7D,EAAOxB,UAAUuF,QAAQ7E,KAAKZ,MAE9B8J,GADAtH,EAAUxC,KAAKwC,QAAQwC,iBAAiB,oBAC1BrE,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjBgF,eAAahD,EAAQhC,GAAI,gBAAgBiF,UACzC6S,SAAO9V,EAAQhC,GAGnB,KADA+E,EAAUvF,KAAKwC,QAAQwC,iBAAiB,uCACnCxE,EAAI,EAAGA,EAAI+E,EAAQ5E,OAAQH,IAC5BgF,eAAaD,EAAQ/E,GAAI,WAAWiF,SAIxC,KADAqE,GADAtH,EAAUxC,KAAKwC,QAAQwC,iBAAiB,8CAC1BrE,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACbgF,eAAahD,EAAQhC,GAAI,gBACzBgF,eAAahD,EAAQhC,GAAI,gBAAgBiF,UAGzCD,eAAahD,EAAQhC,GAAI,gBAAgBiF,UAE7C6S,SAAO9V,EAAQhC,GAGnB,KADA+E,EAAUvF,KAAKwC,QAAQwC,iBAAiB,yCACnCxE,EAAI,EAAGA,EAAI+E,EAAQ5E,OAAQH,IAC5BgF,eAAaD,EAAQ/E,GAAI,WAAWiF,SAIxC,KADAqE,GADAtH,EAAUxC,KAAKwC,QAAQwC,iBAAiB,gDAC1BrE,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACbgF,eAAahD,EAAQhC,GAAI,kBACzBgF,eAAahD,EAAQhC,GAAI,gBAAgBiF,UACzC6S,SAAO9V,EAAQhC,IAIvB,KADA+E,EAAUvF,KAAKwC,QAAQwC,iBAAiB,sCACnCxE,EAAI,EAAGA,EAAI+E,EAAQ5E,OAAQH,IAC5BgF,eAAaD,EAAQ/E,GAAI,WAAWiF,SAExCzF,MAAK4E,eAAgB,EACrB5E,KAAKmvB,eACLnvB,KAAK+G,UAAU/G,KAAKwC,QAAQwE,GAAK,YAAc,GAC/ChH,KAAKwC,QAAQiZ,UAAY,GAErBzb,KAAKovB,SAAWpvB,KAAKovB,QAAQzuB,QAC7BX,KAAKuY,iBAET,IAAI8W,GAAeppB,SAASjB,iBAAiB,2BAC7C,IAAIqqB,EACA,IAAK7uB,EAAI,EAAGA,EAAI6uB,EAAa1uB,OAAQH,IACjC6uB,EAAa7uB,GAAGwjB,QAGxB/V,aAAUjO,KAAKwC,YAAc,QAAS,eAAgB,aACtDxC,KAAKyD,WAAY,IASrBnB,EAAapC,UAAUovB,SAAW,SAAUpoB,EAAM4E,GAC9CA,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM8E,EAClC9L,KAAK6pB,UAAW,CAChB,KAAK,GAAIrpB,GAAI,EAAGsJ,EAAM5C,EAAKvG,OAAQH,EAAIsJ,EAAKtJ,IACxCR,KAAK8P,eAAe7J,SAASqG,eAAeR,GAAU5E,EAAK1G,GAE/DR,MAAK6pB,UAAW,GASpBvnB,EAAapC,UAAUod,UAAY,SAAUiS,EAAQzjB,GACjD,GAAI9L,KAAKqD,cAAgBrD,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,QAAUX,KAAK2P,cAAe,CACvG7D,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM8E,CAClC,IAAIY,GAAYzG,SAASqG,eAAeR,GACpC5E,EAAOlH,KAAKgP,eAAetC,EAE/B,IADe6iB,EAAO5uB,OACR,CACVX,KAAK6pB,UAAW,CAChB,KAAK,GAAIrpB,GAAI,EAAGsJ,EAAMylB,EAAO5uB,OAAQH,EAAIsJ,EAAKtJ,IAC1CR,KAAK8C,aACDG,SAAUssB,EAAO/uB,GAAGyC,SAAUD,UAAWusB,EAAO/uB,GAAGwC,UACnDD,IAAKwsB,EAAO/uB,GAAGuC,KAEnB/C,KAAKwvB,YAAYD,EAAO/uB,GAAIkM,GAAW,EAAO6iB,EAAO/uB,GAAGuC,IAE5D/C,MAAK6pB,UAAW,MAEf,CACD,GAAI7mB,GAAY,MACZD,GAAM,EACNE,GAAW,CACXjD,MAAK8C,cACLE,EAAYhD,KAAK8C,YAAYE,UAC7BD,EAAM/C,KAAK8C,YAAYC,IACvBE,EAAWjD,KAAK8C,YAAYG,UAE5BjD,KAAK8D,WAAa,EACd9D,KAAK4G,mBACLM,EAAKC,MAAMM,MAAOzE,UAAaA,EAAWD,IAAOA,EAAKoE,WAGtDD,EAAKC,MAAMM,MAAOzE,UAAaA,EAAWmE,WAI1CnH,KAAK4G,mBACLM,EAAKC,MAAM+Q,OAAOlY,KAAK8D,WAAa,EAAG,GAAKd,UAAWA,EAAWD,IAAKA,EAAKoE,SAAWlE,SAAUA,IAGjGiE,EAAKC,MAAM+Q,OAAOlY,KAAK8D,WAAa,EAAG,GAAKd,UAAWA,EAAWmE,SAAWlE,SAAUA,IAI9FjD,KAAK0G,gBACN1G,KAAKoH,qBAAqBsF,EAAWxF,EAAM,OAAMlH,KAAKgO,yBAAiC,QAInG1L,EAAapC,UAAUuvB,YAAc,WAmCjC,GAlCAzvB,KAAKiS,eAAgB,EACjBjS,KAAKmV,UACL1G,YAAUzO,KAAKwC,SAAUxC,KAAKmV,SAAShH,QAAQ,OAAQ,KAAK0f,OAAO7lB,MAAM,MAEzEhI,KAAKgO,yBACLS,YAAUzO,KAAKwC,SAAU,qBAEzBxC,KAAK4P,WACLnB,YAAUzO,KAAKwC,SAAU,SAEzBxC,KAAKonB,QACLpnB,KAAKwC,QAAQmK,MAAMya,MAAQpnB,KAAKonB,OAEhCpnB,KAAK8M,SACL9M,KAAKwC,QAAQmK,MAAMG,OAAS9M,KAAK8M,QAEjC9M,KAAKkH,KAAKC,MAAMxG,OAChBX,KAAK4E,eAAgB,EAGrB5E,KAAKwN,iBAAgB,EAAOxN,KAAKwC,SAEjCmmB,UAAQC,UAAaxH,OAAOsO,WAAa,MAAQ1vB,KAAKqE,cAAsC,aAArBrE,KAAKyS,cACxEkW,UAAQC,UAAYxH,OAAOsO,WAAa,OACxC1vB,KAAKwC,QAAQmK,MAAMya,MAAQ,OAC3BpnB,KAAKwC,QAAQyL,UAAUgF,IAAI,aAE/BnM,cAAY9G,KAAKwC,QAAQwC,iBAAiB,qBAAsB,qBAChEyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,qBAAsB,mBAC7DhF,KAAKyS,YAAc,YAGnBzS,KAAKyS,YAAc,aAEnBzS,KAAK2vB,YACD3vB,KAAK4E,cACL5E,KAAKoM,gBAGLpM,KAAK4N,4BAGR,CACD,GAAI5N,KAAK4I,SAAW5I,KAAK4I,QAAQjI,QAAUX,KAAK4E,cAAe,CAC3D5E,KAAKwN,iBAAgB,EAAOxN,KAAKwC,QAASxC,KAAKkH,KAAKlE,WAAW,EAAOhD,KAAKkH,KAAKnE,KAAK,EAAO/C,KAAKkH,KACjG,IAAIuG,GAASC,YAAW1N,KAAKkH,SAAU,EACvClH,MAAKmD,aAAc,EACnBnD,KAAK2N,cAAcF,GACnBzN,KAAKmD,aAAc,MAEdnD,MAAK4I,SAAW5I,KAAK4I,QAAQjI,QAClCX,KAAK8P,eAAe9P,KAAKwC,QAAQsC,cAAc,yBAEnD9E,MAAK4vB,cACD5vB,KAAK6vB,UACL7vB,KAAK8vB,gBAIT,KAAK,GAFDC,GAAU/vB,KAAKwC,QAAQwC,iBAAiB,eACxCgrB,MAAS,GACJxvB,EAAI,EAAGA,EAAIuvB,EAAQpvB,OAAQH,IAChCwvB,EAASD,EAAQjO,KAAKthB,GACtBuc,eAAaiT,GAAUhT,SAAU,aAI7C1a,EAAapC,UAAUkM,cAAgB,WACnC,GAAI6jB,GAAcjwB,KAAKoG,cAAc,OACjCC,OACIC,MAAO,oBACPU,GAAIhH,KAAKwC,QAAQwE,GAAK,sBAG1BkpB,EAAWlwB,KAAKoG,cAAc,YAAcC,OAASC,MAAO,iBAAkBupB,SAAU,QAAUM,OAAQ,qBAC1GC,EAAWpwB,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,sDAC1E+pB,EAAUrwB,KAAKoG,cAAc,OAASC,OAASC,MAAO,qBAC1D2pB,GAAYxpB,YAAYypB,GACxBA,EAASnqB,YAAc/F,KAAK6M,gBAAgB7M,KAAKkH,MACjDkpB,EAASrqB,YAAc/F,KAAKwJ,KAAKC,YAAY,QAC7C4mB,EAAQ5pB,YAAY2pB,GACpBH,EAAYxpB,YAAY4pB,GACxBrwB,KAAKwC,QAAQiE,YAAYwpB,IAE7B3tB,EAAapC,UAAU0N,sBAAwB,WAC3C,GAAI0iB,GAAetwB,KAAKoG,cAAc,OAClCC,OACIC,MAAO,0BACPiV,MAAOvb,KAAKwJ,KAAKC,YAAY,sBAGrCzJ,MAAKwC,QAAQsC,cAAc,mBAAmB2B,YAAY6pB,IAE9DhuB,EAAapC,UAAU2I,WAAa,WAC5B7I,KAAKiK,eAAsD,eAArCjK,KAAKiK,cAAc0E,cACzC3O,KAAK4I,QAAU,GAAI+e,eAAY3nB,KAAK4I,SAAS2nB,cAAa,GAAItJ,UAAQuJ,WAAW,UAE5ExwB,KAAKiK,eAAsD,cAArCjK,KAAKiK,cAAc0E,gBAC9C3O,KAAK4I,QAAU,GAAI+e,eAAY3nB,KAAK4I,SAAS2nB,cAAa,GAAItJ,UAAQwJ,OAAO,YAGrFnuB,EAAapC,UAAUwwB,iBAAmB,WAGtC,GAFA1wB,KAAKwC,QAAQiZ,UAAY,GACzBzb,KAAKsc,eAAiB,GACjBtc,KAAK0G,eACN,GAAI1G,KAAK4G,mBAAoB,CACzB,GAAIiU,GAAY7a,KAAKoG,cAAc,UAAYC,OAAS4C,KAAM,SAAU3C,MAAO,gBAC3EtG,MAAK0M,UAAU5H,cAAc,iBAC7B9E,KAAK0M,UAAU5H,cAAc,gBAAgB6L,aAAakK,EAAW7a,KAAK0M,UAAU5H,cAAc,wBAItG9E,MAAK0M,UAAU5H,cAAc,gBAAgBkf,QAGrDhkB,MAAKiH,eAAgBC,KAAMlH,KAAK2wB,cAAc3wB,KAAKkH,QAAS,GAC5DlH,KAAKyvB,eAETntB,EAAapC,UAAU0vB,YAAc,WAC7B5vB,KAAK4P,UACLnB,WAASzO,KAAKwC,QAAQwC,iBAAiB,gBAAiB,SAGxD8B,cAAY9G,KAAKwC,QAAQwC,iBAAiB,gBAAiB,UAGnE1C,EAAapC,UAAUywB,cAAgB,SAAUzpB,GAC7C,GAAI0pB,EACJ,IAAI1pB,EAAKC,MACL,IAAK,GAAI3G,GAAI,EAAGA,EAAI0G,EAAKC,MAAMxG,OAAQH,IACnCowB,EAAU1pB,EAAKC,MAAM3G,GACrBowB,EAAU5wB,KAAK2wB,cAAcC,GAC7B1pB,EAAKC,MAAM3G,GAAKowB,CAYxB,OATK9oB,qBAAkBZ,EAAKnE,KAMnB/C,KAAK4G,qBAAuBkB,oBAAkBZ,EAAKlE,aACxDkE,EAAKnE,KAAM,IANP/C,KAAK4G,qBACLM,EAAKnE,KAAM,SAERmE,GAAKnE,KAKTmE,GAEX5E,EAAapC,UAAU2wB,kBAAoB,SAAUC,EAASC,GAC1D,GAAIC,GAAavxB,OAAO6I,KAAKwoB,EAC7B9wB,MAAKqE,cAAe,CAGpB,KAAK,GAFDqI,GAAY1M,KAAKwC,QAAQsC,cAAc,sBACvCuH,EAAcrM,KAAKwC,QAAQsC,cAAc,sBACpCmsB,EAAK,EAAGC,EAAeF,EAAYC,EAAKC,EAAavwB,OAAQswB,IAElE,OADWC,EAAaD,IAEpB,IAAK,cACGH,EAAQnB,aACRjjB,EAAUC,MAAMC,QAAU,OACtB5M,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAAS,GAC7DX,KAAKoM,gBACLC,EAAcrM,KAAKwC,QAAQsC,cAAc,uBAGzC9E,KAAKwC,QAAQsC,cAAc,mBAAmBiB,YAAc/F,KAAK6M,gBAAgB7M,KAAKkH,MAE1FmF,EAAYM,MAAMC,QAAU,UAGxBF,EAAU1H,iBAAiB,oBAAoBrE,QAAU,GACzDX,KAAK4N,wBAETlB,EAAUC,MAAMC,QAAU,QAC1BP,EAAYM,MAAMC,QAAU,OAEhC,MACJ,KAAK,cACD5M,KAAKuX,SACL,MACJ,KAAK,cACIzP,oBAAkBgpB,EAAQrhB,YAAYiC,aACnCof,EAAQrhB,YAAYiC,UACpB5K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,mBAAoB,iBAG9DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,mBAAoB,kBAG9D8C,oBAAkBgpB,EAAQrhB,YAAYkC,YACnCmf,EAAQrhB,YAAYkC,SACpB7K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,oBAAqB,iBAG/DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,oBAAqB,kBAG/D8C,oBAAkBgpB,EAAQrhB,YAAYmC,cACnCkf,EAAQrhB,YAAYmC,WACpB9K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,oBAAqB,iBAG/DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,oBAAqB,kBAG/D8C,oBAAkBgpB,EAAQrhB,YAAYe,aACnCsgB,EAAQrhB,YAAYe,UACpB1J,cAAY9G,KAAKwC,QAAQwC,iBAAiB,qBAAsB,iBAGhEyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,qBAAsB,kBAGhE8C,oBAAkBgpB,EAAQrhB,YAAYoC,cACnCif,EAAQrhB,YAAYoC,WACpB/K,cAAY9G,KAAKwC,QAAQwC,iBAAiB,kBAAmB,iBAG7DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,kBAAmB,kBAG7D8C,oBAAkBgpB,EAAQrhB,YAAYmN,eACnCkU,EAAQrhB,YAAYmN,YACpB9V,cAAY9G,KAAKwC,QAAQwC,iBAAiB,kBAAmB,iBAG7DyJ,WAASzO,KAAKwC,QAAQwC,iBAAiB,kBAAmB,iBAGlE,MACJ,KAAK,WACG+rB,EAAQ5b,UACRrO,eAAa9G,KAAKwC,SAAUuuB,EAAQ5b,SAASnN,MAAM,MAEnD8oB,EAAQ3b,UACR1G,YAAUzO,KAAKwC,SAAUsuB,EAAQ3b,SAAShH,QAAQ,OAAQ,KAAK0f,OAAO7lB,MAAM,KAEhF,MACJ,KAAK,YACG8oB,EAAQlhB,WACRnB,YAAUzO,KAAKwC,SAAU,SACzBxC,KAAK4vB,gBAGL9oB,eAAa9G,KAAKwC,SAAU,SAC5BxC,KAAK4vB,cAET,MACJ,KAAK,oBACD5vB,KAAKmxB,kBAAoBL,EAAQK,iBACjC,MACJ,KAAK,aACDnxB,KAAKyU,WAAaqc,EAAQrc,WAC1BzU,KAAKuX,SACL,MACJ,KAAK,UACDvX,KAAK4I,QAAUkoB,EAAQloB,QACvB5I,KAAK6I,aACL7I,KAAK6J,2BAA2B7J,KAAK4I,QACrC,MACJ,KAAK,gBACD5I,KAAKiK,cAAgB6mB,EAAQ7mB,cAC7BjK,KAAK6I,YACL,MACJ,KAAK,gBACD7I,KAAK2P,cAAgBmhB,EAAQnhB,aAC7B,MACJ,KAAK,SACD3P,KAAK8M,OAASgkB,EAAQhkB,OACtB9M,KAAKwC,QAAQmK,MAAMG,OAAS9M,KAAK8M,MACjC,MACJ,KAAK,OAC8B,IAA3B9M,KAAKkH,KAAKC,MAAMxG,QAAiBmH,oBAAkB9H,KAAKkH,OACxDlH,KAAK2E,QAET3E,KAAKiH,eAAgBC,KAAM4pB,EAAQ5pB,OAAQ,GAC3C4pB,EAAQ5pB,KAAOlH,KAAKkf,kBAAkBlf,KAAKkH,MAAM,GACjDlH,KAAKoxB,SAASpxB,KAAKkH,KACnB,MACJ,KAAK,QACDlH,KAAKonB,MAAQ0J,EAAQ1J,MACrBpnB,KAAKwC,QAAQmK,MAAMya,MAAQpnB,KAAKonB,KAChC,MACJ,KAAK,SACDpnB,KAAKihB,OAAS6P,EAAQ7P,OACtBjhB,KAAK2f,KAAO,GAAI0R,wBAAqBrxB,KAAKihB,QAC1CjhB,KAAKkD,UAAW,EAChBlD,KAAKuX,UACLvX,KAAKkD,UAAW,CAChB,MACJ,KAAK,qBACDlD,KAAK0wB,kBACL,MACJ,KAAK,WACD1wB,KAAK0C,WAAaouB,EAAQjB,SAC1B7vB,KAAK8vB,gBACL,MACJ,KAAK,mBACD9vB,KAAK8R,iBAAmBgf,EAAQhf,iBAChC9R,KAAKuX,SACL,MACJ,KAAK,0BACDvX,KAAKgO,wBAA0B8iB,EAAQ9iB,wBACvChO,KAAKuX,UAIjBvX,KAAKqE,cAAe,GAExB/B,EAAapC,UAAUoxB,UAAY,WAC/BtxB,KAAKwC,QAAQwE,GAAKhH,KAAKwC,QAAQwE,IAAMuqB,cAAY,oBACjDvxB,KAAKwxB,eACDC,WAAY,cACZC,iBAAkB,sBAClBC,SAAU,YACVC,eAAgB,oBAChBC,SAAU,WACVC,eAAgB,mBAChBC,QAAS,WACTC,KAAM,OACNC,MAAO,QACPC,SAAU,YACVC,SAAU,YACVC,gBAAiB,qBACjBC,YAAa,eACbC,mBAAoB,wBACpBC,QAAS,UACTC,WAAY,cACZC,GAAI,KACJC,MAAO,SACPC,OAAQ,SACRC,YAAa,iBACbC,eAAgB,kBAChBC,WAAY,wBACZC,YAAa,eACbC,SAAU,YACVC,aAAc,gBACdC,KAAM,OACNC,kBAAmB,yBACnBC,iBAAkB,eAClBC,YAAa,eACbC,IAAK,MACLC,GAAI,KACJC,IAAK,MACLC,YAAa,cACbC,QAAS,WACTC,WAAY,eACZC,OAAQ,UACRC,UAAW,cACXC,KAAM,OACNC,MAAO,QACPC,UAAW,sBACXC,WAAY,cACZC,UAAW,aACXC,UAAW,aACXC,SAAU,YACVC,WAAY,cACZC,YAAa,gBAEjBt0B,KAAKwJ,KAAO,GAAI+qB,QAAK,eAAgBv0B,KAAKwxB,cAAexxB,KAAKihB,QAC9DjhB,KAAK2f,KAAO,GAAI0R,wBAAqBrxB,KAAKihB,QAC1CjhB,KAAKsc,eAAiB,EACtBtc,KAAKkkB,iBAAmB,EACxBlkB,KAAKuQ,cAAgB,EACrBvQ,KAAK2c,WAAa,EAClB3c,KAAK4E,eAAgB,EACrB5E,KAAKw0B,UACLx0B,KAAK2J,iBACD8qB,iBACM5xB,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAChD5G,MAAO,gBAAiB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,sBACnD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,oBACjD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,oBACjD5G,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,KAAM5B,IAAKjB,KAAKwJ,KAAKC,YAAY,QACxC5G,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,UAAW5B,IAAKjB,KAAKwJ,KAAKC,YAAY,aAC7C5G,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAEtDirB,eACM7xB,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,iBACjD5G,MAAO,qBAAsB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,wBACxD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,kBAAmB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,qBACrD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,UAAW5B,IAAKjB,KAAKwJ,KAAKC,YAAY,aAC7C5G,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAEtDkrB,kBACM9xB,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAEpDmrB,iBACM/xB,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,WAC3C5G,MAAO,qBAAsB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,wBACxD5G,MAAO,cAAe5B,IAAKjB,KAAKwJ,KAAKC,YAAY,iBACjD5G,MAAO,UAAW5B,IAAKjB,KAAKwJ,KAAKC,YAAY,aAC7C5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,aAAc5B,IAAKjB,KAAKwJ,KAAKC,YAAY,gBAChD5G,MAAO,kBAAmB5B,IAAKjB,KAAKwJ,KAAKC,YAAY,qBACrD5G,MAAO,WAAY5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAC9C5G,MAAO,KAAM5B,IAAKjB,KAAKwJ,KAAKC,YAAY,QACxC5G,MAAO,QAAS5B,IAAKjB,KAAKwJ,KAAKC,YAAY,YAGrDzJ,KAAK0J,WACDmrB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAI,KAAMC,MAAO,SACxGC,gBAAiB,KAAMC,WAAY,OAAQC,SAAU,OAAQC,QAAS,UAAWC,WAAY,cAAetnB,SAAU,OACtHunB,OAAQ,UAAWC,UAAW,cAAeC,QAAS,WAAYC,WAAY,eAAgBC,cAAe,WAC7GC,YAAa,WAAYC,YAAa,YAE1C/1B,KAAKg2B,cACDnB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAIl1B,KAAKwJ,KAAKC,YAAY,MAAMwsB,cACvHd,MAAOn1B,KAAKwJ,KAAKC,YAAY,SAASwsB,cAAeb,gBAAiB,KAAMC,WAAYr1B,KAAKwJ,KAAKC,YAAY,QAAQwsB,cACtHX,SAAUt1B,KAAKwJ,KAAKC,YAAY,QAAQwsB,cAAeV,QAASv1B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cACjGT,WAAYx1B,KAAKwJ,KAAKC,YAAY,cAAcwsB,cAAe/nB,SAAUlO,KAAKwJ,KAAKC,YAAY,QAAQwsB,cACvGR,OAAQz1B,KAAKwJ,KAAKC,YAAY,UAAUwsB,cAAeP,UAAW11B,KAAKwJ,KAAKC,YAAY,aAAawsB,cACrGN,QAAS31B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cAAeL,WAAY51B,KAAKwJ,KAAKC,YAAY,cAAcwsB,cACzGJ,cAAe71B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cAAeH,YAAa91B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cAC7GF,YAAa/1B,KAAKwJ,KAAKC,YAAY,WAAWwsB,eAE7Cj2B,KAAK2C,SACN3C,KAAK2C,QAAWC,KAAM,QAASC,MAAO,WAG9CP,EAAapC,UAAUg2B,OAAS,WAC5Bl2B,KAAK+G,aACL/G,KAAKye,QAEG7b,KAAM5C,KAAKwJ,KAAKC,YAAY,YAC5BqT,QAAS,kCAGTla,KAAM5C,KAAKwJ,KAAKC,YAAY,gBAC5BqT,QAAS,iCAGjB9c,KAAKkQ,SAAWlQ,KAAK4Q,eACrB5Q,KAAK0M,UAAY1M,KAAK0a,eACtB,IAAIyb,KACEtzB,MAAO,SAAU5B,IAAKjB,KAAKwJ,KAAKC,YAAY,YAC5C5G,MAAO,YAAa5B,IAAKjB,KAAKwJ,KAAKC,YAAY,eAEjD2sB,IACEvzB,MAAO,SAAU5B,IAAKjB,KAAKwJ,KAAKC,YAAY,YAC5C5G,MAAO,YAAa5B,IAAKjB,KAAKwJ,KAAKC,YAAY,cAErDzJ,MAAK2J,gBAAgC,eAAI3J,KAAK2J,gBAAgC,eAAE0sB,OAAOF,GACvFn2B,KAAK2J,gBAAgC,eAAI3J,KAAK2J,gBAAgC,eAAE0sB,OAAOD,GACnFp2B,KAAKyU,qBAAsBkT,gBAC3B3nB,KAAK+mB,YAAc/mB,KAAKyU,WACxBzU,KAAKs2B,oBAAmB,GAAIrP,UAAQsP,KAAK,MAGzCv2B,KAAK+mB,YAAc,GAAIY,eAAY3nB,KAAKyU,YACxCzU,KAAKkI,SAAWlI,KAAK+mB,YAAYwJ,aAAa,GAAItJ,UAClDjnB,KAAKw2B,eAETx2B,KAAKy2B,iBACDz2B,KAAK8R,kBACL9R,KAAK02B,kBAGbp0B,EAAapC,UAAUw2B,eAAiB,WACpC12B,KAAK22B,UAAY,GAAIC,aAAU52B,KAAKwC,SAChCq0B,WAAY,kBACZC,SAAU,EACVC,OAAQ/2B,KAAK+2B,OAAOjiB,KAAK9U,MACzBg3B,UAAWh3B,KAAKi3B,iBAAiBniB,KAAK9U,MACtCk3B,KAAMl3B,KAAKm3B,YAAYriB,KAAK9U,MAC5Bo3B,SAAUp3B,KAAKq3B,gBAAgBviB,KAAK9U,MACpCs3B,kBAAkB,EAClBC,iBAAiB,EACjBC,MAAO,mBACPC,cAAc,KAItBn1B,EAAapC,UAAU62B,OAAS,SAAUpxB,GACtC,GAAI3E,GAAShB,KAAK22B,UAAUe,kBAC5B,KAAK12B,EAAOiN,UAAUC,SAAS,mBAAsBlN,EAAOiN,UAAUC,SAAS,mBAAqBZ,UAAQtM,EAAQ,cAChH,OAAO,CAEX,IAII22B,GAJAC,EAAgB53B,KAAKoG,cAAc,OACnCf,UAAW,8CACX8qB,OAAQ,mCAAqCnwB,KAAKwC,QAAQq1B,aAG9D,IAAI73B,KAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,kBACnEypB,EAAerqB,UAAQtM,EAAQ,sBAAsByQ,WAAU,GAC/DnE,UAAQtM,EAAQ,sBAAsBiN,UAAUgF,IAAI,0BAEnD,CACD2kB,EAAc3pB,UAAUgF,IAAI,gBAC5B0kB,EAAe33B,KAAKoG,cAAc,OAASf,UAAW,oBACtD,IAAIma,GAAclS,UAAQtM,EAAQ,iBAAiByQ,WAAU,EAC7DkmB,GAAalxB,YAAY+Y,GACzBlS,UAAQtM,EAAQ,iBAAiBiN,UAAUgF,IAAI,sBAQnD,MANA2kB,GAAcnxB,YAAYkxB,GACNC,EAAc5yB,iBAAiB,KACrC8D,QAAQ,SAAUgN,GAC5BA,EAAMgiB,gBAAgB,QAE1B93B,KAAKwC,QAAQiE,YAAYmxB,GAClBA,GAEXt1B,EAAapC,UAAU+2B,iBAAmB,SAAUtxB,GAChD3F,KAAK+3B,YAAcpyB,EAAE3E,OACrBhB,KAAKg4B,oBAAqB,EAC1B/xB,SAASgyB,KAAKhqB,UAAUgF,IAAI,oBAE5BjT,KAAKk4B,YAAcvyB,EAAEuyB,WACrB,IAAIhxB,GAAOoG,UAAQ3H,EAAE3E,OAAQ,qBACzBoN,EAAQd,UAAQ3H,EAAE3E,OAAQ,sBAC1Bm3B,GAAkBC,WAAqB,OAATlxB,EAAgBA,EAAKF,GAAKoH,EAAMpH,GAAIqxB,YAAajqB,EAAMpH,GAAI0H,QAAQ,EACrG1O,MAAKoK,QAAQ,YAAa+tB,GAC1Bn4B,KAAKg4B,mBAAqBG,EAAczpB,QAE5CpM,EAAapC,UAAUi3B,YAAc,SAAUxxB,GAC3C,IAAI3F,KAAKg4B,mBAAT,CAGA,GAAIM,GAAiBt4B,KAAKwC,QAAQwC,iBAAiB,2BAQnD,IAPAszB,EAAexvB,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,8BAEzBsU,EAAiBt4B,KAAKwC,QAAQwC,iBAAiB,0BAChC8D,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,2BAErBlc,oBAAkBnC,EAAE3E,QAAxB,CAGA,GAA0B,SAAtB2E,EAAE3E,OAAOqe,UAAuB/R,UAAQ3H,EAAE3E,OAAQ,wBAA0BsM,UAAQ3H,EAAE3E,OAAQ,qBAC7FsM,UAAQ3H,EAAE3E,OAAQ,IAAMhB,KAAKwC,QAAQwE,KAAOsG,UAAQ3H,EAAE3E,OAAQ,eAAkB2E,EAAE3E,OAAO0E,eAAiBC,EAAE3E,OAAO0E,cAAcuI,UAAUC,SAAS,gBAAkBlO,KAAKgO,wBAE5K,WADAhO,MAAKk4B,YAAYjqB,UAAUgF,IAAI,kBAI/BjT,MAAKk4B,YAAYjqB,UAAU+V,OAAO,kBAEtC,IAAIuU,GAAajrB,UAAQ3H,EAAE3E,OAAQ,qBAC/Bgf,EAAU1S,UAAQ3H,EAAE3E,OAAQ,qBAChC,IAAIu3B,EAAY,CACZ,GAAIC,GAAOD,EAAWE,wBAElBC,GADAC,EAAShzB,EAAEiG,MAAMgtB,SAAWjzB,EAAEiG,MAAMitB,eAAe,GAAGD,SAC7BJ,EAAKM,IAC9BC,EAAmBP,EAAKQ,OAASL,CAEjCD,IADAO,EAAY,IAEZV,EAAWtqB,UAAUgF,IAAI,wBAEpB8lB,EAAmBE,GACxBV,EAAWtqB,UAAUgF,IAAI,+BAG5B,IAAItN,EAAE3E,OAAOiN,UAAUC,SAAS,gBAA+C,IAA7BvI,EAAE3E,OAAO6O,SAASlP,OACrEgF,EAAE3E,OAAOiN,UAAUgF,IAAI,+BAEtB,IAAItN,EAAE3E,OAAOiN,UAAUC,SAAS,gBAAkBvI,EAAE3E,OAAO6O,SAAS,GAAG5B,UAAUC,SAAS,qBAAsB,CAC7GsqB,EAAO7yB,EAAE3E,OAAO6O,SAAS,GAAG4oB,yBAE5BC,GADAC,EAAShzB,EAAEiG,MAAMgtB,SAAWjzB,EAAEiG,MAAMitB,eAAe,GAAGD,SAC7BJ,EAAKM,MAC9BG,EAAY,KAEZtzB,EAAE3E,OAAOiN,UAAUgF,IAAI,4BAG1B,KAAI3F,UAAQ3H,EAAE3E,OAAQ,uBAAyB2E,EAAE3E,OAAOiN,UAAUC,SAAS,wBACvE8R,IACDA,EAAUra,EAAE3E,QAEZgf,EAAQhZ,GAAG1B,QAAQ,WAAa,GAAG,CACnC,GAAIkzB,GAAO7yB,EAAE3E,OAAOy3B,wBAChBE,EAAShzB,EAAEiG,MAAMgtB,SAAWjzB,EAAEiG,MAAMitB,eAAe,GAAGD,QAEtDK,EAAY,IADZF,EAAmBP,EAAKQ,OAASL,GAEdM,GACnBtzB,EAAE3E,OAAOiN,UAAUgF,IAAI,2BAInC,GAAIklB,IACAC,WAA2B,OAAfG,EAAsBA,EAAWvxB,GAAiB,OAAZgZ,EAAmBA,EAAQhZ,GAAK,KAClFqxB,YAAyB,OAAZrY,EAAmBA,EAAQhZ,GAAK,KAAM0H,QAAQ,EAE/D1O,MAAKoK,QAAQ,OAAQ+tB,GACrBn4B,KAAKg4B,mBAAqBG,EAAczpB,UAE5CpM,EAAapC,UAAUm3B,gBAAkB,SAAU1xB,GAC/C,GAAIlD,GAAQzC,IACZ,KAAIA,KAAKg4B,mBAAT,CAGA,GAAIkB,GAAc5rB,UAAQ3H,EAAE3E,OAAQ,oBAChC8G,qBAAkBoxB,IAAgBvzB,EAAE3E,OAAO0E,eAC3CC,EAAE3E,OAAO0E,cAAcuI,UAAUC,SAAS,gBAAkBlO,KAAKgO,0BACjEkrB,EAAc5rB,UAAQ3H,EAAE3E,OAAO0E,cAAcuJ,uBAAwB,qBAEzE,IAAIkqB,EACCrxB,qBAAkBnC,EAAEoxB,UACrBoC,EAAgB7rB,UAAQ3H,EAAEoxB,OAAQ,oBAEtC,IAAIrjB,EACJ,KAAKylB,EAAe,CAChB,GAAIC,GAAY9rB,UAAQ3H,EAAE3E,OAAQ,sBAC9Bq4B,GACA3qB,QAAQ,EAAO4qB,WAA4B,OAAhBJ,EAAuBA,EAAYlyB,GAC1C,OAAdoyB,EAAqBA,EAAUpyB,GAAK,KAAMuyB,YAA2B,OAAdH,EAAqBA,EAAUpyB,GAAK,KAErGhH,MAAKoK,QAAQ,OAAQivB,GACjBA,EAAc3qB,SACdyqB,GAAgB,GAEpBzlB,EAAW1T,KAAK+O,gBAEpB/O,KAAKkS,eAAgB,CACrB,IAAIsnB,GAAOx5B,KAAKgO,yBAA2BrI,EAAE3E,OAAO0E,eAChDC,EAAE3E,OAAO0E,cAAcuI,UAAUC,SAAS,eAAiBvI,EAAE3E,OAAO0E,cAAcuJ,uBAAyBtJ,EAAE3E,MACjH,IAAIk4B,IAAgBC,EAAe,CAC/B,GAAIM,GAAYP,EAAYlyB,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,EAC1E,IAAIhI,KAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,iBACnElO,KAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,kBAAmB,CAClFhH,MAAO,EACPlH,MAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK+3B,aAC1B/3B,KAAKuN,YAAYD,UAAQtN,KAAK+3B,YAAa,yBAG3C7wB,EAAOlH,KAAKkP,QAAQlP,KAAK+3B,aACzB/3B,KAAKiN,WAAWjN,KAAK+3B,eAErB2B,EAAYhsB,YAAW1N,KAAKqO,SAAS6qB,OAAkB,IAE7ClI,aACV0I,EAAYA,EAAU1I,aAEtBtkB,EAAYY,UAAQ4rB,EAAa,uBACTl0B,iBAAiB,sBACjC8D,QAAQ,SAAU6Y,GACtBlf,EAAMD,QAAQsC,cAAc,IAAM6c,EAAI3a,KACtCvE,EAAM8K,YAAYoU,IAM1B,KAAK,GAHDgY,GAAYjtB,EAAU1H,iBAAiB,qBACvC40B,KACAC,MAAU,GACLr5B,EAAI,EAAGA,EAAIm5B,EAAUh5B,OAAQH,KAC9Bm5B,EAAUn5B,GAAGyN,UAAUC,SAAS,yBAChCyrB,EAAUn5B,GAAGyN,UAAUC,SAAS,8BAChC2rB,EAAUr5B,GAEdo5B,EAAQnyB,KAAKkyB,EAAUn5B,GAAGwG,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAE9DhH,MAAK85B,YAAYF,GACbV,EAAYjrB,UAAUC,SAAS,wBAC/BwrB,EAAUvyB,MAAM+Q,OAAO2hB,EAAS,EAAG3yB,GAGnCwyB,EAAUvyB,MAAM+Q,OAAO2hB,EAAU,EAAG,EAAG3yB,GAE3CwyB,EAAUvyB,MAAM2B,QAAQ,SAAU5B,GAC1BzE,EAAMuL,wBACD9G,EAAKC,MAIN1E,EAAM6a,WAAWpW,GAAOuyB,GAHxBh3B,EAAM6sB,UAAUpoB,GAAOuyB,GAOvBvyB,EAAKlE,UACLP,EAAM6a,WAAWpW,GAAOuyB,GAGxBh3B,EAAM6sB,UAAUpoB,GAAOuyB,UAMtC,IAAID,EAAKvrB,UAAUC,SAAS,gBAA2C,IAAzBsrB,EAAK3pB,SAASlP,SAAiBw4B,EAAe,CAC7F,GACIY,IADArtB,EAAYY,UAAQksB,EAAM,uBACNxyB,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,GAClEd,MAAO,EACPlH,MAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK+3B,aAC1B/3B,KAAKuN,YAAYD,UAAQtN,KAAK+3B,YAAa,yBAG3C7wB,EAAOlH,KAAKkP,QAAQlP,KAAK+3B,aACzB/3B,KAAKiN,WAAWjN,KAAK+3B,cAErB/3B,KAAKgO,wBACA9G,EAAKC,MAINnH,KAAKsd,WAAWpW,GAAO6yB,GAHvB/5B,KAAKsvB,UAAUpoB,GAAO6yB,GAOtB7yB,EAAKlE,UACLhD,KAAKsd,WAAWpW,GAAO6yB,GAGvB/5B,KAAKsvB,UAAUpoB,GAAO6yB,OAI7B,IAAIP,EAAKvrB,UAAUC,SAAS,gBAAkBsrB,EAAK3pB,SAAS,GAAG5B,UAAUC,SAAS,uBAAyBirB,EAAe,CAC3H,GAAIzsB,GAAYY,UAAQksB,EAAM,sBAC1BQ,EAAYttB,EAAU1F,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,GACpEd,MAAO,EACPlH,MAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK+3B,aAC1B/3B,KAAKuN,YAAYD,UAAQtN,KAAK+3B,YAAa,yBAG3C7wB,EAAOlH,KAAKkP,QAAQlP,KAAK+3B,aACzB/3B,KAAKiN,WAAWjN,KAAK+3B,aAEzB,IAAI2B,GAAYhsB,YAAW1N,KAAKqO,SAASmrB,OAAW,EAEhDE,GAAU1I,aACV0I,EAAYA,EAAU1I,YAETwI,EAAKx0B,iBAAiB,sBAC5B8D,QAAQ,SAAU6Y,GACrBlf,EAAMD,QAAQsC,cAAc,IAAM6c,EAAI3a,KACtCvE,EAAM8K,YAAYoU,MAGtBgY,EAAYjtB,EAAU1H,iBAAiB,sBACjC8D,QAAQ,SAAU6Y,GACpBlf,EAAMD,QAAQsC,cAAc,IAAM6c,EAAI3a,KACtCvE,EAAMwK,WAAW0U,KAGrB3hB,KAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,kBACnElO,KAAKsd,WAAWpW,GAAO8yB,GAGvBh6B,KAAKsvB,UAAUpoB,GAAO8yB,GAE1BN,EAAUvyB,MAAM2B,QAAQ,SAAU5B,GAC1BzE,EAAMuL,wBACD9G,EAAKC,MAIN1E,EAAM6a,WAAWpW,GAAO8yB,GAHxBv3B,EAAM6sB,UAAUpoB,GAAO8yB,GAOvB9yB,EAAKlE,UACLP,EAAM6a,WAAWpW,GAAO8yB,GAGxBv3B,EAAM6sB,UAAUpoB,GAAO8yB,SAKlC,KAAK1sB,UAAQ3H,EAAE3E,OAAQ,uBAAyB2E,EAAE3E,OAAOiN,UAAUC,SAAS,wBAA0BirB,EAAe,CAClHjyB,MAAO,KACXgyB,EAAc5rB,UAAQ3H,EAAE3E,OAAQ,wBACZ2E,EAAE3E,OAAOiN,UAAUC,SAAS,uBAC5CgrB,EAAcvzB,EAAE3E,QAGJ,YADZ+4B,EAAUb,EAAYlyB,GAAGgB,MAAMhI,KAAKwC,QAAQwE,GAAK,KAAK,GAAGgB,MAAM,KAAK,MAEhEhI,KAAK22B,UAAUe,mBAAmBhyB,cAAcuI,UAAUC,SAAS,mBACnEhH,EAAOlH,KAAKqO,SAASrO,KAAK+3B,aAC1B/3B,KAAKuN,YAAYD,UAAQtN,KAAK+3B,YAAa,yBAG3C7wB,EAAOlH,KAAKkP,QAAQlP,KAAK+3B,aACzB/3B,KAAKiN,WAAWjN,KAAK+3B,cAErB/3B,KAAKgO,wBACA9G,EAAKC,MAINnH,KAAKsd,WAAWpW,GAAO6yB,GAHvB/5B,KAAKsvB,UAAUpoB,GAAO6yB,GAOtB7yB,EAAKlE,UACLhD,KAAKsd,WAAWpW,GAAO6yB,GAGvB/5B,KAAKsvB,UAAUpoB,GAAO6yB,IAKjCZ,GACDn5B,KAAKoK,QAAQ,cAAgBokB,aAAc9a,EAAUxM,KAAMlH,KAAK+O,gBAAiB9F,KAAM,kBAE3FjJ,KAAKkS,eAAgB,EACrBjM,SAASgyB,KAAKhqB,UAAU+V,OAAO,mBAC/B,IAAIsU,GAAiBt4B,KAAKwC,QAAQwC,iBAAiB,2BACnDszB,GAAexvB,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,8BAEzBsU,EAAiBt4B,KAAKwC,QAAQwC,iBAAiB,0BAChC8D,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,2BAEzBsU,EAAiBt4B,KAAKwC,QAAQwC,iBAAiB,wBAChC8D,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,wBAErBre,EAAEoxB,QAAUpxB,EAAEoxB,OAAO9oB,UAAUC,SAAS,sBAAwBjI,SAASnB,cAAc,IAAMa,EAAEoxB,OAAO9oB,UAAU,KAChH+V,SAAOre,EAAEoxB,QAET/2B,KAAKgO,yBACLhO,KAAKuX,YAGbjV,EAAapC,UAAU6Q,eAAiB,SAAU+G,GAC9C,GAAIA,EACA,IACI,MAAwB,kBAAbA,IAA2B7R,SAASjB,iBAAiB8S,GAAUnX,OAC/Ds5B,UAAiBh0B,SAASnB,cAAcgT,GAAU2D,UAAUoS,QAG5DqM,UAAQpiB,GAGvB,MAAOqiB,GACH,MAAOF,WAAiBniB,KAKpCxV,EAAapC,UAAUo2B,mBAAqB,SAAUtP,GAClD,GAAIvkB,GAAQzC,KACR4K,EAAO5K,KAAK+mB,YAAYkB,aAAajB,GACrCe,EAAW,GAAIC,WACnBpd,GAAK0d,KAAK,SAAU3iB,GACZA,EAAE4iB,QAAU5iB,EAAE4iB,OAAOzd,OACrBrI,EAAMyF,SAAWvC,EAAE4iB,OAAOzd,OAG1BrI,EAAMyF,SAAWvC,EAAEmF,OAEvBrI,EAAM+zB,gBACPhO,MAAM,SAAU7iB,GACfoiB,EAASU,OAAO9iB,MAGxBrD,EAAapC,UAAUs2B,YAAc,WACjCx2B,KAAKiI,aACLjI,KAAKyvB,cACLzvB,KAAKo6B,cAET93B,EAAapC,UAAUk6B,WAAa,WAChC,GAAIC,GAAUr6B,KAAKqH,YACnBizB,gBAAarnB,IAAIonB,EAAS,QAASr6B,KAAK6L,kBAAmB7L,MAC3Ds6B,eAAarnB,IAAIonB,EAAS,WAAYr6B,KAAK2L,kBAAmB3L,MAC9Ds6B,eAAarnB,IAAIonB,EAAS,UAAWr6B,KAAK2L,kBAAmB3L,MAC7Ds6B,eAAarnB,IAAIjT,KAAKwC,QAAS,UAAWxC,KAAKu6B,gBAAiBv6B,MAC5DA,KAAK8R,kBACLwoB,eAAarnB,IAAIhN,SAAU,UAAWjG,KAAKu6B,gBAAiBv6B,MAEhEohB,OAAOoZ,iBAAiB,SAAUx6B,KAAKy6B,oBAAoB3lB,KAAK9U,QAEpEsC,EAAapC,UAAUivB,aAAe,WAClC,GAAIkL,GAAUr6B,KAAKqH,YACnBizB,gBAAatW,OAAOqW,EAAS,QAASr6B,KAAK6L,mBAC3CyuB,eAAatW,OAAOqW,EAAS,WAAYr6B,KAAK2L,mBAC9C2uB,eAAatW,OAAOqW,EAAS,UAAWr6B,KAAK2L,mBAC7C2uB,eAAatW,OAAOhkB,KAAKwC,QAAS,UAAWxC,KAAKu6B,iBAClDD,eAAatW,OAAO/d,SAAU,UAAWjG,KAAKu6B,iBAC9CnZ,OAAOsZ,oBAAoB,SAAU16B,KAAKy6B,sBAE9Cn4B,EAAapC,UAAU8O,eAAiB,SAAUhO,EAAQ25B,GAItD,IAAK,GAHDC,GAAc55B,YAAkBksB,SAAWltB,KAAK+G,UAAU/F,EAAOgG,IAAMhH,KAAK+G,UAAU,GAAK/F,GAC3F8I,EAAM6wB,EAAWC,EAAWj6B,OAAS,EAAIi6B,EAAWj6B,OACpDuG,EAAOlH,KAAKkH,KACP1G,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACrB0G,EAAOlH,KAAK+uB,eAAe6L,EAAWp6B,GAAI0G,EAAY,IAAN1G,EAEpD,OAAO0G,IAQX5E,EAAapC,UAAUqN,YAAc,SAAUvM,GAC3C,GAEI+4B,GAFAt3B,EAAQzC,KACR0M,EAAY1L,CAUhB,IARsB,gBAAXA,IACP+4B,EAAU/5B,KAAKwC,QAAQwE,GAAK,IAAMhG,EAClCA,EAASiF,SAASqG,eAAeytB,GACjCA,EAAUA,EAAQ5rB,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAGjD+yB,EAAUrtB,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAE1C,WAAZ+yB,GAAyB/4B,EAA7B,CAGA,GAAI2G,IAASmE,QAASiuB,EAASrrB,QAAQ,EAAOzF,KAAM,cAC/CjJ,MAAK4E,eAAkB5E,KAAKkS,cAM7BlS,KAAK66B,2BAA2BlzB,EAAM3G,GALtChB,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAMo4B,2BAA2BhsB,EAAoB7N,OAOjEsB,EAAapC,UAAU26B,2BAA6B,SAAUlzB,EAAM3G,GAChE,IAAK2G,EAAK+G,OAAQ,CACd,GAAIhC,GAAY1L,EACZkG,EAAOlH,KAAKgP,eAAetC,GAAW,GACtC+D,EAAQ,EACRjQ,MAAI,GACJsJ,MAAM,GACNgF,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACtC4zB,EAAWpuB,EAAUwR,mBACrBrK,EAAWnH,EAAUuC,uBACrBzM,EAAUkK,EAAU1H,iBAAiB,sBACrC8U,EAAUpN,EAAU1H,iBAAiB,aAEzC,KADA8E,EAAMgQ,EAAQnZ,OACTH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjBgF,eAAasU,EAAQtZ,GAAI,WAAWiF,SAExC,KAAKjF,EAAI,EAAGsJ,EAAMtH,EAAQ7B,OAAQH,EAAIsJ,EAAKtJ,UAChCR,MAAK+G,UAAUvE,EAAQhC,GAAGwG,GAErC,MAA4C,OAArC0F,EAAUuC,wBACbvC,EAAYA,EAAUuC,yBACjBjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBgG,EAAUuB,UAAUC,SAAS,gBACpDlO,KAAK0G,iBAAmBgG,EAAUuB,UAAUC,SAAS,qBACjDxB,EAAUuB,UAAUC,SAAS,yBACrCuC,GAGHzQ,MAAKgO,yBACF8sB,GAAYA,EAASz1B,UAAUC,QAAQ,oBAAsB,IAC7DwB,eAAag0B,GAAW,mBACxBrsB,YAAUqsB,GAAW,iBACjBjnB,GAAYA,EAASxO,UAAUC,QAAQ,qBAAuB,GAC9DmJ,YAAUoF,GAAW,sBAIjC,IAAI1D,GAAOzD,EAAUhH,cAAcA,cAAcA,cAC7Cq1B,IAEJ,IAAI/6B,KAAKmR,SAAWnR,KAAKoR,UAAW,CAChC,GAAI4pB,GAAU9zB,EAAKC,MAAMsJ,GACrBwqB,EAAej6B,EAAOgE,iBAAiB,oBAC3C,IAAIg2B,GAAWA,EAAQ7zB,MACnB,IAAK,GAAI/F,GAAI,EAAGA,EAAI45B,EAAQ7zB,MAAMxG,OAAQS,IAAK,CAC3C,GAAI2H,GAAS/I,KAAK0S,UAAUsoB,EAAQ7zB,MAAM/F,GAAGyG,MAC7C,IAAIozB,EAAa75B,GAAI,CACjB,GAAI85B,GAAqBD,EAAa75B,GAAG0D,cAAc,oBACnDiE,KAAWA,EAAO6H,cAAiB5Q,KAAKm7B,mBAAmBpyB,IAAWmyB,IACtEH,EAAatzB,KAAKwzB,EAAa75B,GAAG4F,MAMtDsR,SAAOtX,GACHhB,KAAK0G,gBACL1G,KAAKuY,iBAAiBvX,EAAOgG,KAE7B+zB,EAAap6B,QACbX,KAAKuY,gBAAgBwiB,GAEzB7zB,EAAKC,MAAM+Q,OAAOzH,EAAO,SAClBzQ,MAAK+G,UAAUY,EAAKmE,SAC3B9L,KAAKga,mBACLha,KAAKoH,qBAAqB+I,EAAMjJ,GAC5BlH,KAAKgO,yBAA2B6F,KAAe7T,KAAK0G,gBAAkBmN,EAAS5F,UAAUC,SAAS,gBACjGlO,KAAK0G,gBAAkBmN,EAAS5F,UAAUC,SAAS,wBACpDoK,SAAOzE,GAEN7T,KAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,SAAUzC,GAE3B3H,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,iBAGrE5E,EAAapC,UAAUi7B,mBAAqB,SAAUpyB,GAGlD,MADSA,GAAO+O,WAAwC,gBAApB/O,GAAO+O,cAAoD9D,KAA3BjL,EAAO+O,SAAS3X,SAGxFmC,EAAapC,UAAU+M,WAAa,SAAUjM,GAC1C,GAAIyB,GAAQzC,KAIR2H,GAASmE,QAHGwB,UAAQtM,EAAQ,sBACRgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAE3BmI,OADlB7B,UAAQtM,EAAQ,qBAAqBgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACrC0H,QAAQ,EAAOzF,KAAM,aAC/DjJ,MAAK4E,eAAkB5E,KAAKkS,cAM7BlS,KAAKo7B,0BAA0BzzB,EAAM3G,GALrChB,KAAKoK,QAAQ,eAAgBzC,EAAM,SAAUkH,GACzCpM,EAAM24B,0BAA0BvsB,EAAoB7N,MAOhEsB,EAAapC,UAAUk7B,0BAA4B,SAAUzzB,EAAM3G,GAC/D,IAAK2G,EAAK+G,OAAQ,CACd,GAAIhC,GAAYY,UAAQtM,EAAQ,sBAC5BkG,EAAOlH,KAAKgP,eAAetC,GAC3BwD,EAAW5C,UAAQtM,EAAQ,qBAC3B8N,EAAc9O,KAAK+O,cAAc/O,KAAKkH,MACtC2M,EAAW3D,EAASjB,uBACpBwB,EAAQ,EACR4qB,EAAcnrB,EACd4qB,EAAW5qB,EAASgO,mBACpBpE,EAAU5J,EAASlL,iBAAiB,cACpCxE,MAAI,GACJsJ,EAAMgQ,EAAQnZ,MAClB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjBgF,eAAasU,EAAQtZ,GAAI,WAAWiF,SAExC,MAA2C,OAApCyK,EAASjB,wBACZiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,IAAI1H,GAAS/I,KAAK0S,UAAUxL,EAAKC,MAAMsJ,GAAO5I,MAC1CkB,IAAUA,EAAO+O,UAAYujB,EAAYv2B,cAAc,gBACvD9E,KAAKslB,gBAAgBvc,EAAQsyB,EAAYv2B,cAAc,eAAekC,MAErE6M,GAAYA,EAASxO,UAAUC,QAAQ,oBAAsB,IAC1Dw1B,GACAh0B,eAAag0B,GAAW,mBAG3BA,GAAYA,EAASz1B,UAAUC,QAAQ,oBAAsB,IAC1DuO,GACA/M,eAAa+M,GAAW,qBAGhC,IAAIqnB,GAAqBG,EAAYv2B,cAAc,oBAEnD,KACI,GAAI9E,KAAKgO,0BAA4BqtB,EAAYpsB,wBAA0BosB,EAAYnd,oBAAqB,CACxG,GAAIod,GAAeD,EAAYpsB,uBAC3BssB,EAAaF,EAAYnd,kBACzBpW,qBAAkByzB,MAAkBv7B,KAAK0G,gBAAkB40B,EAAartB,UAAUC,SAAS,gBACvFlO,KAAK0G,gBAAkB40B,EAAartB,UAAUC,SAAS,wBACvDotB,GAAgBA,EAAarsB,wBAA0BqsB,EAAarsB,uBAAuBhB,UAAUC,SAAS,sBACjGlO,KAAKkP,QAAQosB,EAAarsB,wBAChCjM,UAAY,MAEvBsV,SAAOgjB,MAEAt7B,KAAK0G,gBAAkB60B,EAAWttB,UAAUC,SAAS,gBACxDlO,KAAK0G,gBAAkB60B,EAAWttB,UAAUC,SAAS,wBACzDoK,SAAOijB,GAGfjjB,SAAO+iB,GAEX,MAAOG,GACH,OAEAzyB,GAAUA,EAAO6H,cACjB5Q,KAAKuY,iBAAiB8iB,EAAYr0B,KAElC+B,GAAU/I,KAAKm7B,mBAAmBpyB,IAAWmyB,GAC7Cl7B,KAAKuY,iBAAiB8iB,EAAYr0B,KAEtCE,EAAKC,MAAM+Q,OAAOzH,EAAO,GACnBvJ,EAAKC,MAAM,IAAMD,EAAKC,MAAM,GAAGA,OACjCnH,KAAKoH,qBAAqBsF,EAAWxF,IAAMlH,KAAKgO,wBAGpD,KAAK,GADD8V,GAAc9jB,KAAKwC,QAAQwC,iBAAiB,cACvCy2B,EAAM,EAAGA,EAAM3X,EAAYnjB,OAAQ86B,IACxCj2B,eAAase,EAAY2X,GAAM,WAAWlkB,QAAQuM,EAAY2X,GAE7Dz7B,MAAK4E,eAAkB5E,KAAKkS,eAC7BlS,KAAKoK,QAAQ,SAAUzC,GAE3B3H,KAAKoP,YAAYN,EAAa9O,KAAK+O,cAAc/O,KAAKkH,MAAO,gBAGrE5E,EAAapC,UAAUyN,cAAgB,SAAUzG,EAAMP,GAWnD,GAVI3G,KAAK0G,gBAAkBC,IACvB3G,KAAK2G,QAAS,GAElB3G,KAAK2E,QACL3E,KAAKsc,eAAiB,EACtBtc,KAAKuQ,cAAgB,EACrBvQ,KAAK4E,eAAgB,EACrB5E,KAAKiH,eAAgBC,KAAMA,IAAQ,GACnCA,EAAOlH,KAAKkf,kBAAkBlf,KAAKkH,MAAM,GACzClH,KAAKwvB,YAAYxvB,KAAKkH,KAAMlH,KAAKwC,QAAQsC,cAAc,uBAAuB,EAAM9E,KAAKkH,KAAKnE,IAAK4D,GAC/FO,EAAKjE,SAAU,CACf,GAAIy4B,GAAgB17B,KAAKwC,QAAQsC,cAAc,sBAAsBA,cAAc,kBACnF9E,MAAKoN,UAAUsuB,GAEnB17B,KAAK4E,eAAgB,GAEzBtC,EAAapC,UAAUq6B,gBAAkB,SAAU50B,GAC/C,GAAIA,EAAE6a,gBAAkBxgB,KAAKwC,UAAWxC,KAAK6vB,UAA2B,KAAdlqB,EAAEg2B,SAAgC,KAAdh2B,EAAEg2B,SAAgC,KAAdh2B,EAAEg2B,SAG/F,GAAe,WAAXh2B,EAAEi2B,MAAqB57B,KAAK8R,iBAAkB,CACnD9R,KAAKg4B,oBAAqB,EAC1B/xB,SAASgyB,KAAKhqB,UAAU+V,OAAO,mBAC/B,IAAIsU,GAAiBt4B,KAAKwC,QAAQwC,iBAAiB,2BACnDszB,GAAexvB,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,8BAEzBsU,EAAiBt4B,KAAKwC,QAAQwC,iBAAiB,0BAChC8D,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,2BAEzBsU,EAAiBt4B,KAAKwC,QAAQwC,iBAAiB,wBAChC8D,QAAQ,SAAU6Y,GAC7BA,EAAI1T,UAAU+V,OAAO,uBAEzB,IAAI6X,GAAc77B,KAAKwC,QAAQsC,cAAc,qBACzC+2B,IACA7X,SAAO6X,GAEP77B,KAAKgO,yBACLhO,KAAKuX,eAtBT5R,GAAEm2B,kBA0BVx5B,EAAapC,UAAUu6B,oBAAsB,WACrC9R,UAAQC,UAAYxH,OAAOsO,WAAa,IACxC1vB,KAAKyS,YAAc,WAGnBzS,KAAKyS,YAAc,cAG3BnQ,EAAapC,UAAUqY,gBAAkB,SAAU0iB,IAE3Cj7B,KAAKmR,SAAWnR,KAAKoR,YACrBpR,KAAK+7B,cAAcd,IAG3B34B,EAAapC,UAAUkH,qBAAuB,SAAUsF,EAAWvF,EAAO4Q,EAAgBikB,GACtF,IAAKh8B,KAAK0G,eAAgB,CACtB,GAAI1G,KAAK6vB,SACL,MAEJ,IAAIoM,GAAQvvB,EAAU5H,cAAc,gBAAgB4f,kBAChDrV,EAAU3C,EAAU5H,cAAc,mBAClCwK,EAAS5C,EAAU5H,cAAc,iBACrC,IAAIm3B,EAAQ,EAQR,GAPA5sB,EAAQ0P,UAAW,EACnBzP,EAAOyP,UAAW,GACdzP,EAAO4O,mBAAmBjQ,UAAUC,SAAS,kBAC7CmB,EAAQ6O,mBAAmBjQ,UAAUC,SAAS,oBAC9CoB,EAAO4O,mBAAmBjQ,UAAU+V,OAAO,iBAC3C3U,EAAQ6O,mBAAmBjQ,UAAU+V,OAAO,kBAE5ChkB,KAAKgO,0BAA4B+J,EAAgB,CAIjD,IAHA,GAAItH,GAAQ,EACRjO,MAAU,KAED,CACT,GAAI05B,GAAWxvB,EAAUhH,cAAcV,iBAAiB,mBACpDm3B,EAAUzvB,EAAUhH,cAAcV,iBAAiB,iBAIvD,IAHAqK,EAAU6sB,EAASA,EAASv7B,QAAU,EAAI8P,IAC1CnB,EAAS6sB,EAAQA,EAAQx7B,QAAU,EAAI8P,MACvCjO,EAAU05B,EAASA,EAASv7B,QAAU,EAAI8P,OAC3BjO,EAAQkD,eAAyD,SAAxClD,EAAQkD,cAAciH,MAAMC,QAIhE,KAHA6D,KAOR,IADIN,EAAOzD,EAAUuC,uBACdkB,IAASA,EAAKlC,UAAUC,SAAS,qBAAqB,CACzD,GAAIiC,EAAKlC,UAAUC,SAAS,qBAAsB,CAC9CiC,EAAOA,EAAKnL,iBAAiB,qBAAqBmL,EAAKnL,iBAAiB,qBAAqBrE,OAAS,EACtG,OAEJwP,EAAOA,EAAKlB,uBAEhB,GAAI+sB,GAActvB,EAAUuB,UAAUC,SAAS,qBAC3CiC,EAAOzD,EAEoB,QADvBgH,EAAW1T,KAAKqO,SAAS8B,IAChBnN,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,MAGrB,IAAIY,GAAQA,EAAKlC,UAAUC,SAAS,oBAAqB,CACtDiB,EAASgB,EAAKnJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAEzB,SADvB0M,EAAW1T,KAAKkP,QAAQC,IACfnM,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,OAIpBwI,KACF5Q,GAA6B,OAApBA,EAAMnE,UACfsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,OAK1B,IAAIvP,KAAKgO,0BAA4B+J,EAAgB,CAIjD,IAHA,GAAItH,GAAQ,EACRjO,MAAU,KAED,CACT,GAAI05B,GAAWxvB,EAAUhH,cAAcV,iBAAiB,mBACpDm3B,EAAUzvB,EAAUhH,cAAcV,iBAAiB,iBAQvD,IAPAqK,EAAU6sB,EAASA,EAASv7B,QAAU,EAAI8P,IAC1CnB,EAAS6sB,EAAQA,EAAQx7B,QAAU,EAAI8P,IACnCzQ,KAAK4E,gBACLyK,EAAU3C,EAAUhH,cAAcZ,cAAc,kDAChDwK,EAAS5C,EAAUhH,cAAcZ,cAAc,oDAEnDtC,EAAU05B,EAASA,EAASv7B,QAAU,EAAI8P,OAC3BjO,EAAQkD,eAAyD,SAAxClD,EAAQkD,cAAciH,MAAMC,QAIhE,KAHA6D,KAQR,IAFA,GAAIN,OAAO,GACPuJ,EAAWhN,EAAUuC,uBAClByK,GAAU,CAIb,GAHIA,EAASzL,UAAUC,SAAS,uBAC5BwL,EAAWA,EAAS1U,iBAAiB,qBAAqB0U,EAAS1U,iBAAiB,qBAAqBrE,OAAS,IAElH+Y,EAASzL,UAAUC,SAAS,oBAAqB,CACjDiC,EAAOuJ,CACP,OAEJA,EAAWA,EAASzK,uBAKxB,GAHInH,oBAAkBqI,IAASzD,EAAU1H,iBAAiB,qBAAqB0H,EAAU1H,iBAAiB,qBAAqBrE,OAAS,KACpIwP,EAAOzD,EAAU1H,iBAAiB,qBAAqB0H,EAAU1H,iBAAiB,qBAAqBrE,OAAS,IAEhHq7B,GAActvB,EAAUuB,UAAUC,SAAS,qBAC3CiC,EAAOzD,EAEoB,QADvBgH,EAAW1T,KAAKqO,SAAS8B,IAChBnN,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,MAGrB,IAAIY,EAAM,CACX,GAAIhB,GAASgB,EAAKnJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAChD0M,EAAW1T,KAAKkP,QAAQC,EACD,QAAvBuE,EAAS1Q,WAAsBsM,EAC/BA,EAAOC,SAAU,EAEZF,IACLA,EAAQE,SAAU,QAIpBwI,IAAmBjQ,oBAAkBuH,KAC3CA,EAAQE,SAAU,EAClBF,EAAQ0P,UAAW,EACnBzP,EAAOC,SAAU,EACjBD,EAAOyP,UAAW,EACd5X,IACAmI,EAAO4O,mBAAmBjQ,UAAUgF,IAAI,iBACxC5D,EAAQ6O,mBAAmBjQ,UAAUgF,IAAI,qBAY7D3Q,EAAapC,UAAU6O,cAAgB,SAAUqtB,GAC7Cp8B,KAAKoE,cAAe,EACfg4B,IACDA,EAAcp8B,KAAKq8B,WAEvB,IAAIC,GAAeF,EAAYp5B,UAC3B+Q,EAAeqoB,EAAYr5B,IAC3BksB,EAAWvhB,YAAW0uB,EAAYj1B,UAAW,GAC7CD,EAAQY,oBAAkBs0B,EAAYn5B,UAEtCjD,KAAKkf,mBAAoBlc,UAAWs5B,EAAcn1B,MAAO8nB,EAAUlsB,IAAKgR,IAAgB,GADxF/T,KAAKkf,mBAAoBlc,UAAWs5B,EAAcn1B,MAAO8nB,EAAUlsB,IAAKgR,EAAc9Q,SAAUm5B,EAAYn5B,WAAY,EAG5H,OADAjD,MAAKoE,cAAe,EACb8C,GAEX5E,EAAapC,UAAUgf,kBAAoB,SAAUhY,EAAMq1B,GACvD,GAAIz0B,oBAAkBZ,GAClB,MAAO,KAEX,IAAI0pB,EACJ,IAAI1pB,EAAKC,OAASD,EAAKC,MAAMxG,SAAWlB,OAAO6I,KAAKpB,EAAKC,MAAM,IAAIxG,OAAS,GAAK47B,GAE7E,IAAK,GADDxiB,GAAO7S,EAAKC,MAAMxG,OACbgK,EAAI,EAAGA,EAAIoP,EAAMpP,IACtBimB,EAAU1pB,EAAKC,MAAMwD,GACrBimB,EAAU5wB,KAAKkf,kBAAkB0R,EAAS2L,GAC1Cr1B,EAAKC,MAAMwD,GAAKimB,EACZnxB,OAAO6I,KAAKsoB,GAASjwB,OAAS,GAAK47B,IACnCr1B,EAAKC,MAAM+Q,OAAOvN,EAAG,GACrBA,IACAoP,IAKZ,IAAIyiB,GAAYt1B,EAAK+Q,MACrB,IAAK/Q,EAAKW,OAAwB,KAAfX,EAAKW,QAAkBC,oBAAkB00B,IAAeA,GAAiC,aAAnBA,EAAUvzB,MAC5E,WAAnBuzB,EAAUvzB,MAMV,GALI/B,EAAK0L,WACD1L,EAAK0L,SAASiF,WAAWvS,QAAQ,SAAW,GAAK4B,EAAK0L,SAASiF,WAAWvS,QAAQ,UAAY,KAC9F4B,EAAKrE,MAAQ,MAGhB7C,KAAKmD,aAAenD,KAAKmxB,mBAAsC,KAAfjqB,EAAKW,OAAkC,KAAlBX,EAAK0L,WAC1E5S,KAAKoE,aAA8B,KAAf8C,EAAKrE,WAA+BmR,KAAf9M,EAAKrE,UAAqCmR,KAAf9M,EAAKrE,QACzE25B,GAAaA,EAAUC,WAAa,CACrC,GAAIz5B,GAAYkE,EAAKlE,UACjB05B,EAAax1B,EAAKjE,QACtBiE,IAAS6C,MAAS7C,EAAK6C,MAAOlC,MAASX,EAAKW,MAAO+K,SAAY1L,EAAK0L,SAAU3J,KAAQ/B,EAAK+B,KAAMpG,MAASqE,EAAKrE,OAC1GiF,oBAAkB40B,KACnBx1B,EAAKjE,SAAWy5B,GAEhB15B,IACAkE,EAAKlE,UAAYA,GAEjBw5B,IAEAt1B,EAAK+Q,OAASukB,GAGK,OAAlBt1B,EAAK0L,UAAuC,UAAlB1L,EAAK0L,WAAyB1L,EAAKrE,OAA+B,IAAtBqE,EAAKrE,MAAMlC,SAClFuG,OAGmB,YAAlBA,EAAK0L,UAA4C,eAAlB1L,EAAK0L,WAA8BhT,MAAM+8B,QAAQz1B,EAAKrE,SAAWqE,EAAKrE,MAAMlC,OAAS,GAAKuG,EAAKrE,MAAM6qB,KAAK,SAAUE,GAAO,MAAe,KAARA,GAAsB,OAARA,OAChL1mB,UAIJA,UAIJ,KAAIs1B,GAAiC,aAAnBA,EAAUvzB,MAA0C,WAAnBuzB,EAAUvzB,KAYxD,GAAKnB,oBAAkBZ,EAAKlE,YAAe8E,oBAAkBZ,EAAKC,OACnED,SAEC,CACD,GAAIjE,GAAWiE,EAAKjE,QAEhBiE,GADAlH,KAAK4G,oBACI5D,UAAakE,EAAKlE,UAAWmE,MAASD,EAAKC,MAAOpE,IAAOmE,EAAKnE,MAG9DC,UAAakE,EAAKlE,UAAWmE,MAASD,EAAKC,OAEnDW,oBAAkB7E,KACnBiE,EAAKjE,SAAWA,GAEhBu5B,IAEAt1B,EAAK+Q,OAASukB,GAEdt1B,EAAKC,OAA+B,IAAtBD,EAAKC,MAAMxG,SACzBuG,UA/ByE,CAC7E,GAAI01B,GAAW11B,EAAKnE,KACpBmE,GACI6C,MAAS7C,EAAK6C,MAAOlC,MAASX,EAAKW,MAAO+K,SAAY1L,EAAK0L,SAAU3J,KAAQ/B,EAAK+B,KAAMpG,MAASqE,EAAKrE,MACtGG,UAAakE,EAAKlE,UAAWmE,MAASD,EAAKC,QAG1C8Q,OAASukB,EACVx8B,KAAK4G,qBACLM,EAAKnE,IAAM65B,GA0BvB,MAAO11B,IAQX5E,EAAapC,UAAUkxB,SAAW,SAAUlqB,GACxC,GAAIuG,GAASC,YAAWxG,MAAU,EAC9BlH,MAAK0G,eACL1G,KAAK2N,cAAcF,GAAQ,GAG3BzN,KAAK2N,cAAcF,IAQ3BnL,EAAapC,UAAUm8B,SAAW,WAC9B,GAAIn1B,EAeJ,OAbIA,GADAlH,KAAK4G,oBACI5D,UAAWhD,KAAKkH,KAAKlE,UAAWmE,MAAOnH,KAAKkH,KAAKC,MAAOpE,IAAK/C,KAAKkH,KAAKnE,MAGvEC,UAAWhD,KAAKkH,KAAKlE,UAAWmE,MAAOnH,KAAKkH,KAAKC,OAEzDW,oBAAkB9H,KAAKkH,KAAKjE,YAC7BiE,EAAKjE,SAAWjD,KAAKkH,KAAKjE,UAG1BjD,KAAKkH,KAAK+Q,SAEV/Q,EAAK+Q,OAASjY,KAAKkH,KAAK+Q,QAErB/Q,GAQX5E,EAAapC,UAAUgP,QAAU,SAAUiB,GACvC,GAAID,GACAiU,EACA1T,EAAQ,CAQZ,IAPIN,YAAgB0sB,aAChB3sB,EAAW5C,UAAQ6C,EAAM,sBAGzBgU,EAASnkB,KAAKwC,QAAQwE,GAAK,IAAMmJ,EACjCD,EAAWjK,SAASqG,eAAe6X,IAEnCrc,oBAAkBoI,GAClB,MAAO,KAIX,KAFA,GAAIxD,GAAYY,UAAQ4C,EAAU,sBAC9BhJ,EAAOlH,KAAKgP,eAAetC,GACY,OAApCwD,EAASjB,wBACZiB,EAAWA,EAASjB,yBACfjP,KAAKgO,yBAA4BhO,KAAKgO,2BACpChO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,gBACnDlO,KAAK0G,iBAAmBwJ,EAASjC,UAAUC,SAAS,qBAChDgC,EAASjC,UAAUC,SAAS,yBACpCuC,GAGR,OAAOvJ,GAAKC,MAAMsJ,IAQtBnO,EAAapC,UAAUmO,SAAW,SAAUrN,GACpCA,YAAkBksB,UAAWlsB,EAAOqE,UAAUC,QAAQ,qBAAuB,IAC7EtE,EAASsM,UAAQtM,EAAQ,sBAE7B,IAAI+4B,GAAW/4B,YAAkBksB,SAAWlsB,EAAOgG,GAAKhH,KAAKwC,QAAQwE,GAAK,IAAMhG,CAEhF,OADWhB,MAAKgP,eAAe+qB,IASnCz3B,EAAapC,UAAU48B,aAAe,SAAUC,GAC5C,GAAIv8B,GAEAsL,EADAhC,EAAMizB,EAAYp8B,MAEtB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACM,WAAnBu8B,EAAYv8B,KAGhBsL,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM+1B,EAAYv8B,GAC9CR,KAAKuN,YAAYtH,SAASqG,eAAeR,MASjDxJ,EAAapC,UAAU88B,mBAAqB,WACxC,GAAIC,GAAYj9B,KAAKk9B,aAAal9B,KAAK+O,cAAc/O,KAAKkH,OACtDi2B,EAAmBr1B,oBAAkBm1B,GAAa,GAAIhW,UAAU,GAAIA,UAAQmW,MAAMH,EACtF,OAAOj9B,MAAK+mB,YAAYkB,aAAakV,IAQzC76B,EAAapC,UAAU45B,YAAc,SAAUuD,GAC3C,GAAI78B,GAEA2O,EADArF,EAAMuzB,EAAW18B,MAErB,KAAKH,EAAI,EAAGA,EAAIsJ,EAAKtJ,IACjB2O,EAASnP,KAAKwC,QAAQwE,GAAK,IAAMq2B,EAAW78B,GAC5CR,KAAKiN,WAAWhH,SAASqG,eAAe6C,KAShD7M,EAAapC,UAAUo9B,oBAAsB,SAAUp2B,GAInD,IAAK,GAHD+1B,GAAYj9B,KAAKk9B,aAAah2B,GAE9BvE,KACKnC,EAAI,EAAGsJ,EAAMrK,OAAO6I,KAAKtI,KAAK4I,SAAUpI,EAAIsJ,EAAInJ,OAAQH,IAC7DmC,EAAO8E,KAAKzH,KAAK4I,QAAQpI,GAAGqH,MAQhC,OANIX,GAAKC,MAAMxG,QACH,GAAIsmB,UAAQ5W,OAAO1N,GAAQy6B,MAAMH,IAGjC,GAAIhW,UAAQ5W,OAAO1N,IAUnCL,EAAapC,UAAUg9B,aAAe,SAAUh2B,GAC5C,GACIq2B,GACAC,EACAC,EAEA10B,EALAkmB,EAAW/nB,EAAKC,MAIhBu2B,GAAa,CAEjB,KAAKzO,EACD,MAAOsO,EAEX,KAAK,GAAI/8B,GAAI,EAAGsJ,EAAMmlB,EAAStuB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACjD,GAAIoS,GAAWqc,EAASzuB,GAAGoS,QAY3B,IAXiB,kBAAbA,EACAA,EAAW,mBAEO,gBAAbA,EACLA,EAAW,iBAEO,gBAAbA,IACLA,EAAW,kBAGf8qB,GAAa,EADFj+B,OAAO6I,KAAK2mB,EAASzuB,IAEvB8E,QAAQ,UAAY,GAAK2pB,EAASzuB,GAAG2G,OAC1Cq2B,EAAQx9B,KAAKk9B,aAAajO,EAASzuB,OAIvB+8B,EAFJA,EACuB,QAAnBr2B,EAAKlE,UACEu6B,EAAKI,IAAIH,GAGTD,EAAKK,GAAGJ,GAIZA,OAId,KAAK11B,oBAAkB8K,KAAc9K,oBAAkB8K,EAASjS,QAAS,CAC1E,GAAI8tB,GAAOQ,EAASzuB,GAAGoS,SAASjE,cAC5BkvB,GAAe,EACfC,GAAgB,QAAS,WAAY,cAAe,qBAAsB,WAAY,kBAQ1F,IAPyB,WAArB7O,EAASzuB,GAAGyI,OACZy0B,GAAa19B,KAAK+9B,WAEG,SAArB9O,EAASzuB,GAAGyI,MAAmB60B,EAAax4B,QAAQmpB,IAAS,IAC7DiP,GAAa,GAEjB30B,EAAS/I,KAAK0S,UAAUuc,EAASzuB,GAAGqH,OAChC4mB,EAAKnpB,QAAQ,SAAW,GAAKmpB,EAAKnpB,QAAQ,UAAY,EACtD2pB,EAASzuB,GAAGqC,MAAQ,SAEnB,IAAyB,SAArBosB,EAASzuB,GAAGyI,MAAqBgmB,EAASzuB,GAAGqC,gBAAiBjD,OAanE69B,EAAYxO,EAASzuB,GAAGqC,UAbmD,CAC3E,GAAI4c,GAASzf,KAAK0f,UAAU3W,EAAO0W,OAC9B3X,qBAAkBmnB,EAASzuB,GAAGqC,OAO/B46B,EAAY,MANZA,EAAYz9B,KAAKg+B,QAAQ/O,EAASzuB,GAAGqC,MAAO4c,GACxCqe,EAAax4B,QAAQmpB,IAAS,IAAMzuB,KAAKi+B,OAAOhP,EAASzuB,GAAGqC,SAC5Dg7B,GAAe,IAU3B,GAAU,IAANr9B,EACIq9B,IAAiBpP,EAAKnpB,QAAQ,OAAS,GAAKmpB,EAAKnpB,QAAQ,YAAc,GAAKmpB,EAAKnpB,QAAQ,SAAW,GACpGmpB,EAAKnpB,QAAQ,UAAY,IAAOmpB,EAAKnpB,QAAQ,WAAa,EAC1Di4B,EAAOM,EAAe79B,KAAKk+B,cAAcjP,EAASzuB,GAAIi9B,GAClDz9B,KAAKm+B,eAAelP,EAASzuB,IAInB,MADVqC,EAAQ46B,KAERF,EAAO,GAAIa,aAAUnP,EAASzuB,GAAGqH,MAAO+K,EAAU6qB,EAAWC,QAKrE,IAAIG,IAAiBpP,EAAKnpB,QAAQ,OAAS,GAAKmpB,EAAKnpB,QAAQ,YAAc,GACvEmpB,EAAKnpB,QAAQ,SAAW,GAAKmpB,EAAKnpB,QAAQ,UAAY,IAAMmpB,EAAKnpB,QAAQ,WAAa,EACtFi4B,EAAOM,EAAe79B,KAAKk+B,cAAcjP,EAASzuB,GAAIi9B,EAAWF,EAAMr2B,EAAKlE,WACxEhD,KAAKm+B,eAAelP,EAASzuB,GAAI+8B,EAAMr2B,EAAKlE,eAGhD,IAAuB,QAAnBkE,EAAKlE,UAAqB,CACtBH,EAAQ46B,CACRF,IAAkB,KAAV16B,EACR06B,EACMA,EAAKI,IAAI1O,EAASzuB,GAAGqH,MAAO+K,EAAU6qB,EAAWC,GAExC,KAAV76B,IACL06B,EAAO,GAAIa,aAAUnP,EAASzuB,GAAGqH,MAAO+K,EAAU6qB,EAAWC,QAGhE,CACD,GAAI76B,GAAQ46B,CACRF,IAAkB,KAAV16B,EACR06B,EAAOA,EAAKK,GAAG3O,EAASzuB,GAAGqH,MAAO+K,EAAU6qB,EAAWC,GAExC,KAAV76B,IACL06B,EAAO,GAAIa,aAAUnP,EAASzuB,GAAGqH,MAAO+K,EAAU6qB,EAAWC,MAYrF,MALI19B,MAAKyU,qBAAsBkT,iBACtB7f,oBAAkBy1B,IAA4B,WAAlBA,EAAK3qB,UAA2C,cAAlB2qB,EAAK3qB,WAChE2qB,EAAK3qB,SAA6B,WAAlB2qB,EAAK3qB,SAAwB,QAAU,aAGxD2qB,GAEXj7B,EAAapC,UAAU2rB,UAAY,WAC/B,GACIwS,GAAer+B,KAAKihB,MAMxB,OAJiBF,YADH,QAC2B/gB,KAAKihB,OAHxB,+CAGkDqd,cAEpED,EAAe,MAEZA,GAEX/7B,EAAapC,UAAUwS,UAAY,SAAU7K,EAAO0C,GAChD,GACIxB,GADAH,EAAU5I,KAAK4I,OAEnBA,GAAU2B,GAAY3B,CAGtB,KAAK,GAFD21B,GAAgC,KAAnBv+B,KAAK+H,UAAoBF,EAAQA,EAAMG,MAAMhI,KAAK+H,eAAoBF,GACnF22B,EAAYD,GAAcA,EAAW59B,OAAS,EAAI49B,EAAW,GAAK,KAC7D/9B,EAAI,EAAGA,EAAIoI,EAAQjI,OAAQH,IAChC,GAAIoI,EAAQpI,GAAGqH,QAAUA,EAAO,CAC5BkB,EAASH,EAAQpI,EACjB,OAGR,IAAKuI,GAA6B,KAAnB/I,KAAK+H,UAChB,IAASvH,EAAI,EAAGA,EAAIoI,EAAQjI,OAAQH,IAChC,GAAIoI,EAAQpI,GAAGqH,QAAU22B,EAAW,CAChC,GAAI51B,EAAQpI,GAAGoI,QAAS,CACpB,GAAIwb,GAAWvc,EAAM42B,UAAUD,EAAU79B,OAASX,KAAK+H,UAAUpH,OAE7DoI,GADAqb,EACSpkB,KAAK0S,UAAU0R,EAAUxb,EAAQpI,GAAGoI,SAGpCA,EAAQpI,OAIrBuI,GAASH,EAAQpI,EAErB,OAIZ,IAAKuI,EACD,IAASvI,EAAI,EAAGA,EAAIoI,EAAQjI,UACpBiI,EAAQpI,GAAGoI,WACXG,EAAS/I,KAAK0S,UAAU7K,EAAOe,EAAQpI,GAAGoI,WAFdpI,KASxC,MAAOuI,IASXzG,EAAapC,UAAU+Q,aAAe,SAAUpJ,GAE5C,MADa7H,MAAK0S,UAAU7K,GACd6B,WAElBpH,EAAapC,UAAUw+B,QAAU,SAAUC,EAAMC,GAO7C,MANIA,GACAD,EAAKE,SAAS,EAAG,EAAG,GAGpBF,EAAKE,SAAS,GAAI,GAAI,IAEnBF,GAEXr8B,EAAapC,UAAUg+B,cAAgB,SAAUjP,EAAUpsB,EAAOo6B,EAAWj6B,GACzE,GAAIu6B,GACAuB,EAAY9+B,KAAK0+B,QAAQ,GAAIv1B,MAAKtG,EAAMwG,YAAY,GACpD01B,EAAU/+B,KAAK0+B,QAAQ77B,EAC3B,QAAQosB,EAASrc,UACb,IAAK,QAED2qB,GADAA,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,qBAAsBi3B,IAC/CnB,IAAI1O,EAASpnB,MAAO,kBAAmBk3B,EACnD,MACJ,KAAK,WAEDxB,GADAA,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,WAAYi3B,IACrClB,GAAG3O,EAASpnB,MAAO,cAAek3B,EAC9C,MACJ,KAAK,cACDxB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,cAAek3B,EACpD,MACJ,KAAK,qBACDxB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,qBAAsBi3B,EAC3D,MACJ,KAAK,WACDvB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,WAAYi3B,EACjD,MACJ,KAAK,kBACDvB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,kBAAmBk3B,GAgBhE,MAbIxB,KACIN,EACkB,QAAdj6B,EACAi6B,EAAYA,EAAUU,IAAIJ,GAEP,OAAdv6B,IACLi6B,EAAYA,EAAUW,GAAGL,IAI7BN,EAAYM,GAGbN,GAEX36B,EAAapC,UAAUi+B,eAAiB,SAAUlP,EAAUgO,EAAWj6B,GACnE,GAGIu6B,GAHA16B,EAAQosB,EAASpsB,MACjB+P,EAAWqc,EAASrc,SAASiF,WAC7BmnB,EAAY/P,EAASpsB,MAErBkG,EAAS/I,KAAK0S,UAAUuc,EAASpnB,OACjC4X,EAASzf,KAAK0f,UAAU3W,EAAO0W,OACnC,IAAI7M,EAAStN,QAAQ,SAAW,GAAKsN,EAAStN,QAAQ,UAAY,EAC9D,OAAQsN,GACJ,IAAK,SACD2qB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,SAAUm3B,EAC/C,MACJ,KAAK,YACDzB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,YAAam3B,EAClD,MACJ,KAAK,UACDzB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,QAAS,GAC9C,MACJ,KAAK,aACD01B,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,WAAY,IAI7D,KAAM+K,EAAStN,QAAQ,SAAW,GAAKsN,EAAStN,QAAQ,UAAY,GAChE,IAAK,GAAIqF,GAAI,EAAGoP,EAAOlX,EAAMlC,OAAQgK,EAAIoP,EAAMpP,IAC3C,GAAiB,KAAb9H,EAAM8H,KAA4B,OAAbiI,GAAkC,UAAbA,IAAyC,WAAhB7J,EAAOE,KAC1E,GAAU,IAAN0B,EAAS,CACT,GAAIs0B,GAAM,oBACV,QAAQrsB,GACJ,IAAK,UAEG2qB,EADgB,SAAhBx0B,EAAOE,KACA,GAAIm1B,aAAUnP,EAASpnB,MAAOo3B,EAAKp8B,EAAM8H,IAGzC,GAAIyzB,aAAUnP,EAASpnB,MAAOo3B,EAAKp8B,EAAM8H,GAC3C3K,KAAKi+B,OAAOp7B,EAAM8H,IAAM3K,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,GAC5Czf,KAAK0+B,QAAQ1+B,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,IAAS,GAAS,KAElE,MACJ,KAAK,aAEG8d,EADgB,SAAhBx0B,EAAOE,KACA,GAAIm1B,aAAUnP,EAASpnB,MAAO,WAAYhF,EAAM8H,GAClD3K,KAAKi+B,OAAOp7B,EAAM8H,IAAM3K,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,GAC5Czf,KAAK0+B,QAAQ1+B,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,IAAS,GAAS,MAGvD,GAAI2e,aAAUnP,EAASpnB,MAAO,WAAYhF,EAAM8H,GAE3D,MACJ,KAAK,KACD4yB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,QAAShF,EAAM8H,GACpD,MACJ,KAAK,QACD4yB,EAAO,GAAIa,aAAUnP,EAASpnB,MAAO,WAAYhF,EAAM8H,SAI9D,CAED,OAAQskB,EAASrc,UACb,IAAK,UAEG2qB,EADgB,SAAhBx0B,EAAOE,KACAs0B,EAAKI,IAAI1O,EAASpnB,MAAO,kBAAmBhF,EAAM8H,GACpD3K,KAAKi+B,OAAOp7B,EAAM8H,IAAM3K,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,GAC5Czf,KAAK0+B,QAAQ1+B,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,IAAY5c,EAAM8H,IAGvD4yB,EAAKI,IAAI1O,EAASpnB,MAAO,kBAAmBhF,EAAM8H,GAE7D,MACJ,KAAK,aAEG4yB,EADgB,SAAhBx0B,EAAOE,KACAs0B,EAAKK,GAAG3O,EAASpnB,MAd3B,cAcsChF,EAAM8H,GACpC3K,KAAKi+B,OAAOp7B,EAAM8H,IAAM3K,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,GAC5Czf,KAAK0+B,QAAQ1+B,KAAKg+B,QAAQn7B,EAAM8H,GAAI8U,IAAY5c,EAAM8H,IAGvD4yB,EAAKK,GAAG3O,EAASpnB,MAAO,cAAehF,EAAM8H,GAExD,MACJ,KAAK,KACD4yB,EAAOA,EAAKK,GAAG3O,EAASpnB,MAAO,QAAShF,EAAM8H,GAC9C,MACJ,KAAK,QACD4yB,EAAOA,EAAKI,IAAI1O,EAASpnB,MAAO,WAAYhF,EAAM8H,KAoB1E,MAbI4yB,KACIN,EACkB,QAAdj6B,EACAi6B,EAAYA,EAAUU,IAAIJ,GAEP,OAAdv6B,IACLi6B,EAAYA,EAAUW,GAAGL,IAI7BN,EAAYM,GAGbN,GAEX36B,EAAapC,UAAU89B,QAAU,SAAUn7B,EAAO4c,GAC9C,GAAIyf,GAAWl/B,KAAK2f,KAAKqL,UAAUnoB,EAAO4c,EAU1C,OATI5c,GAAMyC,QAAQ,MAAQ,GAAMzC,EAAMyC,QAAQ,KAAO,GAAKzC,EAAMyC,QAAQ,KAAO,GACxEzC,EAAMyC,QAAQ,KAAO,KACxB45B,EAAW,GAAI/1B,OACN01B,SAASjnB,SAAS/U,EAAMmF,MAAM,KAAK,GAAI,KAChDk3B,EAASC,WAAWvnB,SAAS/U,EAAMmF,MAAM,KAAK,GAAI,KAC9CnF,EAAMmF,MAAM,KAAK,IACjBk3B,EAASE,WAAWxnB,SAAS/U,EAAMmF,MAAM,KAAK,GAAI,MAGnDk3B,GAEX58B,EAAapC,UAAU+9B,OAAS,SAAUp7B,GACtC,SAAIA,GAASA,EAAMyC,QAAQ,MAAQ,IAKvChD,EAAapC,UAAUsvB,YAAc,SAAUtoB,EAAMqd,EAAY8a,EAASt8B,EAAK4D,GAC3E,GAAK04B,EAGA,CACD,GAAIn4B,EAAKC,OAASD,EAAKC,MAAMxG,OAAS,IAAMX,KAAK0G,eAAgB,CAE7D,GAAI4I,GAASiV,EAAWzf,cAAc,kBAClCuK,EAAUkV,EAAWzf,cAAc,kBAOvC,IANI9E,KAAKgO,yBAA2BuW,EAAWtV,yBAC3CK,EAASiV,EAAWtV,uBAAuBnK,cAAc,kBACzDuK,EAAUkV,EAAWtV,uBAAuBnK,cAAc,oBAE9DwK,EAAOyP,UAAW,EAClB1P,EAAQ0P,UAAW,EACf/e,KAAKgO,wBAAyB,CAE9B,IADA,GAAImC,GAAOoU,EAAWtV,uBACfkB,IAASA,EAAKlC,UAAUC,SAAS,qBAAqB,CACzD,GAAIiC,EAAKlC,UAAUC,SAAS,qBAAsB,CAC9CiC,EAAOA,EAAKnL,iBAAiB,qBAAqBmL,EAAKnL,iBAAiB,qBAAqBrE,OAAS,EACtG,OAEJwP,EAAOA,EAAKlB,uBAEhB,GAAIkB,GAAQA,EAAKlC,UAAUC,SAAS,oBAAqB,CACrD,GAAIiB,GAASgB,EAAKnJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAEzB,QADZhH,KAAKkP,QAAQC,GACfnM,UACTsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,OAKH,OAAnBrI,EAAKlE,UACLsM,EAAOC,SAAU,EAGjBF,EAAQE,SAAU,MAM1BvP,MAAKoH,qBAAqBmd,EAK9B,IAHIvkB,KAAK0G,gBAAkBC,IACvB4d,EAAavkB,KAAKs/B,YAAYp4B,EAAMA,EAAKlE,UAAWhD,KAAKwC,QAAS0E,EAAKnE,IAAK4D,IAE5E3G,KAAK4G,qBAAuB5G,KAAK0G,eAAgB,CACjD,GAAI64B,GAAahb,EAAWzf,cAAc,eACtCoC,GAAKnE,KACL0L,YAAU8wB,GAAa,mBACnBv/B,KAAKgO,0BACLxI,eAAa+5B,EAAWz6B,cAAc,eAAgB,YAAYyK,QAAUrI,EAAKnE,MAIrF+D,eAAay4B,GAAa,wBA1DlChb,GAAavkB,KAAKs/B,YAAYp4B,EAAMA,EAAKlE,UAAWuhB,EAAYxhB,EA8DhEmE,GAAKC,OAA+B,IAAtBD,EAAKC,MAAMxG,QAAgBX,KAAK0G,iBAC9CQ,EAAKC,MAAM,IAAO4C,MAAS,GAAIlC,MAAS,GAAI+K,SAAY,GAAI3J,KAAQ,GAAIpG,MAAS,IAErF,IAAIosB,GAAW/nB,EAAKC,KACpB,KAAKW,oBAAkBmnB,GACnB,IAAK,GAAIzuB,GAAI,EAAGsJ,EAAMmlB,EAAStuB,OAAQH,EAAIsJ,EAAKtJ,IAAK,CACjD,GAAI8H,GAAO7I,OAAO6I,KAAK2mB,EAASzuB,GAChC,KAAKsH,oBAAkBmnB,EAASzuB,GAAG2G,QAAUmB,EAAKhD,QAAQ,UAAY,GAAmC,IAA7B2pB,EAASzuB,GAAG2G,MAAMxG,OAAe,CACzG,GAAIX,KAAKwC,QAAQwC,iBAAiB,sBAAsBrE,OAASX,KAAK2P,cAClE,MAAO,KAEX4U,GAAavkB,KAAKs/B,YAAYrQ,EAASzuB,GAAIyuB,EAASzuB,GAAGwC,UAAWuhB,EAAY0K,EAASzuB,GAAGuC,KAC1FwhB,EAAavkB,KAAKwvB,YAAYP,EAASzuB,GAAI+jB,GAAY,OAEtD,IAAKzc,oBAAkBmnB,EAASzuB,GAAG2G,OAQpCnH,KAAKw/B,WAAWvQ,EAASzuB,GAAI+jB,OARe,CAE5C,GAAIlV,IADJkV,EAAavkB,KAAKs/B,YAAYrQ,EAASzuB,GAAIyuB,EAASzuB,GAAGwC,UAAWuhB,EAAY0K,EAASzuB,GAAGuC,MACjE+B,cAAc,mBACnCwK,EAASiV,EAAWzf,cAAc,iBACtCuK,GAAQ0P,UAAW,EACnBzP,EAAOyP,UAAW,EAKtB,IAAKjX,oBAAkBmnB,EAASzuB,GAAG2G,QAAU8nB,EAASzuB,GAAGyC,SAAU,CAC/D,GAAIy4B,GAAgBnX,EAAWzf,cAAc,gBAAgB+K,SAASrP,GAAGsE,cAAc,kBACvF9E,MAAKoN,UAAUsuB,IAU3B,MANInX,KACAA,EAAajX,UAAQiX,EAAY,iBAEjCA,IACAA,EAAajX,UAAQiX,EAAY,uBAE9BA,GAEXjiB,EAAapC,UAAUo/B,YAAc,SAAUp4B,EAAMlE,EAAWuhB,EAAYxhB,EAAK4D,GAC7E3G,KAAKwN,iBAAgB,EAAM+W,EAAYvhB,GAAW,EAAOD,EAAK4D,EAAQO,EACtE,IAAI1E,GAAU+hB,EAAWvf,iBAAiB,sBACtCy6B,EAAYlb,EAAWzf,cAAc,gBAAgB+K,QACzD,IAAI7P,KAAKyP,YAAYmC,YAAc5R,KAAKiE,kBAAoBjE,KAAKkE,cAAe,CAC5ElE,KAAKkE,eAAgB,EACrBlE,KAAKiE,kBAAmB,CACxB,IAAIwM,GAAQ,EACR0M,EAAiBnd,KAAK8D,WAAa,CACvC,IAAI9D,KAAKgO,wBACL,IAAK,GAAIxN,GAAI,EAAGA,EAAI2c,EAAgB3c,IAC5Bi/B,EAAUj/B,GAAGyN,UAAUC,SAAS,sBAChCiP,IACA1M,IAIZ,OAAOgvB,GAAUz/B,KAAK8D,WAAa2M,EAAQ,GAE1C,MAAIzQ,MAAKyP,YAAYmC,YAAc5R,KAAKiE,kBAAoBjE,KAAKgE,aAClEhE,KAAKgE,aAAc,EACnBhE,KAAKiE,kBAAmB,EACjBw7B,EAAUA,EAAU9+B,OAAS,IAG7B6B,EAAQA,EAAQ7B,OAAS,IAGxC2B,EAAapC,UAAUs/B,WAAa,SAAUt4B,EAAMqd,GAC5CA,EAAWlf,UAAUC,QAAQ,sBAAwB,EACrDtF,KAAK8P,eAAeyU,EAAYrd,GAGhClH,KAAK8P,eAAeyU,EAAWzf,cAAc,sBAAuBoC,IAG5E5E,EAAapC,UAAU4vB,eAAiB,WAGpC,IAAK,GADD3f,GADSnQ,KAAKwC,QACAwC,iBAAiB,mHAC1BxE,EAAI,EAAGA,EAAI2P,EAAKxP,OAAQH,IACzB2P,EAAK3P,GAAGyN,UAAUC,SAAS,kBACT0S,cAAYzQ,EAAK3P,GAAI8U,gBAC3Bua,SAAW7vB,KAAK0C,WAEvByN,EAAK3P,GAAGyN,UAAUC,SAAS,kBACV1I,eAAa2K,EAAK3P,GAAI,gBAC5BqvB,SAAW7vB,KAAK0C,WAE3ByN,EAAK3P,GAAGyN,UAAUC,SAAS,oBACR0S,cAAYzQ,EAAK3P,GAAIqgB,kBAC3BgP,SAAW7vB,KAAK0C,WAE7ByN,EAAK3P,GAAGyN,UAAUC,SAAS,aACf0S,cAAYzQ,EAAK3P,GAAI0pB,WAC3B2F,SAAW7vB,KAAK0C,WAEtByN,EAAK3P,GAAGyN,UAAUC,SAAS,gBACZ0S,cAAYzQ,EAAK3P,GAAIurB,cAC3B8D,SAAW7vB,KAAK0C,WAEzByN,EAAK3P,GAAGyN,UAAUC,SAAS,iBACX0S,cAAYzQ,EAAK3P,GAAI8D,eAC3BurB,SAAW7vB,KAAK0C,WAE1ByN,EAAK3P,GAAGyN,UAAUC,SAAS,aACX0S,cAAYzQ,EAAK3P,GAAI6rB,eACtB9c,UACZvP,KAAK0C,WACLyN,EAAK3P,GAAGkF,cAAciH,MAAMC,QAAU,OAGtCuD,EAAK3P,GAAGkF,cAAciH,MAAMC,QAAU,WAKtD,IAAI8yB,GAAmB1/B,KAAKwC,QAAQwC,iBAAiB,kBACjD26B,EAAoB3/B,KAAKwC,QAAQwC,iBAAiB,mBAClD46B,EAAkB5/B,KAAKwC,QAAQwC,iBAAiB,kBAC/ChF,KAAK0C,YAAc1C,KAAKkQ,SAASjC,UAAUC,SAAS,eACrDlO,KAAKkQ,SAASjC,UAAU+V,OAAO,aAGnC,KAAK,GADD6b,IAASH,EAAkBC,EAAmBC,GACzCp/B,EAAI,EAAGA,EAAIq/B,EAAMl/B,OAAQH,IAC9Bq/B,EAAMr/B,GAAGsI,QAAQ,SAAUqH,GACnBA,EAAKlC,UAAUC,SAAS,cACxBiC,EAAKlC,UAAU+V,OAAO,cAGtB7T,EAAKlC,UAAUgF,IAAI,eAI/BjT,MAAK8/B,kBAETx9B,EAAapC,UAAU4/B,eAAiB,WACpC,GAAIr9B,GAAQzC,KAER+C,GAAM,CADE/C,MAAKwC,QAAQwC,iBAAiB,yDAEpC8D,QAAQ,SAAUqH,IAChBA,EAAKlC,UAAUC,SAAS,gBAAmBiC,EAAKlC,UAAUC,SAAS,oBAC/DiC,EAAKlC,UAAUC,SAAS,cAIvBiC,EAAKlC,UAAUC,SAAS,gBAAkBiC,EAAKlC,UAAUC,SAAS,kBACvEiC,EAAKlC,UAAU+V,OAAO,kBAEjB7T,EAAKlC,UAAUC,SAAS,gBAAkBiC,EAAKlC,UAAUC,SAAS,cACvEiC,EAAKlC,UAAU+V,OAAO,cAEjB7T,EAAKlC,UAAUC,SAAS,oBAC7BiC,EAAKlC,UAAUgF,IAAI,kBACnBlQ,GAAM,GAEDoN,EAAKlB,uBAAuBM,SAAWY,EAAKlC,UAAUC,SAAS,eACpEiC,EAAKlC,UAAU+V,OAAO,cAClBjhB,EACyB,QAArBoN,EAAKpK,YACLoK,EAAKlC,UAAUgF,IAAI,kBAGnB9C,EAAKlC,UAAUgF,IAAI,kBAIE,QAArB9C,EAAKpK,aAAyBtD,EAAMC,YACpCyN,EAAKlC,UAAU+V,OAAO,SACtB7T,EAAKlC,UAAUgF,IAAI,oBAGfxQ,EAAMmE,oBACNuJ,EAAKlC,UAAUgF,IAAI,SAEvB9C,EAAKlC,UAAU+V,OAAO,mBAED,OAArB7T,EAAKpK,aAAwBtD,EAAMC,WACnCyN,EAAKlC,UAAUgF,IAAI,qBAGnB9C,EAAKlC,UAAU+V,OAAO,uBAIzB7T,EAAKlC,UAAUC,SAAS,kBAI7BiC,EAAKlC,UAAUgF,IAAI,eA9CnB9C,EAAKlC,UAAUgF,IAAI,cACnBlQ,GAAM,MAiDlBT,EAAapC,UAAU6/B,eAAiB,SAAUl9B,GAE9C,IAAK,GADDm9B,IAAY,OAAQ,OAAQ,MAAO,OAAQ,QAAS,OAAQ,OAAQ,SAAU,SAAU,MAAO,UAAW,SAAU,WAC/Gx/B,EAAI,EAAGsJ,EAAMk2B,EAASr/B,OAAQH,EAAIsJ,EAAKtJ,IAC5C,GAAIqC,EAAM8L,cAAcrJ,QAAQ06B,EAASx/B,KAAO,EAC5C,OAAO,CAGf,QAAO,GAEX8B,EAAapC,UAAU+/B,aAAe,SAAU94B,EAAO+4B,EAAcC,EAAUC,GAC3E,GAAI39B,GAAQzC,KACR2G,GAAS,CAQb,IAPKw5B,GAAyB,KAAbA,EAKbA,GAAY,KAJZA,EAAW,GACXx5B,GAAS,GAKTQ,EAAMpE,IAAK,CACX,GAAIs9B,GAAYD,EAAYpgC,KAAKwJ,KAAKC,YAAY,OAAOwsB,cAAgB,IAAM,MAC/EkK,IAAYx5B,EAAS05B,EAAY,IAAM,IAAMA,EAAY,IAiG7D,MA/FIl5B,GAAMA,OAASA,EAAMA,MAAMxG,SAC3Bw/B,GAAYh5B,EAAMA,MAAMm5B,OAAO,SAAUx1B,EAAQ5D,EAAMyD,GACnD,GAAI41B,GAAU,EACd,IAAIr5B,EAAKC,MACLo5B,EAAU99B,EAAMw9B,aAAa/4B,EAAMg5B,EAAc,GAAIE,GACjD39B,EAAMuL,0BACN7G,EAAMnE,UAAYkE,EAAKlE,eAG1B,CACD,GAAIw9B,GAAcJ,EAAY39B,EAAMuzB,aAAa9uB,EAAK0L,UAAYnQ,EAAMiH,UAAUxC,EAAK0L,UACnF6tB,EAAW,EACf,IAAIv5B,EAAKrE,gBAAiBjD,OACtB,GAAIsH,EAAK0L,SAASiF,WAAWvS,QAAQ,YAAc,EAAG,CAClD,GAAIo7B,GAAgBN,EAAY,IAAM39B,EAAM+G,KAAKC,YAAY,OAAOwsB,cAAgB,IAAM,OAKtFwK,GAJc,SAAdv5B,EAAK+B,MAAoBxG,EAAMs9B,eAAe74B,EAAKrE,MAAM,IAI9C,GAAKqE,EAAKrE,MAAM,GAAK69B,EAAgBx5B,EAAKrE,MAAM,GAHhD,IAAOqE,EAAKrE,MAAM,GAAK,IAAO69B,EAAgB,IAAOx5B,EAAKrE,MAAM,GAAK,QAShF49B,GAFyB,gBAAlBv5B,GAAKrE,MAAM,IAAkC,OAAfqE,EAAKrE,MAE/B,KADMqE,EAAKrE,MACO4I,KAAK,OAAS,KAGhC,IAAMvE,EAAKrE,MAAQ,QAMlC49B,GADAv5B,EAAK0L,SAASiF,WAAWvS,QAAQ,eAAiB,EACvC4B,EAAKrE,MAAQ,KAAQqE,EAAKrE,MAAQ,MAAS,IAAMqE,EAAKrE,MAAQ,IAEpEqE,EAAK0L,SAASiF,WAAWvS,QAAQ,aAAe,EAC1C4B,EAAKrE,MAAQ,MAASqE,EAAKrE,MAAQ,KAAQ,IAAMqE,EAAKrE,MAAQ,IAEpEqE,EAAK0L,SAASiF,WAAWvS,QAAQ,aAAe,EAC1C4B,EAAKrE,MAAQ,MAASqE,EAAKrE,MAAQ,MAAS,IAAMqE,EAAKrE,MAAQ,IAGxD,WAAdqE,EAAK+B,MAA2C,iBAAf/B,GAAKrE,OACtB,OAAfqE,EAAKrE,OAAmBqE,EAAK0L,SAASiF,WAAWvS,QAAQ,UAAY,EAC3D,GAAK4B,EAAKrE,MAEhBqE,EAAK0L,SAASiF,WAAWvS,QAAQ,UAAY,EACvC,KAGA,IAAO4B,EAAKrE,MAAQ,GAI3C,IAAI89B,GAAYz5B,EAAKW,KAOrB,IANIq4B,EACAS,EAAY,IAAMA,EAAY,IAEzBA,EAAUr7B,QAAQ,MAAQ,IAC/Bq7B,EAAY,IAAMA,EAAY,KAE9Bz5B,EAAK0L,SAASiF,WAAWvS,QAAQ,SAAW,EAC5Ci7B,EAAUI,EAAY,IAAMH,MAE3B,CACD,GAAII,GAAWJ,CACO,aAAlBt5B,EAAK0L,SACLguB,EAAW,IAEY,eAAlB15B,EAAK0L,WACVguB,EAAW,MAEfL,EAAUI,EAAY,IAAMC,EAAW,IAAMH,GAGrD,GAAI91B,IAAMxD,EAAMA,MAAMxG,OAAS,EAAG,CAC9B,GAAIqC,GAAYmE,EAAMnE,WACJ,KAAdA,GAAqBkE,GAA2B,KAAnBA,EAAKlE,WAAoBkE,EAAK+Q,QAAU/Q,EAAK+Q,OAAO4oB,YACjF79B,EAAYkE,EAAKlE,WAEjBA,IAEAu9B,GAAW,KADXv9B,EAAYo9B,EAAY39B,EAAM+G,KAAKC,YAAYzG,EAAUizB,eAAeA,cAAgBjzB,EAAUizB,eACrE,KAGrC,MAAOnrB,GAASy1B,GACjB,KAEF55B,IACDw5B,GAAY,KAEZh5B,EAAMpE,MACNo9B,GAAY,KAETA,GASX79B,EAAapC,UAAU4gC,gBAAkB,SAAUC,EAAWX,GAC1DW,EAAYA,EAAU5yB,QAAQ,KAAM,GACpC,IAAI6yB,GAAYhhC,KAAKihC,gBAAgBF,EAAWX,EAChDpgC,MAAKoxB,UAAWpuB,UAAWg+B,EAAUh+B,UAAWD,IAAKi+B,EAAUj+B,IAAKoE,MAAO65B,EAAU75B,SASzF7E,EAAapC,UAAU+gC,gBAAkB,SAAUF,EAAWX,GAC1DpgC,KAAKw0B,UACLx0B,KAAKkhC,UAAUH,EAAWX,GAC1BpgC,KAAKiH,eAAgBC,MAAQlE,UAAW,MAAOD,KAAK,EAAOoE,YAAe,EAC1E,IAAID,GAAOlH,KAAKmhC,cAAcnhC,KAAKw0B,OAAQx0B,KAAKkH,MAAO,GAAIk5B,EAC3D,OAAIpgC,MAAK4G,oBACI5D,UAAWkE,EAAKlE,UAAWD,IAAKmE,EAAKnE,IAAKoE,MAAOD,EAAKC,QAGtDnE,UAAWkE,EAAKlE,UAAWmE,MAAOD,EAAKC,QAWxD7E,EAAapC,UAAU2M,gBAAkB,SAAU3F,EAAMk6B,EAAahB,GAMlE,MALKl5B,KACDA,EAAOlH,KAAK+O,iBAEhB7H,EAAOlH,KAAKkf,kBAAkBhY,GAAM,GACpBlH,KAAKigC,aAAajgC,KAAK+O,cAAc7H,GAAOk6B,EAAa,KAAMhB,GAAWjyB,QAAQ,KAAM,MAS5G7L,EAAapC,UAAUmhC,oBAAsB,SAAUn6B,GAEnD,GAAIlH,KAAKshC,aAAaC,cAAc5gC,OAAQ,CACnCuG,IACDA,EAAOlH,KAAK+O,gBAEhB,IAAIkL,IAAQunB,IAAK,KAEjB,OADAxhC,MAAKyhC,OAAO,iBAAmBC,KAAM,kBAAmBC,kBAAkB,EAAO9+B,OAASqE,KAAMA,EAAM+S,IAAKA,KACpGA,EAAS,IAKpB,MAFIrU,SAAQC,KAAK,+IAEV,MAQXvD,EAAapC,UAAU0hC,oBAAsB,SAAUC,GAEnD,GAAI7hC,KAAKshC,aAAaC,cAAc5gC,OAAQ,CACxC,GAAIsZ,IAAQunB,IAAK,KACjBxhC,MAAKyhC,OAAO,iBAAmBC,KAAM,uBAAwBC,kBAAkB,EAAO9+B,OAAS2+B,IAAKK,EAAU5nB,IAAKA,IACnH,IAAIunB,GAAMvnB,EAAS,GACnB,IAAIunB,EAAK,CACLA,EAAMA,EAAIrzB,QAAQ,KAAM,GACxB,IAAI6yB,GAAYhhC,KAAKihC,gBAAgBO,EACrCxhC,MAAKoxB,UAAWpuB,UAAWg+B,EAAUh+B,UAAWD,IAAKi+B,EAAUj+B,IAAKoE,MAAO65B,EAAU75B,aAIzFvB,SAAQC,KAAK,gJASrBvD,EAAapC,UAAU4hC,yBAA2B,SAAU56B,GAExD,GAAIlH,KAAKshC,aAAaC,cAAc5gC,OAAQ,CACnCuG,IACDA,EAAOlH,KAAK+O,gBAEhB,IAAIkL,IAAQunB,IAAK,KAEjB,OADAxhC,MAAKyhC,OAAO,iBAAmBC,KAAM,uBAAwBC,kBAAkB,EAAO9+B,OAASqE,KAAMA,EAAM+S,IAAKA,KACzGA,EAAS,IAKpB,MAFIrU,SAAQC,KAAK,+IAEV,MAQXvD,EAAapC,UAAU6hC,yBAA2B,SAAUF,GAExD,GAAI7hC,KAAKshC,aAAaC,cAAc5gC,OAAQ,CACxC,GAAIsZ,IAAQunB,IAAK,KACjBxhC,MAAKyhC,OAAO,iBAAmBC,KAAM,4BAA6BC,kBAAkB,EAAO9+B,OAAS2+B,IAAKK,EAAU5nB,IAAKA,IACxH,IAAIunB,GAAMvnB,EAAS,GACnB,IAAIunB,EAAK,CACLA,EAAMA,EAAIrzB,QAAQ,KAAM,GACxB,IAAI6yB,GAAYhhC,KAAKihC,gBAAgBO,EACrCxhC,MAAKoxB,UAAWpuB,UAAWg+B,EAAUh+B,UAAWD,IAAKi+B,EAAUj+B,IAAKoE,MAAO65B,EAAU75B,aAIzFvB,SAAQC,KAAK,gJAUrBvD,EAAapC,UAAU8hC,cAAgB,SAAUC,EAAYC,GAErDliC,KAAKshC,aAAaC,cAAc5gC,QAChCX,KAAKkH,MAASlE,UAAW,MAAOD,KAAK,EAAOoE,UAC5CnH,KAAKyhC,OAAO,iBAAmBC,KAAM,cAAeC,kBAAkB,EAAO9+B,OAASo/B,WAAY3T,KAAKllB,MAAM64B,GAAa/6B,KAAMlH,KAAKkH,KAAMg7B,YAAaA,MAGxJt8B,QAAQC,KAAK,gJASrBvD,EAAapC,UAAUiiC,cAAgB,SAAUj7B,GAE7C,GAAIlH,KAAKshC,aAAaC,cAAc5gC,OAAQ,CACnCuG,IACDA,EAAOlH,KAAK+O,gBAEhB,IAAIkL,IAAQgoB,WAAY,KAExB,OADAjiC,MAAKyhC,OAAO,iBAAmBC,KAAM,oBAAqBC,kBAAkB,EAAO9+B,OAASqE,KAAMA,EAAM+6B,WAAY,GAAIhoB,IAAKA,KACtHA,EAAgB,WAK3B,MAFIrU,SAAQC,KAAK,+IAEV,IAUXvD,EAAapC,UAAUsQ,UAAY,SAAUrB,EAAQrD,EAAS2E,GAC1D,GAAIvB,GAAUlP,KAAKkP,QAAQC,EAAOhB,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAC7Do7B,EAAcpiC,KAAKyP,YAAYe,SACnC1E,GAAUA,EAAQqC,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACjDhH,KAAK+D,UAAY0M,EACjBzQ,KAAKmE,mBAAoB,EACzBnE,KAAKyP,YAAYe,WAAY,EAC7BxQ,KAAKsvB,WACGvlB,MAASmF,EAAQnF,MAAOlC,MAASqH,EAAQrH,MAAOoB,KAAQiG,EAAQjG,KAAM2J,SAAY1D,EAAQ0D,SAC1F/P,MAASqM,EAAQrM,MAAOG,UAAakM,EAAQlM,YAC7C8I,GACR9L,KAAK+D,WAAa,EAClB/D,KAAKmE,mBAAoB,EACzBnE,KAAKyP,YAAYe,UAAY4xB,EAC7BA,GAAc,GAUlB9/B,EAAapC,UAAU0R,WAAa,SAAU9F,EAASu2B,EAAe5xB,GAClE4xB,EAAgBA,EAAcl0B,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,GAC7D,IAAIoH,GAAQpO,KAAKqO,SAASg0B,GACtBC,EAAetiC,KAAKyP,YAAYmC,UACpC9F,GAAUA,EAAQqC,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACjDhH,KAAK8D,WAAa2M,EAClBzQ,KAAKiE,kBAAmB,EACxBjE,KAAKyP,YAAYmC,YAAa,EAC9B5R,KAAKsd,YAAata,UAAaoL,EAAMpL,UAAWD,IAAOqL,EAAMrL,IAAKoE,MAASiH,EAAMjH,QAAU2E,GAC3F9L,KAAK8D,YAAc,EACnB9D,KAAKiE,kBAAmB,EACxBjE,KAAKyP,YAAYmC,WAAa0wB,EAC9BA,GAAe,GAQnBhgC,EAAapC,UAAUyR,SAAW,SAAUxC,GACpCA,EAAO7J,QAAQtF,KAAKwC,QAAQwE,IAAM,IAClCmI,EAASnP,KAAKwC,QAAQwE,GAAK,IAAMmI,EAErC,IAAInO,GAASiF,SAASqG,eAAe6C,GAAQnK,iBAAiB,oBAAoB,EAClFhF,MAAKmN,SAASnM,IAQlBsB,EAAapC,UAAUwR,UAAY,SAAU5F,GACrCA,EAAQxG,QAAQtF,KAAKwC,QAAQwE,IAAM,IACnC8E,EAAU9L,KAAKwC,QAAQwE,GAAK,IAAM8E,EAEtC,IAAI9K,GAASiF,SAASqG,eAAeR,GAAS9G,iBAAiB,mBAAmB,EAClFhF,MAAKoN,UAAUpM,IAEnBsB,EAAapC,UAAUghC,UAAY,SAAUH,EAAWX,GACpD,GACImC,GADAC,EAAK,CAET,IACID,EAAMxB,EAAUtmB,MAAM+nB,GACtBA,GAAMxiC,KAAKyiC,gBAAgBF,EAAKnC,SACnB,KAARmC,EACT,OAAOviC,MAAKw0B,QAEhBlyB,EAAapC,UAAUuiC,gBAAkB,SAAU1B,EAAWX,GAC1D,GACIsC,GADAh5B,GAAa,IAAK,KAAM,KAAM,KAAM,IAAK,IAGzCg5B,GADAtC,GACcpgC,KAAKwJ,KAAKC,YAAY,OAAOwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,MAAMwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,OAAOwsB,gBAGpH,MAAO,KAAM,MAE/B,IAAI0M,EAEAA,GADAvC,GACSpgC,KAAKwJ,KAAKC,YAAY,MAAMwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,SAASwsB,cAC/Ej2B,KAAKwJ,KAAKC,YAAY,QAAQwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cAC9Ej2B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,cAAcwsB,cACpFj2B,KAAKwJ,KAAKC,YAAY,UAAUwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,aAAawsB,cAClFj2B,KAAKwJ,KAAKC,YAAY,WAAWwsB,cAAej2B,KAAKwJ,KAAKC,YAAY,cAAcwsB,gBAG/E,KAAM,SAAU,OAAQ,WAAY,UAAW,cAAe,UAAW,cAAe,WAAY,eAKjH,KAAK,GAHD2M,GAEAC,EACKriC,EAAI,EAAG+Z,EAAO7Q,EAAU/I,OAAQH,EAAI+Z,EAAM/Z,IAK/C,GAJAoiC,EAAW,QAAQE,KAAKp5B,EAAUlJ,IAAM,MAAQ,GAGxC,IADJuiC,EAASC,QACM,KAAOt5B,EAAUlJ,GAAK,IAAMoiC,EAAU,MAC/CK,KAAKlC,GAEX,MADA/gC,MAAKw0B,OAAO/sB,MAAM,YAAaiC,EAAUlJ,GAAGmO,gBACrCjF,EAAUlJ,GAAGG,MAG5B,IAAIuiC,GAAcljC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,EACnD,KAAKuiC,GAAgBA,GAAkC,YAAnBA,EAAY,GAC5C,IAAK,GAAI1iC,GAAI,EAAG+Z,EAAOmoB,EAAW/hC,OAAQH,EAAI+Z,EAAM/Z,IAKhD,GAJAoiC,EAAW,QAAQE,KAAKJ,EAAWliC,IAAM,MAAQ,GAGzC,IADJuiC,EAASC,QACM,KAAON,EAAWliC,GAAK,IAAMoiC,EAAU,MAChDK,KAAKlC,GAEX,MADA/gC,MAAKw0B,OAAO/sB,MAAM,aAAci7B,EAAWliC,GAAGmO,gBACvC+zB,EAAWliC,GAAGG,MAIjC,KAAK,GAAIH,GAAI,EAAG+Z,EAAOooB,EAAMhiC,OAAQH,EAAI+Z,EAAM/Z,IAAK,CAChDoiC,EAAW,QAAQE,KAAKH,EAAMniC,IAAM,MAAQ,EAE5C,IAAIuiC,GAASC,MAEb,IADQ,GAAID,GAAO,KAAOJ,EAAMniC,GAAK,IAAMoiC,EAAU,MAC3CK,KAAKlC,GAEX,MADA/gC,MAAKw0B,OAAO/sB,MAAM,eAAgBk7B,EAAMniC,GAAGmO,gBACpCg0B,EAAMniC,GAAGG,OAGxB,GAAI,MAAMsiC,KAAKlC,GAEX,MADA/gC,MAAKw0B,OAAO/sB,MAAM,OAAQ,MACnB,CAEX,IAAI,MAAMw7B,KAAKlC,GAEX,MADA/gC,MAAKw0B,OAAO/sB,MAAM,QAAS,MACpB,CAEX,IAAI,gBAAgBw7B,KAAKlC,GAGrB,MAFA8B,GAAa,gBAAgBI,KAAKlC,GAAW,GAC7C/gC,KAAKw0B,OAAO/sB,MAAM,SAAUo7B,IACrBA,EAAWliC,MAEtB,IAAI,QAAQsiC,KAAKlC,GAGb,MAFA8B,GAAa,QAAQI,KAAKlC,GAAW,GACrC/gC,KAAKw0B,OAAO/sB,MAAM,SAAU,OACrBo7B,EAAWliC,MAEtB,IAAI,kFAAkFsiC,KAAKlC,GAGvF,MAFA8B,GAAa,kFAAkFI,KAAKlC,GAAW,GAC/G/gC,KAAKw0B,OAAO/sB,MAAM,UAAWo7B,IACtBA,EAAWliC,MAEtB,IAAIX,KAAKmjC,gBAAkB,oFAAoFF,KAAKlC,GAGhH,MAFA8B,GAAa,oFAAoFI,KAAKlC,GAAW,GACjH/gC,KAAKw0B,OAAO/sB,MAAM,UAAWo7B,IACtBA,EAAWliC,OAAS,CAE/B,IAAIX,KAAKojC,mBAAmBrC,EAAWX,GAAY,CAE/C,GAAIiD,GAAa,qBAAqBJ,KAAKlC,EAC3C,IAAIsC,EAGA,MAFAR,GAAaQ,EAAW,GACxBrjC,KAAKw0B,OAAO/sB,MAAM,UAAWo7B,IACtBA,EAAWliC,OAG1B,GAAI2iC,GAAetjC,KAAKujC,qBAAqBxC,EAC7C,IAAqB,KAAjBuC,EAAqB,CAErB,GAA0C,OAD1CT,EAAaS,GACET,EAAWliC,OAAS,GAE/B,IAAK,GADD6iC,IAAW,EACN74B,EAAIk4B,EAAWliC,OAAQgK,EAAIo2B,EAAUpgC,SAC1CkiC,GAAc9B,EAAUp2B,GACH,MAAjBo2B,EAAUp2B,KACV64B,GAAW,IAEXA,GAA6B,MAAjBzC,EAAUp2B,IALwBA,SAUjDo2B,GAAU8B,EAAWliC,SAA6C,MAAjCogC,EAAU8B,EAAWliC,UAC1DX,KAAKyjC,eAAe1C,EAAW8B,KAChCA,EAAa7iC,KAAK0jC,yBAAyB3C,EAAW8B,GAG1D,OADA7iC,MAAKw0B,OAAO/sB,MAAM,SAAUo7B,IACrBA,EAAWliC,OAEtB,GAAIgjC,GAAe3jC,KAAK4jC,qBAAqB7C,EAC7C,OAAqB,KAAjB4C,GACAd,EAAac,EACb3jC,KAAKw0B,OAAO/sB,MAAM,eAAgBo7B,IAC3BA,EAAWliC,QAElB,aAAasiC,KAAKlC,IAClB8B,EAAa,aAAaI,KAAKlC,GAAW,GAC1C/gC,KAAKw0B,OAAO/sB,MAAM,SAAUo7B,IACrBA,EAAWliC,QAElB,eAAesiC,KAAKlC,IACpB8B,EAAa,eAAeI,KAAKlC,GAAW,GAC5C/gC,KAAKw0B,OAAO/sB,MAAM,SAAUo7B,IACrBA,EAAWliC,QAEf,GAEX2B,EAAapC,UAAU0jC,qBAAuB,SAAU7C,GACpD,GAAI8C,GAAQ9C,EAAUz7B,QAAQ,IAC9B,IAAc,IAAVu+B,EAAa,CACb,GAAIC,GAAM/C,EAAUz7B,QAAQ,IAAKu+B,EAAQ,EACzC,KAAa,IAATC,EACA,MAAO/C,GAAUtC,UAAUoF,EAAOC,EAAM,GAGhD,MAAO,IAEXxhC,EAAapC,UAAUujC,eAAiB,SAAU1C,EAAW8B,GACzD,MAAsE,QAAlE9B,EAAUtmB,MAAMooB,EAAWliC,OAAS,EAAGkiC,EAAWliC,OAAS,IACO,OAAlEogC,EAAUtmB,MAAMooB,EAAWliC,OAAS,EAAGkiC,EAAWliC,OAAS,IAKnE2B,EAAapC,UAAUqjC,qBAAuB,SAAUxC,EAAWgD,GAC/D,GAAIF,GAAQ9C,EAAUz7B,QAAQ,IAC9B,KAAgB,IAAXu+B,GAAgBE,GAAyB,IAAVF,IAAgBE,EAAY,CAC5D,GAAID,GAAM/C,EAAUz7B,QAAQ,IAAMu+B,EAAQ,EAC1C,KAAa,IAATC,EACA,MAAO/C,GAAUtC,UAAUoF,EAAOC,EAAM,GAGhD,MAAO,IAEXxhC,EAAapC,UAAUwjC,yBAA2B,SAAU3C,EAAW8B,GACnE,GAAI9B,EAAU8B,EAAWliC,SAA6C,MAAjCogC,EAAU8B,EAAWliC,UACrDX,KAAKyjC,eAAe1C,EAAW8B,IAAgD,MAAjC9B,EAAU8B,EAAWliC,QAAiB,CACrF,GAAIqjC,GAAiBnB,EAAWpE,UAAU,EAAGoE,EAAWliC,OAAS,GAC7DsjC,EAAUlD,EAAU5yB,QAAQ61B,EAAgB,IAC5CV,EAAetjC,KAAKujC,qBAAqBU,GAAS,EACjC,MAAjBX,IAEAT,GADkBS,EAAa7E,UAAU,EAAG6E,EAAa3iC,QAEzDkiC,EAAa7iC,KAAK0jC,yBAAyB3C,EAAW8B,IAG9D,MAAOA,IAEXvgC,EAAapC,UAAUijC,aAAe,WAClC,GAAIe,GAAalkC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,EAClD,KAAKujC,EACD,OAAO,CAGP,IAAIC,GAAYnkC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,GAC7CyjC,EAAgBpkC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,EACrD,IAAsB,SAAlBujC,EAAW,IAAkBC,GAA8B,eAAjBA,EAAU,GACpD,OAAO,CAGX,UAAsB,eAAlBD,EAAW,IAAwBE,GAAiBA,EAAc,GAAG9+B,QADnD,WAC8E,IAM5GhD,EAAapC,UAAUkjC,mBAAqB,SAAUrC,EAAWX,GAC7D,GAAI8D,GAAalkC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,EAClD,KAAKujC,EACD,OAAO,CAGP,IAAI,uBAAuBjB,KAAKlC,GAAY,CACxC,GAAIoD,GAAYnkC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,GAC7CyjC,EAAgBpkC,KAAKw0B,OAAOx0B,KAAKw0B,OAAO7zB,OAAS,EACrD,IAAsB,SAAlBujC,EAAW,IAAkBC,GAA8B,eAAjBA,EAAU,GACpD,OAAO,CAEX,IAAIE,GAAkBjE,EAAYpgC,KAAKwJ,KAAKC,YAAY,WAAWkF,cAAgB,SACnF,IAAsB,eAAlBu1B,EAAW,IAAwBE,GAAiBA,EAAc,GAAG9+B,QAAQ++B,GAAmB,EAChG,OAAO,EAInB,OAAO,GAEX/hC,EAAapC,UAAUokC,YAAc,SAAUzhC,EAAO+P,EAAUwtB,GAC5D,GAAI12B,IACA66B,IAAK,QAASC,KAAM,WAAYC,IAAK,WAAYC,IAAK,cAAeC,KAAM,kBAC3EC,KAAM,qBAAsB1P,GAAM,KAAM2P,SAAU,QAAStP,QAAW,UAAWuP,cAAe,aAChGC,WAAY,UAAWC,UAAW,SAAUC,cAAe,YAAaC,eAAgB,aAE5F,IAAI9E,EAAW,CAEX,IAAK,GADD+E,GAAiB1lC,OAAO6I,KAAKtI,KAAKg2B,cAC7Bx1B,EAAI,EAAGA,EAAI2kC,EAAexkC,OAAQH,IACvC,GAAIR,KAAKg2B,aAAamP,EAAe3kC,MAAQoS,EAASqjB,cAClD,MAAIpzB,IAAgC,IAAvBA,EAAMyC,QAAQ,MAA0C,MAA5BzC,EAAMA,EAAMlC,OAAS,GACvB,aAA3BiS,EAASqjB,cAAgC,cAAgB,WAE5DpzB,GAAgC,IAAvBA,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EAC7C,aAA3BiS,EAASqjB,cAAgC,gBAAkB,aAE9DpzB,GAAgC,IAAvBA,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EAC7C,aAA3BiS,EAASqjB,cAAgC,cAAgB,WAE9DkP,EAAe3kC,EAG9B,OAAO,MAEX,GAAIqC,EAAO,CACP,GAA2B,IAAvBA,EAAMyC,QAAQ,MAA0C,MAA5BzC,EAAMA,EAAMlC,OAAS,GACjD,MAAqB,aAAbiS,EAA2B,cAAgB,UAElD,IAA2B,IAAvB/P,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EACvE,MAAqB,aAAbiS,EAA2B,gBAAkB,YAEpD,IAA2B,IAAvB/P,EAAMyC,QAAQ,MAAczC,EAAMyC,QAAQ,OAASzC,EAAMlC,OAAS,EACvE,MAAqB,aAAbiS,EAA2B,cAAgB,eAGtD,CACD,GAAiB,aAAbA,EACA,MAAO,UAEN,IAAiB,SAAbA,EACL,MAAO,QAGf,MAAOlJ,GAAU,GAAKkJ,IAE1BtQ,EAAapC,UAAUklC,kBAAoB,SAAUj+B,GACjD,GAAIwiB,GAAa3pB,KAAK0S,UAAUvL,EAAMU,MACtC,OAAKC,qBAAkB6hB,GAGhB,KAFIA,EAAW1gB,MAI1B3G,EAAapC,UAAUwW,mBAAqB,SAAU7O,GAClD,GAAIkC,GAAQ,GACRs7B,EAAI,CACR,IAAuB,KAAnBrlC,KAAK+H,UAAkB,CAEvB,IAAK,GADDge,GAAYle,EAAMG,MAAMhI,KAAK+H,WACxBvH,EAAI,EAAGA,EAAIulB,EAAUplB,OAAQH,IAClCuJ,GAAS/J,KAAKslC,kBAAkBvf,EAAWvlB,EAAI,KAC/C6kC,EACQtf,EAAUplB,SACdoJ,GAAS/J,KAAK+H,UAGtB,OAAOgC,GAIP,MADgB/J,MAAK0S,UAAU7K,GAAOkC,OAI9CzH,EAAapC,UAAUolC,kBAAoB,SAAUz9B,EAAO09B,GAGxD,IAAK,GAFD5E,GAAY,GACZh2B,EAAI,EACCyb,EAAI,EAAGA,EAAImf,EAAUnf,IAC1Bua,GAAa94B,EAAMue,KACnBzb,EACQ46B,IACJ5E,GAAa3gC,KAAK+H,UAG1B,OAAO/H,MAAK0S,UAAUiuB,GAAa3gC,KAAK0S,UAAUiuB,GAAW52B,MAAQ,IAEzEzH,EAAapC,UAAUihC,cAAgB,SAAU3M,EAAQrtB,EAAOJ,EAAWq5B,GAevE,IAAK,GAdDz1B,GACAoP,EACA7S,EACAs+B,EAGApf,EACA2E,EACAsa,EACAI,EACAC,EACA9yB,EAPA+yB,KACAC,KAOAC,GAAe,EACfC,GAAc,EACTtlC,EAAI,EAAG+Z,EAAOia,EAAO7zB,OAAQH,EAAI+Z,EAAM/Z,IAC5C,GAAqB,YAAjBg0B,EAAOh0B,GAAG,GAAkB,CAC5B,GAAIuI,GAAS/I,KAAK0S,UAAU8hB,EAAOh0B,GAAG,GAEtC,IADA0G,GAAS6C,MAAQhB,GAAUA,EAAOgB,MAAShB,EAAOgB,MAAQyqB,EAAOh0B,GAAG,GAAIqH,MAAO2sB,EAAOh0B,GAAG,IAChE,iBAArBg0B,EAAOh0B,EAAI,GAAG,GAAuB,CACrC,GAAIg0B,EAAOh0B,EAAI,GAAG,GAAG8E,QAAQ,SAAW,GAAKkvB,EAAOh0B,EAAI,GAAG,GAAG8E,QAAQ,UAAY,EAC9E4B,EAAK0L,SAAW5S,KAAKskC,YAAY,IAAK9P,EAAOh0B,EAAI,GAAG,GAAI4/B,GACxDl5B,EAAKrE,MAAQ,KACbqE,EAAK+B,KAAOjJ,KAAKolC,kBAAkBl+B,OAGnC,IAAsB,IAAlBstB,EAAO7zB,QAAiC,WAAjB6zB,EAAO,GAAG,KAAoD,IAAhCA,EAAO,GAAG,GAAIlvB,QAAQ,KAAa,CACpFmpB,EAAO+F,EAAOh0B,EAAI,GAAG,GAAKg0B,EAAOh0B,EAAI,GAAG,GAAG2N,QAAQ,KAAM,IAAMqmB,EAAOh0B,EAAI,GAAG,EACjF0G,GAAK0L,SAAW5S,KAAKskC,YAAY7V,EAAM+F,EAAOh0B,EAAI,GAAG,GAAI4/B,OAExD,CACD,GAAI3R,GAAO+F,EAAOh0B,EAAI,GAAG,GAAKg0B,EAAOh0B,EAAI,GAAG,GAAG2N,QAAQ,KAAM,IAAMqmB,EAAOh0B,EAAI,GAAG,EACjF0G,GAAK0L,SAAW5S,KAAKskC,YAAY7V,EAAM+F,EAAOh0B,EAAI,GAAG,GAAI4/B,GAgBjE,IAbAxtB,EAAW4hB,EAAOh0B,EAAI,GAAG,GAEzBmK,IADAnK,EACQ,EACRuZ,EAAOQ,EACH6lB,GAA+B,aAAlBl5B,EAAK0L,UAA6C,eAAlB1L,EAAK0L,UAA+C,aAAlB1L,EAAK0L,SACpFA,EAAW,OAENwtB,GAA+B,gBAAlBl5B,EAAK0L,UAAgD,kBAAlB1L,EAAK0L,UAAkD,gBAAlB1L,EAAK0L,SAC/FA,EAAW,WAENwtB,IACLxtB,EAAW1L,EAAK0L,UAEfjI,EAAInK,EAAI,EAAGmK,EAAIoP,EAAMpP,IACtB,GAAIiI,EAAStN,QAAQ,WAAa,GAAsB,SAAjBkvB,EAAO7pB,GAAG,GAC7Ck7B,GAAe,MAEd,CAAA,GAAqB,UAAjBrR,EAAO7pB,GAAG,IAAkBk7B,EAAc,CAC/CrlC,EAAImK,EACJk7B,GAAe,CACf,OAGA,GAAIjzB,EAAStN,QAAQ,SAAW,GAAKsN,EAAStN,QAAQ,UAAY,EAC9D,KAEJ,IAAIsN,EAAStN,QAAQ,SAAW,GAAsB,WAAjBkvB,EAAO7pB,GAAG,GAAiB,CACxDijB,EAAM4G,EAAO7pB,GAAG,EAChB6pB,GAAO7pB,GAAG,IAA0B,MAApB6pB,EAAO7pB,GAAG,GAAG,KAC7BijB,EAAM4G,EAAO7pB,GAAG,GAAG8zB,UAAU,EAAGjK,EAAO7pB,GAAG,GAAGhK,OAAS,IAE1DitB,EAAMA,EAAMA,EAAIzf,QAAQ,KAAM,IAAMqmB,EAAO7pB,GAAG,GAC9CzD,EAAKrE,MAAQ+qB,EACb1mB,EAAK+B,KAAO,aAEX,IAAI2J,EAAStN,QAAQ,YAAc,EAAG,CACvC,GAAqB,YAAjBkvB,EAAO7pB,GAAG,IAAqC,SAAjB6pB,EAAO7pB,GAAG,GACxC,KAEJ,IAAqB,WAAjB6pB,EAAO7pB,GAAG,GACVg7B,EAAOl+B,KAAK1F,OAAOyyB,EAAO7pB,GAAG,SAE5B,IAAqB,WAAjB6pB,EAAO7pB,GAAG,GAAiB,CAC5BijB,EAAM4G,EAAO7pB,GAAG,EAChB6pB,GAAO7pB,GAAG,IAA0B,MAApB6pB,EAAO7pB,GAAG,GAAG,KAC7BijB,EAAM4G,EAAO7pB,GAAG,GAAG8zB,UAAU,EAAGjK,EAAO7pB,GAAG,GAAGhK,OAAS,IAE1DilC,EAAOn+B,KAAKmmB,QAIhB,IAAqB,WAAjB4G,EAAO7pB,GAAG,GACVg7B,EAAOl+B,KAAK1F,OAAOyyB,EAAO7pB,GAAG,SAE5B,IAAqB,WAAjB6pB,EAAO7pB,GAAG,GAAiB,CAChC,GAAIijB,GAAM4G,EAAO7pB,GAAG,EAChB6pB,GAAO7pB,GAAG,IAA0B,MAApB6pB,EAAO7pB,GAAG,GAAG,KAC7BijB,EAAM4G,EAAO7pB,GAAG,GAAG8zB,UAAU,EAAGjK,EAAO7pB,GAAG,GAAGhK,OAAS,IAE1DilC,EAAOn+B,KAAKmmB,GAGpB1mB,EAAK+B,KAAOjJ,KAAKolC,kBAAkBl+B,GAGvC0L,EAAStN,QAAQ,QAAU,IACF,WAArBkvB,EAAO7pB,EAAI,GAAG,IACdzD,EAAKrE,MAAQ8iC,EACbz+B,EAAK+B,KAAO,UAEc,WAArBurB,EAAO7pB,EAAI,GAAG,IACnBzD,EAAKrE,MAAQ+iC,EACb1+B,EAAK+B,KAAO,UAEP2J,EAAStN,QAAQ,YAAc,GAA0B,eAArBkvB,EAAO7pB,EAAI,GAAG,KACjC,IAAlBi7B,EAAOjlC,QACPuG,EAAKrE,MAAQ+iC,EACb1+B,EAAK+B,KAAO,WAGZ/B,EAAKrE,MAAQ8iC,EACbz+B,EAAK+B,KAAO,WAGpB08B,KACAC,KACA1+B,EAAK+B,KAAOjJ,KAAKolC,kBAAkBl+B,IAEnClH,KAAKgO,yBAAgD,eAArBwmB,EAAOh0B,EAAI,GAAG,KAC9C0G,EAAKlE,UAAYwxB,EAAOh0B,EAAI,GAAG,QAGT,cAArBg0B,EAAOh0B,EAAI,GAAG,KACnB0G,EAAK0L,SAAW5S,KAAKskC,YAAY9P,EAAOh0B,EAAI,GAAG,GAAIg0B,EAAOh0B,EAAI,GAAG,GAAI4/B,GAC/C,UAAlBl5B,EAAK0L,UAA6C,WAArB4hB,EAAOh0B,EAAI,GAAG,IAAwC,OAArBg0B,EAAOh0B,EAAI,GAAG,GAC5E0G,EAAK0L,SAAW,UAEO,aAAlB1L,EAAK0L,UAAgD,WAArB4hB,EAAOh0B,EAAI,GAAG,IAAwC,OAArBg0B,EAAOh0B,EAAI,GAAG,KACpF0G,EAAK0L,SAAW,cAEK,WAArB4hB,EAAOh0B,EAAI,GAAG,IACd0G,EAAK+B,KAAO,SACZ/B,EAAKrE,MAAQd,OAAOyyB,EAAOh0B,EAAI,GAAG,MAGlC0G,EAAK+B,KAAO,UACR2kB,EAAM4G,EAAOh0B,EAAI,GAAG,KACF,MAAXotB,EAAI,KACXA,EAAMA,EAAI6Q,UAAU,EAAG7Q,EAAIjtB,OAAS,IAExCuG,EAAKrE,MAAQ+qB,GAEb5tB,KAAKgO,yBAAgD,eAArBwmB,EAAOh0B,EAAI,GAAG,KAC9C0G,EAAKlE,UAAYwxB,EAAOh0B,EAAI,GAAG,IAEnC0G,EAAK+B,KAAOjJ,KAAKolC,kBAAkBl+B,GAEvCC,GAAMA,MAAMM,KAAKP,OAEhB,CAAA,GAAqB,SAAjBstB,EAAOh0B,GAAG,GAAe,CAC9B,GAAuB,SAAjBg0B,EAAO,GAAG,KAAwC,QAArBA,EAAOh0B,EAAI,GAAG,IAAgB4/B,GAAapgC,KAAKwJ,KAAKC,YAAY,OAAOkF,gBAAkB6lB,EAAOh0B,EAAI,GAAG,IAAK,CAC5IslC,GAAc,CACd,UAWJ,IATA9lC,KAAKw0B,OAASA,EAAOtc,OAAO1X,EAAI,EAAG+Z,GAAQ/Z,EAAI,IAE3CglC,EADAxlC,KAAK4G,oBACQ5D,UAAW,MAAOmE,SAAWpE,KAAK,IAGlCC,UAAW,MAAOmE,UAEnCu+B,EAAW,EACX3a,EAAO5jB,EAAMA,MAAMxG,OACdylB,EAAI,EAAGA,EAAI2E,EAAM3E,IACdjf,EAAMA,MAAMif,GAAGjf,OACfu+B,GAMR,OAHA3+B,GAAUU,KAAKi+B,GACfv+B,EAAMA,MAAMM,KAAK+9B,GACjBA,EAAWxlC,KAAKmhC,cAAcnhC,KAAKw0B,OAAQgR,EAAUz+B,EAAWq5B,GACzDj5B,EAEN,GAAqB,eAAjBqtB,EAAOh0B,GAAG,IAAwBR,KAAKgO,yBAQ3C,GAAqB,UAAjBwmB,EAAOh0B,GAAG,GAAgB,CAC/B,GAAIslC,GAAoC,UAArBtR,EAAOh0B,EAAI,GAAG,GAAgB,CAC7CslC,GAAc,CACd,UAMJ,IAJA9lC,KAAKw0B,OAASA,EAAOtc,OAAO1X,EAAI,EAAG+Z,GAAQ/Z,EAAI,IAC/CuG,EAAUg/B,MACV5+B,EAAQnH,KAAKkH,KACbu+B,EAAO1+B,EAAUpG,OACZ0kC,EAAI,EAAGA,EAAII,EAAMJ,IAClBl+B,EAAQnH,KAAK+uB,eAAehoB,EAAUs+B,GAAIl+B,EAAa,IAANk+B,EAErD,OAAOrlC,MAAKmhC,cAAcnhC,KAAKw0B,OAAQrtB,EAAOJ,EAAWq5B,QAnBpC,QAAjB5L,EAAOh0B,GAAG,IAAiB4/B,GAAapgC,KAAKwJ,KAAKC,YAAY,OAAOkF,gBAAkB6lB,EAAOh0B,GAAG,GACjG2G,EAAMpE,KAAM,EAGZoE,EAAMnE,UAAYwxB,EAAOh0B,GAAG,GAkBxC,MAAO2G,IAQX7E,EAAapC,UAAUmN,WAAa,SAAUrM,GAC1C,GAAI0L,GAAY1L,EAAOsM,QAAQ,gBAAgBA,QAAQ,sBACnD04B,EAAchlC,EAAOgG,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACvD+yB,EAAUrtB,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACtDoH,EAAQpO,KAAKqO,SAAS23B,EAC1BhmC,MAAK8D,WAAalE,MAAMM,UAAUoF,QAAQ1E,KAAKI,EAAOsM,QAAQ,gBAAgBuC,SAAU7O,EAAOsM,QAAQ,uBACvGtN,KAAKsd,YAAata,UAAaoL,EAAMpL,UAAWD,IAAOqL,EAAMrL,IAAKoE,MAASiH,EAAMjH,QAAU4yB,GAC3F/5B,KAAK8D,YAAc,GAEvBxB,EAAapC,UAAUgN,UAAY,SAAUlM,GAMzC,IAAK,GALDkP,GAAW5C,UAAQtM,EAAQ,qBAC3B0L,EAAY1L,EAAOsM,QAAQ,gBAAgBA,QAAQ,sBACnD4B,EAAUlP,KAAKkP,QAAQlO,GACvB+4B,EAAUrtB,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IACtDi0B,EAAevuB,EAAU1H,iBAAiB,qBACrCxE,EAAI,EAAG+Z,EAAO0gB,EAAat6B,OAAQH,EAAI+Z,EAAM/Z,IAC9C0P,EAASlJ,KAAOi0B,EAAaz6B,GAAGwG,KAChChH,KAAK+D,UAAYvD,EAGrBR,MAAKgO,wBACLhO,KAAKsvB,WACGvlB,MAASmF,EAAQnF,MAAOlC,MAASqH,EAAQrH,MAAOoB,KAAQiG,EAAQjG,KAAM2J,SAAY1D,EAAQ0D,SAC1F/P,MAASqM,EAAQrM,MAAOG,UAAakM,EAAQlM,YAC7C+2B,GAGR/5B,KAAKsvB,WACGvlB,MAASmF,EAAQnF,MAAOlC,MAASqH,EAAQrH,MAAOoB,KAAQiG,EAAQjG,KAAM2J,SAAY1D,EAAQ0D,SAC1F/P,MAASqM,EAAQrM,QACjBk3B,GAEZ/5B,KAAK+D,WAAa,GAEtBzB,EAAapC,UAAUiN,SAAW,SAAUnM,GACxC,GAAIkP,GAAW5C,UAAQtM,EAAQ,qBAC3BkG,EAAOlH,KAAKkP,QAAQgB,EAASlJ,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,IAC/DkJ,GAASjC,UAAUC,SAAS,cAC5BhH,EAAKjE,UAAW,EAChBjD,KAAK6D,UAAY7D,KAAK6D,UAAUsT,OAAO,SAAU8uB,GAAY,MAAOA,KAAa/1B,EAASlJ,KAC1FkJ,EAASjC,UAAU+V,OAAO,aAC1BhkB,KAAKkmC,oBAAoBllC,EAAQkP,GAAU,GAC3ClP,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,YACjCjS,EAAO6O,SAAS,GAAG5B,UAAU+V,OAAO,UACpChjB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,eAGnDvC,EAAKjE,UAAW,EACZjD,KAAK6D,UAAUyB,QAAQ4K,EAASlJ,IAAM,GACtChH,KAAK6D,UAAUqU,OAAOlY,KAAK6D,UAAUlD,OAAS,EAAG,EAAGuP,EAASlJ,IAEjEkJ,EAASjC,UAAUgF,IAAI,aACvBjT,KAAKkmC,oBAAoBllC,EAAQkP,GAAU,GAC3ClP,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,UACjCjS,EAAO6O,SAAS,GAAG5B,UAAU+V,OAAO,YACpChjB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,iBAG3DnH,EAAapC,UAAUkN,UAAY,SAAUpM,GACzC,GAAI0L,GAAYY,UAAQtM,EAAQ,sBAC5BoN,EAAQpO,KAAKqO,SAAS3B,EAAU1F,GAAGmH,QAAQnO,KAAKwC,QAAQwE,GAAK,IAAK,KAClEL,EAAS+F,EAAU1F,GAAG1B,QAAQ,WAAa,CAC/C,IAAIoH,EAAUuB,UAAUC,SAAS,aACzBvH,IACIw/B,MACKnjC,UAAYoL,EAAMpL,UAC3BmjC,EAASpjC,IAAMqL,EAAMrL,IACrBojC,EAASljC,UAAW,EACpBjD,KAAKiH,eAAgBC,KAAMi/B,IAAY,IAGvC/3B,EAAMnL,UAAW,EAErBjD,KAAK6D,UAAY7D,KAAK6D,UAAUsT,OAAO,SAAU8uB,GAAY,MAAOA,KAAav5B,EAAU1F,KAC3F0F,EAAUuB,UAAU+V,OAAO,aAC3BhkB,KAAKomC,sBAAsBplC,EAAQ0L,GAAW,GAC9C1L,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,YACjCjS,EAAO6O,SAAS,GAAG5B,UAAU+V,OAAO,UACpChjB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,cACnDzJ,KAAKqmC,sBAEJ,CACD,GAAI1/B,EAAQ,CACR,GAAIw/B,KACJA,GAASnjC,UAAYoL,EAAMpL,UAC3BmjC,EAASpjC,IAAMqL,EAAMrL,IACrBojC,EAASljC,UAAW,EACpBjD,KAAKiH,eAAgBC,KAAMi/B,IAAY,OAGvC/3B,GAAMnL,UAAW,CAEjBjD,MAAK6D,UAAUyB,QAAQoH,EAAU1F,IAAM,GACvChH,KAAK6D,UAAUqU,OAAOlY,KAAK6D,UAAUlD,OAAS,EAAG,EAAG+L,EAAU1F,IAElE0F,EAAUuB,UAAUgF,IAAI,aACxBjT,KAAKomC,sBAAsBplC,EAAQ0L,GAAW,GAC9C1L,EAAO6O,SAAS,GAAG5B,UAAUgF,IAAI,UACjCjS,EAAO6O,SAAS,GAAG5B,UAAU+V,OAAO,YACpChjB,EAAOsP,aAAa,QAAStQ,KAAKwJ,KAAKC,YAAY,kBAG3DnH,EAAapC,UAAUmmC,gBAAkB,WACrC,IAAK,GAAI7lC,GAAI,EAAGA,EAAIR,KAAK6D,UAAUlD,OAAQH,IAEvC,GADaR,KAAK6D,UAAUrD,GAAGwH,MAAM,KAC1BrH,OAAS,EAAG,CACnB,GAAIuP,GAAWlQ,KAAKwC,QAAQsC,cAAc,IAAM9E,KAAK6D,UAAUrD,IAC3DQ,EAASkP,EAASpL,cAAc,qBACpCoL,EAAW5C,UAAQtM,EAAQ,sBACbiN,UAAUC,SAAS,cAC7BlO,KAAKmN,SAASnM,OAGjB,CACD,GAAI0L,GAAY1M,KAAKwC,QAAQsC,cAAc,IAAM9E,KAAK6D,UAAUrD,IAC5DQ,EAAS0L,EAAU5H,cAAc,oBACrC4H,EAAYY,UAAQtM,EAAQ,uBACbiN,UAAUC,SAAS,cAC9BlO,KAAKoN,UAAUpM,KAK/BsB,EAAapC,UAAUkmC,sBAAwB,SAAUplC,EAAQ0L,EAAW45B,GAWxE,IAAK,GAVDj3B,GAAU3C,EAAU1H,iBAAiB,mBACrCsK,EAAS5C,EAAU1H,iBAAiB,kBACpC2Y,EAAUjR,EAAU1H,iBAAiB,gBACrCuhC,EAAU75B,EAAU1H,iBAAiB,cACrCwhC,EAAgB95B,EAAU1H,iBAAiB,kBAC3CyhC,EAAW/5B,EAAU1H,iBAAiB,mBACtCy6B,EAAY/yB,EAAU1H,iBAAiB,oBACvC0hC,EAAgBh6B,EAAU1H,iBAAiB,sBAC3C2hC,EAAej6B,EAAU1H,iBAAiB,wBAC1C4hC,EAAWl6B,EAAU1H,iBAAiB,oBACjCxE,EAAI,EAAGA,EAAI6O,EAAQ1O,OAAQH,IAC5B8lC,GACII,EAAclmC,IAAMkmC,EAAclmC,GAAGyN,UAAUC,SAAS,cACxDw4B,EAAclmC,GAAGyN,UAAUgF,IAAI,aAEnC5D,EAAQ7O,GAAGue,UAAW,EACtBzP,EAAO9O,GAAGue,UAAW,EACjBwnB,EAAQ/lC,KACR+lC,EAAQ/lC,GAAGue,UAAW,GAEtB4nB,EAAanmC,KACbmmC,EAAanmC,GAAGue,UAAW,GAE3B6nB,EAASpmC,KACTomC,EAASpmC,GAAGue,UAAW,GAEvBpB,EAAQnd,KACRmd,EAAQnd,GAAGue,UAAW,GAEtBynB,EAAchmC,KACdgmC,EAAchmC,GAAGue,UAAW,GAE5B0gB,EAAUj/B,KACVi/B,EAAUj/B,GAAGue,UAAW,GAE5B1P,EAAQ7O,GAAGkF,cAAcuI,UAAUgF,IAAI,cACnCwzB,EAASjmC,IAAMimC,EAASjmC,KAAOQ,IAC/BylC,EAASjmC,GAAGue,UAAW,EACvB0nB,EAASjmC,GAAGqP,SAAS,GAAG5B,UAAU+V,OAAO,YACzCyiB,EAASjmC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,aAItCyzB,EAAclmC,IACdkmC,EAAclmC,GAAGyN,UAAU+V,OAAO,aAEtC3U,EAAQ7O,GAAGue,UAAW,EACtBzP,EAAO9O,GAAGue,UAAW,EACjBwnB,EAAQ/lC,KACR+lC,EAAQ/lC,GAAGue,UAAW,GAEtB4nB,EAAanmC,KACbmmC,EAAanmC,GAAGue,UAAW,GAE3B6nB,EAASpmC,KACTomC,EAASpmC,GAAGue,UAAW,GAEvB0nB,EAASjmC,KACTimC,EAASjmC,GAAGue,UAAW,GAEvBpB,EAAQnd,KACRmd,EAAQnd,GAAGue,UAAW,GAEtBynB,EAAchmC,KACdgmC,EAAchmC,GAAGue,UAAW,GAE5B0gB,EAAUj/B,KACVi/B,EAAUj/B,GAAGue,UAAW,GAE5B1P,EAAQ7O,GAAGkF,cAAcuI,UAAU+V,OAAO,cACtCyiB,EAASjmC,IACTimC,EAASjmC,GAAGqP,SAAS,GAAG5B,UAAU+V,OAAO,UAEzCyiB,EAASjmC,IACTimC,EAASjmC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,YAIlDjT,MAAKkmC,oBAAoBllC,EAAQ0L,EAAW45B,IAEhDhkC,EAAapC,UAAUgmC,oBAAsB,SAAUllC,EAAQ0L,EAAW45B,GACtE,GAAIO,GAAoB,SAAUjhB,EAAUkhB,EAAiBR,GACzD1gB,EAAS9c,QAAQ,SAAUtG,GACvB,GAAIukC,GAAYD,EAAgBtkC,EAC5B,YAAaukC,GACbA,EAAUC,SAAWV,EAEhB,YAAcS,KACnBA,EAAUhoB,SAAWunB,MAI7B1gB,GACA/D,IAAKnV,EAAU1H,iBAAiB,6BAChC0lB,QAAShe,EAAU1H,iBAAiB,+BACpCpC,KAAM8J,EAAU1H,iBAAiB,wBACjC25B,KAAMjyB,EAAU1H,iBAAiB,2BACjCiiC,SAAUv6B,EAAU1H,iBAAiB,yBACrCkiC,MAAOx6B,EAAU1H,iBAAiB,sBAClCmiC,YAAaz6B,EAAU1H,iBAAiB,4BACxCoiC,WAAY16B,EAAU1H,iBAAiB,kBACvCyhC,SAAU/5B,EAAU1H,iBAAiB,gBACrCy6B,UAAW/yB,EAAU1H,iBAAiB,iBACtCkL,SAAUxD,EAAU1H,iBAAiB,qBAEzC4gB,GAASwhB,WAAWt+B,QAAQ,SAAUqH,EAAM3P,GACpC8lC,GACI1gB,EAAS1V,SAAS1P,IAAMolB,EAAS1V,SAAS1P,GAAGyN,UAAUC,SAAS,cAChE0X,EAAS1V,SAAS1P,GAAGyN,UAAUgF,IAAI,aAEvC2S,EAASwhB,WAAW5mC,GAAGue,UAAW,EAC9B6G,EAAS6Z,UAAUj/B,KACnBolB,EAAS6Z,UAAUj/B,GAAGue,UAAW,GAEjC6G,EAAS6gB,SAASjmC,KAAOQ,IACzB4kB,EAAS6gB,SAASjmC,GAAGue,UAAW,EAChC6G,EAAS6gB,SAASjmC,GAAGqP,SAAS,GAAG5B,UAAU+V,OAAO,YAClD4B,EAAS6gB,SAASjmC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,aAI/C2S,EAAS1V,SAAS1P,IAClBolB,EAAS1V,SAAS1P,GAAGyN,UAAU+V,OAAO,aAEtC4B,EAAS6Z,UAAUj/B,KACnBolB,EAAS6Z,UAAUj/B,GAAGue,UAAW,GAErC6G,EAASwhB,WAAW5mC,GAAGue,UAAW,EAClC6G,EAAS6gB,SAASjmC,GAAGue,UAAW,EAChC6G,EAAS6gB,SAASjmC,GAAGqP,SAAS,GAAG5B,UAAU+V,OAAO,UAClD4B,EAAS6gB,SAASjmC,GAAGqP,SAAS,GAAG5B,UAAUgF,IAAI,eAGvD4zB,EAAkBjhB,EAAS/D,IAAK,SAAU1R,GAAQ,MAAO3K,gBAAa2K,EAAM,iBAAoBm2B,GAChGO,EAAkBjhB,EAAS8E,QAAS,SAAUva,GAAQ,MAAO3K,gBAAa2K,EAAM,mBAAsBm2B,GACtGO,EAAkBjhB,EAAShjB,KAAM,SAAUuN,GAAQ,MAAO3K,gBAAa2K,EAAM,YAAem2B,GAC5FO,EAAkBjhB,EAAS+Y,KAAM,SAAUxuB,GAAQ,MAAO3K,gBAAa2K,EAAM,eAAkBm2B,GAC/FO,EAAkBjhB,EAASqhB,SAAU,SAAU92B,GAAQ,MAAO3K,gBAAa2K,EAAM,aAAgBm2B,GACjGO,EAAkBjhB,EAASshB,MAAO,SAAU/2B,GAAQ,MAAO3K,gBAAa2K,EAAM,UAAam2B,GAC3FO,EAAkBjhB,EAASuhB,YAAa,SAAUh3B,GAAQ,MAAO3K,gBAAa2K,EAAM,gBAAmBm2B,IAE3GxlC,GACIumC,WACD/kC,EAAapC,UAAW,cAAW,IACtCY,GACIumC,WACD/kC,EAAapC,UAAW,kBAAe,IAC1CY,GACIumC,WACD/kC,EAAapC,UAAW,mBAAgB,IAC3CY,GACIumC,WACD/kC,EAAapC,UAAW,aAAU,IACrCY,GACIumC,WACD/kC,EAAapC,UAAW,gBAAa,IACxCY,GACIumC,WACD/kC,EAAapC,UAAW,iBAAc,IACzCY,GACIumC,WACD/kC,EAAapC,UAAW,gBAAa,IACxCY,GACIumC,WACD/kC,EAAapC,UAAW,WAAQ,IACnCY,GACIumC,WACD/kC,EAAapC,UAAW,WAAQ,IACnCY,GACIwmC,aAAYjlC,IACbC,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,GACIa,WAAS,YACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,gBACDW,EAAapC,UAAW,cAAW,IACtCY,GACIa,WAAS,OACVW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,WAAS,OACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,OACVW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,cACDW,EAAapC,UAAW,qBAAkB,IAC7CY,GACIa,WAAS,KACVW,EAAapC,UAAW,eAAY,IACvCY,GACIa,gBACDW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,WAAS,eACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,wBAAqB,IAChDY,GACIa,WAAS,YACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,IACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,SACVW,EAAapC,UAAW,aAAU,IACrCY,GACIa,WAAS,SACVW,EAAapC,UAAW,YAAS,IACpCY,GACIa,YAAS,IACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,WAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,eAAY,IACvCY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,WAAS,KACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,YAAS,IACVW,EAAapC,UAAW,8BAA2B,IACtDY,GACIwmC,WAAUtkC,UAAW,MAAOmE,UAAajF,IAC1CI,EAAapC,UAAW,WAAQ,IACnCY,GACIa,YAAS,IACVW,EAAapC,UAAW,uBAAoB,IAC/CoC,EAAexB,GACXymC,yBACDjlC,IAELklC,aCz6OEC,EAA8B,WAC9B,QAASA,GAAaC,GAClB1nC,KAAK0nC,OAASA,EACd1nC,KAAKw6B,mBAkrBT,MAhrBAiN,GAAavnC,UAAUuF,QAAU,WACzBzF,KAAK0nC,OAAOC,aAGhB3nC,KAAK06B,uBAET+M,EAAavnC,UAAUs6B,iBAAmB,WAClCx6B,KAAK0nC,OAAOC,cAGhB3nC,KAAK0nC,OAAOE,GAAG,gBAAiB5nC,KAAK6nC,aAAc7nC,MACnDA,KAAK0nC,OAAOE,GAAG,YAAa5nC,KAAKyF,QAASzF,QAE9CynC,EAAavnC,UAAUw6B,oBAAsB,WACzC16B,KAAK0nC,OAAOI,IAAI,gBAAiB9nC,KAAK6nC,cACtC7nC,KAAK0nC,OAAOI,IAAI,YAAa9nC,KAAKyF,UAEtCgiC,EAAavnC,UAAU2nC,aAAe,SAAUlgC,GAC5C,OAAQA,EAAK+5B,MACT,IAAK,oBACD/5B,EAAK9E,MAAW,IAAc,WAAI7C,KAAK+nC,kBAAkBpgC,EAAK9E,MAAY,KAAG8E,EAAK9E,MAAkB,WACpG,MACJ,KAAK,cACD7C,KAAKgoC,YAAYrgC,EAAK9E,MAAkB,WAAG8E,EAAK9E,MAAY,KAAG8E,EAAK9E,MAAmB,YACvF,MACJ,KAAK,kBACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAKioC,gBAAgBtgC,EAAK9E,MAAY,KACjE,MACJ,KAAK,uBACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAKkoC,qBAAqBvgC,EAAK9E,MAAY,KACtE,MACJ,KAAK,uBACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAKmoC,qBAAqBxgC,EAAK9E,MAAW,IACrE,MACJ,KAAK,4BACD8E,EAAK9E,MAAW,IAAO,IAAI7C,KAAKooC,0BAA0BzgC,EAAK9E,MAAW,OAItF4kC,EAAavnC,UAAU6nC,kBAAoB,SAAU7gC,EAAM+6B,GAWvD,MAVAA,GAAa,IACU,OAAnB/6B,EAAKlE,WACLi/B,GAAc,UACdA,EAAajiC,KAAKqoC,kBAAkBnhC,EAAKC,MAAO86B,GAAc,MAG9DA,GAAc,WACdA,EAAajiC,KAAKqoC,kBAAkBnhC,EAAKC,MAAO86B,GAAc,KAElEA,GAAc,KAGlBwF,EAAavnC,UAAUooC,6BAA+B,SAAU11B,GAC5D,GAAI21B,EACJ,QAAQ31B,GACJ,IAAK,MACD21B,EAAgB,UAChB,MACJ,KAAK,MACDA,EAAgB,aAChB,MACJ,KAAK,OACDA,EAAgB,oBAChB,MACJ,KAAK,MACDA,EAAgB,UAChB,MACJ,KAAK,OACDA,EAAgB,iBAChB,MACJ,KAAK,OACDA,EAAgB,QAGxB,MAAOA,IAGXd,EAAavnC,UAAUmoC,kBAAoB,SAAUlhC,EAAO86B,GACxD,GAAIx/B,GAAQzC,KACRQ,EAAI,CA4KR,OA1KA2G,GAAM2B,QAAQ,SAAUgZ,GACpBthB,IACAyhC,GAAc,QACKjuB,KAAf8N,EAAK3a,QACkB,OAAnB2a,EAAK9e,WACLi/B,GAAc,WACdA,EAAax/B,EAAM4lC,kBAAkBvmB,EAAK3a,MAAO86B,GAAc,MAG/DA,GAAc,YACdA,EAAax/B,EAAM4lC,kBAAkBvmB,EAAK3a,MAAO86B,GAAc,KAGvE,IAAIuG,GAAsB,WAAd1mB,EAAK7Y,MAAuC,OAAlB6Y,EAAKlP,UAAuC,UAAlBkP,EAAKlP,UAAwBkP,EAAKjf,OAA+B,KAAtBif,EAAKjf,MAAMgrB,OAAgB/L,EAAKjf,MAAMsL,QAAQ,KAAM,MAAQ,EACrJ,YAAd2T,EAAK7Y,MAAwC,OAAlB6Y,EAAKlP,UAAuC,UAAlBkP,EAAKlP,WAAyBkP,EAAKjf,OAA+B,IAAtBif,EAAKjf,MAAMlC,SAC5G6nC,EAAQ1mB,EAAKjf,MAAM,GAAGsL,QAAQ,KAAM,MAExC,IAAItG,GAAQia,EAAKja,MAAQia,EAAKja,MAAM42B,UAAU,GAAK,EACnD,QAAQ3c,EAAKlP,UACT,IAAK,WACDqvB,GAAc,IAAMp6B,EAAQ,gBAAkB2gC,EAAQ,IACtD,MACJ,KAAK,cACDvG,GAAc,IAAMp6B,EAAQ,wBAA0Bia,EAAKjf,MAAQ,KACnE,MACJ,KAAK,aACDo/B,GAAc,IAAMp6B,EAAQ,iBAAmB2gC,EAAQ,IACvD,MACJ,KAAK,gBACDvG,GAAc,IAAMp6B,EAAQ,yBAA2Bia,EAAKjf,MAAQ,KACpE,MACJ,KAAK,WACDo/B,GAAc,IAAMp6B,EAAQ,gBAAkB2gC,EAAQ,KACtD,MACJ,KAAK,cACDvG,GAAc,IAAMp6B,EAAQ,wBAA0Bia,EAAKjf,MAAQ,MACnE,MACJ,KAAK,SACDo/B,GAAc,IAAMp6B,EAAQ,SAC5B,MACJ,KAAK,YACDo6B,GAAc,IAAMp6B,EAAQ,iBAC5B,MACJ,KAAK,UACDo6B,GAAc,IAAMp6B,EAAQ,OAC5B,MACJ,KAAK,aACDo6B,GAAc,IAAMp6B,EAAQ,eAC5B,MACJ,KAAK,QACiB,WAAdia,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,MAAQ2gC,EAAQ,IAEzB,SAAd1mB,EAAK7Y,KACVg5B,GAAc,IAAMp6B,EAAQ,MAAQia,EAAKjf,MAAQ,KAE5Cif,EAAK7Y,KACVg5B,GAAc,IAAMp6B,EAAQ,KAAOia,EAAKjf,MAK5C,MACJ,KAAK,WACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,aAAe2gC,EAAQ,KAEhC,SAAd1mB,EAAK7Y,KACVg5B,GAAc,IAAMp6B,EAAQ,aAAeia,EAAKjf,MAAQ,KAGxDo/B,GAAc,IAAMp6B,EAAQ,YAAcia,EAAKjf,MAAQ,GAE3D,MACJ,KAAK,KACiB,WAAdif,EAAK7Y,KACD6Y,EAAKjf,MAAMlC,OAAS,GAGpBJ,GADIA,EAAIuhB,EAAKjf,MAAM2I,IAAI,SAAUi9B,EAAG99B,GAAK,MAAQA,GAAImX,EAAKjf,MAAMlC,OAAS,IAAO8nC,EAAI,IAAO,KAAQ5wB,YAC7F6wB,SAAS,KAAOnoC,EAAEk+B,UAAU,EAAGl+B,EAAEI,OAAS,GAAKJ,EACrD0hC,GAAc,IAAMp6B,EAAQ,gBAAkBtH,EAAI,MAGlD0hC,GAAc,IAAMp6B,EAAQ,iBAAmB2gC,EAAQ,MAGxC,WAAd1mB,EAAK7Y,OACN6Y,EAAKjf,MAAMlC,OAAS,EACpBshC,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAMgV,WAAa,KAGtEoqB,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAQ,KAGnE,MACJ,KAAK,QACD,GAAkB,WAAdif,EAAK7Y,KACL,GAAI6Y,EAAKjf,MAAMlC,OAAS,EAAG,CAEvB,GAAIJ,GAAIuhB,EAAKjf,MAAM2I,IAAI,SAAUi9B,EAAG99B,GAAK,MAAQA,GAAImX,EAAKjf,MAAMlC,OAAS,IAAO8nC,EAAI,IAAO,KAAQ5wB,UACnGtX,GAAIA,EAAEmoC,SAAS,KAAOnoC,EAAEk+B,UAAU,EAAGl+B,EAAEI,OAAS,GAAKJ,EACrD0hC,GAAc,IAAMp6B,EAAQ,iBAAmBtH,EAAI,SAGnD0hC,IAAc,IAAMp6B,EAAQ,kBAAoB2gC,EAAQ,UAGzC,WAAd1mB,EAAK7Y,OACN6Y,EAAKjf,MAAMlC,OAAS,EACpBshC,GAAc,IAAMp6B,EAAQ,iBAAmBia,EAAKjf,MAAMgV,WAAa,KAGvEoqB,GAAc,IAAMp6B,EAAQ,iBAAmBia,EAAKjf,MAAQ,KAGpE,MACJ,KAAK,cACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,eAAiBia,EAAKjf,MAAQ,IAG1Do/B,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAQ,IAE/D,MACJ,KAAK,qBACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAQ,IAG3Do/B,GAAc,IAAMp6B,EAAQ,iBAAmBia,EAAKjf,MAAQ,IAEhE,MACJ,KAAK,UACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,cAAgBia,EAAKjf,MAAM,GAAK,YAAcif,EAAKjf,MAAM,GAAK,IAG1Fo/B,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAM,GAAK,eAAiBif,EAAKjf,MAAM,GAAK,IAEnG,MACJ,KAAK,aACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,YAAcp6B,EAAQ,aAAeia,EAAKjf,MAAM,GAAK,SAAWgF,EAAQ,aAAeia,EAAKjf,MAAM,GAAK,MAGrHo/B,GAAc,YAAcp6B,EAAQ,eAAiBia,EAAKjf,MAAM,GAAK,UAAYgF,EAAQ,eAAiBia,EAAKjf,MAAM,GAAK,MAE9H,MACJ,KAAK,WACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,eAAiBia,EAAKjf,MAAQ,IAG1Do/B,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAQ,IAE/D,MACJ,KAAK,kBACiB,WAAdif,EAAK7Y,KACLg5B,GAAc,IAAMp6B,EAAQ,gBAAkBia,EAAKjf,MAAQ,IAG3Do/B,GAAc,IAAMp6B,EAAQ,iBAAmBia,EAAKjf,MAAQ,KAIxEo/B,GAAc,IACV96B,EAAMxG,SAAWH,IACjByhC,GAAc,OAGfA,GAEXwF,EAAavnC,UAAU8nC,YAAc,SAAU/F,EAAY/6B,EAAMg7B,GAC7D,GAAIyG,EACAlpC,QAAO6I,KAAK25B,GAAY38B,QAAQ,SAAW,GAC3CqjC,EAAY1G,EAAiB,KAC7B/6B,EAAKlE,UAAY,OAEZvD,OAAO6I,KAAK25B,GAAY38B,QAAQ,QAAU,IAC/CqjC,EAAY1G,EAAgB,IAC5B/6B,EAAKlE,UAAY,MAErBkE,EAAKC,SACLnH,KAAK4oC,eAAeD,EAAWzhC,EAAKC,MAAO+6B,IAE/CuF,EAAavnC,UAAU0oC,eAAiB,SAAUD,EAAWxhC,EAAO+6B,GAchE,IAAK,GAbDqG,GACAt/B,EAEA4/B,EACA5nC,EACA6nC,EACAC,EACA/lC,EACAH,EACA2iC,EACAt+B,EACA8hC,EACAvL,EACKj9B,EAAI,EAAGsJ,EAAM6+B,EAAUhoC,OAAQH,EAAIsJ,EAAKtJ,IAAK,CAClD,GAAIyoC,MACAC,IAGJ,IAFAlmC,EAAYvD,OAAO6I,KAAKqgC,EAAUnoC,IAAI,GACtCqC,EAAQ8lC,EAAUnoC,GAAGwC,GACH,SAAdA,EAEIwiC,EADAxlC,KAAK0nC,OAAO9gC,oBACC5D,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,SAAWpE,KAAK,IAGvDC,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,UAExDA,EAAMM,KAAK+9B,GACXxlC,KAAK4oC,eAAeD,EAAUnoC,GAAGwC,GAAYmE,EAAMA,EAAMxG,OAAS,GAAGwG,MAAO+6B,OAE3E,IAAkB,QAAdl/B,EAAqB,CAC1B,GAAImmC,OAAa,GAEbC,KACA9gC,KACA+gC,KACAC,KAGAC,KAEAC,KACAC,IACA7pC,OAAM+8B,QAAQ95B,IAA2B,IAAjBA,EAAMlC,SAE9B6oC,EAAkB3mC,GADlByF,EAAO7I,OAAO6I,KAAKzF,IACU,IAC7B4mC,EAAmB5mC,EAAMyF,EAAK,IACC,gBAApBkhC,KACPJ,EAAc3pC,OAAO6I,KAAKkhC,GAAiB,GAE3CH,EADY5pC,OAAO6I,KAAKkhC,EAAgB/pC,OAAO6I,KAAKkhC,GAAiB,KAChD,GACrBF,EAAY7pC,OAAO6I,KAAKmhC,EAAiBhqC,OAAO6I,KAAKmhC,GAAkB,KAAK,GAC3D,QAAbJ,GAAoC,QAAdC,IACtBf,EAAgB,aAOhBrhC,GAASW,MAAOuhC,EAAar/B,MAAOq/B,EAAavmC,MADjD46B,GAJA8L,EAAaC,EAAgBJ,GAAaC,GAE5BI,EAAiBL,GAAaE,IAGuB12B,SAAU21B,EAAet/B,KAF5FA,EAA6B,gBAAfsgC,GAA0B,SAAW,QAGnDpiC,EAAMM,KAAKP,GACXiiC,GAAa,KAIpBA,IAEG3D,EADAxlC,KAAK0nC,OAAO9gC,oBACC5D,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,SAAWpE,KAAK,IAGvDC,UAAWA,EAAUmL,QAAQ,IAAK,IAAKhH,UAExDA,EAAMM,KAAK+9B,GACXxlC,KAAK4oC,eAAeD,EAAUnoC,GAAGwC,GAAYmE,EAAMA,EAAMxG,OAAS,GAAGwG,MAAO+6B,QAG/E,CAUD,GARc,QADdr/B,EAAQ8lC,EAAUnoC,GAAGwC,MAEjBulC,EAAgB,UAEC,iBAAV1lC,KACP0lC,EAAgB,QAChBt/B,EAAO,UACPw0B,EAAY56B,GAEO,mBACnB46B,EAAY56B,EACZoG,EAAO,SACPs/B,EAAgB,YAEf,IAAuB,oBAAsB,OAAV1lC,EAAgB,CACpDmmC,EAASvpC,OAAO6I,KAAKzF,EACrB,KAAK,GAAIorB,GAAM,EAAGA,EAAM+a,EAAOroC,OAAQstB,IAuDnC,GAtDAhtB,EAAM+nC,EAAO/a,GACb4a,EAAc,EAAQG,EAAO/a,IACjB,QAARhtB,GAAiB6G,oBAAkB+gC,KACnCN,EAAgB,YAChB9K,EAAY,MAEJ,QAARx8B,GAAwC,iBAAhB4nC,KACxBN,EAAgB,WAChB9K,EAAYoL,EACZ5/B,EAAO,WAEP+/B,EAAOroC,QAAU,GAAKqoC,EAAO/a,IACD,oBACxBsa,EAAgB,aAChBvlC,EAAYvD,OAAO6I,KAAKugC,GAAa,GACrCC,GAAgBrpC,OAAO6I,KAAKugC,EAAY7lC,IAAY,IAEpDimC,EAAqBxhC,KAAKohC,EAAY7lC,GAAW8lC,IACjD7/B,EAAO,WAGPs/B,EAAgB,UAChBU,EAAqBxhC,KAAKohC,IAED,qBACzB5/B,EAAO,WAGmB,oBAA4B,OAAhB4/B,EAC9B,SAAR5nC,GAAkD,WAAhCxB,OAAO6I,KAAKugC,GAAa,GACvCA,EAAoB,OAAEvjC,QAAQ,MAAQ,GACtCijC,EAAgB,gBAChB9K,EAAYoL,EAAoB,OAAE16B,QAAQ,IAAK,KAE1C06B,EAAoB,OAAEvjC,QAAQ,MAAQ,GAC3CijC,EAAgB,cAChB9K,EAAYoL,EAAoB,OAAE16B,QAAQ,IAAK,MAG/Co6B,EAAgB,cAChB9K,EAAYoL,EAAoB,SAIpCN,EAAwB,QAARtnC,EAAgB,KAAO,QACvCioC,EAAkBL,EAClB5/B,EAAmC,gBAApB4/B,GAAY,GAAmB,SAAW,UAG/B,qBAC9BN,EAAgBvoC,KAAKsoC,6BAA6BrnC,GAClDgI,EAAO,SACPw0B,EAAYoL,GAEa,mBAAU,CACvB,WAAR5nC,IACAsnC,EAAgB,WAChB9K,EAAYoL,EACZ5/B,EAAO,UAEC,QAARhI,IACoB,OAAhB4nC,GAAwBA,EAAYloC,OAAS,GAAKuI,MAAMC,KAAKC,MAAMy/B,KACnEN,EAAgB,WAChB9K,EAAYoL,GAEP/gC,oBAAkB+gC,IACvBN,EAAgB,YAChB9K,EAAYoL,GAES,KAAhBA,IACLN,EAAgB,aAChB9K,EAAYoL,GAEhB5/B,EAAO,UAEP4/B,EAAYvjC,QAAQ,MAAQ,IAC5BijC,EAAgB,aAChB9K,EAAYoL,EAAY16B,QAAQ,IAAK,IACrClF,EAAO,UAEP4/B,EAAYvjC,QAAQ,MAAQ,GAAa,SAARrE,IACjCsnC,EAAgB,WAChB9K,EAAYoL,EAAY16B,QAAQ,IAAK,IACrClF,EAAO,SAEX,KAAK,GAAIgoB,GAAK,EAAGyY,EAAK1pC,KAAK0nC,OAAO9+B,QAASqoB,EAAKyY,EAAG/oC,OAAQswB,IAAM,CAC7D,GAAIloB,GAAS2gC,EAAGzY,EAChB,IAAIloB,EAAOlB,QAAU7E,EAAW,CAC5B+lC,EAAYhgC,EAAOE,IACnB,QAGHC,MAAMC,KAAKC,MAAMy/B,KAA+B,SAAdE,IACnCR,EAAgBA,GAAiBvoC,KAAKsoC,6BAA6BrnC,GACnEgI,EAAO,OACPw0B,EAAYoL,QAKnBhmC,IAA4B,qBAAaqG,MAAMC,KAAKC,MAAMvG,KAC/D0lC,EAAgB,QAChB9K,EAAY56B,EACZoG,EAAO,QAEiB,oBAAsB,KAAVpG,GAA0B,SAAVA,GAA8B,UAAVA,GACxE0lC,EAAgB,QAChB9K,EAAY56B,EACZoG,EAAO,UAEiB,oBAAsB,KAAVpG,IACpC0lC,EAAgB,UAChB9K,EAAY56B,EACZoG,EAAO,SAGP/B,GADA+hC,GAAwBA,EAAqBtoC,OAAS,GAC7CkH,MAAO7E,EAAW+G,MAAO/G,EAAWH,MAAOomC,EAAsBr2B,SAAU21B,EAAet/B,KAAMA,GAEpGigC,GAAmBA,EAAgBvoC,OAAS,GACxCkH,MAAO7E,EAAW+G,MAAO/G,EAAWH,MAAOqmC,EAAiBt2B,SAAU21B,EAAet/B,KAAMA,IAG3FpB,MAAO7E,EAAW+G,MAAO/G,EAAWH,MAAO46B,EAAW7qB,SAAU21B,EAAet/B,KAAMA,GAElG9B,EAAMM,KAAKP,GACXqhC,EAAgB,MAI5Bd,EAAavnC,UAAUioC,qBAAuB,SAAU3G,GAKpD,IAAK,GAJDmI,GAAWnI,EAAIA,IACfoI,EAAcpI,EAAIqI,OAClBC,EAAQH,EAAS3hC,MAAM,KACvB+hC,EAAYD,EAAM,GACbtpC,EAAI,EAAGA,EAAIopC,EAAYjpC,OAAQH,IACpCupC,GAA0C,gBAApBH,GAAYppC,GAAmB,IAAMopC,EAAYppC,GAAK,IAAMspC,EAAMtpC,EAAI,GAAKopC,EAAYppC,GAAKspC,EAAMtpC,EAAI,EAMhI,OAJIupC,GAAUppC,QAAU,GAAsB,MAAjBopC,EAAU,IAAkD,MAApCA,EAAUA,EAAUppC,OAAS,KAC9EopC,EAAYA,EAAUtvB,MAAM,GAAI,IAEpCsvB,EAAYA,EAAU57B,QAAQ,eAAgB,gBAAgBA,QAAQ,QAAS,aAGnFs5B,EAAavnC,UAAUkoC,0BAA4B,SAAU5G,GACzD,GAAIwI,GAAgBxI,EAAIA,IACpBqI,EAASrI,EAAIqI,OACbE,EAAYC,CAUhB,OATAvqC,QAAO6I,KAAKuhC,GAAQ/gC,QAAQ,SAAUmhC,GAClC,GAAIC,GAAaL,EAAOI,EACxBA,GAAY,IAAMA,EAClBF,EAAYA,EAAU57B,QAAQ87B,EAAmC,mBAAW,IAAMC,EAAa,IAAMC,OAAOD,MAE5GH,EAAUppC,QAAU,GAAsB,MAAjBopC,EAAU,IAAkD,MAApCA,EAAUA,EAAUppC,OAAS,KAC9EopC,EAAYA,EAAUtvB,MAAM,GAAI,IAEpCsvB,EAAYA,EAAU57B,QAAQ,eAAgB,gBAAgBA,QAAQ,QAAS,aAGnFs5B,EAAavnC,UAAU+nC,gBAAkB,SAAUmC,GAC/C,GAAIC,GAAS38B,YAAW08B,EAAQ,MAAM,GAElCvnC,EAAQ7C,KAAKsqC,gBAAgBD,GAAQ,EACzC,OAAOrqC,MAAKuqC,mBAAmBvqC,KAAK0nC,OAAO76B,gBAAgBw9B,GAASxnC,EAAe,UAEvF4kC,EAAavnC,UAAUgoC,qBAAuB,SAAUkC,GACpD,GAAIC,GAAS38B,YAAW08B,EAAQ,MAAM,GAElCvnC,EAAQ7C,KAAKsqC,gBAAgBD,GAAQ,EACzC,OAAOrqC,MAAKwqC,wBAAwBxqC,KAAK0nC,OAAO76B,gBAAgBw9B,GAASxnC,EAAoB,eAEjG4kC,EAAavnC,UAAUqqC,mBAAqB,SAAU5xB,EAAS8kB,GAE3D,OAAS+D,IAAK,IADO7oB,EAAQxK,QAAQ,QAAS,IACT,IAAK07B,OAAQpM,IAEtDgK,EAAavnC,UAAUsqC,wBAA0B,SAAU7xB,EAAS8kB,GAEhE,OAAS+D,IAAK,IADO7oB,EAAQxK,QAAQ,QAAS,IACT,IAAK07B,OAAQpM,IAGtDgK,EAAavnC,UAAUoqC,gBAAkB,SAAUpjC,EAAMujC,GACrD,GAAIC,MACAC,KACAC,IACJ,OAAO5qC,MAAK6qC,YAAY3jC,EAAKC,MAAOsjC,EAAkBC,EAASC,EAAcC,IAEjFnD,EAAavnC,UAAU2qC,YAAc,SAAU1jC,EAAOsjC,EAAkBC,EAExEC,EAAcC,GACV,GAAI9iC,oBAAkBX,GAClB,OAASujC,QAASA,EAASC,aAAcA,EAE7C,KAAK,GAAInqC,GAAI,EAAGA,EAAI2G,EAAMxG,OAAQH,IAC9B,GAAI2G,EAAM3G,GAAG2G,MAGTujC,GADI7nC,EAAQ7C,KAAK6qC,YAAY1jC,EAAM3G,GAAG2G,MAAOsjC,EAAkBC,EAASC,EAAcC,IAC7D,QACzBD,EAAe9nC,EAAoB,iBAElC,CACD,GAAIioC,OAAa,EACjB,IAAI3jC,EAAM3G,GAAGqC,gBAAiBjD,OAE1B,IAAK,GAAI+K,GAAI,EAAGA,EAAKxD,EAAM3G,SAAUG,OAAQgK,IACrC8/B,IACAK,EAAa9qC,KAAK+qC,kBAAkB5jC,EAAM3G,GAAGqH,MAAO+iC,IAEnD9iC,oBAAkBX,EAAM3G,GAAGqC,MAAM8H,MACZ,WAAlBxD,EAAM3G,GAAGyI,MAAqB9B,EAAM3G,GAAGyI,KACnCwhC,EACAE,EAAaG,GAAc3jC,EAAM3G,GAAGqC,MAAM8H,GAG1C+/B,EAAQjjC,KAAKN,EAAM3G,GAAGqC,MAAM8H,KAapCxD,EAAM3G,GAAGqC,MAAM8H,GADf8/B,EACoB,IAAMK,EAGN,QAQ5B,IAHIL,IACAK,EAAa9qC,KAAK+qC,kBAAkB5jC,EAAM3G,GAAGqH,MAAO+iC,IAEpDzjC,EAAM3G,GAAGoS,SAAStN,QAAQ,QAAU,IACd,WAAlB6B,EAAM3G,GAAGyI,MAAwC,WAAlB9B,EAAM3G,GAAGyI,OAAyC,KAAnB9B,EAAM3G,GAAGqC,OAAmC,IAAnBsE,EAAM3G,GAAGqC,QAAe,CAC/G,GAAsB,WAAlBsE,EAAM3G,GAAGyI,MAAuC,SAAlB9B,EAAM3G,GAAGyI,KACvC,GAAI9B,EAAM3G,GAAGoS,SAAStN,QAAQ,SAAW,EAAG,CACxC,GAAIzC,GAAQsE,EAAM3G,GAAGqC,MAAMgV,UAC3B,QAAQ1Q,EAAM3G,GAAGoS,UACb,IAAK,aACL,IAAK,gBACD/P,GAAgB,GAChB,MACJ,KAAK,WACL,IAAK,cACDA,EAAQ,IAAMA,CACd,MACJ,KAAK,WACL,IAAK,cACDA,EAAQ,IAAMA,EAAQ,IAG1B4nC,EAEAE,EAAaG,GAAcjoC,EAI3B6nC,EAAQjjC,KAAK5E,OAIb4nC,GAEAE,EAAaG,GAAc,GAI3BJ,EAAQjjC,KAAK,IAES,YAAtBN,EAAM3G,GAAGoS,SACTzL,EAAM3G,GAAGoS,SAAW,QAGpBzL,EAAM3G,GAAGoS,SAAW,eAKvB9K,qBAAkBX,EAAM3G,GAAGqC,SACxB4nC,EAEAE,EAAaG,GAAc3jC,EAAM3G,GAAGqC,MAIpC6nC,EAAQjjC,KAAKN,EAAM3G,GAAGqC,OAK9BsE,GAAM3G,GAAGqC,MADT4nC,EACiB,IAAMK,EAGN,KAOzC,OAASJ,QAASA,EAASC,aAAcA,IAE7ClD,EAAavnC,UAAU6qC,kBAAoB,SAAUljC,EAAO+iC,GACxD,GAAII,GAAW,IACf,IAAIJ,EAAgBjqC,OAAS,EACzB,IAAK,GAAIH,GAAIoqC,EAAgBjqC,OAAS,EAAGH,GAAK,EAAGA,IAAK,CAClD,GAAIyqC,GAAYL,EAAgBpqC,EAChC,IAAIyqC,EAAU3lC,QAAQuC,IAAU,EAAG,CAE/BmjC,EAAWnjC,EAAQ,KADT+P,SAASqzB,EAAUjjC,MAAM,KAAK,GAAI,IAAM,GAElD4iC,EAAgBnjC,KAAKujC,EACrB,QAQZ,MAJKA,KACDA,EAAWnjC,EAAQ,KACnB+iC,EAAgBnjC,KAAKujC,IAElBA,GAEXvD,EAAavnC,UAAUoH,cAAgB,WACnC,MAAO,iBAEJmgC,cCrrBQljC,OAAO2mC"}